전체

CRUD란? CRUD는 Create, Read, Update, Delete의 약어로 데이터베이스와 같은 시스템에서 기본적인 데이터 관리 기능을 의미한다. MySQL의 CRUD 다음은 MySQL의 기본적인 CRUD SQL쿼리문이다. 1. INSERT (데이터 생성 - create) INSERT INTO users (name, age) VALUES ("김수헌", 27); 2. SELECT (데이터 조회 - read) // 전체조회 SELECT * from users; // 특정 컬럼 조회 SELECT name from users; // 조건부 조회 : WHERE문 SELECT * from users where name = '김수헌'; // 정렬 : ORDER BY문 SELECT * from users ORD..
MySQL Install Mac OS 기준이며, brew를 이용해 설치할 수 있다. 터미널을 열어 brew update 입력 후, brew install mysql을 입력해 설치한다. $ brew update $ brew install mysql 설치가 완료되면, 서버를 실행하기 위해 터미널에 brew services start mysql 을 입력한다. $ brew services start mysql1 이 상태로도 사용할 수 있지만, 보안을 위해 비밀번호를 설정해주도록 한다. 터미널에 mysql\_secure\_installation 라고 입력한다. $ mysql_secure_installation 복잡한 비밀번호를 사용할것이냐는 질문에 N 을 입력하고 엔터를 입력한다. New password: Re-..
Exception filters Nest는 어플리케이션의 모든 처리되지 않은 예외를 처리하는 역할을 하는 예외 층(Exceptions Layer)을 갖고있다. 예외처리는 내장된 전역 예외 필터에 의해 실행되며, HttpException과 자식 클래스에 대한 예외를 처리한다. 만약 예외가 HttpException도 아니고 그 자식클래스도 아니여서 예외를 인식 못 할 때에는 , 내장된 예외 필터가 기본 JSON응답을 만들어 낸다. { "statusCode": 500, "message": "Internal server error" } 표준 예외 발생시키기 Nest는 @nestjs/common 패키지에서 HttpException 클래스를 제공한다. 일반적인 HTTP REST/GraphQL API 기반 어플리케이..
DBMS 데이터베이스를 ‘데이터의 집합’이라고 정의한다면 DBMS는 이 데이터를 관리•운영하는 역할을 말한다. 또한 데이터베이스는 여러 명의 사용자나 응용 프로그램이 공유하고 동시에 접근이 가능해야 한다. 대표적인 DBMS으로 MySQL이 있고, 이외에도 MariaDB, PostgreSQL, Oracle 등이 있다. 이 중 대용량 데이터를 처리하기 용이한 PostgreSQL의 점유율이 높아지고 있다고 한다. DBMS와 데이터베이스의 특징 데이터의 무결성 데이터베이스 안의 데이터는 어떤경로를 통해 들어 왔던지 데이터에 오류가 있어서는 안된다. 무결성을 위해서 데이터베이스는 제약조건 이라는 특성을 가진다. 데이터의 독립성 데이터베이스의 크기를 변경하거나 데이터 파일의 저장소를 변경하더라도, 기존의 작성된 응..
Modules Module은 @Module() 데코레이터가 붙은 클래스이다. @Module() 데코레이터는 Nest가 어플리케이션의 구조를 구성할때 사용하는 메타데이터를 붙여준다. 각 어플케이션은 최소 하나의 루트 모듈을 갖는다. 루트 모듈은 Nest가 모듈, 프로바이더의 관계, 의존성을 만들 때 사용하는 내부 자료구조인 어플리케이션 그래프를 만들 때 시작점으로 사용한다. 모듈은 구성 요소들을 체계화하는 효율적인 방법으로, 대부분의 어플리케이션 아키텍쳐에서는 서로 밀접한 관계에 있는 기능들을 하나의 모듈로 캡슐화 하게 된다. @Module() 데코레이터는 모듈을 정의하는 속성들을 갖는 하나의 객체를 사용한다. 속성 설명 providers Nest Injector에 의해 인스턴스가 만들어지고, 해당 모듈에..
Providers Provider는 의존성 주입(Dependency Injection)을 위한 핵심 요소이다. 객체들이 서로 다양한 관계를 형성할 수 있도록 하고, Nest에게 인스턴스 생성 대부분을 위임할 수 있게 한다. 서비스, 레포지토리, 팩토리, 핼퍼 등 Nest의 기본 클래스들은 프로바이더 이다. Controller는 HTTP 요청을 처리하고, 더 복잡한 작업은 Provider에게 넘겨주어야 한다. 프로바이더는 Module의 Providers 로 정의된 자바스크립트/타입스크립트 클래스이다. 서비스 // cats.service.ts import { Injectable } from '@nestjs/common'; import { Cat } from './interfaces/cat.interface'..
Controllers 컨트롤러는 들어오는 요청을 처리해서 클라이언트에 응답을 반환하는 역할을 한다. 컨트롤러는 어플리케이션으로 들어오는 특정 요청을 받는 목적을 갖고 있다. 일반적으로 각각의 컨트롤러는 하나 이상의 라우트를 가지며, 어느 요청을 받을지 결정하여 동작을 정할수 있다. 라우팅 컨트롤러를 정의할때 필요한 @Controller() 데코레이터를 사용해, 경로를 지정하면 관련된 라우트를 묶을 수 있고, 반복되는 코드를 최소화시킬 수도 있다. // cats.controller.ts import { Controller, Get } from '@nestjs/common'; @Controller('cats') export class CatsController { @Get() findAll(): string..
Utility Type (유틸리티 타입) 유틸리티 타입은 이미 정의해 놓은 타입을 변환할 때 사용하기 좋은 타입 문법이다. 유틸리티 타입을 쓰지 않더라도 기존의 인터페이스, 제네릭 등의 기본 문법으로 충분이 타입 변환할 수 있지만, 유틸리티 타입을 쓰면 훨씬 더 간결한 문법으로 타입을 정의할 수 있다. Partial 파셜(Partial) 타입은 특정 타입의 부분 집합을 만족하는 타입을 정의할 수 있다. interface Address { email: string; address: string; } type MayHaveEmail = Partial; const me: MayHaveEmail = {}; // 가능 const you: MayHaveEmail = { email: 'test@abc.com' }; ..
Generics (제네릭) 제네릭은 C#, Java 등의 언어에서 재사용성이 높은 컴포넌트를 만들때 자주 활용된다. 한 가지 타입보다 여러 가지 타입에서 동작하는 컴포넌트를 생성하는데 사용된다. 제네릭의 한 줄 정의 제네릭이란 타입을 마치 함수의 파라미터처럼 사용하는 것을 의미한다. function getText(text) { return text; } text라는 파라미터에 값을 넘겨받아 text를 반환한다. 문자열, 숫자, boolean 등 어떤 값이 들어가더라도 그대로 반환한다. 제네릭 문법이 적용된 형태는 아래와 같다. function getText(text: T): T { return text; } 함수를 호출할 때 아래와 같이 함수 안에서 사용할 타입을 넘겨줄 수 있다. getText('hi'..
readonly 클래스 속성에 readonly 키워드를 사용하면 아래와 같이 접근만 가능하다. class Developer { readonly name: string; constructor(theName: string) { this.name = theName; } } let john = new Developer("John"); john.name = "John"; // error! name is readonly. 이처럼 readonly를 사용하면 constructor() 함수에 초기 값 설정 로직을 넣어줘야 하므로 다음과 같이 인자에 readonly 키워드를 추가해서 코드를 줄일 수 있습니다. class Developer { readonly name: string; constructor(readonly n..