본문 바로가기

분류 전체보기

(14)
[트러블 슈팅] 랭킹 조회에 로컬 캐시 적용하기 도입[10분 테코톡] 📸소니의 Cache를 보고 프로젝트에 캐시를 적용해보고 싶었다. 그런데 어디에 적용할지 어떤 캐시를 사용할지 고민되었다. 참고로 웹 브라우저 캐시가 아닌 컴퓨터 운영체제에서의 캐시를 적용하고자 했다.  원데이 히어로 프로젝트에서 히어로 점수를 기준으로 히어로 랭킹 조회하는 기능이 있다. 여기서 히어로란 프로젝트 내 도메인 용어로 단기 알바, 심부름 등을 해주는 사람을 뜻한다. 이러한 랭킹 조회에 로컬 캐시를 적용했고 이번 글에선 캐시 적용 과정에 대해서 이야기해 보겠다. 캐시란 무엇인가?먼저 캐시에 대해서 소개하겠다. 캐시는 데이터나 값을 미리 복사해 놓는 임시 저장소이다. 캐시는 캐시의 접근 시간에 비해 원본 데이터를 접근하는 시간이 오래 걸리는 경우나 값을 다시 계산하는 시간을..
[트러블 슈팅] Testcontainers로 통합 테스트 환경 만들기 (+ Testcontainers를 Spring Bean으로 등록) 배경이전 글, [트러블 슈팅] 멀티모듈에서 JaCoCo와 SonarCloud를 적용하여 코드 품질 높이기에서 인프라 영역이 나타났고 그로 인해 통합 테스트가 어려워졌다고 이야기했다. 테스트는 멱등성(Idempotent)을 보장하도록 작성되어야 한다. 멱등성이란 어떤 연산이 여러 번 수행되어도 동일한 결과를 내놓는 성질을 의미한다. 결국 테스트는 한 번만 수행한 결과와 여러 번 수행한 결과가 동일해야 한다. 그렇다면 결정적인 테스트 결과를 가져오도록 통합 테스트를 구성하려면 어떻게 해야할까? 원데이히어로 프로젝트 내 통합 테스트에서 사용할 주요 모듈은 웹 애플리케이션 서버(WAS)와  MongoDB이다. 테스트를 위해서 이 두 가지 모듈이 어딘가에서 실행되어야 한다. 프로젝트에서 스프링 부트를 사용하고 있..
[트러블 슈팅] 멀티모듈에서 JaCoCo와 SonarCloud를 적용하여 코드 품질 높이기 도입어느 날 팀원이 SonarCloud를 적용한 글을 공유했다. 글을 읽어보니, 빠르고 간단하게 코드 품질을 높일 수 있을 것 같아 원데이히어로 프로젝트에 도입하기로 했다. 원데이히어로 프로젝트는 멀티모듈이다. 이번 글에서는 멀티모듈에서 jacoco와 SonarCloud를 어떻게 적용했는지 왜 도입했는지 이야기 해보겠다. SonarCloud란? SonarCloud은 정적 코드 분석 도구 중 하나인 SonarQube의 SaaS 버전이다. 여기서 정적 코드 분석이란, 코드 레벨에서 발견할 수 있는 코드 스멜, 잠재적 결함, 컨벤션 체크, 보안 취약점 등을 분석해서 보고해준다. SonarCloud는 SonarQube와 달리 서버에 설치하지 않아도 되지만, SonarQube만큼 많은 기능을 제공하지 않는다. 하..
[트러블 슈팅] 이벤트로 알림 서비스와 느슨한 결합 만들기 원데이히어로 프로젝트에서 알림 기능을 구현했다. 프로젝트 요구사항에 따르면 미션 플로우가 진행될 때마다 실시간으로 알림을 보내줘야 했다. 여기서 미션은 프로젝트 내의 도메인 용어로 단기 알바, 심부름 요청을 뜻한다. 이번 글에서 실시간 알림을 구현하면서 겪었던 문제와 이러한 문제를 어떻게 해결했는지 그리고 남아있는 문제는 무엇인지 공유해보겠다. 먼저 미션 서비스 로직 수행부터 알림을 보내는 로직까지 코드는 다음과 같은 흐름으로 동작한다.미션 서비스 로직 수행RDB에서 알림을 위한 데이터를 조회NoSQL에 알림을 저장SSE(Server-Sent-Event)를 통해 알림을 전송여기서 왜 알림 서비스의 메인 데이터베이스를 NoSQL로 선택했는지, SSE로 실시간 알림을 구현했는지는 이 글의 주제와 동떨어진 이..