10일차 - 서비스 계층과 트랜잭션 & 테스트 코드 작성하기

2023. 12. 7. 23:52공부/BackEnd - Spring Boot

2장 챕터 분량인데 뭔가 코드 상에서 그렇게 변경하지 않아서 한 번에 글을 작성하게 되었다.

우선 서비스 계층의 경우에는 기존에 Controller 에서 직접 DTO, entitiy 를 호출하던 것을 Service  를 거쳐 데이터를 가져오는 방식으로 수정하였다. 원래 Controller 단에서 바로 데이터를 제어하지 않고 Service 를 하나 거치는 형태로 주로 이용한다고 한다. 그래서 Controller 에선 service 만 호출 및 return 받고 service 에서 dto, entity 를 이용해 DB 에서 직접 값을 가져오는 형태로 코드를 수정하였다. 이 부분은 단순히 코드 refacotring 이라 그렇게 어렵지 않았다.

트랜잭션이란 수행되는 최소 단위를 의미하는데, 주로 service 단에서 관리가 되어진다고 한다. 여기서 신기했던 것은 @Transactional annotation 을 선언하면 에러가 발생하면 db 에 commit 되지 않고 rollback 된다. 찾아보니 AOP 뭐라고 하는데.... 솔직히 지금은 무슨 소리인지 잘 모르겠다... 좀 더 읽어봐야 할 듯 하다 ㅋㅋ...  대충 요약하자면 각각의 동작을 하나의 트랜잭션으로 관리하여 문제가 생기면 이전 트랜잭션을 롤백해주는 것 같다.... 진짜 좋은 기능이네

Transactional 적용 예시

 

그리고 Test Function 도 하나 만들어봤다.

Spring Boot Test code

상기처럼 Spring Boot Test 선언 후, 내가 예상하는 값과 실제 로직 수행 값이 같은지 비교하기 위한 코드라고 한다. 여기서 내가 예상한 값과 같다면 로직에 문제가 없는 것이고, 다르다면 디버깅하여 어째서 다른지 찾아볼 필요가 있다. 여러 가지 테스트 케이스를 확인해볼 수 있어서 좋은 기능인 것  같다.

이번엔 기존에 만들어놓은 것에서 살짝 추가한 것들이라 그렇게 어렵지 않게 진행할 수 있었다.

 

- 사용 코드 참고 -

https://github.com/pekokane88/SpringBoot.git