분류 전체보기 77

DB 스키마

DB 자료(테이블, 데이터)구조, 자료 표현 방법, 자료들의 관계를 정의한 구조 ERD로 표시 될 수 있지만 더 내부를 보면 더 많은 환경 정보가 스키마에 포함된다. DBMS가 주어진 설정에 따라 생성한다. DBMS는 자료를 저장, 조회, 삭제, 변경할 때 스키마를 참조한다. 스키마의 자세하고 정확한 정의, 사용방법은 DB마다 다르다.(사용 방법을 크게 분류하면 Read On Schema, Write On Schema) MySQL 테이블 등 오브젝트 집합입니다. 테이블끼리 PK, FK로 연결되어 있습니다. 만들어진 구조를 변경하기 어렵지만 관계와 타입이 명확합니다. MongoDB NoSQL DB의 스키마는 데이터베이스와 Collection을 포함합니다. NoSQL DB는 테이블대신 Document를 사용..

카테고리 없음 2022.06.01

DTO(Data Transfer Object)

값을 담아서 주고 받기 위한 객체 (주로 클아이언트의 입출력 데이터를 주고 받을 때 사용한다.) 기능, 목적 별로 데이터를 주거나 받을 때 주고받는 데이터의 형태(객체)를 정의할 수 있다. 유지보수성, 재사용성을 높일 수 있다. 타입 스크립트를 사용하면 DTO를 이용해서 타입체크도 가능하다. nestjs에서 라이브러리(class-validator)를 사용하면 DTO에 들어오는 값에 더 많은 제한 설정을 할 수 있다. //GraphQL에서 같이 사용할 수 있는 DTO, HTTP API에서만 사용할 때는 데코레이터를 제거하고 사용한다. import { Field, InputType, Int } from '@nestjs/graphql'; import { Min } from 'class-validator'; @..

카테고리 없음 2022.06.01

타입스크립트

자바스크립트 기반의 언어 type을 확인하는 기능이 추가 되었다. 코드를 작성하는 단계에서 변수나 객체에 타입을 정해줄 수 있다. (자바스크립트를 쓸 때 처럼 변수에 여러 데이터 타입을 같이 쓰거나 마음대로 바꿀 수 없다) 타입이 정해진 변수나 객체를 사용할 때 입력 값이 타입과 다르면 경고를 알리고 실행되지 않는다. 타입스크립트 규칙에 위반되지 않으면 자바스크립트로 파일을 변환하고 실행한다. 변수에 값을 넣어서 선언하면 처음 들어간 값을 보고 변수에 들어갈 수 있는 데이터 타입을 추론합니다. 자바 스크립트에서는 지정하지 않던 것을 매번 지정해줘야하니 오히려 일이 늘어난 느낌이었는데 프로젝트할 때를 생각해보니 입력 데이터에 대해 undefine null 확인은 기본이고 서비스에 따라 맞는 데이터 타입이 ..

카테고리 없음 2022.05.31

Nest 폴더구조

app.controller.ts 단일 루트 컨트롤러 graphQL을 사용할 때는 리졸버로 사용한다. app.controller.spec.ts 유닛 테스트 컨트롤러 app.module.ts 루트 모듈 다른 모듈이나 컨트롤러 서비스 모델을 모아서 사용할 수 있게 하는 기능을 한다. app.service.ts 서비스를 작성하는 파일 main.ts app.js, index.js의 역할을 하는 파일 nest의 코어(express와 유사한 역할)를 임포트해서 제공하고 있으며 많은 역할을 app.module과 분담하고 있다. Controller request를 처리하고 클라이언트에 response를 전달합니다. 컨트롤러는 여러 route(api와 같은)를 포함하고 request를 route로 전달합니다. 데코레이터와..

카테고리 없음 2022.05.27

ERD

Entity Relationship Diagram 데이터들의 관계를 나타낸 도표 SQL Entity들 간에 PK FK 관계, 테이블 속성의 데이터 타입과 공간을 표시한다. 네트워크를 구축하고나면 네트워크 구상도를 남겨서 유지보수와 구조 파악에 사용하듯이 데이터베이스를 만들기 전에 ERD를 그려서 DB구조를 계획, 파악하고 구축 후 유지보수에 도움을 받을 수 있습니다. 정규화 (1 ~ 3) 하나의 테이블에 모든 데이터가 담겨있는 상태를 단계별로 기준을 두고 여러 테이블로 나누는 것 검색 속도와 유지보수 편의성을 올리기 위해서 진행한다. 제 1 정규화 하나의 속성에 하나의 값만 들어가도록 만들어 주는 단계 (다가속성 합치기, 복합 속성 분리) 중복 행 분리 제 2 정규화 테이블에 복합키가 있고 복합키 중 일..

