Error 와 Exception 의 차이와 혼동
Exception Exception 은 로직 상에서 예측 가능하고 의도적으로 처리할 때 사용한다. 예를 들어 NestJS 에 빌트인되어있는 NotFoundException, BadRequestException 은 각 상황에 따라 예외 처리를 할 때 사용한다. 예를 들면, 로그인 시 비밀번호가 틀렸을 때나 게시글 ID 가 중복되었을 때 말이다. 이때는 개발자가 이런 오류 상황이 예측 가능하므로 코드 상에 Exception 을 이용해서 예외 처리를 한다. Error반면 Error 는 개발자가 예측 불가능한 상황에 사용한다. 예측 불가능한 상황은 코드 내에서 구현할 수가 없고 미리 조치를 할 수 없기 때문에 보통 try-catch 문의 catch 내에서 사용된다. 혹은, 외부 API 를 호출하는 로직에서도..
2025.09.19
no image
Mongoose aggregate (Find 와 차이)
이번에 사이드 프로젝트를 하며 검색 기능을 구현하게 되었는데 이때 Mongoose 의 aggregate 메소드를 사용했다. 검색 기능 구현을 위해 Atlas Search 를 이용했는데, 이를 이용하려면 데이터 조회 시 find 대신 aggregate를 사용해야 했다. ($search) 구현을 위해 알아본 aggregate 에 대한 정보를 find 와 비교하여 정리했다. 1. aggregate 란aggregate 는 모으다, 집합, 집계 등의 의미를 가지고 있는 단어이다. Mongoose 에서는 find 와 같이 데이터를 조회할 때 사용하는 메소드이지만 find 보다 더 복잡한 처리를 지원하는 파이프라인 메소드라고 이해하면 된다. 복잡한 계산, 변형, 조인, 통계 분석에 최적화되어있다. 2. agg..
2025.07.12
no image
Mongoose Geo-Query / Geo-JSON 사용법
이번에 사이드 프로젝트에서 지도 기능을 만들면서 지도에서 위치 탐색을 해야하는 일이 있었다. 현재 DB로 MongoDB, ODM으로 Mongoose 로 사용하고 있는데 Mognoose가 2차원 구체에서의 Geo-Query를 지원하기 때문에 사용하여 구현하기로 했다. 1. location 필드2차원 위치 탐색은 경도, 위도 정보를 가진 location 필드가 필요하다. @Prop({ type: { type: String, enum: ['Point'], default: 'Point', }, coordinates: { type: [Number], required: true, }, }) location: { type: 'Point'; coordinates: [..
2025.06.19
no image
외래키를 사용해야 할까
한 NestJS 강의를 보며 놀랐던 부분이 있다. 강의에서 커머스 서비스에 대한 스키마를 설계 중이였는데 다른 테이블의 ID를 외래키로 설정하지 않는 것이였다. 설정하지 않은 이유는 성능 오버헤드였다. 당황스러운 마음에 처음엔 이해가 되지 않았지만 잠시 생각해보니 그 이유를 알 수 있었다. 외래키는 무결성을 보장할 수 있는 다른 테이블의 기본키이다. 종종 개발을 하다보면 이 외래키(무결성 제약)로 인해 개발자 입장에서 불편한 일을 겪곤 한다. 외래키 설정 시 Hard Delete 를 고려해 casacade, restrict 를 고민하기도하고 때때론 특정 데이터를 수정해야 할 때 고민을 하게 만든다. 나는 지금까지 이런 일은 소위 개발자가 겪어야 할 당연한 일이라고 생각했다. 여기까진 당연한 일이 맞다..
2025.04.10
no image
Sharp를 이용한 이미지 포맷 최적화 (to webp)
작업 배경이번에 사이드 프로젝트에 리뷰 기능을 개발하게 되었습니다. 리뷰 기능이 추가됨에 따라 S3 요금 걱정도 하게 되었습니다. S3에서 이미지를 불러오고 업로드할 때 용량 걱정이 되더라구요. 물론 사용자가 적어서 비용이 발생하더라도 크진 않겠지만.. 고민을 하던 도중, 프론트엔드 팀원 중 한분께서 webp 포맷을 적용해보는 건 어떠냐고 말씀주셨습니다. 최근 웹에서 이미지를 다운로드 받을 때 webp 로 다운로드되는 경우가 있어서 짜증나는 마음에 webp 를 알고있었는데, 이미지 용량 최적화에 뛰어난 포맷이라고 알려주시더라구요. 또, 최근 많은 기업이 최적화를 목적으로 이미지 파일을 webp 로 저장한다는 사실도 알게 되었습니다. (ex. 구글, 무신사 등) 이런 배경에서 비용 절감 + 최적화를..
2025.03.21
no image
NestJS 11 업데이트 정리
2025년 1월 22일 NestJS 11 버전 업데이트가 공지되었습니다. 로거 기능 추가, 마이크로서비스 트랜스포터 개선, 어플리케이션 속도 향상, Express / Fastify v5 지원 등이 이번 업데이트의 메인 포인트입니다. 1. 로거 업그레이드NestJS 의 기본 로거인 ConsoleLogger 가 이제 중첩 객체, 배열에 대한 더 나은 포맷팅을 제공하고 Map / Set 자료구조를 지원합니다. 또한 이번 로거 업데이트에 JSON 로깅 기능이 추가되었습니다. 이제 JSON 형식으로 로그를 출력할 수 있습니다. 아래 구성을 통해 JSON 형식 로깅을 설정할 수 있습니다. const app = await NestFactory.create(AppModule, { logger: new Consol..
2025.01.31