회고/TIL

프로젝트 테스트 진행 및 dockerfile 작성

KEEMSY 2023. 6. 9. 16:47

오늘은 결과물이 크게 없는 날이었던 것 같다. 프로젝트 말고는 기억에 남는 것이 없다.. 테스트와 에러만 자꾸 떠오른다.. (왜 안되는 걸까.. 무엇이 문제일까..)

 


프로젝트 개발

 

 

어제 문제였던 테스트는 지난 밤 소중하고 소중한 지인분의 도움과, 아침에 추가적인 로직 에러를 수정한 뒤 해결할 수 있었다. 드디어 본 초록불 너무 행복했다.

드디어 볼 수 있었던 초록불.. 잠시나마 행복했다.

 

테스트는 정말 좋은 것 같다. 테스트를 작성하면 로직 검증도되고, 현재 개발한 로직을 이해하는데 도움이 되고 또 설명이 된다. 이에 더해 내가 빠트린 부분에 대한 인식과 이런 경우는 어떻게 되지?(에지케이스)를 확인할 수도 있어서 좋은 것 같다.

 

 

그리고 아침에 어제 밤의 도움에 대한 감사 인사를 하면서, 질문 하나를 받았다.

 

프로젝트 구조에 대한 질문을 받았다.

 

나는 이번 프로젝트의 구조(아키텍처X)를 기존과는 다르게 진행하였다. 기존에는 기술계층으로 Model, View, Controller로 나누어 개발을 했었지만, 이번에는 도메인 계층으로 도메인을 먼저 식별하고, 도메인별로 묶어 프로젝트를 구성했다.

 

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── shoes
    │   │           └── ordering
    │   │               └── system
    │   │                   ├── ShoesOrderingSystemApplication.java
    │   │                   ├── common
    │   │                   │   ├── infra
    │   │                   │   └── util
    │   │                   └── domain
    │   │                       ├── common
    │   │                       ├── member
    │   │                       │   ├── controller
    │   │                       │   ├── domain
    │   │                       │   │   ├── application-service
    │   │                       │   │   │   ├── dto
    │   │                       │   │   │   ├── helper
    │   │                       │   │   │   └── mapper
    │   │                       │   │   └── domain-core
    │   │                       │   │       ├── entity
    │   │                       │   │       ├── valueobject
    │   │                       │   │       ├── event
    │   │                       │   │       └── exception
    │   │                       │   ├── repository
    │   │                       │   └── exception
    │   │                       ├── order
    │   │                       ├── product
    │   │                       └── payment

 

 

해당 구조는 처음 프로젝트를 진행하기전, 설계 중 일부분이다. 지금과 앞으로 조금씩 다른 부분은 존재하지만, 기본적인 틀은 다음과 같다.

 

 

보다 자세한 문서는 아래의 링크를 참고하면 된다..!(완벽하지는 않다.. 나도 처음인지라.....)

 

신발 주문 시스템 설계 도메인

shoes-ordering-system. Contribute to KEEMSY/shoes-ordering-system development by creating an account on GitHub.

github.com

 

프로젝트 설계에 대한 설명 후, 소중한 피드백을 받을 수 있었다.

 

내 생각을 이야기 한뒤, 다른 사람들의 소중한 의견을 들을 수 있었다. 같은 이름의 domain 이 중복되어 사용되는 것은 알고 있었다. 그리고 해당 부분은 도메인 계층 구조를 가져가면서 생기는 트레이드오프라고 생각했었다. 하지만, 중복이 되어야 하는 곳과 중복이 되지 않아도 되는 부분을 내가 미처 생각하지 못했던 것 같다.

 

중복이 되는 부분은 각각의 도메인 내부(현재 member)와 그 상단의 domain 이다. 각 도메인 별, 내부 구조의 domain 이름은 중복이 될 수밖에 없다.(계층을 그렇게 나눴으니깐) 하지만  각각의 도메인들이 들어있는 domain은 굳이 domain으로 할 필요가 없겠다는 생각이 들었다. 그래서 어떻게 바꾸면 좀 더 이해가 될까? 하는 고민을 하다, domains로 바꾸려고 한다. 각각의 domain들이 모여있다는 의미에서 domains라고 수정하기로 결정했다. 이 부분은 현재 개발 중인 Member 도메인 개발이 끝이 나면 수정해야겠다.

 


 

Kafka 연결 시작

그리고 나는 지금 현재 가장 큰(?) 고비 중 하나인 카프카를 연결하는 단계가 남아있다. 카프카를 연결해야, 이 프로젝트의 가장 큰 목표(이벤트기반 아키텍처)를 달성에 한걸음 내딛었다고 말할 수 있을 것 같다. 오늘은 간단하게 docker-compose를 활용한 dockerfile 작성만 했다. 사실 해당 dockerfile 들은 과거 이전에 공부했던 파일들을 활용해서 비교적 쉽게 작성할 수 있었다.

 

dockerfile들, 중복되는 내용을 common으로 빼고, 환경변수를 분리하였다.

 

그런데 문제가 하나 발생했다. 나는 Avro 를 사용한 직렬화를 진행하려고 하는데, 과거 사용했던, avro maven plugin 처럼 빌드 시에 Avro 클래스를 생성해 주는 플러그인을 사용하려고 했는데, 이게 잘 안 되는 것 같다... 왜 gradle.build 파일에 작성하고 새로고침 및 빌드 시에는 문제가 없는데.. 왜 해당 Avro 클래스가 생성되지 않는지 모르겠다...

 

아니 분명.. 생겼다고 하는데.. 보면 없다... 왜..?

 

여렇 다른 예시도 찾아봤는데, 무엇이 문제인지 알 수가 없다.. 각 플러그인 및 dependency의 버전이 맞지 않는 걸까..? 무엇이 문제일까.. 토스 콘퍼런스 보면서 중간에 쉬는 시간이나 관심 없는 주제가 나오면 가볍게 해 볼 생각이었는데, 예상치 못한 난관에 토스 콘퍼런스도 제쳐두고 하루온종일 자기 전까지 이 문제에 매달렸다..(하지만 해결하지 못했지 ㅋ)

728x90