전체 글

전체 글

    NestJS 기초 (8) 미들웨어

    미들웨어란 라우트 핸들러 이전에 호출되는 함수입니다. 미들웨어 함수는 애플리케이션의 요청-응답 사이클 내에서 request 및 response 객체와 next() 미들웨어 함수에 접근할 수 있습니다. next 미들웨어 함수는 보통 next라는 변수명으로 사용됩니다. Nest 미들웨어는 기본적으로 express 미들웨어와 동일합니다. 다음은 express 문서에서 설명하고 있는 미들웨어의 역할입니다. 미들웨어 함수는 다음과 같은 일을 할 수 있습니다. 코드 실행 request, reponse 객체 요청 변경 요청-응답 사이클 종료 스택 내 다음 미들웨어 함수 호출 현재 미들웨어 함수가 요청-응답 사이클을 종료하지 않으면 next()를 반드시 호출하여 다음 미들웨어 함수로 권한을 넘겨야 합니다. 함수 또는 ..


    NestJS 기초 (7) 환경 변수 관리하기

    애플리케이션은 보통 서로 다른 환경에서 작동하며, 환경에 따라 다른 설정을 사용합니다. 예를 들어, 개발자의 로컬 환경과 개발된 기능을 사용자에게 배포하기 전에 테스트하는 스테이지 환경, 마지막으로 실제 운용하는 프로덕션 환경이 있을 것입니다. 각 환경에 따라 데이터베이스를 포함한 다른 설정이 사용될 수 있습니다. 이를 관리하는 좋은 방법은 설정 변수를 환경에 저장하는 것입니다. Node.js 애플리케이션에서는 보통 .env 파일을 사용합니다. 이는 키-값 페어로 구성되며 각 키는 해당 환경의 특정 값을 나타냅니다. 서로 다른 환경에서 앱을 실행하려면 해당하는 .env 파일로 변경하면 됩니다. 예를 들면, .dev.env, .stage.env, .production.env가 될 수 있을 것입니다. Nes..


    초라했던 하루 ⏐ 57 ⏐ 일상 에세이

    오늘의 나는 너무도 초라했다. 프로젝트 팀원들과 함께 모인 자리에서 횡설수설하는 했던 이유는 결국 실력과 경험이 부족했기 때문이었다. 리더는 아니라고, PM은 아니라고 공표했음에도 결국 내가 하(려)고 하는 행동은 리더이고 PM인 거 같아서 스스로가 참 편안한 선택만을 하려는 거 같다는 자괴감이 들었다. 맡아서 하던가, 비키던가. 그러나 무언가를 이끌어본 적도 사실 너무 오래되었고 무엇보다도 현 시점에서는 역량이 부족했다. 그것들을 커버해 줄 겸손함이나 따뜻한 마음씨도 이젠 내게 희미해진 가치들이었다. 그렇다고 비키기에는 그럼 누가 할까?하는 초조함과 회의적인 마음이 있었다. 이끌거면 확실히 이끌어야 한다. 아니라면, 확실히 빠져서 다른 이들에게 공간을 마련해주어야 한다. 너무 좋은 사람들과 함께 하고 ..


    NestJS 기초 (6) 모듈

    모듈의 개념 모듈은 여러 컴포넌트를 조합하여 작업을 수행하는 단위를 의미합니다. 말이 조금 어려울 수 있는데요. 예를 들어, 배달 앱을 만든다고 해보겠습니다. 이 경우 사용자, 사장님, 배달원 등의 작업을 별도로 처리하는 구조와 설계가 필요할 것입니다. 이때 모듈은 UsersModule, OwnersModule, RidersModule과 같이 구성될 수 있고, 각 모듈에는 해당하는 컨트롤러와 서비스 등이 포함됩니다. 이러한 모듈을 모두 모으면 배달 서비스를 제공하는 DeliveryModule이 될 수 있습니다. 모듈을 사용하는 이유는 컴포넌트를 효과적으로 구조화할 수 있습니다. 서비스를 작은 단위로 나누고 유사한 기능끼리 모음으로써 응집도를 높이는 것이 모듈을 사용하는 이유입니다. Nest에서 각 애플리..


    NestJS 기초 (5) 프로바이더

    프로바이더(Provider)는 Nest의 핵심 개념 중 하나입니다. 컨트롤러가 요청과 응답을 처리하는 역할을 한다면, 프로바이더는 로직을 따라 업무를 수행하는 역할을 합니다. 프로바이더는 모듈 내에 providers로 선언된 자바스크립트 클래스입니다. 서비스, 리포지토리, 팩토리, 헬퍼 등과 같은 Nest 클래스 대부분이 프로바이더로 간주됩니다. 프로바이더의 핵심 개념은 디펜던시로 삽입(injected)될 수 있다는 것입니다. 이는 객체가 다른 객체와 다양한 관계를 맺을 수 있으며, 객체 인스턴스의 연결 함수가 Nest 런타임 시스템에 할당될 수 있다는 의미입니다. 이전 글에서 CatsController를 생성했습니다. 이를 통해 컨트롤러가 HTTP 요청을 처리하고 보다 복잡한 일을 프로바이더에게 할당하..


    NestJS 기초 (4) 데이터베이스 연동

    Nest에는 SQL과 NoSQL 데이터베이스를 자유롭게 연결할 수 있습니다. 일반적으로 Nest에 데이터베이스를 연결하는 과정은 Express나 Fastify에 데이터베이스를 연결하기 위해 적절한 Node.js 설정을 하는 것과 동일합니다. Nest는 TypeORM(@nestjs/typeorm)과 Sequelize(@nestjs/sequelize), Mongoose(@nestjs/mongoose)를 제공합니다. 이를 통해 모델/리포지토리 인젝션, 테스트, 비동기 설정을 보다 간편하게 진행할 수 있습니다. TypeORM 사용하기 SQL 또는 NoSQL 데이터베이스 조합을 위해 Nest는 @nestjs/typeorm 패키지를 제공합니다. TypeORM은 타입스크립트를 위한 가장 완성도 높은 ORM으로 간주되..


    [집무실 레터 ⑧] 나만의 작업실 공간

    발리에서 돌아오며 세웠던 계획은 평범한 원룸을 하나 얻고 공유 오피스에 다니는 것이었는데요. 그러다가 제대로된 공간을 구해 임대업을 해볼까 싶었습니다. 상가를 알아보다가 결국 이곳을 얻었어요. 결론적으로는 이곳에서 숙식도 해결하는 터라 다른 이와 공유하기는 당분간 쉽지 않게 되었지만, 어쨌거나 개인적으로는 아주 만족스러운 공간입니다. 스탠딩 모션 데스크도 샀구요. 최근에 개발을 위해 맥북도 새롭게 세팅 했고, 키보드랑 마우스, 헤드폰도 구비했습니다. 정말 오랜만에 장비 업그레이드를 했는데, 좋은 작업 환경이 가져다 줄 결과에 대한 일종의 투자기도 합니다. 전에 글쓰는 게 꿈이었을 때는 방 안에 테이블 하나와 종이, 연필만 있으면 된다고 생각했는데(그래서 제 블로그 이름이 원룸테이블입니다), 개발을 하려니..


    NestJS 기초 (3) 컨트롤러

    Nest의 컨트롤러는 클라이언트의 요청을 처리하고 응답하는 역할을 합니다. 라우팅 메커니즘은 특정 요청을 처리할 컨트롤러를 지정합니다. 보통 각 컨트롤러는 하나 이상의 라우트를 갖고 있으며, 서로 다른 라우트는 각기 다른 역할을 수행할 수 있습니다. 기본 컨트롤러를 생성하려면 클래스와 데코레이터를 사용합니다. 데코레이터는 클래스를 메타데이터와 묶어주며 Nest를 통해 라우팅 맵(요청을 해당하는 컨트롤러와 묶는 역할)을 만드는 데 사용됩니다. 컨트롤러는 직접 소스 코드를 작성해도 되지만 다음 CLI를 통해 간편하게 생성할 수도 있습니다. $ nest g controller [name] 이 외에도 다음과 같은 명령어를 통해 Nest 모듈, 서비스, 파이프 등을 설치할 수 있습니다. 라우팅 이어지는 예시에서 ..