카테고리 없음 2022.05.27

TYPE ORM

TYPE Script, Java Script에서 사용할 수 있는 ORM(Object Relational Mapping)입니다. Entity를 정의하고 데이터 베이스에 접근할 수 있는 메소드를 제공합니다. Active Record, Data Mapper를 지원합니다. mySQL과 mongoDB를 지원합니다. SQL DB는 대부분 호환이 가능할 듯 합니다. 저는 Nestjs에서 MySQL과 사용했습니다. Active Record 모델을 사용해서 데이터 베이스에 접근하는 방법입니다. BaseEntity를 이용해서 Entity 클래스를 만들고 사용할 수 있습니다.(Nestjs의 Docs는 Data Mapper가 예시로 나옵니다.) BaseEntity에는 save,remove,find,findOne 같은 메소드를..

카테고리 없음 2022.05.26

husky

Git hook 관리 공유 도구 git의 특정 단계에서 스크립트를 실행 할 수 있게 도와준다 package.json에 스크립트를 작성하고 .husky 파일에 스크립트와 연됭되는 설정을 해주면 사용할 수 있다. git hook git에서 제공하는 기능 git에서 특정 이벤트(commit, merge, push ...)가 발생했을 때 스크립트를 실행할 수 있다. .git 디렉토리 아래 hooks에 설정이 저장된다. 클라이언트 hook과 서버 hook이 다르다. git을 클론해도 클라이언트 hook은 복사되지 않는다. 클라이언트 hook 커밋 워크플로 hook pre-commit 커밋 이벤트가 발생할 때 호출되는 hook 커밋 메세지가 작성되기 전에 커밋하는 스냅샷에 문제가 없는지 검사한다. Lin로 코드 스..

카테고리 없음 2022.05.26

Callback 함수

함수에서 인자로 넘겨지는 함수 함수를 넘겨받은 함수는 함수안에서 함수를 사용할 수 있다. forEach( function( data ) { return data + "-" },//콜백함수 [1, 2, 3, 4, 5] ) function forEach(callback, arr) {//콜백 함수와 배열을 인자로 넘겨받았다 let str = ""; for (let element of arr) { str += callback(element);//넘겨받은 함수를 사용한다. 함수는 함수의 결과를 리턴한다. } console.log(str); } 주의점 함수 선언문 형태로 사용하면 스코프에 따라 this바인딩 문제가 생길 수 있다 => 메서드를 사용하거나 this를 사용할 때는 주의가 필요합니다. 화살표함수 등 ES..

카테고리 없음 2022.05.25

MVC 패턴

디자인 패턴으로 Model, View, Controller의 약자 입니다. 최근에 백엔드에서 View를 직접 구현하거나 관리하는 경우는 거의 없어 View보다는 Service를 포함합니다. 서비스가 포함되면 주로 모델을 서비스에서 참조합니다. MVC를 사용하는 이유 서비스 함수에서 하나의 기능만을 담당하고 컨트롤러에서 역할만 외부로 노출해서 코드를 보기 편하게 하고 에러의 원인을 찾기 쉽게 합니다. 유지보수가 편리해지고 확장성 유연성이 증가하며, 패턴을 적용해서 정리된 코드를 작성하면 기능이 중복되는 함수를 줄일 수 있습니다. 적용하는 과정에서 코드의 길이가 길어지고 디렉토리 구조가 복잡해질 수 있지만 에러위치를 특정하고 중복 코드를 줄일 수 있다는 것은 큰 장점입니다. 서비스의 규모가 커질 수록 패턴을..

카테고리 없음 2022.05.24

package-json

패키지에 대한 간단한 설명이 작성됩니다. 패키지 배포와 의존성 확인 등에 사용됩니다. name 가장 기본적인 프로젝트 식별자 입니다. 필수 필드입니다. 지정하지 않으면 URL이나 폴더이름을 따라갑니다. -> URL에 사용할 수 없는 문자를 이름에 포함할 수 없습니다. version 필수 필드입니다. 패키지 버전에 따라 업데이트 되어야하지만 배포할 예정이 없다면 괜찮습니다. 배포 계획이 있다면 node-semver로 파싱가능해야합니다 npm을 설치할 때 같이 설치됩니다. main 프로그램의 기본 진입점으로 설정합니다. 진입점은 루트경로에 있는 것을 권장합니다. 지정하지 않으면 루트 경로에있는 index.js가 자동으로 설정됩니다. (index.js가 없어도 index.js로 설정합니다.) devDepend..

카테고리 없음 2022.05.16