no image
외래키를 사용해야 할까
한 NestJS 강의를 보며 놀랐던 부분이 있다.  강의에서 커머스 서비스에 대한 스키마를 설계 중이였는데 다른 테이블의 ID를 외래키로 설정하지 않는 것이였다. 설정하지 않은 이유는 성능 오버헤드였다. 당황스러운 마음에 처음엔 이해가 되지 않았지만 잠시 생각해보니 그 이유를 알 수 있었다.  외래키는 무결성을 보장할 수 있는 다른 테이블의 기본키이다. 종종 개발을 하다보면 이 외래키(무결성 제약)로 인해 개발자 입장에서 불편한 일을 겪곤 한다. 외래키 설정 시 Hard Delete 를 고려해 casacade, restrict 를 고민하기도하고 때때론 특정 데이터를 수정해야 할 때 고민을 하게 만든다. 나는 지금까지 이런 일은 소위 개발자가 겪어야 할 당연한 일이라고 생각했다. 여기까진 당연한 일이 맞다..
2025.04.10
no image
'커머스 서비스로 배우는 NestJS 실전 개발' 완강 후기
'커머스 서비스로 배우는 NestJS 실전 개발' 강의 완강했습니다.  강의 듣게 된 계기이 강의는 NestJS 단톡방에서 처음 알게 되었습니다. 김빌이라는 개발자분께서 강의를 오픈하셨다고 얼리버드 할인 중이라 하시길래 한번 구성을 살펴나보자 했는데 구성이 꽤 괜찮더라구요.  제가 가장 끌린 부분은 두 가지였습니다. 첫번째는 대형 서비스 기업 개발자의 코드를 볼 수 있다는 점이였고, 두번째는 Kafka로 리팩토링하는 강의였습니다.  회사에서 항상 개발을 하며 들었던 생각이 있는데요, '이 코드/구조가 대형 서비스에서도 유효할까?' 였습니다. 항상 대형 서비스의 NestJS 코드를 보고, 배우고 싶은 생각이 있었으나 NestJS 에선 관련 강의도 블로그 글도 찾아보기가 어렵더라구요. 또 주변에 대형 서비스..
2025.04.07
no image
[NestJS] Sharp를 이용한 이미지 포맷 최적화 (to webp)
작업 배경이번에 라멘로드 에 리뷰 기능을 개발하게 되었습니다.   리뷰 기능이 추가됨에 따라 S3 요금 걱정도 하게 되었습니다. S3에서 이미지를 불러오고 업로드할 때 용량 걱정이 되더라구요. 물론 사용자가 적어서 비용이 발생하더라도 크진 않겠지만.. 고민을 하던 도중, 라멘로드 프론트엔드 팀원 중 한분께서 webp 포맷을 적용해보는 건 어떠냐고 말씀주셨습니다. 최근 웹에서 이미지를 다운로드 받을 때 webp 로 다운로드되는 경우가 있어서 짜증나는 마음에 webp 를 알고있었는데, 이미지 용량 최적화에 뛰어난 포맷이라고 알려주시더라구요.  또, 최근 많은 기업이 최적화를 목적으로 이미지 파일을 webp 로 저장한다는 사실도 알게 되었습니다. (ex. 구글, 무신사 등)  이런 배경에서 비용 절감 + 최적..
2025.03.21
mongodb 모델링에 대해
https://dev.gmarket.com/32  MySQL만 써봤는데... MongoDB 프로젝트에 투입됐다🤯빅데이터라는 시대의 요구에 맞추어 NoSQL이 등장한 지 십 년이 넘는 세월이 흘렀습니다. 하지만, 아직 RDB에 비해서 스키마 설계를 위한 참고 자료가 부족하다고 생각되는데요. 저 또한 MySQL만 사dev.gmarket.com mongodb 로 서비스를 운영하며 모델링에 대한 고민이 커져간다 내 뇌가 관계형 데이터베이스에 적응된 것인지 비정규화라는 작업이 어색하다. 또 어떻게 모델링을 해야할 지 감이 잘 안잡히기도 한다.  위 글을 참고해 mongodb에 알맞은 모델링을 하기 위해 노력한다..
2025.02.21
no image
웹 사이트 버그 찾아서 제보한 후기
몇 년 전부터 잘 사용해오던 웹 사이트가 있습니다. 어느 날 게시글을 올리려고 글을 써서 '게시글 등록' 버튼을 눌렀는데 아무런 반응이 없는 .. 문제를 마주쳤습니다. 예전이라면 '왜 이러지? 오류났나?' 하고 말았을텐데, 요즘은 이런 버그를 보면 뜯어보고 싶은 마음이 들더라구요. 그래서 뭐가 문제인지 한번 찾아보기로 했습니다.  먼저 '게시글 등록' 버튼을 눌렀을 때 서버와 제대로 통신이 되는지를 확인하기로 했습니다. 역시나 게시글 등록 버튼 클릭 시 서버로 post 요청이 날아가는데 이 요청이 실패되어 있었습니다.  에러 메시지를 통해 서버로 요청보낼 때 Body에 담기는 expectPeriod 필드 값에 문제가 있는 것 같았습니다. 게시글을 등록할 때 진행 기간을 선택하여 설정하는 부분(1개월,2개..
2025.01.31
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
왜 테스트를 해야 하는가?
https://kscodebase.tistory.com/685 왜 테스트를 해야 하는가?- 모든 것을 테스트한다는 오해 카카수 : 테스트 코드를 도입하려고 해요. 개발자1 : 좋아요. 하죠. 근데, 그걸 한다고 모든 문제가 사라질 건 아니에요. - 작업 방식에 대한 오해 카카수 : 테스트kscodebase.tistory.com 좋은 글 잘 읽었습니다
2025.01.24
no image
로드 테스팅 툴 '신기전' 개발 후기
지난 2024년 10월 말, 회사를 다니는 내내 생각만 했던 CLI 기반 API 로드 테스팅 툴 '신기전' 프로젝트 개발을 마쳤습니다. 신기전 홈페이지신기전 깃허브1. 신기전을 만들게 된 이유당시 한 프로젝트를 진행하며 DB에서 많은 양의 데이터를 조회하고 가공하여 리턴하는 REST API 를 만들었었는데 이때 API의 속도가 조금 느려 클라이언트 화면에서 조금 버벅거렸던 일이 있었습니다. 이때 API 성능 테스트에 필요성을 느꼈고 찾아보기 시작했습니다. 성능 테스트를 해야겠다는 생각을 한 후엔 node 진영에서 가장 메이저한 Artillery 와 Postman 을 사용해봤습니다. 둘 다 만족스럽게 사용했습니다.  두 툴을 만족스럽게 쓰긴했지만 한편으로는 조금 더 빠르고 간편하게 테스트를 하고 싶다는 생..
2025.01.16
pypy가 python3 보다 느린 경우
백준 풀다가 pypy로 시간초과가 나길래 python으로 컴파일했더니 통과되는 현상이 발생했습니다.제 머릿속엔 대부분 pypy -> 시간↓ 메모리사용량↑ python3 -> 시간↑ 메모리사용량↓↑ 인데 왜일까 했는데 이 현상에 대해 질문을 하신 분이 계셨고 어느분께서 친절하게도 해당 현상에 대한 링크를 걸어주셨습니다.https://codeforces.com/blog/entry/82989https://codeforces.com/blog/entry/133247결론은, 보통 문자열에 대한 I/O 혹은 문자열 이어 붙이기 등문자열 관련 작업을 할 때 pypy가 python3 보다 느린 경우가 발생한다고 하네요. (정확한 패턴은 아직 확인되지 않은 듯 합니다)python은 C++과 다르게 기본적으로 문자열이 불변..
2024.11.13