State Machine Pattern으로 인지부하 줄이기
2024. 3. 15. 01:12
Software Development
최근에 제가 속한 팀에서는 유저 모으기를 위한 프로모션 이벤트를 준비했습니다. 해당 이벤트를 위한 프로모션은 준비 기간이 짧았지만, 개발 스펙이 작지 않아 모두 고생했던 기억이 있습니다. 처음에는 개발 스펙을 받았을 때는 무수히 많은 에지 케이스가 숨어있음을 알지 못했습니다. 유저가 이벤트에 참여하면 유저의 참여 정도에 따라 상태가 변화하는데, 각 상태마다 무수한 에지 케이스가 있어 이를 어떻게 효과적으로 컨트롤할 수 있을지 고민했습니다. 그 결과 개별 상태와 상태별로 가능한 동작을 효과적으로 제어하기 위해 state machine pattern을 활용하기로 결정했습니다. State machine pattern은 소프트웨어 설계 패턴으로, 상태를 관리하는 데 사용됩니다. 특히 상태의 수가 정해진 경우에 ..
[Pingora] Cloudflare 네트워크 프레임워크
2024. 3. 2. 00:56
Open Source
Cloudflare은 클라우드 벤더 중 하나로, 최근에 내부적으로 사용하던 Pingora를 오픈소스로 공개했습니다. 클라우드 서비스를 제공함에 있어 nginx의 한계를 극복하고자 자체적으로 Pingora를 개발해서 사용했다고 합니다. Pingora는 Cloudflare의 운영 환경에서 battle testing을 거쳤기 때문에 충분히 검증되었습니다. Pingora는 네트워크 애플리케이션 개발에 사용할 수 있는 라이브러리로, nginx와 같이 executable binary를 제공하지 않습니다. 기능 프로토콜: HTTP/1, HTTP/2, end-to-end grpc, TCP/UDP 커스터마이징: callback, filter 특징 Rust로 작성되었기 때문에 메모리 안전성이 뛰어남 멀티스레드 아키텍처를 ..
[Career] 2024년 첫 평가
2024. 2. 2. 22:25
Career/활동
새로운 회사로 이직 후 처음으로 평가 리포트를 받았습니다. 3개월간 제품팀에서 새로운 프로덕트를 만들어보고, 기능 개선을 해보고 스터디도 해보면서 다양한 경험을 해봤고, 이를 기반으로 팀원분들로부터 피드백을 전달받았습니다. 일반적인 회사에서 피드백이란 주기적으로 해야 하는 귀찮은 업무의 일환으로 여겨지는데 새로 이직한 회사에서는 건설적인 피드백을 주고받음으로써 다음 6개월간 업무의 방향을 어떻게 설정할지 생각해 볼 수 있었습니다. 우선 여러 팀원분들께서 공통으로 개선했으면 좋겠다고 말씀 주신 부분은, 피드백을 더 자주 요청하는 것입니다. 상대방이 피드백을 요청하지 않은 상태에서 피드백을 주는 것은 좋은 효과를 보기 어렵습니다(감정 상할 확률이 높죠...). 그렇기 때문에 피드백을 적극적으로 요청하는 자세..
[Career] 2023 회고- 기회는 얻는게 아닌 찾는것
2023. 12. 9. 22:40
Career/회고
다사다난했던 2023년이 지나고 2024년이 다가오고 있습니다. 누군가 제게 올해 어떻게 보냈는지 묻는다면, 저는 다음과 같이 대답할 것 같습니다. Armeria를 시작으로 오픈소스 기여의 즐거움을 깨달았습니다. 다양한 스터디를 통해 많은 사람들을 만났고, 덕분에 이직에도 성공할 수 있었습니다. 또한 개발자로서 한 단계 더 성장할 수 있는 계기가 됐습니다. Toastmaster 활동을 통해 공개 연설의 두려움을 극복하였고, 그로 인해 자존감도 더욱 높아졌습니다. 이 모든 경험들의 공통점은, 이를 통해 다른 기회가 찾아왔다는 것입니다. "준비된 자에게 기회가 온다"라는 걸 어렴풋이 알고는 있었지만 올해 경험들을 통해 그것이 왜 명언인지 다시 깨달을 수 있었습니다. 오픈소스 라인플러스에 재직 당시 "오픈소스..
[Open Source] 돈내기 싫어 만든 크롬 익스텐션
2023. 11. 5. 19:03
Open Source
ChatGPT의 등장으로 개발자의 생산성은 크게 증가했습니다. 더불어 chatGPT를 효과적으로 활용할 수 있는 서비스를 사용하면 생산성을 훨씬 더 극대화할 수 있습니다. 하지만, 이런 서비스의 단점은 월별로 지불해야 하는 금액이 "ChatGPT API Key 사용료"와 "서비스 이용료"의 합계로 측정되어 월에 만원 이상의 금액을 지불해야 한다는 것입니다. 향상된 생산성을 생각해 봤을 때 충분히 납득할 수 있는 금액이지만, 앞으로도 오랜 시간 동안 이 서비스를 사용할 예정인 만큼 지출 금액을 무시할 수는 없다고 판단했습니다. 최근 이직 준비가 마무리되고 시간이 약간 남은 관계로, ChatGPT를 효과적으로 활용할 수 있는 크롬 익스텐션 개발을 시작하기로 결정했습니다. Free AI Sidebar chro..
[Database] 분산환경 데이터베이스 일관성
2023. 11. 4. 12:30
Database/Database 필수
이번 포스팅에서는 분산 환경에서의 데이터베이스 일관성에 대해 살펴보겠습니다. 먼저 "일관성"이란 시스템에서 규정한 규칙을 지킬 수 있는 능력을 의미합니다. 이 규칙은 문맥에 따라 달라지므로 일관성 있는 시스템의 조건도 문맥에 따라 의미를 달리합니다. 분산 환경의 데이터베이스에서 말하는 "일관성"은 데이터베이스 ACID의 C(일관성)와는 다른 의미를 지닙니다. 아래에서 이 차이를 살펴보겠습니다. 데이터베이스 ACID의 C는 애플리케이션에서 규정한 규칙 및 데이터베이스 규칙을 지킬 수 있는 능력을 의미합니다. 그러나 ACID의 C는 애플리케이션 도움 없이 데이터베이스 자체적으로 갖출 수 있는 특징이 아니기 때문에 종종 ACID가 아닌 AID가 되어야 한다는 주장이 존재합니다. 분산 환경에서의 데이터베이스의 ..
[OS] TCP 송수신 Deep Dive
2023. 10. 20. 17:56
Operating System
본 포스팅에서는 Naver D2의 "TCP/IP 네트워크 스택 이해하기" 문서와 RFC 793(Transmission Control Protocol)를 참조해서 TCP에 대해 살펴보겠습니다. TCP(Transmission Control Protocol)란? 우선 TCP는 어떤 성격의 프로토콜인지 살펴보겠습니다. TCP의 특성 Connection oriented TCP는 통신하기 위해 우선 프로세스 간 연결(connection)을 맺어야 합니다. RFC 문서는 connection을 다음과 같이 정의합니다. The reliability and flow control mechanisms described above require that TPCs initialize and maintain certain sta..
[Kubernetes] Kubernetes + CI/CD 파이프라인 구축기
2023. 10. 16. 17:53
Infrastructure/Kubernetes
저는 회사에서 두 개의 팀에 소속되어 서비스를 구축하고 개발하고 있습니다. 1팀(첫 번째 팀)은 Java".jar" 파일을 클라우드 가상 머신에 배포하는 방식으로 작업하고 있고, 2팀(두 번째 팀)은 쿠버네티스 환경에 Java 애플리케이션을 배포하는 방식을 사용하고 있습니다. 다양한 팀원들과 이야기를 나눈 결과, 2팀의 쿠버네티스 환경과 개발 플로우가 장기적으로 비용 효율적이고 개발 효율성을 높일 수 있다는 결론을 내리게 되어 1팀에도 쿠버네티스를 도입하기로 결정하였습니다. 제가 쿠버네티스 환경에서의 애플리케이션 개발 및 배포 경험이 있기 때문에 다른 팀원들이 쿠버네티스 환경에 쉽게 적응할 수 있도록 가이드를 제공하게 되었습니다. 다른 팀원들이 쿠버네티스에 애플리케이션을 배포하는데 참고할 수 있도록 쿠버..