23년 회고 :: 트래픽에 뚜맞으며 이룬 성장

숑숑·2023년 12월 23일
10

회고

목록 보기
6/7
post-thumbnail

개발자가 된지 1.5년이 흘렀습니다.
올해는 많은 성장을 이뤘다고 생각합니다.

특히 업무적으로 성장한 게 많은데요,
올해 제 성장의 가장 큰 key는 사용자 트래픽이라고 생각해서, 부제를 저렇게 지어보았습니다.

그 외 사이드 프로젝트, 건강 등 제가 이룬 큼직한 성취를 적어보겠습니다.
비슷한 연차의, 특히 백엔드 개발자 분들이 제 회고를 통해 인사이트를 얻어가실 수 있으면 좋겠습니다.


🖥️ 업무

올해는 작년과 담당하는 서비스가 달라졌습니다.

22년: 쿠폰, 페이
23년: 라이브커머스, NFT 멤버십 (New!)

B2C 서비스를 담당하게 되는건 처음이었습니다.
제가 개발한 것에 대해 사용자의 반응을 즉각적으로 볼 수 있게 되어 설레는 마음이 컸습니다.

퇴근해도 안심할 수 없다

백엔드의 정수는 대용량 트래픽을 다루는 것이라고 많이 들었습니다.
그런데 막상 다뤄보니 ... 재밌지만 정말 맵습니다. 🥵

라이브커머스의 경우 티켓팅 서비스처럼 트래픽이 한꺼번에 몰리는 시간이 있었습니다.
그 때 상품의 인기도, 호스트의 브랜드파워 등 다양한 요인이 트래픽에 영향을 줍니다.
서버의 모니터링 지수들이 임계치를 넘으면 퇴근 후에도 슬랙으로 알림을 잔뜩 받습니다.

봐서 해결할 수 있는 문제라면 좋지만, 당장 할 수 있는게 없는 이슈일 때도 많습니다. (DB CPU라던가…)
그러다 사용자가 이걸 눈치채게 되면 채팅으로 바로 반응이 보이기도 합니다.

이럴 때는 트래픽 앞에서 무력감을 느낍니다.
개발자들이 기도(?)하는걸 이해하기 시작합니다…

트래픽을 예상하고 대안을 세우다

작년에는 많은 트래픽 양을 고려할 필요는 없었습니다.
그래서 기능 구현만 제대로 되었다면, 크게 다른 처리가 필요하진 않았는데요
현재는 개발 전 예상 트래픽이 어느 정도 되는지 계산하고, 그에 따른 대책을 함께 생각하는 습관이 생겼습니다.

DB 쿼리로 생각하면, 잘 동작하는 DB 쿼리도 트래픽에 따라 큰 병목이 되는 경우가 있습니다.

작년에는 생각해보지 못했던 아래 관점들을 활용하게 됐습니다.
당연해보일 수 있지만, 이게 반드시 필요한 환경에 놓여져있다보니 더 크게 와닿았습니다.

  • DB 쿼리는 가능한 인덱스를 태운다.
  • DB 쿼리 배포 전 실행 계획을 반드시 확인한다.
  • JPA 등 ORM 사용 중이라면 실제 생성 쿼리를 꼭 확인한다.
  • 사용자 조회량이 많은 API라면 Redis 등으로 캐싱을 고려한다.
  • 한 번에 쓰기량이 많은 경우는 MQ 등으로 지연 처리를 고려한다.
  • 배포 후에도 API 별 Latency, 쿼리 조회량을 지속적으로 확인한다.
  • 큰 변경이 있는 경우 부하 테스트를 통해 처리량 임계치를 확인한다.

ORM의 함정

ORM 쿼리 항목을 특히 강조했는데,
올해 유독 의도와 다른 형태로 쿼리가 나가는 경우를 많이 겪었습니다.

  • inner join인줄 알았지만 outer join으로 생성되는 경우
  • 지연로딩 설정을 했지만 무조건 즉시로딩 되는 경우 (ex. JPA 1:1 관계)

ORM이 친절하게 에러를 일으켜 주지도 않았고, 출력값만 따지면 정상적이었기 때문에 바로 문제로 인지를 못하기도 했습니다.

ORM이 편하다는데 동의하지만, 사용하기 쉬운 도구는 아니라고 생각합니다.
같이 개발하는 동료 모두가 ORM에 높은 이해도를 가지고 있다면 좋지만,
그럼에도 쉽게 실수할 수 있기 때문에 코드 리뷰도 단단히 하려고 합니다.

