반응형
현재 진행하고 있는 "오디"프로젝트는 다음과 같이 3가지 환경으로 구성되어 있다.각 환경에 대해 간단히 설명하자면Local 환경은 각자 기능을 개발 해 PR을 보내는 용도.Dev 환경은 EC2로 애플리케이션이 실행되고 있어 Local 환경에서 개발된 PR을 Merge하면 Dev 서버로 배포하여 클라이언트와 서버가 기능 동작을 테스트하는 용도.Prod 환경도 EC2로 애플리케이션이 실행되어 있고 실제 운영을 위한 아키텍처로 구성이 되어 있으며Dev에서 테스트한 기능들이 문제가 없을 때 배포하여 실제 서비스를 하는 용도로 사용하고 있다. 문제 상황그리고 각 환경들은 다음과 같이 각자 다른 DB를 사용하고 있다.현재 필자의 프로젝트는 dev, prod 환경에서 do-auto validate로 스키마를 검증하고..
현재 오디 프로젝트는 가용성과 읽기/쓰기 작업의 부하 분산을 위해 다음과 같이클라이언트가 요청을 보내면 Ody EC2가 요청을 받고DB 접근이 필요할 때 쓰기 작업, 읽기 작업을 구분해 적절한 DB에 요청을 보내고 응답을 받는 구조로 되어 있다.그렇다면 애플리케이션에서 어떻게 쓰기 작업, 읽기 작업을 구분해 적절한 DB에 요청을 보내고 응답을 받을 수 있을까 ?@Transactional 어노테이션으로 write, read DB를 구분해 연결하기@Transactional 어노테이션의 readOnly 옵션으로 쓰기, 읽기 작업을 구분해 적절한 DB에 요청을 보내는 방법을 알아보자.application.yml에 WRITE / READ DB 주소 설정우선 다음과 같이 datasource를 write와 read로..
ArgumentCaptor란?ArgumentCaptor는 Mockito 프레임워크에서 클래스로, Mock 객체의 메소드가 호출될 때 전달되는 인자를 이름 그대로 "캡처"하고 검증하는 데 사용된다.ArgumentCaptor는 복잡한 객체나 람다 함수와 같은 인자를 검증할 때 매우 유용하게 사용할 수 있다. ArgumentCaptor Mokito 공식 문서https://site.mockito.org/javadoc/current/org/mockito/ArgumentCaptor.html ArgumentCaptor (Mockito 2.2.7 API)Use it to capture argument values for further assertions. Mockito verifies argument values i..
이번 프로젝트에서 민감한 설정(DB 계정, 비밀번호 등)을 private 레포지토리에 저장하고 이 레포지토리를 서브모듈로 사용해 관리하고 있었다.하지만 서브모듈을 사용하는데에 다음과 같은 많은 번거로움이 있었다.서브모듈을 포함하고 있는 부모 레포지토리는 서브모듈로 적용한 레포지토리의 커밋 내역을 참조하고 있기 때문에 서브모듈에 수정사항이 생겼다면 꼭 서브모듈 먼저 push 후 메인 프로젝트를 push 하여야 한다.서브모듈로 적용한 레포지토리에 변경사항이 부모 레포지토리에 바로 반영되지 않으므로 서브모듈을 사용하는 프로젝트를 관리할 때 서브모듈의 상태를 항상 확인하고 변경사항이 있다면 update 해주어야만 반영된다.이러한 주의점들을 지켜주지 않으면 프로젝트를 진행하면서 서브모듈의 이전 커밋 내역을 들고와..
java나 hibernate에서 예외 검증을 위한 Validation(검증) 어노테이션들을 제공한다.아래는 자바에서 제공하는 검증 어노테이션들이다.많은 어노테이션들을 제공하지만 우리가 원하는 검증을 위한 어노테이션이 없을 수도 있다.이를 위해 커스텀 검증 어노테이션 만드는 법을 알아보자.특정 클래스에만 적용되는 커스텀 Validator 상황클라이언트 요청을 받을 때 시작 날짜, 종료 날짜를 받아 기간이 30일 내의 요청인지 확인하는 상황.커스텀 어노테이션 생성@Constraint(validatedBy = DateRangeValidator.class) // 필드 값을 검증할 검증 클래스를 지정@Target(ElementType.TYPE) // 어노테이션을 적용할 수 있는 위치 설정 (TYPE : 클래스에 ..
현재 진행하고 있는 "원만한 친구 사이를 위한 약속 지킴이 서비스" 오디(ody) 프로젝트는친구들이 약속에 지각하지 않도록 돕기 위해 친구들의 출발 위치와 만나기로 약속한 장소까지 걸리는 소요 시간을 외부 API를이용하여 계산해 출발 시간 알림을 보내준다. 알림의 경우에는 안드로이드에 푸쉬 알림을 보내기 위해 FCM을 사용한다.(FCM 연결 및 알림 전송에 대한 부분은 아래 포스팅에서 설명한다.)2024.07.20 - [◼ JAVA/Spring] - [Spring] Firebase Cloud Messaging(FCM)으로 푸시 알림 전송 기능 구현 그렇다면 스프링에서 사용자별 특정 시간에 FCM에 알림을 전송하기 위해서는 어떻게 해야 할까?정적 스케줄링과 동적 스케줄링이란?그렇다면 정적, 동적 스케줄링..