profile image

L o a d i n g . . .

728x90

어느덧 개발자로서 1년이 지났습니다. 1년 동안 제게 있어 가장 중요한 목표는 "성장"이었습니다. 새로운 분야의 새로운 사람들 사이에서 조금이라도 보탬이 되고자 힘차게 달렸던 한 해였습니다. 이번 포스팅은 제가 어떻게 1년을 보냈는지 일기 형식으로 작성해보고자 합니다. 

 

새로운 시작 

2022년 1월 1일, 첫 회사인 라인플러스에서 결제 및 정산 플랫폼 개발 업무를 시작했습니다.  회사에서는 약 1달 동안 신입을 위한 온보딩 프로그램을 제공했기에 다양한 회사 시스템에 익숙해지는데 큰 어려움은 없었습니다. 곧 맡게 될 업무에 빠르게 익숙해지도록 온보딩 프로그램과 병행하여 팀에서 정리한 문서를 반복해서 읽고 정리하면서 용어와 비즈니스 흐름을 익혀나갔습니다. 

개발 

본격적인 개발은 UI 수정 또는 비즈니스 로직에 검증로직을 추가하는 간단한 작업부터 시작했습니다. 로컬에서 작업하고 머지를 위해 pull request를 요청하고, 브랜치를 git flow에 맞게 정리해서 이를 사내 클라우드 환경에 배포하는 일련의 개발 프로세스를 경험해볼 수 있었습니다. 배포까지의 과정에는 작업이 많았기 때문에 실수의 여지가 있었습니다. 이러한 실수를 방지하기 위해 체크리스트를 작성했고 배포과정의 단계별로 실수가 있는지 빠르게 확인할 수 있어 실수가 확연히 줄어들었습니다. 

간단한 작업들이 익숙해질 무렵 새로운 프로젝트가 시작됐습니다. 새로운 프로젝트에서 제가 담당한 부분은 계정과 정산이었습니다. 해당 프로젝트를 통해 경험한 것은 다음과 같습니다. 

  • API 문서 작성과 문서를 토대로 기획과 다른 팀과의 소통
  • API 스펙에 맞도록 개발 
  • 복잡한 검증로직의 단순화 
  • 정산 
  • Spring Boot, Spring Batch, Redis, Kafka, Elastic Search, MySql
  • QA 대응 

개발을 하면서 항상 유의했던 점은 실패를 어떻게 처리할 것인지입니다. 팀의 각 컴포넌트는 마이크로서비스 형태로 개발이 됐고 각 컴포넌트는 API 통신을 하는 형태였습니다. 따라서 컴포넌트 간 통신 실패를 탐지하고 빠르게 대응할 수 있도록 개발을 진행했습니다.

정산을 담당하면서 많은 것을 배웠지만 가장 중요하다고 생각한 점은 각 step과 job의 멱등성이었습니다. Step과 job이 멱등(itempotent)하다면 해당 step 또는 job 실패 시 그 과정을 다시 반복하면 됩니다. 운영 측면에서 바라보면 step 또는 job이 실패하더라도 수동으로 데이터를 보정할 필요 없이 해당 step이나 job을 재실행함으로써 운영 대응이 가능합니다. 이는 운영 난이도와 대응에 소요되는 시간을 확연히 낮출 수 있습니다. 

백엔드 개발에 있어 데이터베이스와의 통신은 매우 중요합니다. 어떻게 데이터를 저장하고 조회하는지에 따라 관련된 비즈니스 로직의 수행 속도가 달라지기 때문입니다. 제가 데이터베이스를 다루며 경험한 것은 다음과 같습니다. 

  • 쿼리 분석(explain, analyze)을 활용해서 병목지점 탐지 
  • 필요한 인덱스 추가
  • 중복된 인덱스 제거

