업무일지
2022.05.16 쿼리 최적화를 통한 API 속도 개선
2022.05.16 쿼리 최적화를 통한 API 속도 개선
2022.05.21두 명의 동료분이랑 함께 API 속도 개선 작업을 진행했다. 나는 검색 API를 담당했고, 동료분은 메인 페이지에서 제일 먼저 호출되는 API를 주로 개선했다. 사내 메신저 공개채널에 검색 API 속도 개선 작업 결과를 공유했고, 댓글로 어떤 식으로 작업을 진행했는 지 세부적으로 공유했다. 이런 개선 작업은 꾸준히 지속되야하기 때문에 다음 작업자들이 개선을 할 때에 이 과정을 참고해서 더 좋은 방법으로 개선한다면 좋겠다고 생각한다. 검색 페이지 뷰가 2~3배 증가했다! 사용자 한 명당 검색 페이지를 3~4번 정도 봤었다면, 개선 후에는 한 명당 10 번 정도의 페이지를 보게 된 것이다. 그리고 내가 한 작업은 아니지만 8~12 초에서 1~3초로 단축된 API도 있었다 😊 개선 작업이 진행되었던 윤곽과 세..
2022.04.20 AWS 인프라 구성하기 사내 세미나
2022.04.20 AWS 인프라 구성하기 사내 세미나
2022.05.09사내에서 AWS 인프라를 세팅하는 과정을 세미나 형식으로 진행하게 되었다. L 서비스를 함께 개발했던 동료분이 대부분의 API 구현을 해주셨고, 나는 인프라 같이 보이지 않는 일들 위주로 진행했다. 함께 QA용 서버를 구성하면서 인프라 인수인계 해달라고 요청주셔서 겸사겸사(!) 팀원들 대상으로 AWS 세미나를 진행했다. 진행방식 온라인으로 진행됐다. 동료분이 드라이버(Driver)로 화면을 공유해주셨고, 내가 네비게이터(Navigator)로 진행했다. 팀원분들에게는 구글밋으로 Optional로 초대해서 혹시 흥미 있으신 분들은 온라인 미팅 참석하실 수 있게 했는데, 예상외로 모든 팀원분들이 참석해주신다고 하셔서 인수인계 목적에서 세미나 성격이 더 강해졌다. 그래서 듣는 사람이 인프라에 낯설 수도 있다는 ..
2022.01.21 CodeDeploy 배포 오류 해결
2022.01.21 CodeDeploy 배포 오류 해결
2022.02.19갑자기 코드디플로이 배포 실패가 나기 시작했다. 배포 설정을 변경한 사람도, 서버에 직접 접속해 작업한 사람도 없다. 어느 순간부터 배포가 안되면서 AWS CodeDeploy 콘솔에서 아래와 같은 오류가 발생했다. The overall deployment failed because too many individual instances failed deployment, too few healthy instances are available for deployment, or some instances in your deployment group are experiencing problems. 현상 이게 또 오류 원인과 현상이 기가 막히게 달라서 혼란스러웠다. AWS 오류 메시지로 원인 파악이 어려워서 EC2..
2021.10.06 첫 사내 세미나 (Master/Slave DB)
2021.10.06 첫 사내 세미나 (Master/Slave DB)
2021.12.24사내에서 처음으로 세미나를 진행했다. 다행히 온라인이라 스크립트 작성해서 보면서 읽을 수 있어서 자연스럽게 말하려고 연습하느라 죽을 뻔 😇 세미나 주제는 7월에 발생했던 DB 장애의 원인과 해결 그리고 트러블슈팅을 간략히 소개하고 구조적으로 남아있는 Master/Slave DB 구조의 한계에 대해 말하고 팀 차원에서 개선 방향을 논의하기 위해서였다. Master/Slave DB 구조의 장애 내용과 개선 방안에 대해서는 아래 링크에 정리해두었다. (참고로 Master/Slave 라는 단어 대신 Writer/Reader라는 단어를 사용하는 흐름으로 바뀌었다) 2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방안 2021.09.23 DB 장애로 배운 Master/Slave DB..
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.09.23 DB 장애로 배운 Master/Slave DB 아키텍처 개선 방향
2021.12.092021년 7월, DB 장애가 발생했다. 현 회사의 DB는 Writer 인스턴스 1대와 N개의 Reader 인스턴스로 이루어져있는 Master/Slave 구조인데, Writer에 허용량 이상의 세션이 물리면서 DB가 죽게 됐다. 다음부터는 동일한 원인으로 DB 장애가 쉽게 발생하지 않도록 단기적, 장기적으로 개선해나가는 과정을 정리한다. 👉 장애 원인과 즉각적인 조치 원인 : Writer 인스턴스에 느린 조회 쿼리를 동시 허용량보다 많이 시도했는데, 사용중인 언어에 풀링이 안되고, 사용중인 AWS Aurora 버전에 버그가 있었음 조치 내용 : Writer 인스턴스에서 조회하는 쿼리 일부 → Reader 인스턴스에서 조회하도록 변경 느린 조회 쿼리 → full-scan 타는 느린 조회 쿼리에 인덱스 적용..
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론)
2021.09.02 로그인 세션을 Redis로 이관 (무상태 웹 아키텍쳐, CAP 이론)
2021.10.16CAP Theorem, 오해와 진실요약 각 서버에서 관리중이던 로그인 세션을 별도의 공유 저장소(Redis)로 이관했다. 다양한 신규 서비스가 생기면서 로그인 세션에 접근해야하는 일이 발생하게 되면서 아키텍처를 변경해야할 필요가 생기게 되었다. 기존의 상태 의존적인 아키텍처를 통해 어떤 제약이 있었는 지 살펴보고, 이를 개선한 무상태 아키텍처에 대해 짧게 설명한다. 그리고 세션 공유 저장소로 Redis를 선택하게 되면서 어떤 기준으로 클러스터를 구성하였는지 정리해본다. 아키텍처 개선 뒤 얻게 된 이점에 대해서도 짧게 정리한다. 👉 기존의 상태 의존적인 아키텍처 기존에는 사용자들에 대한 로그인 세션 정보가 각 웹 서버 내부에서 파일로 관리 중이었다. (별도 인증 서버 없음) 특정 사용자의 로그인 세션 정..
2021.08.31 Github Actions으로 배포 자동화하기
2021.08.31 Github Actions으로 배포 자동화하기
2021.10.10요즘 CI/CD 툴로 Github Actions가 핫한 것 같다. 신규 서비스의 CI/CD 구성을 위해 팀 내에 의견을 여쭤봤는데 Github Actions를 써보라고 제안을 받았다. 현재 서비스들은 젠킨스를 사용해서 자동배포를 하고 있었는데, 팀 내에서 인프라 작업은 최대한 AWS를 활용하는 쪽으로 가고 있는 추세라 확인차 여쭤봤다. 개인적으로 빌드 혹은 배포를 위해 Github Actions를 쓰는 게 무료기도 하고, 코드와 함께 빌드/배포 상태를 GUI로 확인할 수 있다는 점이 좋았다. 그래서 스프링부트를 배포하기 위해 Github Actions와 AWS CodeDeploy를 사용해 배포 자동화를 구성하게 됐다. CI/CD에서 단계를 구분하기 위해 지속적인 통합, 지속적인 제공, 지속적인 배포 등으..
2021.08.15 AWS CloudWatch로 로그 취합
2021.08.15 AWS CloudWatch로 로그 취합
2021.10.10AWS CloudWatch로 로그를 취합하면 AWS에서 제공해주는 쿼리나 대시보드 같은 기능을 이용할 수 있다. DB에서 조회하는 것 처럼 많은 기능을 제공해주지는 않지만, 정규식으로 조회하는 것 보다는 더 유용하고 사용하기 좋았다고 느껴졌다. 그리고 대시보드 기능도 클릭 몇 번이면 만들 수 있어서 한번에 현황을 파악하기 좋은 거 같다. 그 전에는 서버 로그를 인스턴스 내에 파일로 남겼는데, 이 방법의 장점은 설정하기 간단하다는 점이다. 단점은 서버가 죽었을 때 로그에 접근할 수 없고, AWS 로드밸런서를 붙여 오토스케일링 기능을 사용하면 여러 인스턴스가 생기고 사라지는데, 각 인스턴스에 접근해 로그를 뒤져야한다는 번거로움이 있었다. 내가 작업하는 신규 서비스의 서버 로그를 남기기 위해 CloudWatc..
2021.08.11 재고 개념의 트랜잭션 처리 (쿠폰 다운로드)
2021.08.11 재고 개념의 트랜잭션 처리 (쿠폰 다운로드)
2021.09.18현재 운영중인 서비스의 쿠폰 기능은 시스템/관리자 -> 특정 사용자들 에게 쿠폰을 발급해주는 기능이었다. 이번에 쿠폰 기능을 고도화하여, 상품 페이지에서 사용자들이 직접 쿠폰을 다운로드 받을 수 있도록 개선하였다. 관리자에서 쿠폰을 등록할 때 다운로드 가능한 수를 기재하고 상품에 매핑해두면 사용자들이 특정 상품 페이지에 접속했을 때 등록된 쿠폰이 노출된다. 이번 TF에서 기술적으로 제일 흥미로웠던 점은 재고 개념의 트랜잭션을 처리하는 것이었다. 그 전에는 이런 류의 로직을 다룰 일 없었는데 이번에 TF를 진행하면서 이 주제로 시니어 개발자분들과 대화를 나눴는데, 모든 의견이 인상적이었고 그 과정 자체가 즐거웠다. 그 대화 과정을 요약하면 아래와 같다. 예시 : 1개만 발급할 수 있는 쿠폰이 있을 때, 사..