Search

첫 번째 팀 프로젝트 회고록

팀 프로젝트 회고록

잘한 점

프론트엔드팀은 체계적으로 일관된 작업 방식을 구축하는 데 중점을 두었다. 가장 먼저, Swift 코드 컨벤션을 정해서 코드의 가독성과 유지 보수성을 향상시킨 것이다. 이를 통해 코드 리뷰 과정이 수월했다.
또한, 깃 커밋 컨벤션을 통일함으로써 프로젝트의 변경 사항을 추적하고 이해하는 데 큰 도움이 되었다.
더 나아가 PR 템플릿을 생성한 것도 중요한 성과였다. 이 템플릿 덕분에 팀원들이 수행한 작업을 더욱 명확하고 체계적으로 기술할 수 있었고 리뷰어가 PR을 더 빠르고 정확하게 평가할 수 있었다. 템플릿에는 PR 유형(기능 추가, 기능 삭제, UI 변경 등등), 작업 사항, 이슈 번호가 있었는데 이는 팀 내 커뮤니케이션의 효율성을 높이는 데 큰 도움이 되었다.

의사소통의 중요성

프로젝트 진행 중, 우리는 의사소통의 중요성을 절실히 깨닫게 된 사건을 경험하였다. 내가 생각했던 것보다 훨씬 더 많은 의사소통이 필요하다는 것을 이번 프로젝트를 진행하면서 깨달았다.
기획자, 디자이너, 개발자 간의 의사소통이 충분히 이루어지지 않은 상태로 나는 일주일 동안 메인 화면 UI를 완성시켰지만 일주일 간의 작업이 잘못된 방향으로 진행되었다. 이로 인해 거의 모든 UI를 처음부터 다시 해야 하는 상황에 놓였고 하늘이 무너지는 것 같았다..
우리는 긴급 회의를 가졌다. 각자의 입장을 허심탄회하게 나누고 문제의 근본 원인을 파악하는 데 집중했다. 문제점은 구현해야될 UI에 대한 요구사항을 명확하게 소통하지 않은 것이 결국 서로 간의 큰 오해와 실수로 이어졌던 것이었다.
이 문제를 해결하기 위해 우리는 몇 가지 해결책을 마련하였다. 첫 째, 이전에는 큰 단위의 변화에 대해서만 정기적으로 보고를 했다면 이번에는 작은 단위의 변화에 대해서도 지속적인 보고하여 진행 상황을 바로바로 점검하는 것이다. 둘 째, 피그마 디자인을 더 꼼꼼히 점검하여 이해되지 않는 부분이나 구현하기 힘들 것 같은 부분은 즉시 질문하기로 약속하였다.
그 결과, 프로젝트의 전반적인 의사소통이 크게 개선된 것을 느꼈고 빠른 피드백과 수정 작업을 통해 개발 속도가 크게 증가되었고 더 나은 결과물을 만들어냈다고 생각된다. 그리고 팀원들 사이의 신뢰도와 협력도가 강화되었다.
이 경험을 통해 의사소통의 중요성은 팀워크와 결과물에 큰 영향을 끼친다는 것을 깨달았고 그 가치의 깊이를 다시 한 번 이해하게 되었다. 앞으로는 프로젝트 초기부터 명확한 의사소통을 확립하고 정기적인 점검을 통해 이러한 문제를 예방할 것이다.

성장과 도전

나는 MVC 패턴은 처음엔 낯설고 복잡하게만 느껴졌었다. 하지만 이번 프로젝트를 통해 MVC 패턴에 대해 확실하게 감을 잡을 수 있는 발판이 되었다.
Model: 데이터의 심장부 모델은 데이터의 핵심이다. 데이터를 어떻게 효율적으로 저장하고 가져오며, 어떻게 업데이트 하는지 설계하는 곳이다.
View: 사용자 경험 뷰는 사용자에게 보여지는 UI 부분을 담당한다. 사용자 경험을 최우선으로 생각하며 어떻게 하면 직관적이고 사용하기 쉬운 인터페이스를 설계할 수 있을지 고민하는 곳이다.
Controller: 중재자 컨트롤러는 모델과 뷰 사이의 중재자 역할을 한다. 사용자의 입력을 모델로 전달하고 모델의 변경 사항을 뷰에 업데이트 하는 곳이다.
하지만 코드가 쌓이면 쌓일수록 MVC 패턴의 한계에 부딪혔다. MVC에서는 모델과 뷰의 분리가 충분하지 않은 것이다. 코드가 복잡해지고 유지 관리가 어려워졌다. 구글링을 해본 결과 MVVM 패턴이 이러한 문제점을 해결할 수 있다고 하였다. 코드의 복잡성은 증가하겠지만 각 부분의 분리를 통해 가독성과 유지 보수성이 크게 향상된다는 것이다.
앞으로 MVVM 패턴에 대해서 더 깊게 공부하고 다음 프로젝트에서는 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
복사
위 메서드는 비동기적으로 서버로부터 데이터를 받아오고 클로저 내부에서 데이터를 처리한다. 클로저는 이 메서드의 완료 후 데이터, 응답, 오류를 처리하는 데 사용된다. 클로저를 통해 비동기적으로 받아온 데이터를 안전하게 처리하고 필요한 데이터 변환 작업을 수행할 수 있다.
나는 클로저를 활용한 예제를 더 많이 다루어 볼 것이고 API 호출과 관련한 문서를 더 깊이 공부할 것이다.

멈추지 않는 도전, iOS 개발자로의 여정

나는 허약한 몸으로 태어나 부모님의 깊은 걱정을 샀다. 나는 공부를 시키지 않았고 운동을 시켰다. 그 당시엔 나도 그게 행복했다. 나는 당연히 몸 쓰는 직업을 가지게 될 거라 확신을 하며 살았지만 대학교에서 우연히 코딩을 접하게 되었고 내 인상의 길이 예상치 못한 방향으로 바뀌었다. 늦은 나이에 공부를 시작하려니 너무 막막했고 공부하는 방법도 몰랐고 아는 게 너무나도 없었다. 이제 Swift 공부를 시작한 지 2년이 다 되어 가지만 나와 같이 시작한 동기들에 비해 실력이 많이 부족하다.
아버지께서는 내가 갑작스럽게 앱 개발자의 길을 선택한 것에 대해 걱정이 크셨다. 겉으로는 응원의 말씀을 해주시지만 그 마음 한편에는 불안이 자리 잡고 있는 것이 느껴졌다. 그렇다고 해서 절대 좌절하진 않을 것이다. 코딩은 내가 처음으로 진정으로 원하는 것을 찾게 해주었고 그 열정은 나를 지금까지 이끌어왔다. 꼭 훌륭한 iOS 개발자가 되어서 놀래켜 드릴 거다ㅋㅋ
공부를 하다가 어렵다고 해서, 하기 싫다고 해서 대충 넘기고 하지 않으면 나는 제자리걸음이 아닌 계속해서 뒷걸음질을 치게 될 것이다. 앞으로 나아가기 위해선 어려운 것, 하기 싫은 것도 즐길 줄 알아야 한다는 것을 깨달았다. 그리고 나는 훌륭한 iOS 개발자가 되려면 누구보다 더 노력해야 되고 시간이 많이 걸릴 것이다. 주변에서 내가 늦다고 비웃더라도 나는 계속해서 앞으로 나아갈 것이다. 시간이 얼마가 걸리든 기어서라도 갈 것이다.