728x90
728x90
소나큐브(Sonarqube) 도입하기
공부방2024. 11. 12. 18:45소나큐브(Sonarqube) 도입하기

배경최근 몇 차례의 코드 리뷰 경험들로 공유하는 문화가 얼마나 큰 이펙트가 있는지 경험할 수 있었다. 하지만 현재 조직에서는 홀로 서버 개발을 진행하다보니 내가 작성하고 있는 코드가 과연 좋은 방향으로 나아가고 있는 것인지 혹은 구조적이나 가독성 등 좋은 코드를, 올바른 설계를 하고 있는 것일까? 라는 의구심이 생겼다. 또한, 여러 번 기술 면접을 다녀왔는데 많은 조직에서 내부적으로 소나 큐브를 정적 코드 분석 도구로 활용하고 있었다.소나큐브를 통해 받을 수 있는 코드 리뷰를 통해 코드 품질 향상과 더불어, 코드 일관성 등의 컨벤션도 정립하고자 도입하게 되었다.   설치 Installing from Docker | SonarQube DocsExplains how to install the SonarQub..

의존성 제어 2 - HTTP 클라이언트 의존성 낮추기
공부방2024. 11. 1. 17:57의존성 제어 2 - HTTP 클라이언트 의존성 낮추기

[NestJS] 의존성 제어 1 - 레이어간 의존성 낮추기(Layered Architecture)최근 인프랩 면접에서 얻게 된 코드 리뷰를 통해 현업에서 사용하고 있는 코드들에 대해 되짚어 보고 있다. 값진 경험을 통해 메타인지를 할 수 있게 되었고, 오답이라고 생각하는 부분에 대한 mag1c.tistory.com 1편의 연장선으로, 실제 기술 면접의 코드 리뷰에서 mysql2에 의존적인 코드를 어떻게 변화에 유연하게 만들것이냐는 질문을 받았다. 레이어간 역할을 명확하게 하는데 그치지 않고 데이터베이스에 엑세스하는 레이어를 두 단계로 나눠서, 레포지토리 레이어는 단순 쿼리 실행 레이어로 인프라 레이어를 데이터베이스와 연결하는 레이어로 두어 인프라 레이어만 교체하게끔 할 수 있다고 생각했다. ORM, DB..

Docker에서 PM2로 전환하여 배포 시간 단축하기
공부방2024. 10. 29. 17:44Docker에서 PM2로 전환하여 배포 시간 단축하기

전환 이유레퍼런스들을 찾아보면, 대부분이 PM2를 통해 간편하게 인스턴스를 띄워 사용하다가, 컨테이너 단위로 전환하고 노드 환경에서는 추가로 pm2-runtime을 도커 컨테이너 내부에서 적용하는 경우를 많이 봤던 것 같다. 나는 반대로, 현재 운영중인 서비스를 계속해서 개발하면서 겪은 문제들을 개선하기 위해 배포 파이프라인을 Git Actions - Docker에서 Git Actions - PM2로 전환하였다. 1. 긴 배포 시간 (길면 3~5분, 평균 1분 후반대)2. 간헐적인 서비스 장애 탐지의 위치 이동 서버와 백엔드 코드를 혼자 관리하다 보니 빈번하게 코드를 업데이트해야 한다. 테스트 같은 안전 장치의 통과를 위해 소요되는 시간은 언제나 수긍하지만, Docker 프로세싱의 긴 소요 시간은 점차 ..

의존성 제어 1 - 레이어간 의존성 낮추기
공부방2024. 10. 19. 09:22의존성 제어 1 - 레이어간 의존성 낮추기

최근 인프랩 면접에서 얻게 된 코드 리뷰를 통해 현업에서 사용하고 있는 코드들에 대해 되짚어 보고 있다. 값진 경험을 통해 메타인지를 할 수 있게 되었고, 오답이라고 생각하는 부분에 대한 리팩토링을 진행하고 있다. 특히 이번에는 면접 당시에 서비스 레이어와 인프라(DB) 레이어 사이의 의존성에 대해 피드백을 들었던 부분을 바탕으로 실제 코드를 개선하고 그 과정에서 꼬리에 꼬리를 무는 의문들을 정리해보는 시간을 가지고자 한다.  import { Injectable } from '@nestjs/common';import { InjectRepository } from '@nestjs/typeorm';import { Repository } from 'typeorm';import { User } from './u..

인프랩 면접 회고
회고,후기2024. 9. 23. 22:16인프랩 면접 회고

