프레임워크

    깃허브 소셜 로그인 구현하기

    GitHub 로그인, 회원가입 구현하기 깃헙 소셜 로그인은 OAuth 표준을 따른다. 다른 소셜 로긴도 OAuth 를 따르니 비슷하게 구현이 가능하다. 이 포스팅에 쓰인 코드는 노마드코더-캐럿마켓 클론코딩 에서 배운 코드를 참고했다. 단, 비슷하긴 하나, 완전히 동일하지 않고 몇몇 부분이 다르다. GitHub 로그인, 회원가입 절차 살펴보기 시퀀스 다이어그램으로 살펴보기 sequenceDiagram participant User as 사용자 participant App as 애플리케이션 participant Google as 구글 서버 User->>App: 구글 로그인 요청 App->>Google: 인증 코드 요청 (client_id, redirect_uri, scope) Google->>User: 로그..

    Nest.js 웹소켓 (WebSockets) 이란? + 사용법

    웹소켓 게이트웨이 웹소켓 게이트웨이란, 웹소켓에서 REST Controller 와 비슷한 역할을 해주는 것이라고 보면 된다. 단, 진입점이 단순히 엔드포인트가 아니라 이벤트(namespace)이며, 뒤에 추가 path 가 있는 게 아니라 추가 event 가 더 있는 것으로 보면 된다. 웹소켓에서 엔드포인트는 단순히 처음 connection 을 맺을 때 한번만 쓰인다. @WebSocketGateway() 데코레이터를 단 클래스이다. 게이트웨이는 플랫폼에 구애받지 않으므로 어댑터가 생성되면 모든 WebSockets 라이브러리와 호환된다. 기본 지원은 socket.io 와 ws 이다. 의존성 설치 $ npm i --save @nestjs/websockets @nestjs/platform-socket.io 기본..

    Nest.js 미들웨어 (Middleware) 란?

    미들웨어 (Middleware) 란? 라우트 핸들러 앞에 호출되는 함수 요청-응답에서 요청 및 응답 객체와 next() 미들웨어 함수에 접근 가능 다음 미들웨어 함수는 일반적으로 next 라는 변수로 표기됨 기본적으로 express 의 미들웨어와 동일 express 의 미들웨어 소개 어떤 코드든 실행한다. 요청-응답 객체를 변환한다. 요청-응답 사이클을 종료한다. 스택에서 다음 미들웨어 함수를 호출한다. 다음 미들웨어 함수에 제어권을 넘기기 위해 next() 를 호출해야 한다. 그렇지 않으면 요청이 중단된 채로 유지된다. next() 를 꼭 불러줘야 한다는 점이 Interceptor 나 Guard 와 같은 것과 구분된다. 미들웨어는 요청에 제공하는 기능 중 올인원 솔루션 같은 느낌이다. 제약받지 않고 많..

    Nest.js 인터셉터 (Interceptor) 란?

    인터셉터 Nest.js 의 인터셉터 클래스는 @Injectable 데코레이터를 추가해야 한다. NestInterceptor 인터페이스를 상속해야 한다. 인터셉터는 Aspect Oriented Programming 기술에서 영감을 받았다. 메서드 실행 전 후에 추가 로직 바인딩 함수 결과를 변환 함수 예외를 변환 함수 동작을 확장 조건부 함수 완전 재정의 (ex. 캐싱 목적) 기초 인터셉터는 intercept() 메서드를 구현해야 한다. 메서드엔 두개의 인자가 있다. 1번째 인자, ExecutionContext: 요청의 타입 정보나 호출된 컨트롤러 메서드 정보 등을 가져올 수 있다. ex) http 에서 헤더, 쿠키 등의 정보 그리고 컨트롤러 메서드 정보 이는 ArgumentsHost 를 상속한다. 2번째..

    Nest.js 의 Class Validator 란?

    Class Validator 란? nestjs 파이프 아래에 속하는 개념이다. Class Validator 공식문서 더 상세한 Typescript Validator 공식 문서 데코레이터를 통해 주로 DTO 내부에 있는 프로퍼티들의 값을 검증하는데 사용한다. 예시 글로벌로 적용하기 위해 필요한 설정 main.ts 에 다음 코드를 반드시 설정해주어야 한다. import { NestFactory } from "@nestjs/core"; import { AppModule } from "./app.module"; import { ValidationPipe } from "@nestjs/common"; async function bootstrap() { const app = await NestFactory.creat..

    Nest.js 의 가드(Guard) 란?

    Guard (가드) 란? 개념 Nest.js 에서 요청이 실제로 처리되기 전에 보통 권한이 있는지 확인하는 방패막이(Guard) 역할을 해주는 컴포넌트다. 가드가 없었다면 그냥 컨트롤러로 전해질수도 있는 요청에 이 가드가 중간 브로커 역할을 해서 인증 정보를 확인하거나 사용자 정보를 넣어주는 역할을 하는 것이다. Nest.js 의 라이프사이클로 보는 가드(Guard)의 위치 세부 설명 CanActive 인터페이스를 구현하고, @Injectable 데코레이터가 붙은 클래스이다. 런타임에 존재하는 조건에 따라 요청이 라우트 핸들러에 의해 처리될지 여부를 결정한다. 조건이란, 권한, 역할(ROLE), ACLs(Access Control Lists) 등을 말한다. 흔히 Authorization 이라 불리는 것들..

    Spring Boot3 (스프링 부트3) 에서 Log4j2 세팅 방법

    Spring Boot3 에서 Log4j2 세팅 방법 버전은 스프링 부트 3 현재 최신 버전 (2024-02-02) 을 기준으로 한다. 패키지 관리 도구는 Gradle 이용을 기준으로 한다. 스프링부트 기본 제공 Logback 을 의존성에서 제거 Spring Boot 의 기본 로깅 도구 Logback 을 의존성에서 제거한다. dependencies 아래에 configurations 영역을 추가해주고 아래 내용을 붙여넣는다. dependencies { // ... } // 추가 configurations { all*.exclude module: 'spring-boot-starter-logging' } 의존성 제거 전 의존성 제거 후 spring-boot-starter-logging 이 사라진 ..

    Nest.js 의 파이프(Pipes) 란?

    파이프 (Pipe) 란? @Injectable 데코레이터가 붙은 PipeTransform 인터페이스를 구현하는 클래스로 요청 데이터 변환 및 유효성 검사에 사용한다 핸들러가 호출되기 직전 라우트 핸들러가 처리중인 Argument 를 대상으로 작동한다. 주요 기능 변환 (Transformation): 입력 데이터를 원하는 형태로 변환 가능 ex) 문자열 -> 정수 유효성 검사 (Validation): 입력 데이터가 올바르지 않은 경우 예외 발생 가능 파이프가 실행되는 영역 파이프는 예외 영역 (Exceptions zone) 에서 실행되어 파이프가 던지는 예외는 예외 계층에서 처리된다. 파이프에서 예외가 발생하면 컨트롤러 메서드가 이어서 실행되지 않는다. 다이어그램 살펴보기 클라이언트: Nest.js 서버의..

    @Transactional 애노테이션 정리

    @Transactional 애노테이션이란? Spring 에게 트랜잭션 경계를 관리하도록 메타 정보를 주는 것이다. @Transactional 이 붙은 메서드가 호출됐을 때, 스프링은 새 트랜잭션을 시작한다. 메서드가 성공적으로 완료되면 트랜잭션이 커밋된다. 예외가 발생하면 트랜잭션이 롤백된다. @Transactional 애노테이션으로 설정할 수 있는 것들 import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service // 여기에도 쓸 수 있고, 여기에 쓰면 클래스 내부의 모든 메서드에 적용된다. public class YourService { priva..

    Nest.js Request Lifecycle 과 기본 아키텍처

    Nest.js 기본 아키텍처 살펴보기 아래는 참고용 Request Lifecycle 아키텍처 그림이다. Controller, Service, Repository 가 요청 로직을 실제로 처리하는 부분이다. 나머지는 없어도 동작을 하지만 요청 로직을 실제로 처리하는 부분은 반드시 있어야 한다. 미들웨어 request 와 resoponse 그리고 next() 함수에 접근할 수 있는 함수를 구성할 때 사용된다. 로깅이나 요청 검증 등에 사용 가능하다. 가드 인증 및 권한 부여에 사용된다. CanActivate 인터페이스를 구현한다. 인터셉터 메서드 실행 전 후에 추가 로직을 바인딩한다. 메서드 결과를 변형한다. 응답을 확장한다. 파이프 라우트 핸들러가 처리할 인수에 대해 작동한다. 데이터 유효성 검사 혹은 변환..

    Nest.js 소개

    Nest.js 소개 Node.js 로 만듦 차세대 Typescript 를 이용 HTTP 서버 프레임워크인 Express 를 사용, Fastify 로도 사용 가능 공식 문서에서는 모든 노드 HTTP 프레임워크에서 작동한다고 한다. 기본은 @nestjs/platform-express 아키텍처 설계 문제를 해결하기 위해 나옴 서버 아키텍처 때문에 테스트하기 쉽고, 디커플링 잘되고, 유지보수 편함 결국 Express + 아키텍처 초기 파일 구성 아래 디렉토리 구성은 각 모듈을 전용 디렉토리에 저장하는 관례를 따르기 위해 초기에 잡힌다. src 디렉토리 내부 main.ts: 엔트리 파일 역할. 코어 함수인 NestFactory 를 사용하여 Nest Application Instance 를 만듦 app.servic..

    @Embedded 와 @Embeddable 과 @AttributeOverrides 란?

    @Embeddable 애노테이션이란? 필드 혹은 속성을 임베드 가능한 클래스로 지정하는데 사용한다. 임베드 가능한 클래스란, 고유한 기본 키가 없는 관련 필드 그룹을 나타내는데 사용된다. 일반적으로 엔티티 내에서 관련 열을 함께 그룹화하는데 사용된다. 몇몇 필드를 분리된 클래스로 캡슐화하는데 이용된다. 엔티티와 함께 컬럼으로 직접 매핑된다. 아래는 주소 정보를 임베드 가능한 클래스로 구성한 예이다. @Embeddable public class Address { private String street; private String city; private String state; private String zipCode; // getters, setters, etc. } @Embeddable 애노테이션 클래..

반응형