본문 바로가기

분류 전체보기

(109)
부록 SOLID S: 단일 책임의 원칙 => 하나의 클래스는 하나의 기능만 O: 개방 폐쇄 원칙 => 확장에는 열려있고 변경에는 닫혀있는 L: 리스코프 치환의 원칙 => 자식 클래스로 객체를 생성해도 괜찮아야 한다 I: 인터페이스 분리의 원칙 => 하나의 인터페이스보다 여러개의 인터페이스가 낫다 D: 의존성 역전 원칙 => 의존관계는 변화하기 어려운곳에 의존해야한다. 예를 들어 인터페이스나 추상클래스 Application Listener에대해 살펴보자 애플리케이션이 이벤트가 발생하면 리스너가 실행이된다. 빈으로 등록을 해놓으면, 등록된 빈중에서 해당하는 이벤트에대한 리스너를 알아서 실행해준다. 주의해야할 것이있다. 이벤트가 언제 발생하냐가 중요한 기점이다. 애플리케이션 컨텍스트가 만들어졌냐안만들어졌냐를 기준으..
Spring Boot Spring Boot는 spring 환경기반으로 빠르게 production 수준의 독립적인 애플리케이션을 만들 수 있도록 도와준다. spring framework에 필요한 설정들 및 제3라이브러리 기본 설정을 제공해준다. 대표적으로 톰캣이 있다. Spring Boot를 쓰는 이유는 크게 편리한 의존성 관리, 자동설정, 내장 웹서버(톰캣) 설정이다. 의존성 관리 (maven 기준 설명) Dependency에 spring-starter-web이 들어있는데 이것만 있어도 어마어마한 의존성들이 들어온다. 그 이유는 spring-boot-starter의 역할이다. spring-boot-starter는 의존성을 관리한다. 의존성 관리를 받는 원리는, spring-boot-starter-parent가 있다. 올라가다..
AOP 와 PSA AOP Aspect Oriented Programming의 약자로, 흩어진 코드를 한곳에서 관리할 수 있도록 도와주는 코딩 기법이다. 크게 두가지 방법이 있다. 바이트 코드 조작 방법 => 컴파일된 .class를 조작한다. 프록시 패턴 방법 => Spring AOP가 사용하는 방법 AOP가 적용된 애노테이션 중에 @Transactional(readOnly = true)을 보자. 보통 트랜잭션 처리는 트랜잭션 매니저가 트랜잭션 오토 커밋을 false로 만들고 작업이 끝나면 true로 변환한다(트랜잭션을 커밋한다). 그리고 이 작업을 내부적으로 try/catch로 묶어놨는데 에러가나면 catch 블럭에서 rollback시키다. Spring Data JPA 해당하는 메소드들에는 기본적으로 트랜잭션이 적용이 되..
Bean 과 DI Bean Bean은 스프링 IOC 컨테이너가 관리하는 객체다. 빈을 등록하는 방법에는 2가지가 있다. 1. Component Scanning 2. XML 이나 자바 설정 파일에 직접 등록 Component Scanning @SpringBootApplication안에는 @SpringBootConfiguration, @ComponetScan, @EnableAutoConfiguration이 있다. 여기서 @ComponetScan은 대부분 모든 클래스들과 모든 패키지에 @Component가 붙어있는 클래스들을 찾아서 Bean으로 등록을 해준다. @Component @Repository @Service @Controller 주의할 점은 해당 최상위 패키지부터 스캔을 하기 때문에 다른 패키지를 스캔을 안한다. 직접..
IOC Inversion Of Control의 약자로 제어의 역전이라는 뜻이다. 원래 의존성에 대한 제어권은 본인에게 있다. Class OwnerController { private OwnerRepository ownerRepository = new OwnerRepository(); } IOC는 의존성을 내가 관리하지 않고 나 외의 누군가가 밖에서 의존성을 주입해주는 형태다. Class OwnerController { private OwnerRepository ownerRepository; public OwnerController(OwnerRepository ownerRepository) { this.ownerRepository = ownerRepository; } } IOC Container 스프링 프레임웤은..
Guards @Injectable() 데코레이터로 주석이 달린 클래스. CanActivate인터페이스를 구현해야한다 . 가드는 각 미들웨어 이후 , 인터셉터 또는 파이프 전에 실행된다. Authorization guard 토큰을 추출하고 유효성을 검사하고 추출 된 정보를 사용하여 요청을 진행할 수 있는지 여부를 결정. auth.guard.ts import { Injectable, CanActivate, ExecutionContext } from '@nestjs/common'; import { Observable } from 'rxjs'; @Injectable() export class AuthGuard implements CanActivate { canActivate( context: ExecutionContext,..
Pipes @Injectable() 데코레이터로 주석이 달린 클래스. PipeTransform 인터페이스를 구현해야한다. 변환 : 입력 데이터를 원하는 출력으로 변환 검증 : 입력 데이터를 평가하고 유효하다면 변경없이 그대로 전달합니다. 그렇지 않으면 데이터가 정확하지 않을 때 예외를 던집니 Object schema validation Joi library 를 사용하자. $ npm install --save @hapi/joi $ npm install --save-dev @types/hapi__joi import { PipeTransform, Injectable, ArgumentMetadata, BadRequestException } from '@nestjs/common'; @Injectable() export cl..
Exception Filters Nest에는 응용 프로그램에서 처리되지 않은 모든 예외를 처리 하는 기본 제공 예외 레이어. cats.controller.ts @Get() async findAll() { throw new HttpException('Forbidden', HttpStatus.FORBIDDEN); } Custom exceptions forbidden.exception.ts export class ForbiddenException extends HttpException { constructor() { super('Forbidden', HttpStatus.FORBIDDEN); } }cats.controller.ts @Get() async findAll() { throw new ForbiddenExc..