세 가지 핑계거리로 최근 포스팅을 전혀 하지 못했다. 1. 갑작스런 와이프의 수술 2. 장염으로 2주간 고생한 나3. 인프랩 과제 및 면접 준비 거의 한 달 가까이 아무런 포스팅이 없었는데, 이 정도로 아무것도 못 한 건 아마 처음이지 않나 싶다. 다행히 건강은 전부 회복되었고 인프랩 개발자로 지원했던 채용 프로세스도 끝이 났다.잡플래닛에 면접 리뷰를 작성할까 하다가, 내가 면접을 위해 관련 경험들을 찾아볼 당시 인프랩 면접 후기글이 전무했다.누군가 지원할 때 도움이 될까 싶어 블로그에 회고를 작성한다.     처음으로 가고싶은 회사가 생겼다지난 6월에 데스커 라운지에서 향로님의 강연을 들을 기회가 있었다. 연예인으로서의 향로가 아니라(?) CTO로서의 향로님을 처음으로 접해볼 수 있었다. 그때부터 좋은..

typeORM을 사용하면서 왜 N+1 문제를 마주하지 못했을까?
공부방2024. 8. 27. 17:37typeORM을 사용하면서 왜 N+1 문제를 마주하지 못했을까?

ORM을 사용하다보면 N + 1 문제를 마주하곤 하는데, 특히 ORM의 Default Fetch Type설정이 Lazy일 경우 더 그렇다. 이제 막 typeORM을 사용해보고 있다고 하시는 분과 커피챗을 할 기회가 생겼는데 typeORM에서는 N + 1을 어떻게 해결하냐는 얘기가 나왔었다. N + 1이 어떤 것인지는 알고 있었으나 나는 typeORM을 사용하면서 실제적으로 N + 1을 마주한 경험이 없다. 실제로 실무에서도 페이징을 위한 paginate 라이브러리 사용 시 Distinct로 클러스터 인덱스를 가져와서 리스트, 페이징에 총 세 번의 쿼리를 사용하는 경우를 제외하고는 본 적이 없다. 왜 그럴까 곰곰이 생각을 해봤다. 최근에 nest에서 graphQL을 사용하고자 했을 때에도 N + 1 문제를..

인프콘 2024 후기 - 회고? 일기? 사이의 어딘가
회고,후기2024. 8. 3. 00:58인프콘 2024 후기 - 회고? 일기? 사이의 어딘가

세션에 대한 구체적인 내용은 아쉽게도 없고 단순 주저리(?), 개인 성찰에 가까운 회고입니다.     여태 참석했던 컨퍼런스들에서는 현재 나에게 도움될만한 것들 위주로 세션을 골라서 들었다.실제로 DevFest에서 김연희 님의 주니어 개발자의 로그 관리 개선 세션을 듣고 사내에서도 필요하다고 판단되었고, 환경에 맞게 로그 관리를 개선하고 모니터링 도구의 도입을 통해 로그 관리를 유연하게 할 수 있게 되었던 경험이 있다. 인프콘에서도 별반 다르지 않게 세션들을 구성했었으나, 최근 인프랩이라는 회사에 대한 관심이 커지다보니 세션 선택을 전면 수정했다. 인프랩이라는 회사에 대해 더 깊게 알아보고 싶었다. 회사에 대한 호기심이 내가 가지지 못한 개발 환경과의 비교에서 오는 단순한 부러움이나 동경인지 같은 조직에..

복합 인덱스로 쿼리 튜닝하기
트러블슈팅2024. 7. 26. 16:30복합 인덱스로 쿼리 튜닝하기

[데이터베이스] 인덱스(index) 정리인덱스 목차, 색인, 책갈피와 같은 기능을 하는 인덱스는, 데이터베이스 분야에서는 어떤 데이터를 검색할 때 속도를 높여주는 자료 구조로메모리 영역에 생성되는 일종의 책갈피이다. mag1c.tistory.com 위 글의 복합 인덱스를 통한 튜닝 부분을 따로 옮긴 포스팅입니다. 분명 일정한 기준이 있을 텐데 왜 얘기들이 조금씩 다른 것일까? DB의 버전 때문일까 옵티마이저가 무조건적으로 100% 맞다는 보장이 없어서일까? 잘 모르겠다. 그래서 직접 쿼리 튜닝의 경험들을 복기하며 복합 인덱스를 생성할 때에는 어떤 순서로 인덱스를 구성해야 하는지 알아보았다. 서비스 내부에는 모든 유저의 장바구니(앞으로 견적함이라 부름)를 볼 수 있는 기능이 존재하는데 업종으로 필터링할 경..

728x90
728x90
image