팀 프로젝트 회고록
잘한 점
체계적이고 일관된 작업 방식을 구축하는 데 중점 두었다. 먼저, Swift 코드 컨벤션을 정립하여 코드의 가독성과 유지 보수성을 향상시켰다. 이를 통해 코드 리뷰 과정이 더욱 효율적으로 진행될 수 있었다.
또한, 깃 커밋 컨벤션을 통일하고 PR 템플릿을 도입한 것도 주요 성과였다. PR 템플릿에는 PR 유형, 작업 사항, 관련 이슈 번호 등이 포함되어 있어 리뷰어가 변경 사항을 빠르고 정확하게 파악할 수 있었다.
의사소통의 중요성
프로젝트 진행 중, 우리는 의사소통의 중요성을 절실히 깨닫게 된 사건을 경험하였다. 내가 생각했던 것보다 훨씬 더 많은 의사소통이 필요하다는 것을 이번 프로젝트를 진행하면서 깨달았다.
기획자, 디자이너, 개발자 간의 의사소통이 충분히 이루어지지 않은 상태로 나는 일주일 동안 메인 화면 UI를 완성시켰지만 일주일 간의 작업이 잘못된 방향으로 진행되었다. 이로 인해 거의 모든 UI를 처음부터 다시 해야 하는 상황에 놓였고 하늘이 무너지는 것 같았다..
우리는 긴급 회의를 가졌다. 각자의 입장을 허심탄회하게 나누고 문제의 근본 원인을 파악하는 데 집중했다. 문제점은 구현해야될 UI에 대한 요구사항을 명확하게 소통하지 않은 것이 결국 서로 간의 큰 오해와 실수로 이어졌던 것이었다.
이를 해결하기 위해 다음과 같은 개선책을 도입했다.
1.
작은 단위의 변경사항도 즉시 공유하는 상시 보고 체계 구축
이전에는 큰 단위의 변화에 대해서만 정기적으로 보고를 했다면 이번에는 작은 단위의 변화에 대해서도 지속적인 보고하여 진행 상황을 바로바로 점검하는 것이다.
2.
디자인 명세에 대한 즉각적인 피드백과 질의응답 프로세스 확립
피그마 디자인을 더 꼼꼼히 점검하여 이해되지 않는 부분이나 구현하기 힘들 것 같은 부분은 즉시 질문하기로 약속하였다.
그 결과, 프로젝트의 전반적인 의사소통이 크게 개선된 것을 느꼈고 빠른 피드백과 수정 작업을 통해 개발 속도가 크게 증가되었고 더 나은 결과물을 만들어냈다고 생각된다. 그리고 팀원들 사이의 신뢰도와 협력도가 강화되었다.
이 경험을 통해 의사소통의 중요성은 팀워크와 결과물에 큰 영향을 끼친다는 것을 깨달았고 그 가치의 깊이를 다시 한 번 이해하게 되었다. 앞으로는 프로젝트 초기부터 명확한 의사소통을 확립하고 정기적인 점검을 통해 이러한 문제를 예방할 것이다.
아키텍처 패턴의 이해와 적용
나는 MVC 패턴은 처음엔 낯설고 복잡하게만 느껴졌었다. 하지만 이번 프로젝트를 통해 MVC 패턴에 대해 확실하게 감을 잡을 수 있는 발판이 되었다.
Model - 데이터의 심장부
모델은 데이터의 핵심이다. 애플리케이션의 데이터와 비즈니스 로직을 담당하고 데이터의 CRUD 작업과 유효성 검증을 처리한다.
View - 사용자 경험
뷰는 사용자에게 보여지는 UI 부분을 담당한다. 사용자 경험을 최우선으로 생각하며 어떻게 하면 직관적이고 사용하기 쉬운 인터페이스를 설계할 수 있을지 고민하는 곳이다.
Controller - 중재자
컨트롤러는 모델과 뷰 사이의 중재자 역할을 한다. 사용자의 입력을 모델로 전달하고 모델의 변경 사항을 뷰에 업데이트 하는 곳이다.
하지만 코드가 쌓일수록 MVC 패턴의 한계점을 경험하였다. Controller에 비즈니스 로직이 과도하게 집중되는 'Massive View Controller' 문제를 겪었다. 이는 MVVM 패턴으로의 전환을 고려하게 된 주요 계기가 되었다.
기술적 도전과 해결 과제
[ API 호출의 어려움 ]
나는 프로그래밍을 할 때 API 호출이 가장 어려운 부분이라고 느낀다. 이는 여러 이유 때문인데 첫째로, 서버와의 통신 과정에서 발생할 수 있는 다양한 오류를 처리해야 한다는 부담감이 크다고 느껴졌다. 네트워크 상태, 데이터 형식의 오류, 서버 응답의 지연 등 다양한 변수를 고려해야 하기 때문이다. 둘째로, 비동기적인 특성 때문에 코드의 실행 순서를 예측하고 관리하는 것이 아직 복잡하다고 느껴진다. 이를 해결하기 위해선 좋은 네트워크 처리 방법을 공부하고 다양한 에러 케이스에 대비하는 연습이 필요하다고 생각된다. 예를 들어, URLSession을 이용하여 API 호출을 더욱 연습하고 에러 핸들링에 대한 이해를 넓혀야 한다. 또한, 비동기 프로그래밍에 대한 이해를 높이기 위해 ‘async/await’ 패턴이나 ‘RxSwift’ 등의 라이브러리를 공부해보는 것도 좋을 것 같다.
[ 클로저 문법의 약점 ]
이번 프로젝트를 진행하면서 클로저 문법을 사용하는 데 아직 어려움을 겪고 있다는 것을 깨달았다. API 호출 메서드에 사용되는 클로저는 비동기적으로 데이터를 처리할 때 매우 유용하다.
URLSession.shared.dataTask(with: url) { (data, response, error) in
if let error = error {
print("Error: \\(error)")
return
}
guard let data = data else { return }
// 데이터 처리
// ex) JSON 데이터 파싱
}
.resume()
Swift
복사
위 메서드는 비동기적으로 서버로부터 데이터를 받아오고 클로저 내부에서 데이터를 처리한다. 클로저는 이 메서드의 완료 후 데이터, 응답, 오류를 처리하는 데 사용된다. 클로저를 통해 비동기적으로 받아온 데이터를 안전하게 처리하고 필요한 데이터 변환 작업을 수행할 수 있다.
향후 발전 계획
1.
기술적 역량 강화
•
MVVM 아키텍처 패턴 적용
•
클로저 문법 강화
•
네트워크 학습
2.
프로젝트 경험 확대
•
개인 프로젝트 포트폴리오 구축
•
지속적인 코드 리뷰 참여를 통한 실무 경험 습득