이번 주차를 진행하며 다음과 같은 문제를 겪었다.
• TDD(Test Driven Development) 에 대한 잘못된 인식이 있었음
• 무조건 비즈니스 로직을 구현하기 전에 테스트 코드를 작성해야 한다고 오해하고 있었음
• 모든 기능에 대해 테스트 코드를 작성해야 한다고 생각했었음
• 단일 책임 원칙(SRP) 에 따른 테스트 코드 작성 방식의 중요성을 깨달음
• 멀티 스레드 환경에서의 동시성 제어 방법 고민
문제를 해결하기 위해 아래와 같은 시도를 진행했다.
• PointService 에 단일 책임 원칙이 무시된 채 너무 많은 책임이 집중되어 있었는데,
validation 로직을 UserPoint 도메인 클래스로 분리
• 멀티 스레드 환경에서 동시성 제어를 위해 ReentrantLock 사용
• 테스트 코드 작성 시 단일 책임 원칙을 지키기 위해 각 클래스 단위로 테스트 코드 작성
• 서비스 레이어에서 중복 역할을 수행하던 validation 로직을 도메인 객체로 분리하면서 책임이
명확해지고 테스트 범위도 깔끔하게 정리됨
• ReentrantLock을 도입하여 동시에 여러 스레드가 접근하는 상황을 제어하여 데이터 정합성을
보장함
• 클래스 단위로 테스트 코드를 작성하면서 테스트 대상의 역할이 명확해지고 유지보수성이 향상됨
시도를 통해 아래와 같은 점을 새롭게 알게 된 것들이 있다.
• TDD는 구현 전에 무조건 테스트를 작성하는 것이 아니라, 설계를 가이드하고 피드백 루프를 촉진하는 철학적 접근이라는 것
• 모든 기능에 대해 테스트 코드를 작성할 필요는 없으며, 핵심 비즈니스 로직 중심으로 테스트하는 것이 효율적이라는 점
• 멀티 스레드 환경에서는 동시성 제어가 필수이며, 그렇지 않으면 데이터 정합성 문제가 발생할 수 있음
지난주에 설정했던 목표는 다음과 같은 결과가 나왔다.
✅ 잘된 점
• 과제를 하루 전날 제출하여 일정 관리가 비교적 잘 됨
❌ 아쉬운 점
• 동시성 제어에 대한 이해도가 아직 부족하다고 느낌
• 컨디션 관리를 못 했음
→ 더 많은 학습이 필요함
📌 단기 목표
반복적인 성장을 위한 루틴으로 가져갈 예정!!