shinsunyoung / springboot-developer

📚 <스프링부트 3 백엔드 개발자 되기> 예제코드
230 stars 92 forks source link

[Chapter 06] 테스트와 포스트맨 응답값의 차이에 대해서 #67

Closed SeongGwangJu closed 2 months ago

SeongGwangJu commented 3 months ago

안녕하세요 교재 잘 보고 있는 독자입니다. 학습하면서 궁금한 부분이 있어 질문드립니다!

[질문 1] 블로그 API개발 : 글 수정API 에서,

Article.java의

@Column(name = "title", nullable = false) private String title;

부분의 'nullable' 을 updatable로 적는 바람에 테스트에 계속 실패했었어요. 당연하게도 title 수정이 안됐었거든요.

그런데 이상한건 Postman에서는 요청을 보내고 title과 content 모두 수정된 값으로 응답이 왔어요. (그래서 테스트 코드에 문제가 있는 줄 알고 눈 빠지는 줄 알았습니다.)

image

포스트맨에서 수정된 내용으로 응답이 왔지만, Hibernate: SQL쿼리에서도 set 절에 title은 들어가지 않았습니다.

image

 이런 결과가 발생한 이유가 궁금합니다...!

[질문 2] 그리고 아직 테스트가 익숙치 않아 그렇겠지만, 테스트 코드를 작성하는 시간보다 포스트맨 한 번 하는게 더 빠를 것 같단 생각이 듭니다. 그럼에도 불구하고 테스트 코드를 작성하는 이유가 '추후 코드 변경시의 테스트 편의'일까요?

또한 이런 테스트코드는 항상, 모든 코드에 작성하는것인지도 궁금합니다. 실무에서야 각 회사마다 가이드라인이 있을 것 같은데, 개인 프로젝트에서도 작성 하는것이 좋을까요?

shinsunyoung commented 2 months ago

안녕하세요

질문 1. updatable 속성을 설정해줌으로 인해 DB에는 반영이 되지 않지만 엔티티 객체의 값은 변경될 수 있기 때문입니다. 업데이트 하면 안되는 컬럼이기 때문에 SQL문에도 빠져서 쿼리가 나가고 실제 DB에서 업데이트도 되지 않았지만, 그것과 별개로 엔티티 객체의 값은 변경되었기 때문에 포스트맨에서 요청했을 때 수정된 값이 반환된 것이라고 이해하시면 됩니다.

질문 2. 기능이 하나일때는 말씀하신 것처럼 포스트맨을 한 번 요청해서 결과를 눈으로 보는게 빠를 수 있지만, 제품이 고도화되고 커질수록 기능도 많아지게 되고, 기능끼리의 의존성이 생기면서 한 기능을 수정하면서 예상치 못하게 다른 기능에도 영향을 미칠 수 있습니다. 이럴때 기능 하나를 수정하면서 포스트맨으로 모든 기능을 테스트하는 것(이런걸 회귀 테스트라고 합니다)은 현실적으로 불가능하기 때문에 테스트 코드를 작성하는 것이고, 말씀하신 "추후 코드 변경시의 테스트 편의"가 가장 큰 이유가 맞습니다.

잘 작성된 글이 있길래 같이 첨부합니다: https://tech.inflab.com/20230404-test-code/

개인 프로젝트에서 테스트 코드 작성에 대해서는 저는 일회성으로 만드는 프로젝트(예를 들면 해커톤을 위한 코드라던지, PoC를 위한 코드 같은 것들이 있겠네요)에 대해서는 테스트 코드를 작성하지 않고, 지속적으로 유지보수 할 프로젝트에 대해서는 가급적 모든 기능에 대해서 테스트 코드를 작성하는 편입니다.

PoC를 하는 코드에도 테스트 코드를 작성하는 분이 있을것이고, 유지보수를 하는 프로젝트임에도 테스트 코드에 신경을 쓰기보다는 프로젝트 기능 구현 코드에 신경을 쓰시는 분도 있을 것입니다. 말 그대로 개인 프로젝트이기 때문에 자신이 생각하기에 테스트 코드가 필요하다고 생각하시면 작성하시면 되고, 그렇지 않다고 생각하시면 작성하지 않으시면 됩니다.

추가적으로 궁금한 사항 있으시면 알려주세요! 감사합니다. 🙇

SeongGwangJu commented 2 months ago

상세한 답변 감사합니다. 이슈는 제가 닫겠습니다 ㅎㅎ 좋은 하루 되세요!