개발/Spring&SpringBoot 6

단위테스트 (Unit Test) 작성하기

Mockito 사용해서 Unit Test 하기 API에 평점 순으로 내림차순 정렬되는 기능과 평점이 0점일 경우 결과 리스트에서 제외시키는 기능을 추가하면서 service단 unit test를 작성했다. MovieService에서는 MovieRepository를 의존하고 있기 때문에 @Mock으로 Repository를 모킹했다. 이렇게 하면 실제 naverApi를 호출하는 게 아니기 때문에 아래 코드와 같이 Mockito를 이용해 결과값을 만들어줘야 한다. Mockito.when(movieRepository.findByQuery("해리포터")).thenReturn(getStubMovieList()); given, when, then으로 구성했고, 출력값을 검증하는 방식으로 테스트를 작성했다. @Exten..

Spring DI와 IoC

스프링의 중요한 특징인 의존성 주입(DI)와 제어권 역전(IoC)에 대해 정리해보았다. 1. DI(Dependency Injection) 의존성 주입 하나의 객체가 다른 객체의 의존성을 제공하는 테크닉. 의도는 객체의 생성과 사용의 관심을 분리하는 것이다. 이는 가독성과 코드 재사용을 높혀준다. 의존성이 뭐야...? class MemberService { private final MemberRepository memberRepository = new MemoryMemberRepository(); } 위의 코드를 보면 MemberService 클래스 내부에서 MemberRepository 객체를 생성하고 있다. MemberServicef클래스가 MemberRepository클래스를 의존하고 있다고 말할 수..

RestTemplate 이용해서 naver 검색 API 사용하기

프로젝트에서 소셜 로그인으로 카카오 API를 이용해서 RestTemplate을 접했지만 직접 구현한 부분이 아니라 잘 모르고 있었다. study하면서 RestTemplate를 이용해서 naver 검색API 서버를 만들어봤다. 현재 현업에서는 보통 WebClient를 사용하지만 설정이 복잡하기 때문에 Study 초반에는 RestTemplate을 사용해서 API호출하는 방식을 알아보기로 했다. RestTemplate이란? Spring에서 제공하는 HTTP Client로 REST API 호출을 위한 함수를 제공하는 클래스 HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지킨다. * RestTemplate 설정 RestTemplate 동작과정에서 보면 실질적으로 ClientHttpRequest가 HTT..

Spring global 예외처리 방법

Client와 Server간의 HTTP 통신 시 문제가 있는 상황이 발생했을 때 상태 코드에 따라서 에러처리를 하는 것이 중요하다. controller 에서 API요청을 했을 때, response 값이 없을 경우에 프론트단으로 빈 리스트가 아닌 에러를 던져주기로 했다면 Response body에 어떤 메시지를 던져줄 것인지 정해야 한다. 아래와 같은 기본 포맷을 사용하는 경우도 있지만, 보통 현업에서는 프론트엔드 개발자와 서버 개발자가 협의해서 포맷을 정한다고 한다. * 스프링이 제공하는 ResponseEntity 클래스 사용 * ResponseEntity HTTP response object를 위한 Wrapper - 선언 가능 * HTTP status code * HTTP headers * HTTP b..

POJO란??

POJO(Plain Old Java Object) 명확하게 이거다 하고 정의 내리기는 어려워서 왜 나왔는지, 목적은 무엇인지 이해하는 데 초점을 두었다. 스프링의 핵심은 POJO이다. 위의 그림은 스프링으로 개발한 애플리케이션의 기본 구조를 보여준다. 스프링 애플리케이션은 POJO를 이용해서 만든 애플리케이션 코드와, POJO가 어떻게 관계를 맺고 동작하는지를 정해놓은 설계정보로 구분된다. DI의 기본 아이디어는 유연하게 확장 가능한 오브젝트를 만들어두고 그 관계는 외부에서 다이나믹하게 설정해준다는 것이다. 이런 DI의 개념을 애플리케이션 전반에 걸쳐 적용하는 것이 스프링의 프로그래밍 모델이다. 스프링의 주요 기술인 IoC/DI, AOP와 PSA (Portable Service Abstraction)는 ..

빌더 패턴(Builder Pattern) 만들기 + Lombok이용

이번 주 프로젝트 과제 테스트코드가 Builder로 작성되어 있어 공부해보았습니다. ◆ Builder pattern이란? 생성 패턴 중 하나로 많은 인자를 가진 객체의 생성을 다른 객체의 도움으로 생성하는 패턴. * 생성패턴은 인스턴스를 만드는 절차를 추상화하는 패턴이다. User 클래스 @NoArgsConstructor @AllArgsConstructor public class User{ private String name; private int age; private int height; private int weight; } 객체를 만드는 대표적인 방법에는 생성자 패턴이 있다. User user = new User("snoopy", 10, 120, 50); User user = new User("s..