[워밍업 클럽 4기 - 백엔드] 3주차 발자국
[인프런 워밍업 클럽 스터디 4기 - 백엔드]
강의 출처 :
Readable Code: 읽기 좋은 코드를 작성하는 사고법
Practical Testing: 실용적인 테스트 가이드
3주차 발자국
강의 수강
학습 내용 요약
레이어드 아키텍쳐와 테스트 : 레이어 층 (Persistence, Business, Presentation), 관심사의 분리, 통합 테스트
Spring / JPA 훑어보기 & 기본 엔티티 설계 : 라이브러리, 프레임워크, 스프링 개념(IoC, DI, AOP), ORM, JPA(어노테이션, 엔티티 설계, Spring Data JPA)
Persistence Layer 테스트 : 데이터 접근 역할, JPA Repository 테스트를 하는 이유
Business Layer 테스트 : 비즈니스 로직 구현 역할, Persistence와 상호작용(서비스 통합 테스트), 트랜잭션 보장 (예외->롤백), 동시성 고민
Presentation Layer 테스트 : 외부의 요청, Mocking 처리하여 단위 테스트, MockMVC, readOnly = true
3주차 회고
이번 주는 요구사항에 맞춰 기능을 하나씩 만들어보고 각 레이어별로 직접 테스트를 작성하며 보낸 시간이었습니다. 스프링 구조(컨트롤러, 레파지토리, 서비스)를 따라가면서 직접 간단한 서비스를 구현하니 그동안 헷갈렸던 부분들도 복습되고, 조금 더 친숙하게 느껴졌습니다. 특히 테스트를 배우기 전에는 왜 굳이 이렇게 하는지 잘 몰랐는데, 직접 테스트를 작성해보면서 어느 부분을 어떻게 테스트해야 하는지 알게 된 점이 정말 좋았습니다. 어노테이션의 정확한 사용법과 이유도 이번 기회에 확실하게 배울 수 있어서 무척 재미있었습니다.
스스로 칭찬할 점은 이번 주에는 미루지 않고 진도표에 맞춰 강의 수강을 잘 마쳤다는 것입니다. 미션도 하루만에 완수할 수 있어서 뿌듯했습니다! 다만 아쉬운 점은 여전히 코드 리뷰 신청에 용기를 내지 못하고 결국 고민만 하다가 신청하지 못했다는 것입니다. 코드와 글쓰기에 자신이 없어서 좋은 기회를 놓친 것 같아 아쉽지만, 그래도 다음 주 라이브를 통해 다른 분들의 고민과 코드를 보며 배워가고 싶습니다. 다음 주가 벌써 마지막이라니 아쉽기도 하고 기대되기도 하는데, 진도표를 따라 강의 수강과 미션들을 밀리지 않고 해내는 것이 목표입니다!
미션
미션 해결 과정
미션 4 (Day11) :
이번 미션에서는 코드의 동작 흐름을 따라가면서 직접 단위 테스트를 작성했습니다. 기존 코드의 주요 로직을 테스트하기 위해 실행 흐름을 하나씩 나누고, 주석으로 번호를 붙이며 필요한 메서드를 명확히 구분했습니다. 특히 사용자 입력을 처리하는 InputHandler의 경우, 기존 코드 구조를 크게 바꾸지 않으면서 충돌 문제를 해결하려고 고민하다가 Scanner를 static에서 인스턴스 필드로 변경하고, 반복되는 입력 시뮬레이션 메서드를 리팩토링하여 중복을 제거했습니다. 이용권 목록 처리나 락커 사용 여부 결정, 주문 금액 계산 및 할인 적용 같은 핵심 로직은 모든 경우의 수를 꼼꼼히 체크하고, 결과 값에도 계산 과정을 포함하며, 테스트에도 실제 값을 그대로 사용하며 최대한 현실에 가까운 방식으로 테스트를 작성했습니다. 또한 @DisplayName 작성과 BDD 스타일을 활용하면서 최대한 테스트의 목적과 결과가 잘 드러나는 이름을 짓기 위해 노력하여 테스트 코드의 가독성을 높일 수 있도록 작성했습니다.
회고
미션을 진행하며 테스트 코드가 단순히 코드의 확인 도구가 아니라, 코드 구조를 깊게 이해하고 개선하는 데 중요한 역할을 한다는 것을 깨달았습니다. 처음에는 이미 구현된 기능을 뒤늦게 테스트로 작성하다 보니 어떤 부분을 테스트해야 할지 어려웠고, 테스트하기 힘든 구조도 있어서 고민이 많았습니다. 기능과 테스트를 함께 작성하는 방식이 중요한 이유를 이번 미션을 통해 몸소 느낄 수 있었습니다. 특히 동작 흐름을 따라가며 기능에 가장 핵심이 되는 메서드를 찾고, 어떻게 테스트할지 고민하는 과정 자체가 흥미롭고 재미있었습니다. DisplayName과 BDD 스타일을 통해 테스트 코드의 가독성과 명확성을 신경쓰며 개발할 수 있던 점도 좋았습니다. 이번 경험을 통해 테스트가 단순한 검증 수단을 넘어 좋은 설계를 위한 도구이구나 싶은 생각이 들었고, 앞으로 개발 할 때도 기능 구현과 테스트 작성을 병행하며 효율적으로 작업해야겠다는 다짐을 하게 되었습니다.
댓글을 작성해보세요.