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

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

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

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

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

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

[지금 무료] 판교 퇴근길 밋업 with 인프런 #05 백엔드 테스트코드 | 인프런 - 인프런인프런 | , [사진] 옆자리 동료와 함께 성장하는 시간🍀 판교 퇴근길 밋업 with 인프런 🍀 판교 퇴근길 밋업 with 인프런#05 백엔드 테스트코드 안녕하세요, 인프런 입니다.7월 퇴근길 밋업에서www.inflearn.com 인프런에서 종종 퇴근길 밋업을 진행하는데, 운이 좋게 원하는 주제에 참여할 수 있었다.후기가 아닌 것 같은 후기(주저리)를 좀 작성해서 고민과 기타 등등 생각을 좀 남겨놓아야겠다. 참여 신청 계기 현재 속한 조직의 서비스를 개발하면서, 테스트 코드가 전무한 환경에서 신규 개발과 중요 비즈니스 단위의 테스트 코드나 e2e를 작성해나가고 있었다. 현재의 조직은 테스트 코드..
![[알고리즘] 위상 정렬(Topology Sort)](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcKbQje%2FbtsIH2uEz3m%2FUfl8bcYV2HNme85pxkRChK%2Fimg.png)
위상 정렬(Topology Sort) 위의 위키피디아 문서를 참조하면, 위상 정렬이란 정점의 선형 순서 지정을 통해 모든 방향 간선 uv에 대해 정점 u가 v보다 앞에 올 수 있게 정렬하기 위해 사용되는 알고리즘으로, 방향성 비순환 그래프 - DAG(Directed Acyclic Graph)에만 적용할 수 있다고 한다. 쉽게 말하자면 순서가 정해져 있는 작업을 차례로 수행해야할 때 순서를 결정해주는 알고리즘이고,더 쉽게 말하자면, 순서를 찾아주는 알고리즘이다. 특징나열한 정렬 순서만 두 가지 경우가 존재하고 추가로 여러 개의 답이 더 존재할 수 있다. 이처럼 위상 정렬은 여러 개의 답이 존재할 수 있다는 특징이 있다. 순회하는 방법이 한 가지보다 많을 수 있기 때문이다. 또한, 위에서 DAG에..