매운 맛을 봤으니 내년에는 ORM을 완전히 의도 대로 컨트롤할 수 있도록, 깊이 학습해보고 싶습니다.

점점 제너럴리스트로

여러가지 서비스의 백엔드를 담당하고 있는데요,
제 주 분야인 Spring도 쓰지만 다른 프레임워크도 함께 사용하고 있습니다 . (현재 5개 언어 사용 중...)

무조건 한 우물에 특화된 스페셜리스트가 좋다는 생각을 했었는데, 막상 그렇지만은 않은 것 같습니다.
상황에 따라 적절한 기술이 너무 다르기 때문입니다.

예를 들면, 데드라인에 따라 Spring이 아닌 개발 속도가 장점인 프레임워크(ex. Django, ROR 등)를 적용해야 할 수도 있고, 팀원이 익숙한 기술스택에서도 너무 멀어지면 안 됩니다.

두루두루 알아두고 적합한 상황에 적용하는 것이 프로덕트를 발전시키는데 더 많은 도움이 될 것 같습니다.


⚒️ 사이드 프로젝트

RefactorGPT 플러그인 개발

Jetbrains IDE에 RefactorGPT 플러그인을 배포했습니다.

개발자는 플러그인의 다운로드 통계를 볼 수 있는데요, 그래도 꽤 많이 써주고 계시더라구요.
한국 뿐만 아니라 다양한 나라에서 쓰고 계셨습니다.
(의외였던건, 통계에 따르면 미국 분들이 제일 많더라구요?)

제가 그 동안 사이드 프로젝트로 개발하면서 실제 사용자가 사용하는걸 증명받은건 처음이라, 개인적으로 굉장히 큰 가치를 느끼고 있습니다.

이걸 계기로, 개발 중에 생기는 불편함은 모두 쌓아놨다가 아이디어로 승화하려는 습관이 생겼습니다.

지금은 그 중 하나의 아이디어로 새로 플러그인 개발 중에 있습니다
솔직히 배포까지 가능할지 확신은 못하겠습니다.
남들이 안 했던 것엔 이유가 있나 싶기도 하고 그런 상태입니다... 그래도 기대해주세요!


😷 건강

다이어트 성공 (feat. 복싱)

취업 후 회고에서, 개발자로서 운동이 필수라고 했던 바가 있습니다.
그리고 작년 회고를 읽어주신 분이라면, 제가 작년에 10KG 이상 감량했다고 알고 계실텐데요
더 빼서 목표 체중 달성에 성공했습니다. (몇인지는 비밀)

헬스가 살살 지루하다고 느껴서 올해 초에 격투기 종목을 찾아봤고, 집 근처 복싱장에 등록했습니다.
복싱도 사실 어느 순간 패턴이 너무 반복된다고 느껴서 지금은 그만둔 상태긴 한데요,
링 위에 올라가면서 새로운 자신(?)를 찾을 수 있었습니다.

부작용이 있다면 옷들이 다 안 맞아서 새로 사느라 돈이 좀 많이 들었습니다.
입을 수 있는 옷들이 훨씬 많아져서 행복합니다 🥰


✍️ 마치며

작년에는 행운의 해였다면, 올해는 경험과 성취의 해였던 것 같습니다.
그래서 이 회고글에도 성취한 것 위주로 작성했는데요,
사실은 그와 동시에 저의 부족함을 느끼는 해였습니다.

트래픽을 올해 처음 제대로 다뤄보며 '아 내가 아는건 겨우 이 정도였구나...'란 생각이 강하게 들더라구요.
트래픽을 '잘' 다루게 된건 절대 아니라고 생각하지만,
적어도 백엔드 로드맵에서 제 위치를 정확히 인지하게 해준 것 같습니다.

내년에는 사람을 많이 만나보려 합니다.
제가 그 동안 너무 회사와 지인에만 갇혀있었다는 생각을 하게 되었는데요,
그래서 개발자 글쓰기 모임인 글또라는 새로운 커뮤니티에 들어오게 됐습니다. (이 글을 쓰게 해준 원동력!)
벌써 몇번의 커피챗을 했고, 다양한 개발자 분들의 이야기를 듣고 있습니다.

24년에도 성장한 자신을 기대하며 글을 마칩니다.

profile
툴 만들기 좋아하는 삽질 전문(...) 주니어 백엔드 개발자입니다.

0개의 댓글