목록전체 글 (66)
상똥이의 Back-End 공부방
Module은 @Module() 데코레이터를 사용하는 클래스입니다. @Module() 데코레이터는 Nest가 애플리케이션 구조를 조직할 수 있도록 메타데이터를 제공합니다. 각각의 애플리케이션은 적어도 하나의 모듈(루트 모듈)을 가지고 있습니다. 루트 모듈은 애플리케이션 그래프(Nest가 모듈과 프로바이더 사이의 관계와 의존성을 해결하는데 사용하는 내부 데이터 구조)를 만드는 시작점입니다. 아주 작은 애플리케이션이 이론적으로 루트 모듈만을 가지기 때문에 이런 경우는 일반적이지 않습니다. 모듈이 컴포넌트를 구성하는데에 효과적인 방법이라고 강력히 추천하고 싶습니다. 따라서 대부분의 애플리케이션에서 결과적으로 여러 모듈을 사용하여, 각각 밀접하게 관련된 기능 집합을 캡슐화하는 아키텍처를 채택하게 됩니다. @Mo..
ProvidersProvider는 Nest의 근본적인 개념입니다. 많은 Nest의 기본 클래스는 Provider로 취급될 수 있습니다. Provider의 주 목적은 의존성 주입입니다. 이는 객체가 서로 다양한 관계를 맺을 수 있음을 의미하며 이 객체들을 "연결하는" 기능은 크게 Nest 런타임 시스템에 위임될 수 있습니다.이전 장에서 간단한 CatsController를 작성했습니다. Controller는 HTTP 요청을 처리하고 더 복잡한 작업은 Provider에 위임합니다. Provider는 module에 'providers'로 선언되는 순수 자바스크립트 클래스입니다.HINTNest는 객체 지향적인 방식으로 의존성을 설계하고 구성할 수 있는 가능성을 제공하기 때문에, SOLID 원칙을 따르는 것을 강력..
Controllers컨트롤러는 클라이언트로부터 요청을 받고 응답하는 역할을 맡고 있습니다.컨트롤러의 목적은 애플리케이션에 들어오는 특정한 요청을 받아들이는 것입니다. 라우팅 매커니즘은 어느 컨트롤러가 어느 요청을 받아들일지 제어합니다. 주로 각각의 컨트롤러는 하나 이상의 경로를 가지며 경로들은 서로 다른 역할을 수행할 수 있습니다. 기본 컨트롤러를 만들기 위해, 우리는 클래스와 데코레이터를 사용합니다. 데코레이터는 클래스에 필요한 메타데이터를 연결하고, 이를 통해 Nest는 라우팅 맵을 생성합니다. (이 라우팅 맵은 들어오는 요청을 해당하는 컨트롤러에 연결합니다.)HINT내장된 검증과 함께 CRUD를 빠르게 생성하고 싶다면, CLI의 CRUD 생성 명령어: nest g resource [name] 를 사..
[1. Node의 작동방식]1. 노드란?- Node.js는 Chrome V8 Javascript 엔진으로 빌드된 자바스크립트 런타임(실행기) 2. 싱글스레드- 프로세스에 스레드가 한 개 있는 것- 프로세스: 운영체제에서 할당하는 작업의 단위. 프로세스간에는 자원 공유가 발생하지 않음- 스레드: 브로세스 내에서 실행되는 흐름의 단위. 스레드는 부모 프로세스의 자원을 서로 공유함(같은 주소의 메모리에 접근 가능하므로)- 노드는 싱글스레드가 아님. 프로세스에 여러 개의 스레드가 생성되지만, 제어할 수 있는 스레드가 한 개이기 때문에 싱글스레드처럼 보이는 것- 효율적으로 코드를 작동시키기 위해 이벤트 루프와 논블로킹 방식을 사용함 3. 노드의 특성- 이벤트 기반- 논블로킹io [2. 이벤트 기반]1. 이벤트 기..
1. 제네릭- 타입을 파라미터 변수로 받는 방식 2. 제네릭의 장점- 타입의 구분 없이 사용할 수 있어 활용도가 높아짐- 타입에 따라 동일한 로직을 여러번 작성할 필요가 없어지므로 코드의 중복을 제거할 수 있음 3. 제네릭 vs 유니온- 유니온 타입(Ex. string | number) 또는 any를 사용하면 인자값은 해결되지만- 반환값에 대한 기능이 제한됨유니온제네릭 4. 인터페이스에 활용interface Example { value: T; selected: boolean;}const obj: Example = {value: 'text', selected: false}; 5. 제네릭의 타입 제한- 배열로 활용하기function logTextLength(text: T[]): T[] { ..
[1. 인터페이스]1. 인터페이스란- 반복되는 타입을 동일한 규칙으로 정해둘 수 있음interface User { first_name: string; last_name: string; age: number;} - 변수에 인터페이스 활용const sanghee: User { first_name: 'Park'; last_name: 'Sanghee'; age: 27;}const junhee: User { first_name: 'Lee'; last_name: 'Junhee'; age: 27;}const hyein: User { first_name: 'Jung'; last_name: 'Hyein'; age: 27;} - 함수에 인터페이스 활용func..
1. 기본 타입- 문자형: string- 숫자형: number- 진위값: booleanconst name: string = '박상희';const age: number = 17;const married: boolean = false; 2. 배열- Array 또는 타입[]cosnt array1: Array = [1, 2, 3];const array2: Array = ['a', 'b', 'c'];const array3: number[] = [1, 2, 3];cosnt array4: string[] = ['a', 'b', 'c']; 3. 튜플- 두 가지 이상의 데이터 타입을 적용할 수 있음const address: [string, number] = ['Seoul', 100];cosnt any: string|bo..
1. 타입스크립트란?- 데이터 타입을 부여한 자바스크립트, 자바스크립트의 슈퍼셋- 변수의 선언과 동시에 데이터 타입을 지정- 자바스크립트와 달리 브라우저에서 실행하기 위해 컴파일(파일 변환) 과정이 필요//javascriptfunction sum(a, b) { return a+b;}sum(1, 2);//typescriptfunction sum(a: number, b: number):number { return a+b;}sum(1, 2); 2. 자바스크립트와의 차이- 자바스크립트 = 인터프리터 언어 / 타입스크립트 = 컴파일언어- 인터프리터 언어: 소스코드를 한 줄씩 읽어가며 바로 실행해 빠른 편- 컴파일 언어: 언어 변환과 명령 실행이 따로 이루어짐. 런타임 상황에서는 모든 소스코드가 변환되어 있어 ..
목표- 백엔드에서 페이지네이션을 위한 로직을 구현한다- n번째 페이지에 보여줄 데이터 수(limit)를 설정할 수 있다- 데이터는 생성된 시간을 기준으로 내림차순 정렬한다 목차0. 초기 설정 (데이터베이스, 초기 데이터, 데이터 타입)1. 기능 구현2. 포스트맨으로 확인 [0. 초기 설정]1. 데이터베이스- 예시로 댓글 타입을 활용했다- 프리즈마를 사용해 간단히 구현한다- 댓글 id(자동생성, 정수타입), 닉네임, 내용, 생성일자model Comment { id Int @id @default(autoincrement()) nickname String content String createdAt DateTime @default(now())} 2. 초기 데이터- 총 42개의..