본문 바로가기

Backend8

Wiremock을 이용한 테스트 작성기 지난 Feign Client 적용기에 이어서 WireMock을 이용한 테스트 경험을 소개합니다. 서론 이번 프로젝트에서는 기능 개발 시 인수테스트, 통합테스트, 단위테스트를 먼저 작성하고 개발을 진행하려고 노력하고 있습니다. 저는 OAuth 로그인 기능을 맡았고 해당 기능에 대한 인수테스트를 작성하는 과정에서 "어떻게하면 외부 api에 대해 실제 상황에 가까운 테스트를 할 수 있을지"에 대해 고민하게 되었습니다. 일반적으로 사용되는 Mockito를 사용하여 테스트를 진행할 수 있었지만 이 방식은 한계가 있다고 느꼈습니다. 외부 api를 사용할때는 http 요청과 응답, 응답값에 대한 역직렬화 과정 등이 발생하는데 Mockito는 단순히 목객체를 주입받아서 메서드를 호출하는 방식으로 동작하기 때문입니다... 2022. 11. 20.
FeignClient 적용기 서론 현재 진행하고 있는 식당 리뷰 sns 프로젝트에서 유저 로그인 기능의 구현을 담당하고 있다. 카카오 로그인을 구현하던 중, 카카오에서 제공하는 api에 Http 요청을 보내기 위해서는 클라이언트 객체를 사용해야했고 흔히 알고 있는 RestTemplate과 WebClient를 후보에 두고 고민하고 있었다. 그러던 중 쿠킴의 소개로 Feign Client의 존재를 알게 되었다. 💫 Feign Client란? Feign Client란 Netflix에서 개발한 Http Client다. (HttpClient는 Http 요청을 간편하게 만들어서 보낼 수 있도록 돕는 객체라고 생각하면 될것 같다.) 처음에는 Netflix에서 자체적으로 개발을 진행했지만 현재는 오픈소스로 전환했으며 SpringCloud 프레임워.. 2022. 11. 20.
OSIV란? 서론 이번 글은 IssueTracker 프로젝트를 진행하면서 겪었던 영속성 컨텍스트와 관련된 문제를 맞닥트리면서 알게 된 OSIV라는 개념을 정리해보기 위해 작성하게 되었다. 고민 : 미션을 진행하며 대부분의 api에서 유저의 정보가 필요할것이라고 판단했고, 매번 유저를 조회하는 코드의 중복을 제거하고 싶었다. 해결책 : jwt 토큰을 통해 받은 유저의 id를 사용해 인터셉터에서 미리 유저 객체를 조회한 뒤, ArgumentResolver 를 사용해서 해당 유저 객체를 컨트롤러에서 파라미터로 받아서 사용하기로 했다. 하지만 예상하지 못한 문제가 발생했다. 인터셉터에서 조회해서 컨트롤러에서 넘겨받은 유저 객체는 영속성 컨텍스트에서 관리해주지 않았다. 원인은 영속성 컨텍스트가 생성되는 시점이 우리가 등록한 .. 2022. 11. 20.
Test에서는 왜 @Autowired 없이는 의존성 주입이 안될까? 스프링 카페 미션 3단계를 진행하며 Repository에 대한 테스트코드를 작성하며 했던 삽질에 대해 정리한 내용이다. 테스트코드에는 @JdbcTest 어노테이션을 추가했고, 생성자가 하나밖에 없었기 때문에 의존성 주입이 자동으로 이루어질 줄 알았지만 실행해보니 아래와 같은 에러가 발생했다. 처음 보는 에러에 헤매다가 결국 쿠킴의 도움을 받아서 필드에 @Autowired를 붙여주니까 의존성 주입이 되었고 문제는 해결이 됐다. 하지만 분명 스프링에서는 생성자가 하나면 @Autowired를 생략할 수 있다고 배웠는데 대체 왜 안되는지 이해가 안되서 자료를 찾아보게 되었다. 주입하는 주체가 다르다 SpringApplication의 경우 빈을 주입해주는 역할을 스프링이 담당한다. 하지만 테스트의 경우 Junit.. 2022. 11. 19.