[NestJS] TypeORM
TypeORM node.js 기반 TypeScript로 작성된 객체 관계형 매퍼 라이브러리 TypeORM 특징 & 이점 모델을 기반으로 데이터베이스 체계 자동 생성 가능 데이터베이스에서 개체 쉽게 삽입, 업데이트 및 삭제 가능 테이블 간의 매핑 간단한 CLI 명령 제공 ORM(Object Relational Mapping) 객체와 관계형 데이터베이스의 데이터를 자동으로 변형 및 연결하는 작업 객체와 데이터베이스의 변형에 유연하게 사용 가능 Entity? 데이터베이스 테이블로 변환되는 Class이므로 클래스를 생성한 뒤 그 안에 컬럼들을 정의한다. @Entity() : Board 클래스가 엔티티임을 나타냄 @PrimaryGeneratedColumn() : id 컬럼이 Board 엔티티의 기본키 임을 나타냄..
2024.01.15
[NestJS] Pipe 이용
Pipe? @Injectable() 로 주석이 달린 클래스 data transformation 입력 데이터를 원하는 형식으로 변환 data validation 입력 데이터를 평가하고 유효성을 검사 메소드가 호출되기 직전에 파이프를 삽입하고 파이프는 메소드로 향하는 인수를 수신하고 이에 대해 작동 Binding Pipes Handler-level Pipes 핸들러 레벨에서 @UsePipes 를 이용해서 사용한다. Parameter-level Pipes 파라미터 하나에만 해당 Global Pipes 클라이언트에서 들어오는 모든 요청에 적용되며 bootstrap(main.ts) 코드에 삽입한다. Built-in Pipes Nest JS의 기본적으로 사용할 수 있게 만들어 놓은 6가지 파이프 Validation..
2024.01.15
no image
[NestJS] CRUD 구현
In-Memory 방식의 구현 💡 우선 따로 DB 연동은 하지 않고 로컬 메모리와 연결하여 구현한다. 📄 boards.service.ts @Injectable() export class BoardsService { private boards = []; getAllBoards() { return this.boards; } } 📄 boards.controller.ts import { Controller, Get } from '@nestjs/common'; import { BoardsService } from './boards.service'; @Controller('boards') export class BoardsController { constructor(private boardsService: Boar..
2024.01.15
no image
[NestJS] NestJS 기본 요소
NestJS는 기본적으로 node.js의 Express를 기본 토대로 하여 만들어졌다. Express, Fastify 프레임워크를 래핑하여 동작한다. platform-express or platform-fastify 별도의 설정이 없으면 @nestjs/platform-express 이 기본적으로 사용된다. NestJS는 Angular로부터 영향을 많이 받았다. NestJS의 철학 Express에서 부가적으로 타입스크립트, 로깅을 사용하려면 새로 설정을 해줘야하는 번거로움이 있다. 이를 단순히 명령어 입력을 통해 구현할 수 있다. NestJS 시작하기 $ npm i -g @nestjs/cli $ nest new nestjs-test NestJS 기본 요소 nestjs-board-app ├── .eslint..
2024.01.15
no image
[헤드 퍼스트 디자인 패턴] 1. 전략 패턴
e.g. SimUduck 구현 맨 위 상위 클래스 Duck 으로 부터 상속 받는 하위 클래스 MallardDuck , RedheadDuck Duck { quack() swim() display() } fly() 라는 메소드를 추가하고 일부 서브 클래스에서 해당 메서드를 구현해야한다. 상위 클래스에 fly() 를 추가한다. Duck { quack() swim() display() fly() // 새로 추가된 코드 } 상속을 통한 해결 하위 클래스에서도 모두 해당 메서드를 구현해야 하므로 해당 사항이 없는 클래스의 경우 아무런 행위를 하지 않도록 오버라이드한다. 인터페이스 해결 💡 디자인 원칙 1 바뀌는 부분은 따로 뽑아서 캡슐화한다. 그러면 나중에 바뀌지 않는 부분에는 영향을 미치지 않고 그 부분만 고치거..
2024.01.15
no image
[AWS/Secrets Manager] 키 관리 Secrets Manager 로 간단히 하기
- 2023년 8월 인턴 업무를 진행하며 프로젝트 키 관리 방식을 바꾸면서 개발팀 내부에 공유했었던 문서를 각색하여 작성하였습니다. - Nest js 프로젝트에서 키 파일 관리를 중앙에서 하기 위해 도입한 방식으로 본 포스팅은 NestJS + AWS 환경에서 배포를 진행하는 프로젝트에 최적화되어 있습니다. 🧍🏻Intro 도입 배경 Redis를 새롭게 추가하던 중 파이프라인에 변수 설정 누락, Bitbuckets Repository Variables 변수설정 누락 시 빌드는 성공하지만 정작 .env 파일 내에 해당 시크릿 정보가 기입되지 않는 문제 발생 공동 작업 중 DATABASE_SYNCHRONIZE = true 로 설정하는 실수로 인해 DB의 모든 데이터 유실 키 파일 변경 시 일일이 모든 개발자에게..
2023.12.09
Linked Lists
해당 포스팅은 'Cracking the Coding Interview'를 읽으며 정리한 내용을 담은 포스팅으로 이론 내용 및 모든 문제의 출처는 'Cracking the Coding Interview'에 있습니다. 문제 자체에 대한 설명은 담고 있지 않으며 원문 파일은 GitHub 및 원문 책 사이트를 통해 다운로드하실 수 있습니다. 연결리스트 : 차례로 연결된 노드를 표현해주는 자료구조 단방향 연결리스트 : 개별 노드 :arrow_right: 다음 노드 양방향 연결리스트 : 개별 노드 :arrow_right: 다음 노드 & 이전 노드 ⭐️ 시작 지점에서의 아이템 추가 및 삭제 연산이 상수 시간 소요 1. Creating a Linked List 단방향 연결리스트 구현 코드 class Node { Nod..
2023.06.29
Arrays and Strings
해당 포스팅은 'Cracking the Coding Interview'를 읽으며 정리한 내용을 담은 포스팅으로 이론 내용 및 모든 문제의 출처는 'Cracking the Coding Interview'에 있습니다. 문제 자체에 대한 설명은 담고 있지 않으며 원문 파일은 GitHub 및 원문 책 사이트를 통해 다운로드하실 수 있습니다. 1. Hash Tables 해시테이블 : 효율적인 탐색을 위한 자료구조 키(key)를 값(value)에 대응한다. 간단한 해시테이블 구현 방법 연결리스트(linked list), 해시 코드 함수(hash code function) 해시테이블 데이터 삽입 과정 키의 해시 코드를 계산한다. 키의 자료형은 보통 int 혹은 long 이 된다. :arrow_right: 이는 서로 ..
2023.06.28
no image
[NestJS] Overview
1. OVERVIEW First steps Nest는 타입스크립트와 순수 자바스크립트 둘 다 호환 가능 그러나 바닐라 자바스크립트를 이용하려면 바벨 컴파일러를 함께 사용해야함 1. 설정 Node.js 16 이상부터 가능 # 다음 명령어로 간단하게 새 프로젝트 생성 가능 $ npm i -g @nestjs/cli $ nest new project-name 프로젝트 구조는 다음과 같이 구성된다. src ├ app.controller.spec.ts # 컨트롤러 유닛 테스트 ├ app.controller.ts # 싱글 라우트에 관한 기본적인 컨트롤러 ├ app.module.ts # 애플리케이션의 루트 모듈 ├ app.service.ts # 싱글 메소드에 관한 기본적인 서비스 ┕ main.ts # Nest 애플리케..
2023.06.28