[워밍업 클럽 4기 백엔드] 4주 차 발자국 👣

[워밍업 클럽 4기 백엔드] 4주 차 발자국 👣

학습 내용 요약

 

Spring & JPA 기반 테스트 (Presentation Layer 테스트 (2) ~)

@WebMvcTest를 활용한 컨트롤러의 테스트 방법을 학습했습니다.

 

Mock을 마주하는 자세

테스트 하기 어려운 영역을 어떻게 분리하고 처리할 수 있는 지에 대한 방법으로 Mock에 대한 개념을 학습했습니다.

Mockito를 활용하여 Test Fixture를 준비하는 과정도 함께 배웠습니다.

 

더 나은 테스트를 작성하기 위한 구체적 조언

가독성 높은 테스트 코드를 작성하는 방법과,

스프링 서버 구동 횟수를 줄이는 방법 등을 배울 수 있었습니다.

@DynamicTest, @ParameterizedTest 같은 다양한 테스트 방식도 익힐 수 있었습니다.

 

Appendix

학습 테스트와 Spring REST Docs에 대해 배웠습니다.

설정이 복잡했지만 협업 시 매우 유용할 것이라는 느낌을 받을 수 있었습니다.

 

Outro

지금까지 배웠던 내용을 돌이켜보며,

테스트가 필요한 이유에 대해 다시 한 번 생각해볼 수 있었습니다.

 


 

학습 내용 회고

 

🌱성취

  1. @WebMvcTest를 활용해 컨트롤러 테스트를 작성할 수 있는 역량을 갖추게 되었습니다.

  2. Mocking을 통해 테스트하기 어려운 영역을 분리하고 제어하는 방법을 익혔습니다.

  3. 테스트 실행 환경을 통일해 스프링 서버 실행 시간을 단축할 수 있게 됐습니다.

     

  4. Spring REST Docs로 API 명세서를 작성하는 방법을 익혔습니다.

 

발견한 약점 및 보완이 필요한 부분

  1. Day11 미션에서 전체 테스트를 실행하지 않고 미션을 제출하는 바람에, 깨지는 테스트를 포함한 채 제출했습니다.

     

  2. CSV를 읽어 객체로 변환하는 구현체에 집중하느라, 테스트 포인트 선정에 실패했습니다.

    1. CSV 파일은 항상 정해진 숫자만 읽어올텐데, 이런 경우에도 경계값 테스트를 해야할까?

    2. CSV 경로에는 null이 들어올 수 없을 것 같은데, null 테스트를 해야 할까?

  3. 테스트 코드에 구현 레벨의 상세한 계산식을 그대로 드러냈습니다.

  4. setUp 메서드를 단순히 중복 제거 용도로만 인식했습니다.

 

📄보완 계획

  1. 테스트를 작성 후 제출 전, 반드시 전체 테스트를 실행하겠습니다.

  2. "이걸 꼭 검증해야할까?" 에 집중하기보단,
    미래의 변경 가능성을 고려한 견고한 테스트를 작성하는 것에 집중하겠습니다.

  3. 프로덕션 코드의 구현을 블랙박스로 보고, 입출력 검증을 중심으로 테스트하겠습니다.

  4. setUp은 단순히 중복 제거보다, 도메인에 집중하게 돕는 역할임을 인지하며 테스트 코드를 작성하겠습니다.

     

 


 

미션 내용 회고

 

Day16 미션 🌱

 

🏃첫 번째 미션

Layered Architecture 구조의 레이어별 테스트 작성법을 알아보았습니다.
레이어별로 1) 어떤 특징이 있고, 2) 어떻게 테스트를 하면 좋을지, 자기만의 언어로 다시 한번 정리해 볼까요?

 

미션 과정

각 레이어의 관심사와 경계를 의식하며, 테스트 방법을 최대한 간단히 정리해보려 노력했습니다.

 

🔗미션 해결 링크

https://inf.run/SoKcd

 

 

Day18 미션 🌱

 

🏃첫 번째 미션

@Mock, @MockBean, @Spy, @SpyBean, @InjectMocks 의 차이를 한번 정리해 봅시다.

 

미션 과정

강의에서 배운 내용을 기반으로 Mock과 Spy를 복습하며 차이점을 정리했습니다.

MockBean과 SpyBean은 검색과 LLM을 활용해 추가 학습 후 요약했습니다.

 


🏃두 번째 미션

아래 3개의 테스트가 있습니다.
내용을 살펴보고, 각 항목을 @BeforeEach, given절, when절에 배치한다면 어떻게 배치하고 싶으신가요?
(@BeforeEach에 올라간 내용은 공통 항목으로 합칠 수 있습니다. ex. 1-1과 2-1을 하나로 합쳐서 @BeforeEach에 배치)

 

미션 과정

가독성과 중복 제거의 관점으로 미션에 접근했습니다.

온라인 세션 피드백을 통해,

setUp은 단순 중복 제거가 아닌, 도메인에 집중할 수 있게 만들어 준다는 점을 깨달았습니다.

 

🔗미션 해결 링크

https://inf.run/9LaUQ

 


 

느낀점

 

이번 워밍업 클럽은 저에게 두 번째 도전이었습니다.

 