서비스를 릴리스하기 전에 시스템이 얼마나 많은 요청을 처리할 수 있는지 측정이 필요했습니다. API의 최소 RPS(request per second) 요구사항이 있었기 때문에 개발이 완료된 시점에 부하 테스트를 진행했습니다. 부하 테스트는 NGrinder을 활용해서 진행했습니다. 

독서

올해는 대부분 개발서적을 위주로 읽었습니다. 회사에서 Oreilly 사이트에서 온라인 서적을 읽을 수 있는 기회를 제공했기에 다양한 서적을 접할 수 있었습니다. 올해 제가 읽었던 대표적인 서적은 다음과 같습니다. 

  • Real MySQL 8.0 [1], Real MySQL 8.0 [2]
    • 개인적으로 1편은 개발자에게, 2편은 DBA 또는 데이터베이스 운영을 하시는 분들께 유익하다고 느꼈습니다. 
  • Database Internals 
    • 데이터베이스에서 사용하는 각종 자료구조와 알고리즘에 대해 접할 수 있지만 난이도가 높습니다. 
  • 대규모 서비스를 지탱하는 기술 
    • 커지는 서비스를 지탱하기 위해 어떤 기술을 도입하고 어떻게 활용해야 하는지 스토리텔링 형식으로 쓰인 서적입니다. 흥미로운 주제가 많고 스토리텔링 형식이라 그런지 재밌게 읽었습니다. 
  • 그림으로 이해하는 AWS 구조와 기술 
    • AWS의 전체적인 서비스를 이해하는 것뿐 아니라 클라우드 환경에 어떤 서비스들이 제공되는지 간략히 살펴볼 수 있습니다. 
  • 기초부터 다지는 ElasticSearch 운영 노하우 
    • ElasticSearch의 기본부터 운영 팁까지 얻을 수 있습니다. 
  • GoF 디자인 패턴 
    • 특정 디자인 패턴에 관심이 생기거나 이를 사용해야 할 때 종종 꺼내서 읽는 책입니다. 한 번에 다 읽기에는... 참 어려운 책입니다. 
  • Head First Design Patterns, 2nd Edition
    • 디자인 패턴을 재밌게 익힐 수 있습니다. 디자인 패턴을 처음 접하는 분들께 추천드립니다. 
  • TCP/IP 교과서 
    • 네트워크 기본기와 심화 내용을 익히기 좋은 서적입니다. 
  • How Linux Works, 3rd Edition 
    • Linux의 내부 동작원리와 여러 커맨드를 접할 수 있습니다. 
  • Modern Java in Action 
    • Java 8, 9에 추가된 새로운 기능인 stream, lambda 등 modern java를 효과적으로 사용하는 방법이 기술된 책입니다. 
  • Netty in action 
    • Netty가 어떻게 요청을 비동기적으로 처리하는지 그 내부 원리를 코드로 확인할 수 있습니다. 
  • Java Concurrency in Practice 
    • Java 동시성 처리를 어떻게 하고 동시성 처리를 위한 어떤 도구가 있는지 배울 수 있는 서적입니다. 난이도가 높습니다. 
  • Spring Batch in Action 
    • 정산 개발 시 spring batch를 효과적으로 사용하기 위해 읽었던 서적입니다. 
  • Learning Domain-Driven Design
    • DDD가 무엇이고 어떻게 하는지, 그리고 DDD를 도입했을 때 어떤 장점이 있는지 기술된 서적입니다. 하지만 실제로 DDD를 경험해보지 못해 아직까지는 DDD를 잘 이해했다고 자신할 수 없습니다. 
  • Designing Data-Intensive Applications 
    • 데이터를 다루는 애플리케이션을 개발할 때 함께 알고 있으면 좋은 내용이 가득한 서적입니다. 난이도가 높지만 여러 번 읽어도 좋을 만큼 훌륭한 서적입니다. 
  • Operating System Concepts, 8th edition 
    • 운영체제를 더 자세히 이해하고 싶으신 분들이라면 추천드립니다. 기본기를 다질 수 있는 좋은 서적입니다. 전체를 읽는데 1달 정도 소요됐습니다...
  • Mastering Bitcoin, 2nd Edition 
    • 분산 환경에서 서로를 신뢰할 수 있는 시스템이 어떻게 동작하는지 궁금해서 읽게 됐습니다. 블록체인이 어떻게 동작하는지 관심 있는 분들께 추천드립니다. 
  • Extreme C 
    • 운영체제와 가장 가까운 언어 중 하나인 C에 대해 자세히 학습할 수 있습니다. 운영체제와 관련된 개념들을 C 코드와 함께 학습할 수 있기 때문에 운영체제 학습에도 도움이 됐습니다. 

