📖 오늘의 학습
현재 프로젝트는 클린 아키텍쳐로 진행이 되고 있다. 클린 아키텍쳐에서 원하는 모든 것을 따르진 않지만, 전체적인 틀은 지키려고 한다. ▼
현재 구조는 대략 이렇다.
entities(request dto, response dto) -> api repository -> usecase -> controller -> presenter
모델을 먼저 선언하고 레포지토리에서 이를 사용하여 API를 호출하는 메소드를 정의한다. 그리고 이를 usecase화 시켜 컨트롤러에 뿌리고, 컨트롤러는 이를 사용하여 데이터를 받아온 다음 프레젠터로 전달한다.
굉장히 이상적인 구조로 프로젝트가 설계되어있는데, 여기에 몇가지 문제점이 존재했다. 바로 response, request dto의 통일성 문제와 usecase 보일러 플레이트이다.
가장 먼저 response, request dto의 통일성 문제는 백엔드와의 문제가 크다. 백엔드에서 제공하는/받는 데이터를 dto로 전달하는데, 명세가 조금이라도 달라지면 이 dto클래스도 하나 더 짜야한다는 것이다.
예를 들어, 아래와 같이 데이터가 두 종류로 온다고 해보자.
{
"id" : 1
"name" : "gorani"
}
{
"id" : 1
"name" : "gorani"
"age" : "999"
}
이런 경우, 클래스를 만들 때 id, name, age까지 만든 다음에 age에 null체크를 넣어주면 하나로 해결할 수 있다.
하지만 아래의 경우는 곤란해진다.
{
"id" : 1
"name" : "gorani"
"gender" : "MALE"
}
{
"id" : 1
"name" : "gorani"
"age" : 999
}
이렇게 들어온다고 하면 dto 클래스에 gender와 age를 모두 정의하는 식으로 구성할 수 있지만, 둘을 합침으로써 혼란이 야기된다. 둘의 목적이 다를 수도 있기도 하고, API명세를 봤을 때 해당 dto와 일치하는 response body를 제공하는 API가 없어 도대체 어떤 API에 연결된 dto인지 헷갈리기도 한다.
그래서 이 부분은 response dto와 request dto로 나누지 않고 model로 합친 다음, 백엔드와 조율했다. 특정 객체에 대한 정보를 보낼 때는 해당 객체의 양식을 정확히 지켜서 보내는 것으로.
다음으로는 usecase 보일러 플레이트이다. API를 모두 usecase로 만들어서 각 컨트롤러에 제공을 하는데, API의 수가 많으면 많을수록 usecase의 수도 많아진다. 한 파일 당 하나의 usecase를 정의하는데, API가 30개가 되면 usecase 파일도 30개가 된다.
그래서 이 부분 역시도 백엔드와 조율했다. 조회, 검색에 대한 API는 한 엔드포인트에 query parameter를 조절하여 데이터를 보내는 식으로 바꾸고, 그 외에도 하나로 합칠 수 있는 API들은 최대한 합쳐서 보내는 것으로 합의를 했다. 이렇게 하면 하나의 usecase로 여러 군데의 컨트롤러에 제공하여 코드를 재사용할 수 있다.
🤔 오늘의 회고
결국은 해결을 백엔드에 의존하게 됐다. 백엔드에 의존하지 않고 프론트에서 최대한 효율적으로 모든걸 해결할 수 있으면 좋겠지만, 아무리 생각해도 API의 바리에이션이 늘어나면 늘어날수록 보일러플레이트 문제는 점점 해결할 수 없는 문제로 커지게 된다.
프로젝트는 협업이다. 어쩌면 혼자 힘으로 모든걸 해결하려고 든게 문제일지도 모른다. 물론 이런 과정이 내 실력을 좀 더 키워주겠지만, 때로는 부탁을 할 줄도 알아야한다. 정말 필요할 때, 일이 효율적으로 해결이 될 때 부탁을 하는 건 부담을 지우는게 아니다.
+
이제 항해99 스터디가 끝났다. 매일매일 TIL을 작성하는게 쉽지 않은 일임을 느낀다. 이번엔 억지로라도 만들어서 하긴 했는데 이젠 주간으로 올릴까 한다...
'TIL' 카테고리의 다른 글
[TIL] 중첩 메소드 사용 (0) | 2024.12.04 |
---|---|
[TIL] 99클럽 코테 스터디 34일차 TIL : null check (0) | 2024.11.30 |
[TIL] 99클럽 코테 스터디 33일차 TIL : Flutter 괴랄한 JSON 파싱 (0) | 2024.11.29 |
[TIL] 99클럽 코테 스터디 32일차 TIL : 구글 맵 (0) | 2024.11.28 |
[TIL] 99클럽 코테 스터디 31일차 TIL : AutomaticKeepAliveClientMixin (0) | 2024.11.27 |