
JSON 형식의 데이터를 전자 서명(Sign)하여 URL-safe문자열로 표현한으로 것으로 인증된 사용자를 식별하는 데 주로 사용된다. *URL Safe : URL에 포함할 수 없는 문자를 포함하지 않는 것을 말한다. What is JWT? JWT는 일반적으로 클라이언트와 서버 두 개체 간의 정보를 공유할 때, 인증된 사용자인지 식별하는데 사용되는 토큰입니다. 각 JWT는 다른 클라이언트나 악의적인 당사자가 JWT Clams(JSON Contents)을 변경할 수 없도록 암호화를 사용하여 서명(Signed)되어 있다. JWT 구조 - Header : 사용된 서명알고리즘, 토큰 타입 - Paylaod: 토큰의 담을 정보가 들어있다. 여기에 담는 정보의 한 조각을 클레임(Claim)이라고 부른다. * Cla..
행동Behavioral 패턴 행동 패턴은 객체간의 통신을 식별하는데 사용됩니다. 대표적인 예로는 Observer, Mediator, State 등이 있습니다 1) 옵저버 Observer 옵저버 패턴은 상태 변경이 발생할 때 이것을 관찰하고 있는 이해 당사자에게 알리는 데 사용됩니다. import { Subject } from 'rxjs'; const news = new Subject(); const tv1 = news.subscribe(v => console.log(v + 'via Den TV')); const tv2 = news.subscribe(v => console.log(v + 'via Batcave TV')); const tv3 = news.subscribe(v => console.log(v +..
구조(Structural) 패턴 구조 패턴은 객체간의 관계를 다룰 때 주로 사용되는 패턴입니다. 대표적인 예로는 파사드(Facade), 프록시(Proxy) 등이 있습니다. 1) 파사드 Facade 패턴 파사드는 단순화된 API를 더 큰 코드 본문에 제공해주는 클래스입니다. 파사드 패턴은 하위 시스템의 세부 정보를 숨기는데 주로 사용됩니다. class PlumbingSystem { // low evel access to plubming system setPressure(v: number) {} turnOn() {} turnOff() {} } class ElectricalSystem { // low evel access to electrical system setVoltage(v: number) {} tur..
생성 패턴 생성패턴은 새로운 객체를 생성하는 것과 관련되어있다. 생성자 패턴의 대표적인 예로는 싱글톤, 팩토리, 빌더 패턴 등이 있다. 1) Singleton 싱글톤 싱글톤은 하나의 클래스로 단 하나의 객체만 생성되도록 하는 패턴을 말한다. 이것은 어플리케이션 어디에서나 사용될 수 있는 전역객체를 생성할 때 유용하다. class Settings { static instance: Settings; public readonly mode = 'dark'; // prevent new with private constructor private constructor() { } static getInstance(): Settings { if (!Settings.instance) { Settings.instance =..
1. 각 테이블에 기본키가 있어야 한다. 모든 테이블에 한 개의 컬럼 이상으로 구성된 기본키가 있어야 한다. 그렇지 않으면 일관성 없이 데이터가 쌓일 수 있다. * 기본키 조건 : 유일값, Not Null, 불변 --> Auto Increment *복합 기본키는 사용하지 않는 것이 좋다 (쿼리 성능 저하) 2. 중복된 컬럼을 만들지 말자 데이터를 중복으로 저장하면 비정상적인 데이터의 삽입,수정,삭제 등의 문제가 일어날 수 있다 (그래서 나온 해결책이 정규화) 3. 컬럼당 하나의 특성만 저장해야 한다 (원자성 보장) 4. 외래키를 정의하자 - 제약조건 추가 주문 테이블 - 고객테이블 두 테이블이 있을 때 주문테이블에 유저IDX가 들어가 있어야 한다. 여기서 고객테이블이 고객이 부모테이블, 주문이 자식테이블..
Pipe은 무엇인가? 파이프는 @Injectable() 데코레이터로 주석이 달린 클래스입니다. 파이프는 1) data transformation 과 2)data validation을 위해 사용됩니다. 파이프는 컨트롤러 경로 처리기에 의해 처리되는 인수에 대해 작동합니다. Nest는 메소드가 호출되기 직전에 파이프를 삽입하고 파이프는 메소드로 향하는 인수를 수신하고 이에 대해 작동합니다. Client --- post Request { "title":"hello"} ------> Pipe - data transformation, data validation | | | | | | 실패 | | 통과 | | | @Get() Route Handler{ Client
DTO ( Data Transfer Object) DTO는 무엇인가? 계층간 데이터 교환을 위한 객체. DB에서 데이터를 얻어 Service나 Controller 등으로 보낼 때 사용하는 객체를 말한다. DTO는 데이터가 네트워크를 통해 전송되는 방법을 정의하는 객체라고 볼 수 있습니다. interface나 class를 이용해서 정의될 수 있습니다. (클래스를 사용하는 것을 nest.js에서 추천한다.) 왜 DTO를 사용하는가? - 데이터 유효성을 체크하는데 효율적이다 - 더 안정적인 코드로 만들어준다. (타입스크립트의 타입으로도 사용된다.) Nest.js에서 데이터 처리의 흐름을 보면... board 를 위한 property들을 여러 곳에서 사용하고 있다. (title, description... ) ..
DI (Dependecy Injection) - 종속성 주입 컨트롤러에서 서비스를 사용하기 위해서는 종속성을 주입해줘야 한다. @Controller('board') export class BoardController{ constructor(private boardsService: BoardsService) {} @Get('/:id') getBoardById(@Param('id') id: string): Board{ return this.boardsService.getBoardById(id); } } 위의 코드를 보면 BoardService 를 Constructor 클래스에서 가져오고(Injected) 있습니다. 그런 후에 Private 문법을 사용하고 있다. 이렇게 해서 boardsService를 정의해..