npm i redux
npm i react-redux
npm i @reduxjs/toolkit
App.tsx
import { Provider } from "react-redux";
import Main from "./src/screens/Main";
import store from "./src/store";
export default function App() {
return (
<Provider store={store}>
<Main />
</Provider>
);
}
JavaScript (+ TypeScript), React를 사용하여 안드로이드, iOS 앱을 개발할 수 있다
일반적으로 하나의 코드 작성을 통해 안드로이드, iOS 앱을 개발할 수 있지만, 각 플랫폼마다 지원하는 함수가 다른 경우가 있다
프로젝트 방식에는 React Native CLI 와 Expo방식이 있다
Expo 방식은 안드로이드, IOS 에서 Expo Go 어플을 통해서 같이 네트워크 안에 있다면 QR 코드로 쉽게 스마트폰에서 실시간으로 확인하면서 쉽게 개발할 수 있고, Expo에서 제공하는 모듈들이 많기 때문에 편했다
그리고 확실히 개발 속도가 빠르다는 것을 느꼈다
React Native CLI 방식을 이용하면 안드로이드 스튜디오에서 제공하는 에뮬레이터와 XCode의 시뮬레이터를 통해 실시간으로 확인하면서 개발이 가능하고, 그렇지 않다면 스마트폰에 USB를 연결해서 확인도 가능하다. (Expo도 에뮬레이터, 시뮬레이터로 확인 가능)
처음 시작했을때 환경 설정하는 것도 어렵고, android, ios 폴더를 별도로 있어 파일의 양이 많다. 환경 구축이 되어 있지 않다면 초기에 어려운 과정으로 인해 개발 속도가 매우 느릴 수 있음
하지만 안드로이드, IOS의 네이티브 모듈을 건들기 위해서는 CLI 방식을 택해야 한다
외주 프로젝트를 시작할 때, 개발 속도가 빠르고 편한 Expo방식을 사용했다
문제는 Expo에서 제공하는 무료 배포 방식을 사용했었는데, 저녁 시간 대 사용하면 1시간 넘게 기다리기도 했다
마냥 대기 시간을 기다려야 했기 때문에 빠르게 포기하고, React Native CLI로 변경해서 개발했다
Expo에서 유료 플랜을 사용하면, 배포 속도가 빠르다고 하는데 가격이 비싼 것 같다
실제 서비스라면 React Native CLI로 개발하는 것이 좋을 것 같다
프로젝트 생성
# React Native CLI *
npx react-native init [project name]
npx react-native init specificVerProject --version=0.69 # 특정 버전 설치
# expo 설치
npm install --global expo-cli
# expo project 생성
npx create-expo-app # javascript
npx create-expo-app --template # typescript
# bun
bunx create-expo-app # javascript
Guard는 '경비' 라는 뜻대로, Application을 보호하고, 유효한 사용자(authentication, 인증: 애플리케이션의 유효한 사용자인지 확인), 권한(authorization, 인가: 사용자에게 허가된 작업인지 확인)을 검증하는 역할을 한다. 검증된 사용자가 아니면 요청 자체를 막아버리는 것이다. 예를 들면, 사용자에 대한 검증이 없다면 모든 요청에 대해 응답을 할 것이고, 서버 자원에 낭비가 지속되면 서버 부하 / 다운의 결과를 초래할 가능성이 높다.
일반적으로 기존 Express.js 서버에서는 미들웨어(middleware)에 의해 처리되었다. 미들웨어는 인증을 위한 휼륭한 선택이지만, 토큰 검증이나 속성 연결과 같은 작업을 관리하기 힘들다.
→ 가드는 모든 미들웨어 이후에 실행되지만 인터셉터나 파이트 이전에 실행된다
JWT(Json Web Token)을 활용하여, 사용자 인증과 인가를 구현하는 방법을 작성하였다.
사용자 로그인 성공 시, AccessToken과 RefreshToken을 발급
로그인 이후 사용자는 Request Header에 AccessToken을 포함하여 요청
사용자는 AccessToken이 만료되면, 발급 받았던 RefreshToken을 통해 새로운 AccessToken을 발급
추가적으로 사용자 인증 전에는 AccessToken을 가지고 있지 않기 때문에, 로그인 로직에서는 Guard 검증을 거치지 않도록 설정
NPM 패키지 설치
npm i --save @nestjs/jwt
📔 src/auth/guard/public.decorator.ts
import { SetMetadata } from "@nestjs/common";
export const Public = () => SetMetadata('isPublic', true)
사용자 로그인 이전에는 Jwt 토큰이 없기 때문에, 함수 데코레이터 선언을 통해 로그인 API에서는 인증 가드 검증을 하지 않도록 할 예정
Auth Module, Service, Controller 작성
📔 src/auth/auth.module.ts
import { Module } from '@nestjs/common';
import { AuthService } from './auth.service';
import { JwtModule } from '@nestjs/jwt';
import { AuthController } from './auth.controller';
import { UserModule } from '@src/user/user.module';
@Module({
imports: [JwtModule.register({
global: true
}), UserModule],
providers: [AuthService],
controllers: [AuthController]
})
export class AuthModule { }
Swagger(스웨거)는 개발자가 REST 웹 서비스를 설계, 빌드, 문서화, 소비하는 일을 도와주는 대형 도구 생태계의 지원을 받는 오픈 소스 소프트웨어 프레임워크이다. 대부분의 사용자들은 Swagger UI 도구를 통해 스웨거를 식별하며 툴셋에는 자동화된 문서화, 코드 생성, 테스트 케이스 생성 지원이 포함된다. - wikipedia