본문 바로가기

🧑🏻‍💻 Dev

(60)
[NestJS] nest start --watch와 node dist/main의 차이 "scripts": { ... "start:dev": "cross-env NODE_ENV=dev nest start --watch", "start:prod": "cross-env NODE_ENV=prod node dist/main", ... }, 환경을 dev와 prod로 나누기 위해서 실행 명령어를 확인하던 도중 둘 다 실행을 하는 것이지만, start:dev는 nest start --watch라는 명령어로 실행을 하고, start:prod는 node dist/main으로 실행을 했습니다. 둘 다 실행해 보면 동일하게 프로젝트를 실행하는 것 같은데 뭐가 다를까라는 의문이 들었습니다. 1. nest start --watch Nest 공식 문서에 들어가 보면 nest start 명령어에 대한 설명이 존재합..
[NestJS] AWS S3, Multer로 이미지 업로드 구현하기 1. S3 버킷 생성 S3 서비스를 이용하려면 AWS 사이트에 들어가서 S3 버킷을 생성해야 합니다. AWS 사이트에 로그인한 후 위에 검색창에 S3라고 검색하면, S3를 시작할 수 있습니다. 노란색 버튼 "버킷 만들기"를 클릭해서 버킷 생성을 시작합니다. 버킷 이름을 먼저 작성해 줍니다. 버킷 이름에는 지켜야 하는 규칙이 있습니다. "버킷 이름 지정 규칙 보기"라는 파란색 링크를 클릭하면 확인해보실 수 있습니다. 규칙을 지켜서 내 버킷이름을 입력해 줍니다. 객체 소유권은 권장되는 방향인 "ACL 비활성화됨"을 선택했습니다. 저는 역할별로 IAM 사용자를 만들어서 사용할 예정입니다. 일단 저는 퍼블릭 액세스 차단 설정을 기본적으로 선택되어 있는 대로 하고 넘어갔습니다. 나중에 버킷에 가서 권한에 대한 설..
[NestJS] FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 1. 문제 상황 자동화 배포 과정에서 Nest 애플리케이션을 빌드하는데, 빌드 실패가 나면서 이런 오류 메시지가 출력됐습니다. FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 말 그대로 할당된 Javascript 힙 메모리를 넘어섰다는 것입니다. 2. 문제 해결 방법 node -e 'console.log(v8.getHeapStatistics().heap_size_limit/(1024*1024))' 위 명령어를 터미널에 쳐보면 현재 설정되어 있는 힙 메모리를 확인할 수 있습니다. 확인해 보니 저는 495라고 떴습니다. 로컬에서는 동작이 됐으니 로컬에서 확인한 값과 동일..
[NestJS] winston 라이브러리를 이용하여 파일에 로그 남기기 Nest로 진행하고 있던 프로젝트가 있었습니다. InternalServerError(500)가 터지면 디버깅을 하거나, 오류에 대응할 때 효율을 높일 수 있도록 로그를 파일에 남기려고 적용하고자 했습니다. Java에서는 LogBack으로 로그를 관리하는 것 같은데, Nest에서는 Winston이라는 라이브러리를 사용한다. Winston Github에 가서 Winston이 제공하는 기능, 사용법을 확인해 볼 수 있습니다. GitHub - winstonjs/winston: A logger for just about everything. A logger for just about everything. Contribute to winstonjs/winston development by creating an ac..
JackSon DTO 역직렬화 파헤치기 (JackSon과 Getter) 🖥️ 사용한 기술 버전 확인 SpringBoot: 2.7.15 JackSon: 2.13.5 Lombok: 1.18.28 🤨 분석을 해보기로 한 이유 Controller에서 Json에서 DTO로 역직렬화를 할 때, @NoArgsConstructor + @Setter가 있으면 역직렬화가 되는지 알고 있었습니다. JackSon의 내부 코드를 모두 까보지 않으면 모르지만, 개발하며 마주한 몇 가지 생각지 못한 케이스가 있어서 다뤄보려고 합니다. 추가적인 말이 없을 때까지는 아래의 HTTP 요청과 Controller를 사용했을 때의 결과입니다. POST http://localhost:8080/test Content-Type: application/json { "testString": "테스트", "testInte..
[Spring | LetsEncrypt] Http 서버를 Https로 바꿔보자 1. 문제 프론트엔드 팀과 협업을 위해서 API 서버를 개발하고, AWS LightSail을 사용해서 서버를 배포했습니다. 클라이언트 서버가 띄워지기 전까지는 로컬에서 작업을 해서 몰랐지만, 띄우고 나서 확인해 보니 통신에 문제를 겪었습니다. 클라이언트 서버는 https로 배포가 되어있고, 개발 서버는 http로 배포가 되어 있어 두 서버 사이의 통신에 문제가 발생했습니다. 2. 해결 (1) SSL 인증서가 필요하다! 첫 번째로 HTTPS로 배포를 하기 위해서는 CA의 인증을 받은 SSL 인증서가 필요합니다. 이 인증서는 보통 비용을 지불하고, 받아서 사용합니다. 하지만 저희는 돈이 없기 때문에! 무료로 SSL 인증서를 발급 받을 수 있는 Let's Encrypt를 사용했습니다. 무료라는 특징도 있지만..
[Spring | AWS EC2] AWS EC2에 @Schedule 기능 적용 시 시간 이슈 1. 문제 매일 00시 00분마다 작동되는 스케쥴러를 구현하기 위해서 다음과 같이 코드를 작성했습니다. @Scheduled(cron = "0 0 0 * * *", zone = "Asia/Seoul") @Transactional public void surveyScheduling() { log.info("[{}] 스케쥴러 작동 설문조사 데이터 정리", LocalDateTime.now()); LocalDate now = LocalDate.now(); List surveys = surveyRepository.findAllByStatusIsNot(SurveyStatus.REVERT); for (Survey survey : surveys) { if (isEnd(survey.getEndDate().toLocalDa..
Github에 잘못 올라간 .idea 폴더 지우기 처음에 .gitignore 설정을 잘못해 줘서 쓸모없는 .idea 폴더가 올라갔다. 😅 (1) 터미널에 명령어 작성 git rm --cached -r .idea 원격 저장소(깃허브)에 저장되어 있는 .idea를 삭제할 수 있는 명령어입니다. 로컬 저장소에 있는 .idea은 삭제되지 않습니다. (2) 삭제 상태 확인해보기 원격 저장소에서 삭제를 원하는 .idea을 삭제했습니다. 이제 이 변경 사항을 Commit으로 작성해서 Push 해주면 됩니다. (3) Commit 작성 후 Push git commit 명령어를 통해서 커밋 메시지를 작성한 후 origin 저장소에 push 했습니다. (4) 원격 저장소 확인 .idea 폴더가 정상적으로 삭제된 것을 확인해 볼 수 있습니다.