ep 12. 2년차가 된 스타트업의 사수없는 백엔드 개발자 회고록

이동엽·2024년 9월 22일
10
post-thumbnail

서론

2023년 7월에 입사를 했으니, 벌써 14개월정도가 되었다.
학부 4학년 1학기가 끝나자마자 취업을 했었기에 친구들이 놀 때 혼자 출근하는게 많이 외로웠던 초기의 반년이 지나고, 졸업을 한 뒤에서야 그래도 내가 승자!라고 위로를 많이 받았던 반년을 보냈다.

여전히 퇴근하고 개인 공부를 하고, 사내 발표를 준비하고 살아가는 나다.
물론 그 사이에 러닝을 시작하기도 했다. 체력을 기르지 않았다간 공부고 일이고 뭐든 오래 못할 것 같았다.

나름 오래 앉아있는걸 잘하던 나도 이제 나이를 먹는걸 실감하다니. 씁쓸한 시작.


프로젝트

1. 송아리당뇨 API 서버 마이그레이션

우리 회사의 메인 서비스 중 하나인 송아리 당뇨의 API 서버를 마이그레이션했다.
로그를 상세히 찍어놓은 덕에 로그가 아예 없던 레거시와 달리 디버깅에 유리해서 훨씬 편해졌다.

운영을 해 나가다 보니, 어느 곳에서 INFO 로그를 남겨야 하는지 등의 운영시 필요한 로그 레벨에 대한 기준이 서서히 잡히는 것 같아서 재밌다.


2. 이미지 처리 서버 구축

Thumbor 라는 이름의 오픈소스를 이용해 이미지 처리 서버를 구축했다.
더 이상 프론트에서 AWS S3를 직접 참조하지 않으며, 백엔드 썸네일 등으로 인해 이미지 크기를 가공하는 등의 작업으로 신경쓰지 않아도 되었다.

구축하는 과정에서 Thumbor에 내장되어 있는 RemoteCVRedis의 용도를 파악하였고, 불필요한 기능으로 판단되어 제거한 뒤 최소한의 기능으로 새롭게 구축했다. 이때, 영문 도큐먼트를 읽는 실력이 많이 늘었다. 우하하

  • RemoteCV : 자동으로 얼굴/특징 감지 기능
  • Redis : RemoteCV 감지 작업 실패 시, 큐에 저장하는데에 사용

3. 송아리닥터스 API 서버 마이그레이션

송아리닥터스는 의료진이 사용하는 어플로, 송아리당뇨를 사용하는 환자를 케어할 수 있도록 설계되어있다.
메인 서비스는 아니지만, 마찬가지로 버전업이 필요하여 마이그레이션을 함께 진행하였다.


4. 고도화한 Spring Cloud API 서버들 인수인계

현재 백엔드 API 서버들은 크게 3가지로 분류된다.

  • 레거시 API 서버 (Java 8, Spring Boot 2.3.x)
  • 버전업한 마이그레이션 API 서버 (Java 17, Spring Boot 3.0.x)
  • 고도화된 Spring Cloud API 서버 (Java 17, Spring Boot 3.0.x, Spring Cloud 2022.0.x)

몇몇 서비스들은 고도화된 Spring Cloud API 서버를 사용 중이지만, 몇몇 서비스는 프론트 앱/웹의 고도화가 필요하여 아직 적용하지 못한 상태다.
다만, 이제는 고도화 Spring Cloud API 서버까지 작업할 일들이 생겨 소스코드를 오픈하고 인수인계를 받고 있다.

얼른 모든 서비스가 고도화된 Spring Cloud API 서버로 교체되는 그 날만을 기다리고 있다.


그외 작업

1. FCM HTTP v1 API 마이그레이션

기존에 여러 서비스에서 앱 푸시알림 기능을 FCM REST API를 사용하고 있었다.
다만, 2024년 6월 20일부로 레거시 서비스를 종료하고, HTTP v1 API로 마이그레이션하라는 지침이 생겼다.

