본문 바로가기

Spring13

외부 API 장애 대응을 위한 Circuit Breaker 구현(Feat.함수형 프로그래밍) 기존 서버 구성 블로그 검색을 위해 Open api 사용중 카카오 API 하나의 벤더에만 의존 장애 혹은 요청 실패 시 사용자가 여러 번 재시도 하거나 응답시간 길어지는 상황 발생 그래서? 일시적이고 단발성인 에러는 retry 패턴같은 전략을 사용하거나 타임아웃을 줘서 에러를 try-catch 하면 되지만 에러가 지속적으로 발생할 때는 응답을 받지 못한 요청이 타임아웃이 될 때까지 쓰레드풀을 잡고 있는다거나 메모리를 잡아 먹으면서 리소스가 부족해지는 등 다양한 bad 케이스가 발생할 수 있다. 위와 같은 이유로 외부 API 요청에서 장애 발생 시 작업이 실패했음을 받아들이고 타 벤더 API로 교체하기 위한 서킷 브레이커 패턴을 적용하여 교체 로직을 구현하려고 한다. 이 글에서는 서킷 브레이커 패턴에 대한.. 2023. 7. 13.
[SpringBoot] MySQL 연동 1. 스트링부트 프로젝트 생성(gradle 빌드) //기본 dependency dependencies { implementation 'org.springframework.boot:spring-boot-starter' runtimeOnly 'mysql:mysql-connector-java' testImplementation 'org.springframework.boot:spring-boot-starter-test' } 2. 커넥션 정보 작성 h2 DB 사용 시 AutoConfigure에서 설정을 잡아주기 때문에 별도의 설정이 필요없으나 MySQL 사용 시에는 커넥션 정보를 별도로 작성해줘야 한다. driver-class-name com.mysql.jdbc.Driver와 com.mysql.cj.jdbc.Dr.. 2022. 9. 16.
Mockito 사용하기 Mocking의 범위와 용도 Mock 객체를 만들 때 어느 범위까지 만들어야 하는가? 정답은 없지만 슬라이스 테스트에 적용을 고려했을 때에는 가능한 작은 단위의 테스트가 해당 계층 영역 내에서 실행되어야 하므로 실제 테스트를 수행할 객체가 의존하고 있는 컴포넌트 등을 대상으로 하자. Controller에서 의존하고 있는 객체가 있다면 해당 객체에 대해서 Mock 객체를 사용하여 의존성을 일일이 제거해주어야 한다. 예를 들어 Controller 만을 테스트 하고자 할 때 해당 컨트롤러가 사용할 Service를 Mock 할 수 있다. 주의점 Mock을 사용하기 위해서는 내부 구현을 알아야 하며, 테스트 작성 시 테스트의 성공을 의도할 수 있기 때문에 완벽한 테스트라 보기 힘들다. 또 내부 구현이 변경됐을 때.. 2022. 9. 14.
Slice Test 슬라이스 테스트란? 레이어를 하나의 단위로 보는 단위 테스트로 레이어를 독립적으로 테스트하기 위해 Mockito 라이브러리가 함께 활용되기도 한다. 슬라이스 테스트를 하는 이유 @SpringBootTest를 이용하면 모든 테스트를 실행할 수 있으나 단점이 몇가지 있다. 실제 구동되는 애플리케이션의 설정, 모든 Bean을 로드하기 때문에 불필요하게 많은 시간이 소요된다. 테스트 단위가 커서 디버깅이 어렵고 빠른 피드백이 어렵다. 위와 같은 이유로 @SpringBootTest는 통합 테스트에 주로 사용한다. (상황에 따라 슬라이스 테스트에서도 적절히 사용할 수 있다.) 슬라이스 테스트 어노테이션 @WebMvcTest @WebFluxTest @DataJpaTest @JsonTest @RestClientTest.. 2022. 9. 14.
스프링 DB 접근 기술 개요 분류(DB Connector) H2 데이터베이스 설치 순수 JDBC 스프링 JDBC Template JPA 스프링 데이터 JPA H2 데이터 베이스 테스트 용도로 가볍고 편리하게 사용할 수 있으며 웹 UI를 제공한다. 순수 JDBC 자바에서 DB에 접속할 수 있도록 하는 자바 API 과거 오래전 사용했던 방식으로 최근에는 사용하지 않는다. 스프링 JDBC Template 기존의 JDBC는 DB 연동에 필요한 객체들을 실행 후 close() 메서드로 닫는 구조적인 반복이 존재했다. 이를 줄이기 위한 템플릿 메서드 패턴과 전략 패턴을 함께 사용하는 API가 바로 JDBC Template 이다. JPA 자바 진영에서 ORM 기술 표준으로 사용하는 인터페이스 모음 JDBC Template를 이용하면 코드의 양은.. 2022. 8. 30.
스프링 테스트 코드 검증(Assertions) 테스트 코드 작성 시 코드 검증을 위해 자주 사용하는 메서드를 정리한다. Assertions 클래스는 JUnit과 assertj 두가지가 있으므로 검증 목적에 맞게 사용한다. assertThat() 비교할 대상을 뒤에 오는 다양한 메서드를 활용해 검증한다. assertThat()을 사용하면 오류 발생 시 기대 값과 실제 값을 모두 콘솔에 출력해준다. 대상 비교 Assertions.assertThat(value).isEqualTo(10000); //org.assertj.core.api.Assertions //대상 내용 값이 같은지 비교 Assertions.assertThat(a).isSameAs(b); //org.assertj.core.api.Assertions //참조 값이 같은지 비교 상속관계 확인 A.. 2022. 8. 13.