본문 바로가기

[Project] 프로젝트 삽질기58 (feat Transactional) 들어가며 NestJS와 PostgreSQL, TypeORM을 활용하여 프로덕트를 만들고 있습니다. 저번 글에서 커넥션 풀 누수 문제가 발생한 장애를 해결하는 과정을 공유했는데요. 장애를 해결한 후, 팀에서 커넥션 풀 누수 문제를 더 이상 겪지 않으려면 어떻게 해야 할까 고민했습니다. 이 글을 통해 팀 내에서 트랜잭션 제어 방식을 다르게 구성한 방법을 공유하고자 합니다. 문제 원인 TypeORM을 활용하면서 API를 구성할 때마다 매번 반복적으로 아래의 코드를 반복해서 작성했습니다. constructor(private readonly dataSource?: DataSource) {} const queryRunner = this.dataSource.createQueryRunner(); await queryR..
[일기장] 어른이 된다면 드라마 속 당신의 모습을 보면서 언젠가 어른이 된다면, 누군가의 뒷모습을 깊게 생각할 수 있는 사람이 되어야겠다고 생각했다. 예전에 했던 그 다짐을 지금도 가끔 떠올리곤 한다. 단 한 번도 만난 적 없는 사이지만 인생의 롤 모델이었던 당신이 그리울 때면 당신이 나왔던 작품들을 보곤 한다. 입시 스트레스를 받을 때, 드라마 '커피프린스 1호점', '파스타', '골든 타임'을 보면서 힘을 얻곤 했다. 입시 준비에 바빴지만 당신이 나온 드라마만큼은 놓칠 수 없었다. 그렇게 열심히 봤던 드라마 덕분에 대학교 입시에 합격한 에피소드가 기억난다. 한 대학의 입시 구술 면접에 이런 질문이 나온 적이 있다. 히포크라테스 선서의 문구가 나오며, 이런 문구가 뒤에 이어졌다. '당신은 응급실을 지키고 있는 의사이다. 당신 ..
[Project] 프로젝트 삽질기57 (feat 커넥션 풀 누수) 들어가며 AWS Aurora PostgreSQL를 활용해서 서비스를 운영하고 있습니다. 성능 테스트를 하면서 Writer DB의 Connections 수가 특정 숫자 이상이 되면 커넥션을 더 이상 맺을 수 없어서 장애가 발생한다는 것을 파악했습니다. 장애를 겪을 것을 대비하여 RDS의 connections 수를 트래킹 하며 커넥션 수가 특정 개수 이상이 넘으면, slack으로 알림을 받도록 구성했습니다. 얼마 전, max connections 수가 특정 수를 넘었다는 알림을 받았습니다. 알림을 받은 이후 시간이 지나도, 커넥션 수가 떨어지지 않는 문제가 생겼습니다. 그 과정에서 팀에서는 어떤 문제를 겪었고, 이 문제를 어떻게 해결했는지 공유하고자 글을 씁니다. RDS 커넥션 풀 누수 저희 팀에서는 Clo..
[일기장] 처음부터 잘하는 사람이 아니라 유튜브 알고리즘을 통해 티처스라는 프로그램을 우연히 봤다. 방송에서는 영어 점수가 11점인 학생이 69점으로 향상되는 과정을 보여줬다. 방송을 보면서 인생에서 처음으로 공부라는 것을 해야겠다고 생각했던 순간이 불현듯 떠올랐다. 고등학교에 입학하고 처음 반에 들어갔을 때 충격을 잊지 못한다. 중학생 때와는 다르게 반의 많은 친구들이 자신의 책을 꺼내서 공부하고 있었다. 이 친구들은 공부를 왜 할까? 생각했지만 친구들이 공부를 하건 말건, 나에겐 전혀 중요하지 않았다. 대학에 가고 싶은 마음이 전혀 없었기 때문에 수업은 잘 듣지 않았고, 쉬는 시간에 매점에 달려가서 빵을 사 먹거나 학교 끝나면 농구를 하거나 게임을 하면서 걱정 없이 살았다. 그렇게 시간이 흘러 중간고사를 봤고, 결과는 처참했다. 내 성적을 ..
[일기장] 시간이 지날수록 선명해지는 기억 어느 추운 겨울이었다. 막차를 타고 집에 가고 있는데 전화가 왔다. 친구였다. 낚시를 해서 회를 떠놨으니, 집으로 와서 회에 소주 한 잔 하자고 내게 말했다. 개인적으론 계획에 없는 행동은 잘하지 않기에, 다음 날 중요한 일정이 있다고 둘러대며 친구의 제안을 거절했다. 다시 연락이 왔다. 친구였다. 친구는 내가 맛있게 먹을 수 있도록 매운탕까지 끓여놨다고 했다. 더 이상 거절할 수 없었다. 잠시 발길을 친구의 집으로 돌렸다. 친구의 집에 도착했을 땐, 내가 모르는 다른 친구들이 자리에 있었다. 내 친구는 처음 보는 다른 친구들에게 나를 소개해줬다. '열심히 사는 친구이며, 내가 대학에 갈 수 있도록 도움을 준 고마운 소중한 친구'라고 나를 소개해줬다. 그러고 친구는 내게 소주 한 잔 따라주며 왜 이렇게 ..
[회고] 2023년 하반기 - 미련한 사람이 우물을 판다 들어가며 언제나 다정하게 가족 옆을 지킨, 환갑이 된 당신을 생각합니다. 당신은 돈을 벌기 위해 왕복 5시간 거리를 출퇴근했습니다. 하루 종일 서서 일하며 백화점 매대에서 소리 내어 이목을 끌어야 했고, 매대에 물품이 빠질 때면, 창고에서 물품을 꺼내와 채워 넣어야 했습니다.퇴근하고서는 밀린 집안일들을 해야 했고, 잠들기 전에는 파스를 이곳저곳 붙이며, 다음 날 아무 일 없다는 듯 새벽같이 출근했습니다. 출근 전 당신은 늘 빼놓지 않고, 혼자 있어도 라면 끓여 먹지 말고 밥 잘 챙겨 먹고 있으라고 밝게 웃으며 인사했습니다. 자식이 밥을 굶을까 걱정된 탓인지 당신은 언제나 식탁 위에 반찬들을 올려두고 출근했습니다. 음식이 놓인 식탁 위에는 시간이 갈수록, 반찬 대신 당신이 복용해야 할 약이 늘어만 갑니다..
[Project] 프로젝트 삽질기56 (feat debug) 들어가며 여러분들은 만약 테스트 코드를 작성하지 않고 API를 개발한다면 API가 정상 동작하는지 어떻게 확인하시나요? 아마 서버를 직접 실행한 후, API를 여러 번 호출해 보면서 개발한 API가 정상적으로 동작하는지 확인해야 할 것입니다. 그 과정에서 로직 중간에 console.log 코드를 작성해서 실행하며 동작을 확인하기도 합니다. console.log 코드를 작성해서 디버깅을 하다가 우연히 운영 환경의 서버로 코드가 머지될 경우, 불필요한 로그 출력 코드가 추가되는 문제도 발생할 수 있습니다. 저는 이런 문제를 겪지 않기 위해 서버 개발을 할 때 디버거를 활용합니다. 디버거를 활용하면 console.log 코드로 확인하는 방식 보다 API 동작에 대한 문제를 깊게 파악할 수 있습니다. 주변을 둘..
[네트워크] Systems Manager 이해하기 들어가며 아키텍처를 설계하면서, 견고한 아키텍처를 설계하려면 어떻게 해야 할까 늘 고민하고 있습니다. 아키텍처의 네트워크 환경을 잘 구축하려면 어떻게 해야 할까 고민하던 중, VPC 개념에 대해 알 수 있었습니다. VPC에서 private subnet에 위치한 DB를 SSM을 활용하며 접근하기 위해 인프라 환경을 설정했는데요. SSM이란 무엇이며, 어떻게 SSM을 활용할 수 있는지에 대해 정리해야겠다고 생각했습니다. 그럼 지금부터 SSM에 대해 알아보겠습니다. SSM EC2에 SSH로 접근하려면, 키 페어를 활용해서 접근할 수 있는데요. 만약 SSH에 접근해야 하는 EC2가 늘어날수록, 관리해야 하는 키 페어가 많아질 수도 있습니다. 만약 하나의 키페어를 활용해서 접근한다 하더라도, 다른 개발자가 EC2..
[네트워크] NACL 및 보안그룹 이해하기 들어가며 아키텍처를 설계하면서, 견고한 아키텍처를 설계하려면 어떻게 해야 할까 늘 고민하고 있습니다. 아키텍처의 네트워크 환경을 잘 구축하려면 어떻게 해야 할까 고민하던 중, VPC 개념에 대해 알 수 있었습니다. 이번 기회에 VPC를 적용해서 더 나은 서버구조를 설계하고 싶었습니다. 아래 글은 유튜브 AWS 강의실의 보안 그룹과 AWS NACL에 대한 영상을 보고 정리한 내용이 적혀 있습니다. 자세하게 살펴보고 싶으신 분들은 영상을 참고해 주시면 됩니다. 이 글에서는 보안그룹과 NACL에 대해 알아보겠습니다. 보안 그룹 보안 그룹은 Network Access Control List(NACL)와 함께 인스턴스에 대한 인바운드 및 아운바운드 트래픽을 제어하는 가상 방화벽 역할을 합니다. 보안그룹에서는 기본..
[네트워크] NAT Gateway, Bastion Host 이해하기 들어가며 아키텍처를 설계하면서, 견고한 아키텍처를 설계하려면 어떻게 해야 할까 늘 고민하고 있습니다. 아키텍처의 네트워크 환경을 잘 구축하려면 어떻게 해야 할까 고민하던 중, VPC 개념에 대해 알 수 있었습니다. 이번 기회에 VPC를 적용해서 더 나은 서버구조를 설계하고 싶었습니다. 이 글에서는 NAT Gateway와 Bastion Host에 대해 알아보겠습니다. NAT Gateway와 Bastion Host NAT Gateway란 Amazon Virtual Private Cloud의 프라이빗 서브넷에 있는 인스턴스에서 인터넷에 쉽게 연결할 수 있도록 지원하는 가용성이 높은 AWS 관리형 서비스입니다. 만약 Private Subnet을 구성했다면, 서브넷 안에 EC2를 구성해서 사용할 수 있습니다. 이..