다행히 FCM에서 마이그레이션 가이드를 잘 작성해놓았지만, 역시나 문서는 모든 사람들에게는 친절하지 않았다.. 하하.. 결국 마이그레이션이 끝난 후에 직접 메뉴얼을 새롭게 작성하여 사내기술문서에 정리해놓은 상태다.


2. 개발환경 DB 백업 자동화 구축

현재 상용 DB는 AWS RDS를 이용하여 스냅샷을 자동으로 생성하는 방식으로 백업을 진행한다.
다만, 개발 DB의 경우는 온프레미스 서버에서 실행하여 관리하는 방식으로 백업을 진행하지 않고 있었다.

따라서 백업 정책을 수립하고, mysqldump를 이용해 백업 스크립트를 작성한 뒤 cron에 등록하여 자동화를 진행하고 있다. 참고링크


3. AWS RDS 모니터링 구축하기 (비용 최적화)

이전에 AWS CloudWatch를 이용해 모니터링을 구성하고 활용하는 방법을 알아봤지만, 비용이 발생한다.

스타트업에서는 비용을 최대한 줄이는 것에도 굉장히 중요한 작업이기 때문에 사용하지 않는 방법을 찾아보았고,
결국 RDS Exporter라는 오픈소스를 이용해 RDS의 메트릭을 수집하고, 프로메테우스와 그라파나를 이용해 모니터링을 구축했다.

물론, 이 과정에서 불필요한 메트릭은 불러오지 않도록 수정하고, 메트릭을 호출하는 주기를 조정하는 등의 작업을 수행하였다. 오픈소스를 다루는 작업에 조금 더 숙련도가 늘었다.


4. AWS CLI로 EC2 인스턴스 백업 자동화 구축

현재 AWS EC2 볼륨에 대한 스냅샷을 AWS 콘솔에서 주기적으로 백업을 진행하고 있지만,
장애가 발생했을 경우 백업해둔 스냅샷을 가지고 얼른 새 인스턴스를 실행할 필요도 있다.

따라서, 장애 발생시 신속한 복구를 할 수 있도록 아래 단계에 맞춰 쉘 스크립트를 작성했다.
1. AWS CLI 사용 환경 구성 (처음에만)
2. AWS EC2의 EBS 스냅샷 생성하기
3. 스냅샷 실행시 필요한 정보 조회 (AMI ID, Instance ID, Instance Type, SecurityGroup ID, Subnet ID)
4. 스냅샷 실행


5. 송아리당뇨 프리미엄 서비스

이번에 송아리당뇨에서 프리미엄이라고 부르는 정기 구독 서비스를 출시했다.
결제는 구글 플레이스토어/애플 앱스토어에서 인앱 결제로 이루어지기 때문에 컨트롤 할 수가 없다.

따라서, 결제 정보 저장 시에 결제내역을 검증하거나, 만료된 사용자를 검출하기 위한 스케줄러 기능을 만들었다.
두 스토어에서 제공하는 구독 상태가 다르기에, 공통 처리 부분과 별개 처리 부분을 기준을 잡아야 했다.

실제 결제가 이루어지는 서비스이기에 개발하는 기간 동안 제일 예민했던 것 같다.
배포를 앞두고 있으니, 장애가 발생하더라도 신속한 대응을 할 수 있길~~..


사내발표

요새는 사내 발표에서 인프라/모니터링에 대한 비중이 많이 늘었다. 나열하고 나니 양이 많아 뿌듯하다.


마무리

지난 1년 사이에 인프라/모니터링 구축에 많이 시간을 투자하는 덕에 기술이 다양해진 것 같다.
아무리 코드를 짠다고 한들, 안정적인 서비스를 운영하려면 필수적인 항목이니 재밌기도 하다.

앞으로도 재미를 잃지 않고, 오래 개발자로 일하는 내가 되길 바라며!

profile
백엔드 개발자로 등 따숩고 배 부르게 되는 그 날까지

2개의 댓글

comment-user-thumbnail
2024년 9월 29일

벌써 2년차시라니!! 취업 후에도 여전히 열심히 하시는 모습이 멋있어요! 👍

1개의 답글