-
회고
[회고] 2024년 상반기 - 등대가 되었던 사람
들어가며 평생을 미련하게 살아온 당신을 생각합니다. 고등학교에 가지 못하고 벽돌을 날랐던 탓인지 당신의 왼쪽 어깨는 주저앉았고, 미화원으로서 거리를 청소하기 위해 긴 시간을 무릎 닳도록 걸은 탓인지 당신은 다리를 절뚝여야 했습니다. 방 안 가득 퍼져 있는 코를 찌르는 당신의 파스향을 맡을 때에도 당신의 고단했던 하루를 크게 신경 쓰지 않았던 것 같습니다. 어느 늦은 저녁 당신으로부터 걸려온 전화를 받았습니다. 집 근처 벤치에 앉아있다는 간단한 상황만을 공유한 채 당신은 전화를 끊었습니다. 설마 하는 생각에 벤치 앞에 갔을 땐, 길을 걷다가 무릎에 힘이 들어가지 않아서 걷지 못하고 주저앉아버린 당신의 모습을 볼 수 있었습니다. 도움 없이는 걷지 못하는 당신에게 도움이 되고자 손을 건넸습니다. 당신의 손을..
-
회고
[회고] 2023년 하반기 - 미련한 사람이 우물을 판다
들어가며 언제나 다정하게 가족 옆을 지킨, 환갑이 된 당신을 생각합니다. 당신은 돈을 벌기 위해 왕복 5시간 거리를 출퇴근했습니다. 하루 종일 서서 일하며 백화점 매대에서 소리 내어 이목을 끌어야 했고, 매대에 물품이 빠질 때면, 창고에서 물품을 꺼내와 채워 넣어야 했습니다.퇴근하고서는 밀린 집안일들을 해야 했고, 잠들기 전에는 파스를 이곳저곳 붙이며, 다음 날 아무 일 없다는 듯 새벽같이 출근했습니다. 출근 전 당신은 늘 빼놓지 않고, 혼자 있어도 라면 끓여 먹지 말고 밥 잘 챙겨 먹고 있으라고 밝게 웃으며 인사했습니다. 자식이 밥을 굶을까 걱정된 탓인지 당신은 언제나 식탁 위에 반찬들을 올려두고 출근했습니다. 음식이 놓인 식탁 위에는 시간이 갈수록, 반찬 대신 당신이 복용해야 할 약이 늘어만 갑니다..
-
회고
[회고] 2023년 상반기 - 친절한 자세를 흩뜨리지 않도록
들어가며 가끔 당신으로부터 옛이야기를 듣습니다. 당신의 자식이 열이 끓어올라 병원에 가야 하는데, 당장 병원비가 없어 이웃들에게 돈을 빌리러 다니셨다는 이야기. 당신의 자식이 집에 친구들을 데려왔는데, 집이 너무나도 좁아 친구들의 표정이 좋지 못한데도 당신의 자식은 누구보다 밝게 웃고 있었다는 이야기. 누군가 당신의 자식에게 가장 좋아하는 음식이 무엇이냐고 물을 때면, 맛있는 음식을 먹어본 적이 없어 '계란프라이'라고 말했다는 이야기까지. 당신은 늘 과거의 이야기를 모두 마무리 지을 때쯤이면, 어렵지만, 바르게 성장해서 고맙다는 이야기를 전했습니다. 고맙다는 이야기는 당신이 들어야 하는데, 당신은 늘 먼저 고맙다고 이야기합니다. 참 신기하게도, 당신은 아무리 힘들어도 홀로 사는 어르신을 위해 음식을 나누..
-
서버 개발
[Project] 프로젝트 삽질기68 (feat ECR tag 관리)
들어가며 AWS ECR에 빌드한 Docker Image를 업로드할 때 tag를 latest로 설정했습니다. 그 후 latest 태그가 붙은 이미지를 이용해서 배포하는 과정에서 문제가 생겼는데, 어떤 문제가 생겼고 문제를 어떻게 해결했는지 공유하고자 합니다. 문제 정리첫 번째, 롤백이 안 되는 문제가 있었습니다. 배포 과정에서 문제가 생기면 롤백해야 했는데, ECR에는 모두 latest 태그가 붙은 이미지만 존재했습니다. 그래서 문제가 발생하는 latest 버전이 아닌 이전 버전으로 롤백을 하려고 하더라도, 현재 문제가 발생하는 latest 태그의 Docker 이미지로 컨테이너를 만들어야 했습니다. 즉 latest 태그를 유지함으로써 서버를 롤백할 수 없는 문제가 있었습니다. 두 번째는 버전 관리..
-
서버 개발
[Project] 프로젝트 삽질기67 (feat DOO 단위 테스트)
들어가며 이 글에서 비즈니스 로직과 이벤트 전달 로직을 분리하는 과정을 공유했습니다. 이번 글에서는 테스트 코드를 활용해서 이벤트를 전달하는 코드가 호출되었는지, 그리고 이벤트를 전달하는 코드를 호출하기 위해 어떤 객체가 전달되었는지 확인한 방법을 공유하고자 합니다. 그 과정에서 테스트 코드를 어떻게 작성했는지 함께 공유하겠습니다. 테스트 코드 작성 준비기존 코드는 아래와 같이 구성되어 있었습니다. 만약 아래 코드로 단위 테스트를 작성한다면, 테스트 코드를 작성하기 어렵습니다. hackle, amplitude SDK를 직접 제어하기 어렵고, sdk를 활용해서 외부에 데이터를 전달하는 것이기 때문에 테스트를 하기 위해서는 외부의 환경에 의존해야 합니다. 문제를 해결하기 위해선, 직접..
-
서버 개발
[Project] 프로젝트 삽질기66 (feat DOO, Enum 클래스)
들어가며팀에서 데이터 드리븐한 의사결정을 할 수 있도록 핵클, 앰플리튜드에 데이터를 적재하는 환경을 구축하고 있습니다. 데이터를 전달하기 위해 비즈니스 로직에 이벤트 전달 코드를 함께 작성했습니다. 그러다 핵클, 앰플리튜드에 전달해야 하는 이벤트 전달 코드가 점진적으로 많아지면서 코드의 가독성을 해치게 되었고 하나의 클래스에서 여러 책임을 갖게 되는 문제가 발생했습니다. 이 글을 통해 제가 겪은 문제를 어떻게 해결했는지 공유하고자 이 글을 씁니다. 이벤트 전달하기먼저 유저의 회원가입을 처리하는 클래스가 있다고 가정하고 간단한 샘플 코드를 살펴보겠습니다. 만약 유저가 언제 회원가입을 했는지 알기 위해 핵클과 앰플리튜드에 이벤트를 전달하고 싶다면 다음과 같이 코드를 구성할 수 있을 것입니다..
-
개발 협업
[협업] 협업을 위한 JIRA 이슈 번호 커밋 메시지 자동 추가하기
들어가며 사이드 프로젝트를 진행하면서, 효율적인 일정 관리의 필요성을 느끼면서 JIRA를 적극적으로 도입했습니다. JIRA를 처음 써보면서, JIRA를 어떻게 하면 효율적으로 사용할 수 있을까 알아보던 중, 회사에서는 JIRA의 이슈 번호를 PR과 Commit에 적극적으로 활용한다는 것을 알 수 있었습니다. 저희 팀에서도 적극적으로 활용해보고자, JIRA를 제대로 활용하는 방법에 대해 글을 작성하고자 합니다. JIRA를 사용하면서 편하게 사용하는 첫 번째는 바로 JIRA의 이슈 번호를 커밋 메시지에 git hooks을 이용해서 추가하는 것입니다. 지금부터 JIRA 이슈 번호를 어떻게 Commit 메시지에 추가하는지 살펴보겠습니다. 귀찮은 Jira 이슈 번호 작성 현재 사용하고 있는 커밋 메시지는 제가 예..
-
개발 협업
[협업] 협업을 위한 파이어베이스 셋팅 및 호스팅 설정하기 (feat node.js)
들어가며 스타트업에서 서버 개발자로 일하면서, 푸시 알림을 사용하기 위해 파이어베이스를 처음 사용했습니다. 파이어베이스를 들어가보면, 정말 다양한 기능이 있습니다. 하지만 저는 파이어베이스를 제대로 모르기 때문에, 어떤 기능도 제대로 사용해본 적이 없었습니다. 이번 기회에 파이어베이스에 대한 기초 지식을 쌓아야겠다고 생각했습니다. Firebase 프로젝트 생성하기 먼저 파이어베이스를 활용하기 위해서는 프로젝트를 생성해야합니다. 프로젝트를 생성하기 위해 firebase 사이트에 들어갑니다. 만약 사이트에 들어간다면, 프로젝트 추가 버튼이 보일 것입니다. 파이어베이스 활용을 위한 프로젝트 생성을 위해 프로젝트 추가를 클릭합니다. 프로젝트 생성을 해줍니다. 저는 테스트를 위해 프로젝트명을 test-constp..
-
개발 협업
[협업] 협업을 위한 푸시알림 설정하기 (feat node.js)
들어가며 스타트업에서 서버 개발자로 일하면서, 푸시 알림에 대해 처음 개발을 시작했습니다. 푸시 알림을 어떻게 보내야 하는지도 전혀 몰랐기에, 푸시 알림을 보내는 법, 푸시 알림을 반복해서 보내는 법 등을 잘 설계해야만 했습니다. 그 과정에서 수많은 삽질을 반복했습니다. 이 글은 저처럼 삽질을 하지 않기를 바라며 작성한 글입니다. 제 글을 통해 푸시 알림을 잘 설계할 수 있는 개발자가 되길 바랍니다. Firebase 활용하기 푸시 알림을 활용하기 위해서는 먼저 Firebase를 알아야 합니다. 푸시 알림을 보내려면 Firebase를 통해 보내야 하기 때문입니다. Firebase를 활용해서 푸시 알림을 보내는 방법은 간단합니다. 먼저 앱 서버에서 FCM 서버로 HTTP Request를 post 방식으로 요..
-
네트워크
[네트워크] 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를 구성해서 사용할 수 있습니다. 이..