들어가며 5개월 전, 테스트코드를 처음 작성하면서 이런 생각을 했다. '이거... 테스트 통과하는 게 당연한 거 아니야...?' 'given에서 조건을 다 주고 테스트하는데 당연히 통과하지... 이럴 거면 왜 테스트코드를 작성하는 거지?' '내가 뭔가 잘못 작성하고 있나?' 멘토님은 테스트코드의 필요성을 제대로 알지 못하면 그런 생각이 드는 게 당연하고, 심지어 '짜고 치는 거 아닌가'라는 생각이 드는 것도 맞게 생각한 거라고 하셨다. 여기에서 말하는 테스트코드의 필요성에는 어떤 게 있을까? 테스트코드를 왜 작성해야 하는지 알아보자. 필요성 DB 변경 없이 테스트 실무에서는 API 호출을 통해 동작을 테스트하기 어려운 경우가 많다. 실제 사용하는 DB를 변경하면 절대 안되기 때문에 로컬 환경이 아닌 이상..
- 부제 : 테스트를 통과하면 문서가 생성되는 서비스가 있다?! - 들어가며 이 글에서는 Spring REST Docs, openapi3, swaggerUI를 다룰 것이다. 각각에 대해 자세히 다루지는 않겠지만, 세 가지의 서비스를 한번에 적용하는 글이 많지 않아 직접 정리해볼 생각이다. 왜 Spring REST Docs일까? swagger Documentation, 하면 swagger를 떠올리는 사람들이 많을 것 같다. 첫 프로젝트를 할 때에는 그것조차 몰라서 google spread sheet로 API 명세서를 정리하곤 했다. 그러다 API 테스트까지 해볼 수 있는 툴(이게 swagger였다.)이 있다는 걸 알게 됐지만, 사용하고 싶지는 않았다. annotations 컨트롤러에 많은 annotatio..
문제 @Transaction이 붙은 메서드가 해당 클래스 내에 또다른 @Transactional이 붙은 메서드를 호출합니다. 이 때 새로운 트랜잭션이 적용될까요, 적용되지 않을까요? 정답 새 트랜잭션은 적용되지 않습니다. 이유 프록시 때문이야~🎶 설명 왜 프록시 때문이라고 하는지, 왜 두 번째 @Transactional은 제대로 동작하지 않는지 궁금하시죠? 바로 프록시 때문입니다. 프록시란? 프록시는 객체에 대한 접근을 제어해야 하거나 객체에 접근 시 추가 기능을 제공해야 할 경우 사용될 수 있습니다. 예를 들어, 요청을 보낸 클라이언트에게 응답하기 전 먼저 올바른 권한이 있는지 검사하고 싶을 때 사용될 수 있다는 말이죠. 프록시를 사용할 때의 장점은 다음과 같습니다. 사이즈가 큰 객체가 로딩되기 전이라..