이전 상황
이전 상황은 아래와 같았다. API를 사용하여 Solved.ac에 있는 유저정보를 가져오고 데이터 저장은 SwiftData를 활용하여 구현하기로 했다. 그리고 선택한 프로그램 아키텍처는 Clean Architecture이다. (잘 적용할 수 있을지 모르겠다...)
클린 아키텍처
무려 로버트 C. 마틴(엉클밥 또는 밥아저씨라고도 불리는...) 선생님이 2012년에 작성하신 글이다. (10년도 더 된...) 12년된 글을 보면서 현재의 가장 최신 SwiftUI, SwiftData를 사용하면서 적용하는 나라니... 참 작아진다.
클린 아키텍처를 선택한 이유는 SOLID원칙을 지키면서 앱을 만들어보고 싶었기 때문도 크다. 따라서 이것은 코딩을 하면서 계속 의심하고 확인해 봐야겠다. Clean Architecture에서는 아래와 같은 다이어그램이 적용된다. 화살표는 의존성을 나타내는데, 간단하게 이야기하면 UI Layer는 Domain Layer의 메서드나 속성을 사용하게 되고, Data Layer 또한 Domain Layer의 메서드나 속성을 사용하게 된다. 그 대신 아무 곳에도 종속되어 있지 않은 Domain Layer의 경우는 UI Layer, Data Layer를 몰라야 한다.
파란색의 Domain Layer는 핵심적인 비즈니스 로직, 정책에 해당하고, 바깥쪽의 초록색, 빨간색인 UI, Data Layer는 이러한 비즈니스 로직에 맞춰진 데이터를 어떻게 가져오고 어떻게 뷰에 표시하는지를 나타내는 것이라고 볼 수 있다.
내 프로젝트에 적용해보자
대략적인 개요를 짜보면 아래와 같이 구성하면 되지 않을까 생각해 본다. Presenter의 경우 ViewModel을 우선 염두에 둬야 할 것 같다. (Use Case를 통해 만들어진 데이터들을 View에 뿌리기엔 ViewModel이 제일 적당한 것 같은데...)
물론 위의 원도표를 간단하게 가로로 바꾼 것에 불과하지만 그래도 이렇게 한눈에 보니까 이것에 맞춰서 프로젝트를 만들어야겠다는 생각이 들었다. 정말 맛보기 정도가 되겠지만 계속 고도화시켜나가면서 프로젝트를 진행할 생각이다. 이 앱에서 가장 중요한 Entity, 데이터 구조부터 구성하며 프로젝트를 진행하면 될 것 같다.
처음 목표
- SOLID 원칙을 지킬 것
- 위에서 설정한 의존성을 위배하지 않을 것
- 테스트 코드를 작성해 볼 것
위 두 가지를 지켜나가면서 프로젝트를 진행할 계획이다. 그리고 아래의 두 Github 레포지토리를 참고할 예정이다.
'→ Solver' 카테고리의 다른 글
[Project-Solver] 프로젝트 1차 배포 (v1.0.1) (0) | 2024.05.01 |
---|---|
[Project-Solver] SwiftData 문제 기록 (0) | 2024.04.25 |
[Project-Solver] 앱 기본 설계 (2) | 2024.04.22 |
[Project-Solver] 프로젝트 기본 세팅 (1) | 2024.04.19 |
[Project-Solver] 프로젝트 시작 (0) | 2024.04.17 |