6주차부터 UI 개발을 시작했지만, 디자인의 지속적인 변경과 API명세의 지연으로 인해 개발 전략을 재고해야 했다. 이는 백엔드&디자이너와의 첫 협업에서 비롯된 것이었으며, 우리의 협업 프로세스에 개선의 여지가 있음을 알게 해주었다.
이러한 상황에서, 나는 디자인과 API명세가 확실히 완성되기 전까지 개발을 멈추고 더 깊이 있는 준비와 학습에 집중하기로 결정했다. 특히 이번 프로젝트에서 적용하기로 한 클린 아키텍처에 대해 더욱 자세히 공부하는 시간을 가졌다. 학습을 통해 더 견고한 코드 구조를 설계할 수 있게 되었고, REST 서버와의 통신 예제를 실습하면서 이해를 높였다. 또한, 네이버 다이나믹 맵 API를 활용하여 우리 앱의 핵심 기능인 지도 기능의 프로토타입을 클린 아키텍처 구조로 설계해보았다.
개발 패러다임 학습이 어려운 이유 (나의 생각)
클린 아키텍처와 같은 개발 패러다임을 학습하고 적용하는 과정에서 가장 큰 난관은 추상적인 개념을 실제 코드로 구현하는 것이다. 이론적 이해와 실제 적용 사이에는 큰 간극이 존재하며, 이를 메우는 것이 개발자에게는 중요한 도전 과제가 된다고 생각한다.
1. 추상에서 구체로의 전환
개념적으로는 명확해 보이는 아이디어도 코드로 옮기는 과정에서 예상치 못한 어려움에 직면하게 된다.
2. 다양한 해석과 구현
개발 패러다임은 개발자마다 해석과 구현 방식이 다를 수 있다. 이러한 다양성은 학습 과정에서 혼란을 줄 수 있으며, 때로는 "올바른" 방법을 찾는 데 어려움을 겪게 만든다고 생각한다.
3. 과도한 정보의 함정
너무 많은 예제와 접근 방식을 참고하다 보면 오히려 본질을 놓치거나 불필요하게 복잡한 구조를 만들어낼 위험이 있다.
4. 실제 프로젝트와의 괴리
학습 자료나 예제는 종종 이상적인 상황을 가정하지만, 실제 프로젝트는 훨씬 더 복잡하고 제약이 많다. 이러한 차이를 극복하는 것 또한 중요한 학습 과제라고 생각한다.
5. 지속적인 진화
개발 패러다임은 계속해서 변화하고 발전한다. 이는 학습이 일회성 과정이 아닌 지속적인 과정임을 의미하며, 때로는 이미 습득한 지식을 수정하거나 폐기해야 할 수도 있다.
이러한 어려움을 극복하기 위해, 나는 먼저 나의 이해를 바탕으로 구현해보고 이후 다른 개발자의 코드를 참고하며 점진적으로 개선하는 방식으로 학습한다. 이 접근법은 초기 단계에서의 과도한 복잡성을 피하면서도, 지속적인 학습과 개선을 가능하게 한다.
또한, 이 과정에서 중요한 것은 완벽을 추구하기보다는 실용적인 구현에 초점을 맞추는 것이다. 개발 패러다임은 결국 더 나은 소프트웨어를 만들기 위한 도구일 뿐, 그 자체가 목적이 되어서는 안 된다고 생각한다. 따라서 프로젝트의 요구사항과 팀(또는 자신)의 역량을 고려하여 적절히 적용하는 것이 중요하다고 생각한다.
클린 아키텍처에 대한 나의 생각
클린 아키텍처를 학습하고 지도 프로토타입이라는 간단한 예제를 설계하고 구현하면서, 이 아키텍처의 장점과 동시에 실제 적용 시 마주치는 도전들을 경험할 수 있었다.
먼저, 클린 아키텍처의 뚜렷한 장점들을 체감할 수 있었다.
1. 모듈화와 유지보수성
각 계층이 명확히 분리되어 있어, 특정 부분의 수정이 다른 부분에 미치는 영향을 최소화할 수 있었다. 이는 장기적으로 유지보수를 용이하게 만들 것으로 생각한다.
2. 코드의 명확성
의존성 규칙을 따르다 보니, 코드의 흐름과 각 컴포넌트의 책임이 더욱 명확해졌다.
3. 테스트 용이성
비즈니스 로직이 외부 의존성으로부터 격리 되어 있어, 단위 테스트 작성이 훨씬 수월해질 것이라고 생각한다. Mock 데이터를 통해 테스트 해보면서 몸소 느꼈다.
4. 확장성
새로운 기능을 추가하거나 기존 기능을 변경할 때, 아키텍처의 구조 덕분에 기존 코드를 크게 건드리지 않고도 작업할 수 있을 것이라고 느꼈다.
하지만 동시에, "이렇게까지 해야 하나?"하는 의문도 들었다. 왜냐하면 간단한 지도 프로토타입을 구현하는 데에도 상당히 복잡한 구조가 만들어졌기 때문이다.
1. 과도한 추상화
작은 기능에도 여러 계층을 거치게 되어, 때로는 불필요하게 복잡해 보이는 경우가 있었다.
2. 보일러플레이트 코드
각 계층을 구현하기 위해 반복적으로 작성해야 하는 코드가 많아졌다.
3. 러닝 커브
RxSwift를 학습할 때와 마찬가지로, 이 구조를 확실하게 이해하고 적용하는 데 많은 시간이 걸릴 수 있겠다는 생각이 들었다.
물론 이러한 의문들은 아마도 간단한 예제(프로젝트 규모가 작음.)이기 때문에 더욱 두드러져 보이는 것 같다. 대규모 프로젝트나 장기적인 관점에서는 이러한 구조가 오히려 필수적일 수도 있겠다는 생각이 들었다.
결론적으로, 클린 아키텍처의 원칙을 이해하고 적용하는 것은 중요하지만, 프로젝트의 규모와 요구사항에 맞게 유연하게 적용하는 것이 핵심이라고 생각한다. 작은 프로젝트에서는 과도한 구조화를 피하고, 필요에 따라 점진적으로 아키텍처를 발전시켜 나가는 것이 효율적일 수도 있겠구나 싶었다.
'우리 같이 협업하자' 카테고리의 다른 글
[우협하/문제해결] 네이버 다이나믹맵에서 자동으로 카메라 무브가 발생하는 원인을 해결해보자. (5) | 2024.09.02 |
---|---|
[우협하] 7주차 회고 - 초기화 (0) | 2024.08.25 |
[우협하] 6주차 회고 - 본격적인 개발을 시작하다. (+ 코디네이터 패턴) (0) | 2024.08.23 |
[우협하] 재사용 View에 대한 고민 (0) | 2024.08.20 |
[우협하] 5주차 회고 - 디자인 ↔️ 개발 (0) | 2024.08.13 |