작년에 이 강의를 처음 접했었는데,

그 당시에 저는 Spring과 JPA를 잘 모르는 상태로 수강을 시작했었습니다.

"테스트 코드를 작성해보는 게 좋다"는 조언만 듣고 무작정 수강했지만,

기초가 튼튼하지 않다보니 내용을 따라가는 것에 급급했고,

이해가 부족해 강의 하나를 수강하는 데에도 시간이 세 배는 더 걸렸습니다.

결국 완주도 하지 못한 채 아쉬운 마음으로 마무리하게 되었습니다.

 

그 때 다짐했습니다.

"이번엔 Spring과 JPA 기본기를 탄탄히 다진 후, 다시 도전해보자."

 

이후 약 4개월간,

김영한 님의 Spring과 JPA 커리큘럼을 꾸준히 학습하며 기초를 탄탄히 쌓는 데 집중했습니다.

매일 하루 대부분의 시간을 투자해 결국 전체 커리큘럼을 완주할 수 있었고,

마침 워밍업 클럽이 다시 열린다는 소식을 접하게 되었습니다.

 

이번에는 제대로 이해해보자는 마음으로 워밍업 클럽에 다시 참여했고,

스터디에도 적극적으로 임했습니다.

덕분에 이전에는 막막하게만 느껴지던 개념들도

이제는 한층 명확하게 다가왔고, 강의에서 강조하는 '가독성'에 집중할 수 있게 되었습니다.

 

이 경험을 통해,

"이해는 반복과 지식의 축적 속에서 깊어진다"는 사실을 실감할 수 있었습니다.

 

 

[깨달음 1: 이해와 가독성의 연결 고리]

수학 강사 시절부터

"제대로 이해했다면, 초등학생도 이해할 수 있을 만큼 쉽게 설명할 수 있어야 한다"

는 가치를 중요시 여겨왔습니다.

 

이번 워밍업 클럽에서 배운

좋은코드는 쉽게 읽을 수 있어야 한다는 원칙은

제 가치관과 맞닿아 있었고,

이해와 가독성에 연결 고리가 형성되며

가독성의 중요성에 대해 더욱 깊이 깨달을 수 있었습니다.

 

 

[깨달음 2: 코드 작성은 글쓰기와 비슷하다]

또한 이번 학습을 통해

"코드 작성은 글쓰기와 비슷하다"는 말을 처음으로 실감했습니다.

그동안은 그저 인용구 같은 느낌으로만 흘려들었지만,

이제는 코드와 글쓰기가 가독성의 관점에서 얼마나 닮아있는지 직접 경험하고 이해할 수 있게 되었습니다.

 

 

[앞으로의 계획]

그래서 저는 앞으로 코드 작성과 더불어 글쓰기 능력도 함께 향상 시키고자 합니다.

 

우빈님께서 조언해주신 대로,

좋은 문장을 필사하고, 구조를 분석하며, 블로그나 Notion에 꾸준히 글을 쓰며

표현력과 구조화 능력을 함께 키워나갈 계획입니다.

 

그리고 코드 작성을 위해 학습할 서적은 다음과 같습니다.

《클린 코드》

《테스트 주도 개발》

《파이브 라인스 오브 코드》

그리고 추가로 우빈님께 추천 받은 《클린 아키텍처》

 

하나씩 차근차근 학습해나가겠습니다!

 

 

[마지막으로]

온라인 세션을 통해 받은 두 번의 코드 리뷰 경험은 정말 값지고 기억에 남는 경험이었습니다.

 

항상 좋은 코드 리뷰를 갈망해왔기에

이번 피드백은 특히 기억에 남았고,

피드백을 통해 성장하는 즐거움도 함께 느낄 수 있었습니다.

 

반면,

"앞으로도 이런 좋은 리뷰를 계속해서 받을 수 있다면 얼마나 좋을까.."

하는 갈증도 함께 커졌습니다. 😅

 

사실 작년 인프런에서 진행된 네트워크 파티에 참여해 끝나갈 무렵, 우빈 님을 잠깐 뵌 적이 있습니다.

 

이야기를 나눌 수 있었던 시간은 아주 짧았지만,

그 순간조차 저에게는 "더 열심히 해야겠다"는 동기 부여가 될 만큼 인상 깊었습니다.

그 때 받았던 사인은 저에게 단순한 기념 이상의 의미였고,

그 날 이후로 저도 우빈 님처럼 진지하게 학습하고 성장하는 개발자가 되고 싶다는 마음이 커졌습니다.

 

만약 우수러너로 선정되어 1:1 멘토링 기회를 얻게 된다면,

그동안의 배움을 돌아보고 앞으로의 방향을 점검해볼 수 있는 정말 소중한 시간이 될 것 같습니다.

 

우빈 님께 많은 것을 배운 것처럼,

저 또한 제가 받은 배움과 경험을 다른 이들과 나눌 수 있는 개발자,

그리고 함께 성장하며 시너지를 만들 수 있는 백엔드 개발자로 나아가고 싶습니다.

우빈님께 정말 많은 것을 배웠습니다.

진심으로 감사드립니다. ️🙂

 


강의

🔗Practical Testing: 실용적인 테스트 가이드

댓글을 작성해보세요.

채널톡 아이콘