스터디 

올해 가장 잘한 것 중 하나는 데이터베이스 스터디였습니다. 해당 스터디는 카네기 멜론 대학의 데이터베이스 수업을 듣고 해당 내용을 정리해서 발표하는 형태로 진행했습니다. 워낙 수업도 좋고 함께 스터디를 진행했던 분들이 우수했기 때문에 많은 것을 배울 수 있었습니다. 학습을 하며 포스팅도 함께 작성함으로써 학습한 내용을 더욱 제 것으로 만들 수 있었습니다. 

2022.12.18 - [Database/DBA급 개발자로] - [Database] DBA급 개발자로 - #0 소개

 

[Database] DBA급 개발자로 - #0 소개

DBA급 개발자로 시리즈는 데이터베이스를 더 깊게 파보고 싶은 개발자들을 위한 시리즈입니다. 해당 시리즈는 Youtube의 CMU Database Group 강의를 기반으로 작성됐습니다. 목차 1. Relational Model 2022.08.31

code-run.tistory.com

2023 목표 

새해에는 다음과 같은 목표를 이루고자 합니다. 

  • 회사에 소속된 팀에서 비즈니스 도메인에 대한 이해도를 높입니다. 광고 도메인에서의 결제와 정산 프로세스 외에도 광고시장이 어떻게 구성이 됐고 사내 어떤 팀에서 어떤 역할을 맡아 무슨 업무를 하는지 더욱 잘 이해해보고자 합니다. 
  • 새로운 프로젝트가 많은 만큼 하나의 컴포넌트를 온전히 담당해서 인프라부터 릴리즈까지 경험해보고자 합니다. 이에 가장 필요한 학습은 인프라라고 생각합니다. 애플리케이션이 처리해야 하는 요청에 맞는 인스턴스 설정부터 애플리케이션 구동 서버 스펙 설정 등 인프라에 대한 이해가 부족하면 쉽지 않을 것으로 생각하기 때문입니다. 또 경험해보고 싶은 것은 고가용성을 위한 애플리케이션 및 데이터베이스를 직접 구성해보는 것입니다.
  • 사이드프로젝트를 통해 부족한 기술력을 보완하는 것입니다. 최근 기술인 java17 또는 kotlin을 활용해서 spring boot 애플리케이션을 hexagonal architecture의 형태로 유지보수성 있게 코드를 작성해보고자 합니다. 또한 Nuxt framework를 활용해서 프론트 애플리케이션 코드를 효과적으로 작성하는 방법도 연습하고자 합니다. 마지막으로는 AWS에 앱을 배포하고 안정적으로 운영하기 위해 인프라 구성 및 보안 설정을 경험해보면서 부족한 인프라 지식을 채우고자 합니다. 
  • https://onu-menu-external-v2.web.app
  • https://onu-menu-internal-v2.web.app
  • 학습하거나 경험한 내용을 블로그 포스팅을 통해 꾸준하게 공유하고자 합니다. 결국 남는 것은 기록이기 때문에 조금 시간이 들더라도 꾸준한 포스팅을 작성하려고 합니다. 
728x90

'Career > 회고' 카테고리의 다른 글

[Career] 2023 회고- 기회는 얻는게 아닌 찾는것  (2) 2023.12.09
[Career] 난 잘하고 있는걸까?  (0) 2023.06.04
복사했습니다!