프론트엔드 3명, 백엔드 3명으로 팀을 구성해서 최종 프로젝트를 진행하게 됐다. 이번 최종 프로젝트는 배포까지 해볼 예정인데, 최종적인 배포 환경을 구축하기 전 개발 단계에서도 QA, 멘토링 부분에서 더 편하게 하고자 미리 1차 배포를 해놓고 하기로 했다. 1차 배포 구조 1차 배포 요청 흐름도 우선 위와 같은 구조로 배포 환경을 세...
1차 배포 환경 구축하기
대용량 트래픽 대응 (선착순 이벤트 응모 시스템 구현기)
이번 프로젝트 선택 요구사항에 대용량 트래픽을 다뤄보는 요구사항이 있었다. 선착순 응모 시스템을 구현해야 한다. 선택사항이었지만 이런 상황을 가정해서 구현해본 경험이 없었고, 시간도 충분했기 때문에 하기로 결정했다. 요구사항은 아래와 같다. 자녀 성향을 응모하는 100명 한정 선착순 이벤트 페이지 시스템을 구현한다. 응모...
프로메테우스, 그라파나
애플리케이션에서 발생한 메트릭을 그 순간만 확인하는 것이 아닌, 과거 이력까지 함께 확인하려면 메트릭을 보관하는 DB가 필요하다. 이렇게 하려면 어디선가 메트릭을 지속해서 수집하고 DB에 저장해야 한다. 이 역할을 해주는 것이 프로메테우스이다. 그리고 프로메테우스가 DB라고 하면, DB에 있는 데이터를 불러 사용자가 보기 편하도록 보여주는 대시보...
마이크로미터, 메트릭
서비스를 운영할 때 애플리케이션의 CPU, 메모리, 커넥션 사용, 고객 요청 수 같은 많은 지표들을 확인하는 것이 필요하다. 그래야 어디에 어떤 문제가 발생했는지에 따라 대응할 수 있고 실제 문제가 발생하더라도 원인을 빠르게 파악해 대처할 수 있다. 예를 들어 메모리 사용량이 가득 찬 경우라면 메모리 문제와 관련있는 곳을 빠르게 찾아 대응할 수 있...
프로덕션 준비 기능 (액추에이터와 엔드포인트)
프로덕션 준비 기능 개발자는 애플리케이션을 개발할 때 기능 요구사항만 개발하지 않는다. 서비스를 실제 운영 단계에 올리게 되면 서비스에 문제가 없는지 모니터링하고 지표를 심어 감시해 대처해야 한다. 이렇게 서비스 운영 단계에서 필요한 기능들을 프로덕션 준비 기능이라고 한다. 배포할 때 준비해야 하는 비 기능적 요소들을 뜻한다. 지표(met...
좋아요/싫어요 정보에 따른 성향 변경 (+ 카프카 정리)
자녀가 책에 좋아요/싫어요 정보를 남길 수 있는데 그 정보에 따라 선호하는 장르나 선호하는 주제어, 혹은 성향이라고 할 수 있는 MBTI가 바뀌게 되는 시스템을 구현해야 한다. 좋아요/싫어요 누른 모든 책을 조회해서 그 부분을 실시간으로 적용하는 것은 말이 안되고 이미 반영한 책을 제거하는 작업도 필요하기 때문에 좋아요/싫어요를 누르는 행위를 이벤트...
논리/물리 삭제 구현 (+ Spring Batch 정리)
자녀의 성향 정보 히스토리를 삭제할 수 있는데, 그 삭제 정보를 삭제 요청 즉시 논리적으로는 삭제된 것이 맞지만 실제 데이터의 삭제는 한달 뒤 이루어지는 요구사항이 있었다. 이 요구사항을 충족하기 위해 스프링 배치 + 스케줄러를 처음 사용해보아서 스프링 배치에 대해 정리해보고 어떻게 적용하고 테스트해보았는지 정리해보려고 한다. 스프링 배치 배치란...
트랜잭션 분리를 통한 개선
현재 유플러스 유레카 과정에서 유플러스 측에서 제시해준 요구사항을 바탕으로 자녀에게 개인화 맞춤 도서를 추천해주는 서비스를 개발하고 있다. 3주간의 개발 기간 중 첫 1주이다. 그 중 MBTI 관련 설문의 답변, 선호 장르, 선호 주제어를 고른 답변을 받아 결과를 계산해 저장하는 로직을 작성한 상태였는데, 현업자분들이 피드백을 주셨다. 그 피드백...
Event 처리 방식으로 친밀도 랭킹 효율적으로 계산하기 (+Event 정리)
이전 포스트에 이어서 캐시 기능 구현 이후에 고민했던 점과 그 부분을 어떻게 해결했는지 정리해본다. 캐싱 구현 이후 고려했던 부분 기존에 캐싱을 통한 조회를 구현하여 친밀도 랭킹 확인을 조금 더 효율적으로 할 수 있었다. 그런데 현재 상태로는 만족할 수 없었다. 기능이 불완전했다. 왜냐하면, 만약 새로운 유저의 프로필이 등록되었을 경우나 기존 ...
캐시 방식으로 친밀도 랭킹 효율적으로 확인하기 (+Redis 정리)
현재 유플러스 유레카 과정을 수료중에 있다. 교육을 받으면서 팀 프로젝트를 진행했는데 프로젝트가 끝나고 추가적으로 기능을 구현하면서 그동안 써보지 않았던 기능, 그리고 사용은 했었지만 따로 정리하지 않았던 기능들에 대해 정리하고자 한다. 기존 진행 우선 현재 어떤 프로젝트를 했고, 어떤 기능을 구현하다가 이 글을 정리하게 되었는지 간단하게 설명하고...