전체 글

전체 글

    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 서버의..

    웹에서 자주 보게 되는 RFC 문서란 무엇일까?

    RFC 문서란? 개발에서 말하는 RFC 문서는 IETF(Internet Engineering Task Force) 와 ISOC(Internet Society)에서 발행하는 기술적이고 조직적인 메모다. 프로토콜, 절차, 프로그램 및 개념들을 포함하는 인터넷 관련 내용을 다룬다. 많은 인터넷 표준은 RFC 로 문서화가 되어있고, 인터넷 표준을 연구하는 사람은 누구나 RFC 문서를 작성할 수 있다. RFC 는 Request for Comment (의견 요청) 의 약자로 인터넷 관련 문제에 대한 피드백과 토론을 요청하는 문서의 초기 의도를 반영한다. RFC 문서의 주요 내용 표준화 프로세스 모든 RFC 가 표준이 되진 않지만, 상당 수는 인터넷 프로토콜 및 기술에 대한 공식 표준이 된다. 표준화 과정에는 개발,..

    Authentication 앞에 Basic 혹은 Bearer 를 붙이는 이유 (인증 방식)

    원본 글 토스 페이먼츠 Basic Bearer 설명 포스팅 HTTP 통신 방법 Authentication 앞에 Basic 과 Bearer 를 붙이는 이유는 정해진 하나의 통신 프레임워크이기 때문이다. 참고 모질라 HTTP 인증 프레임워크 문서 웹 표준 RFC 7235 Basic 인증 사용자ID:비밀번호 문자열을 Basic 이라는 문자와 함께 인증 헤더에 입력한다. 자세한 내용은 웹 표준 RFC 7617 에 나와있다. Base64 는 디코딩이 가능하기 때문에 반드시 HTTPS, SSL/TLS 로 통신해야 안전하다. Authorization: Basic base64({USERNAME}:{PASSWORD})장점 간단하다 단점 사용자 목록에서 권한을 확인하는데 시간이 많이 걸릴 수 있다. 사용자가 많으면 부각되..

    @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..

    이벤트 루프는 어떻게 non-blocking 연산을 막힘없이 처리하는가?

    자바스크립트 이벤트 루프 파헤치기 이를 이해하기 위해서는 자바스크립트 런타임 환경에서의 추가적인 컴포넌트의 역할을 알아야 한다. 추가적인 컴포넌트란 Web APIs (브라우저에서) 나 C++ APIs (Node.js) 를 말하며 이를 알아야 한다. 자바스크립트 런타임 환경 컴포넌트 4가지 Heap: 메모리 할당이 이루어지는 곳 Stack: 스택 프레임 (함수 호출) 이 저장되고 관리되는 곳 Task Queue: 비동기 작업의 콜백이 여기에 대기함 Event Loop: 호출 스택과 작업의 대기열을 확인하는 오케스트레이터 Non-Blocking I/O 는 어떻게 동작하는가? 비동기 호출: HTTP 요청, 타이머, Node.js 의 파일 I/O 와 같은 비동기 함수가 호출되면 Javascript 는 이 작업을..

    자바스크립트의 싱글 스레드 모델과 이벤트 루프

    싱글 쓰레드 모델과 Event Loop 논블로킹과 Event Loop 에 대한 간단한 설명 Blocking 요청과 Non-Blocking 요청에 대한 처리가 다름 Non-Blocking 요청이 들어왔을 때는 이벤트 루프에 담아서 처리함 Blocking 요청일 때는 워커 스레드에게 맡김 자바스크립트의 싱글 스레드 모델 작동 방식 싱글 스레드: 한 번에 하나의 연산을 단일 시퀀스로 처리함 실행 컨텍스트: 자바스크립트 코드가 실행되면, "실행 컨텍스트 (Execution Context)" 에서 실행함. 실행 컨텍스트는 코드가 실행되는 순서를 처리함. 호출 스택 (Call Stack): 실행 컨텍스트 관리를 위해 콜스택을 사용함. 콜스택은 프로그램에서 현재 위치를 기록하는 데이터 구조로 사용됨. 가장 최근에 호..

    자바스크립트에서 머신 코드 대신 바이트 코드를 사용하는 이유

    V8 Engine 이 Machine Code 대신 Byte Code 를 사용한 이유 이식성 (Portability) 바이트 코드는 머신 코드보다 이식성이 뛰어남 머신 코드는 프로세스 아키텍처에 따라 다르므로 CPU 마다 다를 수 있음 바이트 코드는 호환되는 모든 머신이 있는 모든 머신에서 실행 가능 JS 를 다양한 기기와 운영체제에서 실행할 수 있게 해줌 보안 머신 코드보다 바이트 코드로 먼저 컴파일하면 추상화 계층이 늘어나 보안이 강화될 수 있음 머신별 취약점을 악용하기 어려워짐 최적화 기회 (Optimization Opportunities) 바이트 코드로 컴파일한 다음 실행하며 핫 경로(자주 실행되는 코드)를 최적화하여 머신 코드로 컴파일하는 JIT 이라는 기술을 사용함 JIT 을 통해 V8 은 정적..

    TS033. 타입스크립트 제네릭(Generic) 기본 사용법

    Generic 함수에서 사용하기 제네릭은 타입 안정성을 유지하면서 재사용 가능하고 일관된 코드를 작성하도록 도와주는 기능이다. 제네릭 기본 사용법 함수명 옆에 을 명시하여 어떤 타입을 사용할지 명시한다. 해당 을 매개변수 타입이나 반환 타입에서 이용할 수 있다. 호출할 때는 함수명 옆에 타입변수명이 아닌 사용할 타입명을 명시하면 된다. function foo(value: T): T { return value; } // 호출할 때는 함수명 옆에 타입변수명이 아닌 사용할 타입명을 명시하면 된다. foo("abc"); 여러개의 제네릭 타입 사용하기 , 를 이용하여 몇개든 이어주면 된다. function bar(a: Type1, b: Type2, c: Type3) { return { a, b, c, }; } b..

반응형