Search

적적한 주말의 개발 생활 회고

생성일
2024/04/20 13:02
태그
회고
날짜
2024/04/20
3 more properties

최근에 나는 어떤 고민을 하고 있는가

프로젝트

데이터독 체험기간 종료

데이터독 체험 기간이 종료되었다. 현재 활발히 사용하고 있는 제품은 Log Management, Rum 그리고 APM 정도인데 On Demand로 비용을 내고자 하니 생각보다 비용이 많이 들었다.
AWS에서 제공하는 매니지드 서비스도 함께 이용하는 방법을 고려하고 있다. 최근에 새롭게 작업 중인 서버에서는 AWS Cloudwatch에 로그를 올려보고 있다. 작업 과정은 생각보다 간단했다.
관련 IAM 생성 후 EC2에 부여
AWS Cloudwatch에 로그 그룹 생성
github actions workflow에 docker 로그 관련 run option 변경
이후 배포를 진행하니 로그가 잘 쌓이고 있었다.
정규표현식에 익숙하지 않기도 하고, Cloudwatch가 익숙하지 않아서 제공하는 다른 기능들을 이용하려면 시간이 조금 더 필요할 것 같다.
(Regex 책도 한 권 샀다!)

CICD 변경

현재는 미비한 수준의 트래픽이지만 사용자 증가는 지속적으로 이루어지고 있다. 이미 사용자 3000 명이 넘은 지도 꽤 지났고, 증가 트렌드를 보면 만 명 이상의 사용자가 유입되는 시기도 그리 멀지 않은 것 같다.
그러다보니 예상치 못한 문제들도 여럿 발생했다. 무차별 공격도 여러 차례 들어왔었고, 서버 메모리 문제로 스케줄러가 동작하지 못하는 문제도 있었다. 다른 건 몰라도 우선 리소스가 부족한 서버의 스케일업이 우선되어야 한다고 생각해서 메인 서비스 서버의 스케일업도 최근에 진행했다.
하지만 언제까지 스케일업을 진행할 수는 없는 노릇이다. 여러 장애에 대응하기 위해 서버의 아키텍쳐를 변경해야하는데 AWS에서 제공하는 서비스를 많이 쓰고 있으니 배포도 AWS 제품을 사용하는 방향으로 바꾸고 있다. 로드밸런서를 두고 배포 전략을 관리하려면 이 방법이 리소스가 적게 들 것 같다.
지금은 우선 CI는 기존 형태를 유지하고 배포 단계만 옮기는 작업을 진행중이다.

계속 추가되는 서버

포인트를 따로 관리하는 캐싱 서버, 사용자 소켓 연결을 관리하는 소켓 서버, RDS와 서비스 API 서버, 조만간 추가 될 인증서버 등 서버가 지속적으로 추가되고 있다.
왜 하나의 서비스에서 모든 제공을 제공하지 않는지, 어떤 문제를 겪었는지는 길어질 것 같으니 다른 글에서 작성하자.

회사

데이터베이스 공부

회사에서 다루는 데이터 양이 꽤나 많고 쿼리를 작성할 일도 많았다. DB 공부를 하고 싶은데 그보다 우선시 되어야 할 공부가 많아 보여서 고민이다.

FastAPI 공부

FastAPI는 신생 프레임워크인 탓에 정보가 너무 적다. 공식 문서를 통해서 기본기는 익혔고, 깃헙 repo의 issues를 통해서 작동 원리 등에 대해서 조금 더 깊게 알 수 있게 되었다. 최근에 궁금한 부분을 찾아 보려고 구현 코드를 보고 있는데 눈이 너무 아파서 조금 더 효율적인 방법이 무엇이 있을까 고민중이다.

백엔드 엔지니어라는 직무에 대해서

백엔드 엔지니어란 무엇일까? 어떤 역량이 필요할까?

어떤 장애를 다뤘나

프로젝트

프로젝트에서 발생했던 장애에 대해서는 다른 글로 정리해야겠다.

제품 구매 목록 캐싱 문제

상품 정보와 이용 약관은 데이터베이스에 저장 돼 있는데, 양이 꽤 돼서 통신 비용을 줄이기 위해 서버의 메모리에 캐싱해두고 사용하고 있었다. TTL은 10분이었다.
서드파티로 카카오선물하기 서비스를 이용하고 있었는데, 여기 올라온 제품은 가격 인상 등의 이유로 빈번히 사용 불가 상태로 변경된다. 그리고 그게 문제가 되었다.
제품 구매 기능이 생기고 얼마 후 특정 제품에 대해 해당 이슈가 발생했다. 데이터베이스를 수정해도 서버에 캐싱된 데이터는 삭제할 수 없었다. 데이터베이스에서 제품 정보를 삭제했지만 10분이라는 시간 동안 사용자들은 목록에서 해당 제품을 볼 수 있었고, 구매까지 할 수 있었다. 실제로 구매를 요청한 사용자도 있어서 manual하게 같은 종류의 다른 제품을 보내드려야 했다.
이 문제를 해결하고자 데이터를 별도의 NoSQL 데이터베이스로 옮기고 캐싱 메커니즘을 제거했다.

