no image
Github actions Organization runner 설정하기
Repository runner의 한계진행 중인 프로젝트에서 하나의 머신으로 여러 개의 서버를 실행시키고 있습니다. 여러 개의 repo 에서 하나의 머신을 바라보도록 actions runner를 설정해놓았는데.. 문제가 생기기 시작했습니다. 첫번째, 지저분합니다. 각 레포의 갯수만큼 runner 설정이 늘어나다보니 관리해야 할 runner 수가 많아져 지저분하고 번거로운 상황이 종종 생겼습니다. 둘째, 리소스 낭비가 있습니다. 보통 runner 를 실행할 때만 켜두지않고 백그라운드로 돌아가게 설정해놓고 있습니다. 이 때 백그라운드에서 돌아가는 runner 의 수가 많아지니 종종 CPU 점유율이 100%를 치고 서버가 죽어버리는 경우가 종종 생겼습니다. Organization runner 설정 방법1. ..
2025.06.05
no image
413 Request Entity Too Large 에러 해결
리뷰 작성 페이지에서 이미지 첨부 후 API 를 쐈더니 413 Request Entity Too Large 에러가 발생했다. 원인nginx 리버스 프록시는 요청의 최대 크기를 기본적으로 1MB 로 제한하고 있기 때문이였다. 내가 작성한 리뷰는 1MB 이상이라 해당 에러가 발생했던 것이였다. 해결 방법nginx.conf 에서 요청 최대 크기 설정을 변경해주면 된다. linux 기준 nginx.conf 는 /etc/nginx 디렉토리에 있다. 1. nginx.conf 설정먼저 nginx.conf 에서 설정을 변경해주어야한다. 여기서 선택할 수 있는 옵션은 3가지가 있다. http 블록모든 http 요청에 대해 size 설정을 하겠다, 하면 http 블록 내에 설정하면 된다.http { ... ..
2025.05.23
no image
서버 하나로 프론트/백 서비스하기 (w. NginX 리버스 프록시)
라멘로드를 개발하며 느낀 점 중 하나는 AWS는 비싸다입니다. 고작 1GB 메모리에, 1vCPU 짜리 EC2와 Https 를 위한 ELB 만 해도 매달 45달러.. 한화로 64,089원이 나갑니다. 물론 ELB는 트래픽에 비례하기 때문에 사용자가 많아지면 많아질 수록 이용료는 더욱 늘어나겠죠.. 라멘로드 팀은 금전적 문제로 인해 하나의 서버에서 프론트/백을 모두 서비스하기로 결정했습니다. 하나의 서버에서 프론트와 백을 모두 서비스하려면 리버시 프록시를 이용하면 됩니다. 리버스 프록시란리버스 프록시에 대해 내가 설명하는 것보다 설명을 더 잘해주시는 분이 계시니 굳이 제가 할 필요는 없는 것 같습니다. 리버스 프록시 설정프론트와 백은 현재 Docker 로 서비스하고 있는데 프론트는 포트번호 5010..
2025.04.20
no image
외래키를 사용해야 할까
한 NestJS 강의를 보며 놀랐던 부분이 있다. 강의에서 커머스 서비스에 대한 스키마를 설계 중이였는데 다른 테이블의 ID를 외래키로 설정하지 않는 것이였다. 설정하지 않은 이유는 성능 오버헤드였다. 당황스러운 마음에 처음엔 이해가 되지 않았지만 잠시 생각해보니 그 이유를 알 수 있었다. 외래키는 무결성을 보장할 수 있는 다른 테이블의 기본키이다. 종종 개발을 하다보면 이 외래키(무결성 제약)로 인해 개발자 입장에서 불편한 일을 겪곤 한다. 외래키 설정 시 Hard Delete 를 고려해 casacade, restrict 를 고민하기도하고 때때론 특정 데이터를 수정해야 할 때 고민을 하게 만든다. 나는 지금까지 이런 일은 소위 개발자가 겪어야 할 당연한 일이라고 생각했다. 여기까진 당연한 일이 맞다..
2025.04.10
'커머스 서비스로 배우는 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