2주차를 진행하면서

2024. 12. 29. 16:11

2주차를 진행하면서

진행하면서 회고!

정말 정신없는 한주였다. 생각보다 시간이 너무 부족 했었지만, 운이 좋게 과제를 통과 할 수 있었다. 아키텍처에 대해서 고민을 했던 시간이었고, 그렇게 복잡하지 않은 API 개발이였지만 정말 많은 고민을 하게 되었다.

Application 아키텍처 구조


    .
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── tdd
    │   │           └── hhplus_tdd_2week_java
    │   │               ├── HhplusTdd2weekJavaApplication.java
    │   │               ├── application
    │   │               │   ├── lecture
    │   │               │   │   ├── LectureApiDto.java
    │   │               │   │   └── LectureFacade.java
    │   │               │   └── student
    │   │               │       ├── StudentApiDto.java
    │   │               │       └── StudentFacade.java
    │   │               ├── common
    │   │               │   ├── ResponseDto.java
    │   │               │   ├── config
    │   │               │   │   └── QuerydslConfig.java
    │   │               │   └── custom_exceptions
    │   │               │       ├── AppliedLectureSettingException.java
    │   │               │       ├── DomainSettingException.java
    │   │               │       ├── LectureSettingException.java
    │   │               │       └── StudentSettingException.java
    │   │               ├── domain
    │   │               │   ├── BaseEntity.java
    │   │               │   ├── applied_lecture
    │   │               │   │   ├── APPLIED_LECTURE_STATUS.java
    │   │               │   │   ├── AppliedLecture.java
    │   │               │   │   ├── AppliedLectureRepository.java
    │   │               │   │   ├── AppliedLectureService.java
    │   │               │   │   ├── AppliedLectureServiceImpl.java
    │   │               │   │   └── dto
    │   │               │   │       ├── AppliedLectureParam.java
    │   │               │   │       └── AppliedLectureResult.java
    │   │               │   ├── common
    │   │               │   │   └── CommonValidation.java
    │   │               │   ├── lecture
    │   │               │   │   ├── LECTURE_STATUS.java
    │   │               │   │   ├── Lecture.java
    │   │               │   │   ├── LectureRepository.java
    │   │               │   │   ├── LectureService.java
    │   │               │   │   ├── LectureServiceImpl.java
    │   │               │   │   ├── LectureServiceValidate.java
    │   │               │   │   └── dto
    │   │               │   │       ├── LectureParam.java
    │   │               │   │       └── LectureResult.java
    │   │               │   └── studuent
    │   │               │       ├── STUDENT_STATUS.java
    │   │               │       ├── Student.java
    │   │               │       ├── StudentRepository.java
    │   │               │       ├── StudentService.java
    │   │               │       ├── StudentServiceImpl.java
    │   │               │       └── dto
    │   │               │           ├── StudentParam.java
    │   │               │           └── StudentResult.java
    │   │               ├── infrastructure
    │   │               │   ├── applied_lecture
    │   │               │   │   ├── AppliedLectureRepositoryCustom.java
    │   │               │   │   └── AppliedLectureRepositoryCustomImpl.java
    │   │               │   ├── lecture
    │   │               │   │   ├── LectureRepositoryCustom.java
    │   │               │   │   └── LectureRepositoryCustomImpl.java
    │   │               │   └── student
    │   │               │       ├── StudentRepositoryCustom.java
    │   │               │       └── StudentRepositoryCustomImpl.java
    │   │               └── interfaces
    │   │                   ├── exceptions
    │   │                   │   └── ErrorResController.java
    │   │                   └── http
    │   │                       ├── LectureController.java
    │   │                       └── StudentController.java
    │   └── resources
    │       └── application.yaml
    └── test
        ├── java
        │   └── com
        │       └── tdd
        │           └── hhplus_tdd_2week_java
        │               ├── HhplusTdd2weekJavaApplicationTests.java
        │               ├── application
        │               │   └── lecture
        │               │       ├── ConcurrentTest.java
        │               │       └── LectureFacadeTest.java
        │               ├── domain
        │               │   ├── applied_lecture
        │               │   │   └── AppliedLectureRepositoryTest.java
        │               │   ├── lecture
        │               │   │   ├── LectureServiceTest.java
        │               │   │   └── LectureTableDomainTest.java
        │               │   └── studuent
        │               │       ├── StudentServiceTest.java
        │               │       └── StudentTableDomainTest.java
        │               └── infrastructure
        │                   └── student
        │                       └── StudentRepositoryCustomTest.java
        └── resources
            └── application-test.yml

고민 했던 내용 1 : FACADE 패턴 적용기

