목록프로그래밍👩🏻💻 (110)
suyeonme
commitlint로 Commit 컨벤션 적용하기규모가 큰 팀에서 협업시, 커밋 컨벤션을 따르면 커밋의 일관성을 지킬 수 있다. 대표적으로 다음과 같은 커밋 컨벤션을 사용한다.feat(AppController): Format responsefeat: Format response lintcommit을 이용해서 작성한 commit이 컨벤션을 지켰는지 검사해보자! (1) 라이브러리 설치# husky 설치pnpm add --save-dev huskypnpm exec husky init# commitlint 패키지 다운로드pnpm install --save-dev @commitlint/config-conventional @commitlint/cli# commitlint.config.js 파일 생성echo "exp..
Husky를 도입하는 이유Git Hook은 기본적으로 로컬 환경에서 동작한다. 따라서 스크립트를 적용해도 팀 전체가 동일한 환경에서 개발하는 것이 보장되지않는다.이러한 경우, Husky 라이브러리를 사용해서 Git Hook 스크립트를 팀 전체에 강제할 수 있다.Husky 설치하기현재 프로젝트 구조는 모노레포로 다음과 같이 구성되어있다..├── packages/│ ├── frontend│ └── backend/│ ├── src│ ├── .eslintrc.js│ ├── .prettierrc│ └── package.json (1) Husky 설치프로젝트에서 pnpm을 사용중이여서 아래의 명령어로 설치한다.내 경우는 packages/backend/package..
문제 상황토이프로젝트를 진행하면서 pnpm으로 프로젝트의 구조를 모노레포로 변경을 하였다. 하지만 모노레포로 변경한 이후, 설정한 eslint가 vscode 에디터에서 eslint가 정상적으로 동작하지 않았다.모노레포로 구성한 디렉터리 구조.├── packages/│ ├── frontend│ └── backend/│ ├── src│ ├── .eslintrc.js│ ├── .prettierrc│ └── package.json├── package.json├── pnpm-workspace.yaml└── pnpm-workspace.lock.yaml트러블슈팅(1) vscode에서 린트에러가 뜨지 않아도 eslint가 정상적으로 동작하는지 확인// eslint 에러..
ConfigService를 사용하지 않는 경우 일반적으로 환경변수에 접근하는 경우. process.env로 접근하게 됩니다. 이렇게 접근하는 경우 환경변수를 사용하는데는 문제가 없지만 어떤 환경변수가 사용가능한지, 환경변수의 자료형은 어떤값인지등 확인이 어렵습니다. process.env.JWT_SECRET_KEY ConfigService를 사용해서 환경 변수를 관리해보자! ConfigService란? ConfigService는 환경 변수와 애플리케이션 설정 값을 런타임에 접근하고 관리하기 위한 서비스입니다. 이 서비스를 사용하면, .env 파일이나 다른 구성 소스에서 정의된 환경 설정 값을 안전하게 읽어올 수 있습니다. ConfigModule.forRoot() 또는 ConfigModule.forFeatu..
서론 진행중인 토이프로젝트에서 사용자가 회원가입을 한 경우, 가입 축하 이메일을 보내는 기능을 구현하였습니다. 여러 종류의 라이브러리가 있지만 nodemailer가 대체로 많이 사용되기도 하고 사용법이 매우 간단해서 nodemailer를 이용해서 적용하였습니다. 자세한 내용은 이 문서에서 확인하실 수 있습니다. nodemailer 라이브러리 설치 pnpm install --save @nestjs-modules/mailer nodemailer MailModule 생성 및 nodemailer 설정 패스워드등의 민감한 정보는 환경변수로 저장해야합니다. ConfigService를 이용해서 환경변수를 사용하였습니다. 제 경우 Gmail을 통해서 이메일을 보내기 위해서 host는 gmail로 작성했습니다. MAI..
일관된 형식의 HTTP 응답을 작성해야 하는 이유 HTTP 응답의 형태가 일관적이면 클라이언트에서 데이터를 처리하기가 훨씬 수월합니다. 상태 코드 또는 응답 메세지등에 따라서 공통 로직을 작성할 수 있습니다. 예를 들어, 데이터가 없는 경우를 생각해봅시다. 데이터가 없는 경우 null, undefined, 빈 배열등으로 표현할 수 있지만, 일관되게 { data: [] }와 같은 형태로 전달한다면 프론트엔드에서 데이터가 빈 경우, "데이터 없음"과 같은 처리를 할 수 있습니다. Interceptor란? Interceptor는 Nest.js에서 HTTP 요청 및 응답의 처리 흐름에 개입하여 작업을 수행하는 클래스입니다. 주로 로깅, 데이터 변환, 예외 처리, 헤더 추가 등과 같은 작업에 사용됩니다. Nes..
Session 기반 인증 기존의 시스템에서는 Session 기반의 인증 방식을 사용했습니다. 사용자가 로그인을 하면, 이에 대한 인증 정보를 서버에 저장하게되는데 이 것을 Session이라고 부릅니다. 인증 정보를 서버에 저장하기때문에 stateful한 인증 방식이라고 합니다. Session의 제약 서버 기반의 인증은, 사용자로부터 요청을 받으면 사용자의 인증 정보를 유지하기 위해 세션을 유지해야합니다. 일반적으로 세션은 메모리에 저장하거나, 서버의 부하를 방지하기 위해서 데이터베이스에 저장하기도 합니다. 트래픽이 많은 경우, 서버 또는 데이터베이스에 부하를 줄 수 있으며, 이를 해결하기 위해 서버를 확장하거나 세션을 분산할 수 있는 시스템을 구축해야합니다. 예를 들어, 인증을 처리하는 서버가 분산되어있..
정규화(Normalization)란? 관계형 데이터베이스의 설계에서 중복을 최소화하게 데이터를 구조화하는 프로세스를 정규화(Normalization)라고 한다. 데이터베이스 정규화의 목표는 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것에 있다. 일반적으로 정규화란 크고, 제대로 조직되지 않은 테이블들과 관계들을 작고 잘 조직된 테이블과 관계들로 나누는 것을 포함한다. -- 데이터베이스 정규화, 위키피디아 테이블을 분해하는 단계에 따라서 정규화의 단계가 나뉜다. 실무에서는 대체로 1정규화~2정규화까지의 과정을 거친다. 1정규형(1NF) 2정규형(2NF) 3정규형(3NF) BCNF(Boyce-Codd Normal Form) 4정규형(4NF) 5정규화(5NF) 정규화를 공부하기 전에, 먼저..