전체 글

전체 글

    JWT(Json Web Token) 이란

    JWT JWT(Json Web Token) 이란 두 사용자간 데이터를 전송하는 과정에서 사용하는 Json Object 형식이다. JWT가 사용되는 대표적인 예시는 Authorization으로 특정 요청을 한 유저가 해당하는 권한을 가지고 있는지 JWT의 검증을 통해 확인할 수 있다. JWT의 구조 JWT를 프린트해보면 다음과 같은 형식으로 이루어져 있다. `xxxxx.yyyyy.zzzzz` JWT는 '.' 을 구분자로 사용하는데, 즉 `xxxxx`, `yyyyy`, `zzzzz`가 각자의 의미를 가지는 필드가 된다. 각 필드는 `Header`, `Payload`, `Signature` 에 해당한다. Headerheader는 일반적으로 2개의 파트로 나누어진다. 토큰의 타입, 그리고 signing에 사용된..

    FCM(Firebase 클라우드 메시징)

    FCM이란 FCM이란 메시지를 무료로 전송할 수 있는 크로스 플랫폼 메시징 솔루션을 의미한다. 크로스 플랫폼이기 때문에 사용자의 환경이 iOS인지 Android인지 등을 고려하지 않고 편리하게 푸시 알림을 보낼 수 있는 장점을 가지고 있다. 우리가 모바일에서 어플리케이션을 이용하여 게임을 할 때 이벤트 등의 정보를 푸시 알림을 통해 받아 본 경험이 있을 것이다. 이 알림을 주기 위해 개발자들이 사용하는 도구가 FCM에 해당한다. FCM 아키텍처 FCM 공식문서에 제공된 아키텍처 구조는 위와 같다. Message building and targeting FCM을 사용하여 메시지를 전송하려는 유저가 책임을 가진 파트라고 생각하면 된다. Firebase에서 제공하는 GUI를 사용해서도 알림을 작성할 수 있지..

    class-transformer를 사용하는 이유, 사용 방법

    class transformer는 plain object를 class의 instance로 변환하거나, 그 반대의 작업을 수행하기 위해 사용하는 library이다. Plain object란 Object class의 instance를 말한다. 이는 {} notation을 사용하여 생성되는 경우 literal objects라고도 한다. Class object란 class의 instance를 말한다. 이러한 두 instance의 변환 과정이 필요한 이유는 공식 readme에 예시와 함께 잘 작성되어 있어, 해당 내용을 참고하면 쉽게 이해할 수 있다. [ { "id": 1, "firstName": "Johny", "lastName": "Cage", "age": 27 }, { "id": 2, "firstName":..

    [NestJS] Dynamic modules

    Static module binding 아래 UsersModule은 UsersService를 provide & export하고 있다. 즉, UsersModule은 UsersService의 host module이 된다. import { Module } from '@nestjs/common'; import { UsersService } from './users.service'; @Module({ providers: [UsersService], exports: [UsersService], }) export class UsersModule {} 다음으로, UsersModule을 import하는 AuthModule을 정의한다. import { Module } from '@nestjs/common'; import ..

    [NestJS] NestJS의 IoC container(Provider의 동작 방식)

    Dependency Injection Dependency Injection이란 IoC technique으로, instantiation of dependencies를 개발자가 코드에서 직접 수행하는 것이 아니라 IoC container에게 위임하는 것을 말한다. 우리가 Nest에서 provider를 정의할때, `@Injectable()` 데코레이터를 사용하게 된다. import { Injectable } from '@nestjs/common'; import { Cat } from './interfaces/cat.interface'; @Injectable() export class CatsService { private readonly cats: Cat[] = []; findAll(): Cat[] { ret..

    TypeORM개요 + Entity란?

    TypeORM 이란? TypeORM이란 NodeJS,Browser등의 환경에서 실행할 수 있는 ORM(Object-relational mapping)이며 JavaScript나 TypeScript로 사용할 수 있다. TypeORM은 Active Record, Data Mapper patterns를 지원하는데 이를 통해 loosely coupled,scalable, maintainable applications을 만들 수 있다는 장점이 있다. DataSource Database와의 상호작용을 위해 우선적으로 DataSource를 세팅해야 한다. TypeORM의 `DataSource`는 database connection을 세팅하고 최초의 데이터베이스 접속 혹은 connection pool을 establish..

    SSH 포트 번호 변경하기

    팀프로젝트를 진행하기 위해 nCloud에 서버를 열어놓고 있었는데 새벽에 다음과 같은 알람이 왔다... ssh 포트를 22번으로 열어두고 변경하지 않았는데, 해당 포트로 ssh bruteforce attack이 감지되었다. 보안을 위해 포트 번호를 미리 변경했어야 했는데, 테스트를 위해 잠시 열어두었던 서버라 이를 크게 신경쓰지 않은 점이 화근이었다. 따라서 문제를 해결해주기 위해 ssh 포트 번호를 변경해주기로했다. SSH 접속 포트 변경하기 서버에 접속한 후 다음과 같은 명령어를 입력한다. sudo vi /etc/ssh/sshd_config 그러면 다음과 같은 config 내용을 볼 수 있다. 여기서 #Port 22부분에서 22라는 숫자를 원하는 포트 번호로 변경해준 후, #을 제거해준다. 변경 후 ..

    [Computer Network] TCP의 flow control과 congestion control

    TCP Flow Control 위 그림은 link->network->transport->application으로 이어지는 데이터 전송 과정을 표현하고 있다. transport 계층까지 전송된 데이터는 바로 application 계층으로 올라가지 않고, TCP socket에 있는 buffer에 저장된다. 만약 sending TCP의 전송 속도가 너무 빠르면 TCP socket buffer가 차오르게 되고, 데이터가 loss될 수 있다. RcvBuffer는 전송 받는 데이터를 넣을 전체 공간을 의미하며 rwnd는 비어있는 버퍼의 크기를 의미한다. sender는 rwnd값을 이용하여 unacked data를 rwnd가 넘지 않게 조절하면서 buffer overflow를 방지하는데, 이를 `flow contro..