출시 후 앱에서 잘못된 인증 Endpoint를 보고 있는 문제

현재는 개발 서버와 운영 서버 두 서버를 운용하고 있다. 새로운 버전의 앱에서 인증 토큰이 만료되었을 때 토큰을 갱신하는 endpoint를 포함한 일부 endpoint가 운영 환경에서 개발 서버로 보내고 있는 문제가 발생했다.
심지어 로그인 API는 운영 서버를 보고 있어서 처음에는 문제를 인지하고 있지 못하다가 특정 시간이 지나면 계속 다시 로그인을 해야하는 문제가 발생했다. 휴대폰을 사용하지 않고 수면을 취하면 포인트를 주는 서비스에서, 아침 기상 시 로그아웃 돼버리는 문제는 치명적이었다.
멘붕이 왔다. 당장 앱을 수정해서 심사 받고 올리는 데도 시간이 걸릴 터였다.
문제를 해결하는 건 앱단이었지만 우선 access token의 만료 시간을 늘려서 시간을 벌었다.

회사

타 팀 서비스 연동 후 세션 권한 문제

타 팀의 서비스를 연동하기 위해 서비스 내에 일부분을 개발하고 테스트했다. 우리 데이터베이스에서 특정 데이터를 조회해서 동적으로 메시지를 생성하고 다른 팀으로 전송하는 형식으로 구현된 부분이 있었는데, 이 부분에서 문제가 생겼다.
테스트 중에는 문제가 없음을 확인했는데 운영환경에서 작동하지 않는 문제가 발생했다.
주요 원인은 데이터베이스 세션에 있었다. 여러 스키마에서 데이터를 조회해서 메시지를 생성하는데, 하나의 세션으로 권한이 없는 다른 스키마의 데이터까지 조회하고 있었다. 테스트할 때는 모든 권한을 가진 세션을 이용해서 문제가 발생하지 않았었다.
테스트 환경에서 데이터베이스 세션이 운영 환경과 다르게 구현 돼 있는 부분을 놓쳤다. 최근에 아키텍쳐가 변경되는 과정에서 놓치고 있던 부분인 것 같다.
또한 로깅에 대해서 조금 더 고민하는 계기가 되었다. 회사에서는 Datadog을 사용중인데, 문제가 발생하면 어떤 식으로 로깅을 하면 좋을지 더 고민해봐야겠다.

어떤 성장을 이루었나

Postgresql 프로시저 작성에 익숙해졌다

많은 양의 PG 프로시저를 작성했다. 데이터를 redshift에서 dump하는 프로시저와 변경된 형식에 맞게 Data Migration을 진행하는 프로시저다.
부족함을 많이 느꼈다. 익숙해졌을 뿐 정말 잘 작성하고 있는가에 대한 고민은 아직 들고 있다.

FastAPI의 작동 원리에 대해 더 알게 되었다

FastAPI의 동작 원리, 쓰레드 사용법과 비동기 작동 방식에 대해 아주 조금은 알게 되었다. 깊게 파고 싶은데 회사에서 성과를 내기 위해 이 부분이 직접적으로 기여할 수 없다는 점이 아쉽다.

네트워크 관련 지식이 늘었다

혼자 남는 시간에 네트워크 공부를 했다. 업무와 직접적인 관련은 없지만 백엔드 엔지니어로서 꾸준히 공부해야 할 분야 중 하나라고 생각해서 관련된 책을 읽었다. 더 깊게 파고 싶다.

AWS 서비스를 더 잘 사용할 수 있게 되었다

회사에서 사용하고, 프로젝트를 진행하며 접한 AWS 서비스들을 편하게 사용할 수 있게 되었다. 하지만 알게된 건 사용법과 비용같은 바로 눈 앞에 마주한 문제들이라서 아쉽다.
서비스 아키텍쳐나 더 효율적으로 사용할 수 있는 방법에 대해서 인터넷 선배님들의 고견을 찾아봐야겠다 생각했다.

어떤 부족함을 느꼈나

Project

컨테이너 관리와 쿠버네티스

회사

프로시저 작성

해답을 알려줘

스터디, 네트워킹은 어떻게 진행하면 좋을까? 좋은 스터디를 구하고 싶고, 좋은 사람들을 만나서 인사이트를 나누고 싶다.
회사 일과 프로젝트를 제외하면 평일에는 하루 한 두시간 공부하기도 빠듯하다. 이 시간에 회사에서 더 좋은 성과를 내기 위해서 무엇을 공부해야 하면 좋을까?
실무에 익숙해지면서 점점 CS와 멀어지는 것 같다. 비전공자 입장에서는 위기감이 든다.