이번에 FACADE 패턴을 처음으로 적용시켜 보았다. 아키텍처 자체를 먼저 설정하고 개발을 진행하는 건 처음이여서 이 클래스가 여기에 들어가는 것이 맞는지, 이렇게 개발하는 게 맞는지 정말 많은 생각을 갖게 되었다. 내가 이해한 FACADE 는 각 도메인의 서비스들을 하나의 클래스에서 조합하여 기능을 구현해 나가는 것인데, 이에 따른 DTO 의 위치나 클래스에 작성할 해당 함수가 적절한지 정해야했다. 이번 주차에 적용 시킨 것을 내것으로 만들기 위해서 1. FACADE 패턴에 대해서 공부하여 정리하기 2. 여러 예시들을 보며 적용시켜 프로젝트 만들기 와 같은 목표를 갖게 되었다.

고민 했던 내용 2 : TEST 코드

TDD 를 배우고 진행시켜 보려고 했다. 이번에도 어김없이 시간 문제를 겪으며, 후반에는 거의 날림 식으로 테스트를 했다. 이번에 시간 이슈가 생긴 여러가지 이유 들을 적어본다면, 1. 테스트 코드 작성에 아직 익숙하지 않다. 2. 어디까지 단위 테스트로 작성해야할지 모르겠다. 3. Mock 이나 Stub 을 적절하게 사용하지 못 했다. 4. 동시성 테스트 진행 방법을 이해하지 못하고 있다. 이런 문제를 해결하려면 역시 반복적인 테스트 코드 작성이 답인 것 같다.

고민 했던 내용 3 : 동시성

아직 동시성에 대한 개념이 많이 부족한 것 같다. 토요 지식회를 진행하셨던 분이 말씀하신 내용 정도는 알고 사용해야 좋지않나 생각이 들었다. 비관적락과 낙관적락의 차이와 락의 종류에 대해서 공부하는 시간을 가져야겠다.

이번주의 KPT

KEEP : 유지해 나갈 점

1. 기능 분석 및 요구 사항 분석 부터 시작 기능 분석 및 요구 사항 분석을 시작으로 이번 주차를 시작했는데, 제약 조건이나 이런 것들을 미리 생각하고 개발하다 보니 해당 부분에 있어서 고민을 조금 덜 하게 되었다. 2. 아키텍처 선정하여 진행 아키텍처를 미리 선정하여 진행함으로 도중 패키지 구조를 대대적으로 변경하는 일이 훨씬 많이 줄었다.

PROBLEM : 고쳐야할 점

1. 아키텍처에 대한 이해 아키텍처에 대한 이해가 부족하여 대대적으로 변경하는 일은 줄었지만, 그에 반비례하여 고민하는 시간이 늘었다. 2. 테스트 코드 작성을 생활화 테스트 코드 작성에 다소 미흡하여, 예상치 못한 예외 상황이 많이 발생하였다. 이런 부분을 바로 잡고자 요구사항 분석 단계부터 세심함을 길러야겠다. 3. 시간 분배의 중요성 이번에는 뭔가 고민만하고 고민을 적지 않아 다소 시간을 많이 잡아먹었다. 타임라인을 정해서 진행하면 어떨까 생각이 든다.

TRY : 시도 해야할 것

1. 비관적 락 낙관적 락에 대한 이해 시간에 쫒겨 어째 구현하긴 했지만 역시 모르고 사용하는 것과 같다고 본다. 해당 부분에 대한 이해가 나에게 더 필요한 것으로 보인다. 2. 배운 것들 회고 및 정리 해서 내것으로 만들기 항상 많은 것을 하지만 머리에 남지않거나 내것이 되지 않는 이유가 여기에 있는 것 같다. 다소 귀찮을 수도 있지만 다음에 한번 더 찾아보는 것이 더 귀찮다. 3. FACADE 아키텍처에 대해서 공부하기 이번에 처음 적용한 아키텍처이며 다른 팀원분들 것을 참고하여 작성하였다. 왜 이렇게 구성되는지에 대한 이해가 있다면 완전히 내것이 되지 않을까? 4. STUB, MOCK 에 대해서 정리 대략 어떤 건지 이해는 하지만 적절하게 사용하기 위해서 나 스스로 나만의 언어로 정의 내리는 시간이 필요할 것 같다.

'기록' 카테고리의 다른 글

[TDD 공부하면서] 2024-11-12  (1) 2024.11.12
[11월 시작] 2024-11-05  (3) 2024.11.05
[나름 힘들었던 10월] 2024-10-30  (5) 2024.10.30

BELATED ARTICLES

more