Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[5기 - 조인수] SpringBoot Part2 Weekly Mission 제출합니다. #944

Open
wants to merge 62 commits into
base: zzambas
Choose a base branch
from

Conversation

ZZAMBAs
Copy link

@ZZAMBAs ZZAMBAs commented Oct 30, 2023

📌 과제 설명

(기본) 바우처 관리 애플리케이션

  • 바우처 관리 애플리케이션에 단위테스트를 작성해보세요.
    • 가능한 많은 단위 테스트코드를 작성하려고 노력해보세요.
    • 엣지 케이스(예외 케이스)를 고려해서 작성해주세요.
    • Hamcrest 의 메쳐들을 다양하게 작성해보고 익숙해져 보세요.
  • 바우처 관리 애플리케이션에서도 과정에서 다루었던 고객을 적용해보세요.
    • customers 테이블 정의 및 추가
    • CustomerRepository 추가 및 JdbcTemplate을 사용해서 구현
  • (1주차엔 파일로 관리하게 했다.) 바우처 정보를 DB로 관리해보세요.
    • 바우처에 엔터티에 해당하는 vouchers 테이블을 한번 정의해보세요.
    • 바우처 레포지토리를 만들어보세요. (JdbcTemplate을 사용해서 구현)
    • 기존의 파일에서 바우처를 관리한 것을 vouchers 테이블을 통해서 CRUD가 되게 해보세요.

(심화) 바우처 지갑을 만들어보세요.

  • 특정 고객에게 바우처를 할당할 수 있습니다.
  • 고객이 어떤 바우처를 보유하고 있는지 조회할 수 있어야 합니다.
  • 고객이 보유한 바우처를 제거할 수 있어야 합니다.
  • 특정 바우처를 보유한 고객을 조회할 수 있어야 합니다.

👩‍💻 요구 사항과 구현 내용

image
(2023-10-30 기준)

이전 File과 Memory 부분을 제외한 다이어그램입니다. 기존 Repository와 콘솔 사이 Service를 추가하였고, NamedParameterJdbcTemplate를 이용하여 Repository를 구현했습니다.
Repository에 대해 단위 테스트를 구성하였고, 서비스 테스트는 아직 못했습니다.. 바우처 지갑 테스트도 아직은 구현하지 못하였습니다. 31일 전후로 마무리 하고 3번째 과제로 넘어가려 합니다.

✅ 피드백 반영사항

part 1 반영사항

  • Util 클래스 이름을 CommonConstant로 수정하여 상수 모음임을 명확히 했습니다.
  • Console 클래스를 입출력만 담당하도록 하고 Controller 클래스에서 입력에 대한 제어를 하며 처리는 Service 레이어에서 하도록 수정했습니다.
  • val 같은 불명확한 변수 명을 discountDegree(할인 정도) 같은 명확한 네이밍으로 수정했습니다.
  • FileTemplate 제네릭을 메서드에만 적용했습니다.
  • 이제 VoucherRepository의 create 메서드는 1개만 존재합니다.
  • Google java style guide에 따라 코드를 다듬었습니다.
  • 이제 할인 전 금액이 음수이면 예외를 발생시킵니다.
  • File 관련 클래스들을 common-file 패키지로 이동했습니다.
  • VoucherPolicy 인터페이스는 getVoucherId() 같은 getter 메서드를 가지는데 이것을 아직 없애지 못했습니다. FileManager에서 VoucherPolicy들을 기록할 때 메모리에 있는 VoucherPolicy를 가져와 해당 필드 값을 적어주어야 하는데( VoucherCsvFileManager.voucherToString() 메서드 ) 이 메서드가 없으면 기록을 해주지 못했습니다. 그래서 일단 해당 메서드를 냅두었습니다.
  • XXXCsvFileManager를 CsvFileManager로 통합 및 외부 의존성(CSV) 분리를 아직 못했습니다. 추후에 다시 한번 보겠습니다.

✅ PR 포인트 & 궁금한 점

  1. VoucherPolicy에서 getter를 제가 못 없앴습니다. VoucherPolicy에 있을만한 메서드가 아닌 게 확실해 보이지만 앞서 말씀드렸듯 파일로 저장할 때 Voucher 구현체들을 공통으로 처리할 것이 VoucherPolicy 밖에 없어서 이 때 각 바우처들의 Id와 할인 정도를 가져와야 해서 그대로 두었습니다. 클래스 상속을 해야 할까요?
  2. 테스트 코드를 짤 때 @SpringBootTest를 많이 사용했는데 왜냐하면 이것을 이용하지 않으면 테스트에서 yml 파일 내 값을 가져오지를 못했습니다. @SpringBootTest는 통합 테스트 용이라 무거운 걸로 알고 있어서 이를 어떻게 해결해야 할 지 궁금합니다!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

1 participant