본문 바로가기
반응형

전체글448

Jest CLI 대신에 WebStorm Run (Debug)로 수행하자 NodeJS 통합 테스트를 CLI (jest)로 수행 하는 모습을 자주 보는데요. 개인적으로는 단순 CLI로 수행하기 보다는 디버깅을 비롯해서 IDE가 지원하는 강력한 테스팅 환경을 사용하기 위해서 IDE로 수행하는 것을 추천합니다. 이번시간에는 CLI 보다 IDE로 통합 테스트를 수행하는 방법의 장점을 알아보겠습니다. 1. 장점 먼저 깔끔하게 정리된 테스트 레포트를 볼 수 있는데요. 아래와 같이 지정해놓은 테스트 로그를 숨기고 결과만을 정리 해서 보여줍니다. 기존 CLI에서는 테스트를 수행하는 동안 발생한 콘솔 로그 때문에 (특히 debug 용도로 찍어놓은 ㅠ) 정작 중요하게 봐야할 부분을 놓치기도 하는데요. 해당 테스트에서만 발생한 로그를 골라서 볼 수 있습니다. 추가적으로, 디버거를 사용할 수 있어.. 2021. 10. 19.
NestJS (with Mono Repo) WebStorm으로 디버깅 하기 NestJS 공식 문서에서는 아래와 같이 CLI로 서비스 실행을 소개하곤 하는데요. nest start --watch 물론 대부분의 백엔드 API 개발에 있어서는 nest start 를 쓸 일이 거의 없습니다. 대부분 테스트 코드로 단위 테스트 / E2E 테스트를 작성하면서 진행하다보니 서버 실행할 이유가 없기 때문입니다. 어떤 개발 환경에서도 터미널만 있으면 실행할 수 있으니 좋습니다만, 이럴 경우 WebStorm/IntelliJ 등 디버깅 기능이 강력한 IDE의 도움을 못받습니다. 개발에 있어서 디버거의 사용유무는 중요합니다. 실시간 데이터 변경 흐름 파악 특정 지점에서의 별도 로직 수행 Logger를 추가할 수 없는 외부 라이브러리에 대한 코드 추적 등등 디버거를 통해 좀 더 깊게 문제를 확인할 수.. 2021. 10. 16.
일의 마침표 어떤 글을 보면 쉼표로 문장들이 끝없이 계속 이어지는 글이 있고, 마침표로 문장들을 마무리하면서 이어지는 글이 있다. 똑같은 내용을 담고 있는 글이라도 후자가 더 잘 읽히고 읽을 맛이 난다. 마찬가지로 어떤 일을 하는데 있어서도 마침표로 일을 하는 사람들이 좋다. 사람의 컨텍스트는 한계가 있어서 하나의 일을 마무리 못한채 다른일을 또 이어서 하는 사람과는 일을 하기가 어려웠다. 먼저 하는 일을 어떻게 마무리 짓고, 다음 일을 새롭게 시작갈 것인가? 를 고민하는 사람이 좋다. 하나의 업무를 0 or 100으로만 생각해서 설계하는 것 보다는 70, 80에서 마무리지을 수 있도록 설계하고 나가는 사람이 좋다. 추가적인 일이 들어오면 "지금 하는 일 A는 XX로 우회하면 일단 마무리 가능할 것 같다. 그렇게 마.. 2021. 10. 11.
TypeORM에서 연관관계 유지한채 FK만 제거하기 (w. NestJS) 데이터베이스의 FK (Foreign Key) 는 데이터 일관성을 적용하여 데이터베이스를 깨끗하게 유지한다는 큰 장점을 가지고 있습니다. 다만, 서비스의 규모가 커져 테이블당 row가 1억건이 돌파하는 시점부터는 FK는 많은 변경의 병목이 되는데요. 이유는 1억건 이상일 경우 alter table 로는 3~5시간씩 수행 되기 때문입니다. 이 시간동안 테이블 Lock이 발생할 수 있으며, 이를 회피하기 위해 아래와 같은 여러 장치들이 지원됩니다. Online DDL Percona pt-online-schema-change 다만, FK가 있을 경우 테이블 복사, OnlineDDL를 비롯해서 클러스터링 / 샤딩 / 파티셔닝 등 여러 대량의 데이터 상황에서 제약들이 발생하여서 일정 규모 이상의 서비스에서는 DBA.. 2021. 10. 10.
docker-compose clean restart 하기 docker를 사용하다보면 한번씩 전체 컨테이너를 싹 다 지우고, 깔끔하게 다시 시작하고 싶을때가 있습니다. FATAL: database files are incompatible with server DETAIL: The data directory was initialized by PostgreSQL version xx, which is not compatible with this version yy 언제든 삭제해도 되는 데이터가 아니라, 실제로 계속 저장이 되어야 한다면 Volume에 있는 모든 데이터들을 백업해놓고 진행하셔야 합니다. 지금 같은 경우는 테스트 코드로만 수행될 컨테이너들이라서 바로 삭제할 수 있었습니다. 먼저 기존의 도커 컨테이너를 모두 삭제합니다. (물론 실행중인 컨테이너가 있다면 d.. 2021. 10. 4.
계층형 아키텍처 학교 다닐때 잠깐 JAVA 관련 수업을 들은적이 있다. 그때 수업 내용은 넷빈즈(Netbeans) IDE를 통해 JAVA로 윈도우 애플리케이션을 만드는 것이였다. 간단한 시간표 관리 프로그램을 만드는 과제는 얼핏보면 웹과 크게 다르지 않았다. (이미지 출처: blog.asata.pe.kr) 개발 자체는 꽤나 간단해서 JAVA (Swing)로 애플리케이션 UI와 로직을 작성하고, 로컬 PC에 설치된 Database에 접근해서 시간표를 저장하고 불러오는 방식이였다. 당시에는 계층 (Layer) 혹은 모듈화라는 개념이 없어서 UI를 담당하는 클래스에서 검증, 계산, DB 접근등을 모두 처리했었다. 기능 자체는 잘 작동했고, 실제로 과목 점수도 잘 받았다. (컴공과 수업이 아니였어서…) 하지만 이게 실제 회사의.. 2021. 10. 2.

728x90