📱 개인 과제 제출!
오늘은 개인 과제 마지막날!
지금까지 만든 개인 과제를 제출하고, KPT 회고를 진행했다.
퍼스트파티 팀
Keep Problem Try
Ch. 3 앱개발 심화 주차
11 주차
CoreData와 HTTP 통신을 사용하여 책을 검색하고 저장하는 앱의 기능을 구현합니다.
<aside>
1. **`UIKit` 화면 구성 및 화면 전환**
1. 화면구성: `UISearchBar`, `UITextField`, `CollectionView`, `TableView` 활용
2. 화면전환: `책 검색 화면` → `책 상세 화면` 이동
2. **`Rest API` 활용**
Rest API를 활용하여 서버에서 책 목록을 불러옵니다.
- 책 검색 Rest API: https://developers.kakao.com/docs/latest/ko/daum-search/dev-guide#search-book
- Kakao iOS SDK 가 아닌 **REST API** 방식을 사용합니다.
1. **`CoreData` 활용**
- CoreData를 활용하여 선택한 책을 `기기 디스크에 저장`합니다.
1. **`소프트웨어 아키텍처` 활용** **(선택)**
- 간단한 MVVM 구조로 리팩토링해봅니다.
</aside>
느낀점
- 명노훈
- 이번 챕터에서 Swift에서 RxSwift를 배웠습니다. 그래서 네트워크 쪽 비동기 관련 코드를 RxSwift를 사용해보았는데, 처음이라 낯설고 어려웠습니다. 그리고 기존에 배운 디스크 데이터 저장 기술을 사용하여 과제 기능을 구현하는데에는 이제 익숙해져서 처음 사용했을때보단 더 쉬워진 느낌이 들었습니다.아직 RxSwift를 완벽하게 이해하지 못했고, 주말에 따로 공부를 더 해야될 것 같습니다.
- bomirgasm
- 새로운 기술을 익히며 당황스러운 순간도 많았지만 시행착오를 통해 구조를 나누는 방식이나 RxSwift 흐름을 점점 이해해가는 과정이 의미 있었습니다.
- ghnn-n
- RxSwift를 처음 사용해봤는데 처음이라 아직 부족한 부분이 많지만 그냥 딱 봤을 때 코드가 한 눈에 보이는 느낌이다. 가독성이 굉장히 올라갔음을 느꼈고 많이 재밌었다. 현업에서도 많이 사용하고 해당 기술의 사용여부를 회사에서도 많이 보는 걸로 알고 있어서 RxSwift를 사용한 코드를 더 많이 작성해보고 싶다.
- heopill
- 이번 심화 과정에서 책검색 앱을 통해 REST API 통신을 통해 데이터를 받고, CoreData를 통해 내부저장소에 저장하는 경험을 통해 네트워크 통신과 데이터 저장의 실력을 키울 수 있었습니다. 다만 RxSwift를 처음 배웠는데 비동기 프로그래밍에 대해 개념적으로는 이해를 했지만 실제 내 코드에서 적용시키는 부분에 어려움이 있었습니다. 다음 수준별 분반 수업을 통해 RxSwift 예제에 익숙해지고, 책검색 앱을 MVVM 패턴으로 리펙토링 해보면서 RxSwift와 친해져야 할 것 같습니다.
2. Keep
- 학습한 부분에 대해 꿀팁 있으면 서로 공유하기.
- 밝은 팀분위기로 힘들때 잠시 스크럼을 하면서 분위기를 환기하고 다시 집중가능 했던 학습 분위기
- 모를 땐 무조건 챗GPT 사용보단 튜터님과 팀원들과 먼저 상의해보기
- 포기하지 않고 끝까지 투지를 🔥불태워 도전하기!!
- 울지 않은 것
- 늘어져있는 팀원 채찍질해주기
- 어려워도 쉽다고 거짓말쳐서 팀원들 동기부여해주기
3. Problem
- 문제 → 원인
- 불충분한 코드 리뷰 횟수 → 개개인의 학습 시간과 과제 속도가 달라서 코드리뷰가 쉽지 않았다.
- 과제 완성 시간 부족 → 공식 문서 및 레퍼런스 탐색 시간 부족, 공수 예측 실패, 쓸데없는 근자감(김보미 해당)
- 새로운 패턴과 코드 학습 부족 → 학습 이해도 부족(RxSwift, CoreData, MVVM 패턴)
- 코드 구조의 불명확함 → Swift 개발 경험과 지식 부족
4. Try
- 위기의 순간에 튜터님 바로 찾아가기 (애착 튜터님이 부재 중이셔도 용기내어 다른 튜터님 찾아가기)
- 코드리뷰 시간을 정해서 같이 리뷰하면서 피드백 해주기!
- 새로운 문법이나 기술 혹은 라이브러리는 공식문서를 먼저 보는 습관 들이기
- 문제 발생시 <<즉각>> 해결하면서 Trouble Shooting TIL 작성하기 (프로젝트 완성 후 작성하면 기억이 나지 않음)
과제 해설 영상에서 배운 내용 정리
1. searchBar.resignFirstResponder() 와 searchBarTextDidEndEditing 설명
⌨️ searchBar.resignFirstResponder()
- 의미: 키보드를 내리기 위한 명령
searchBar는 UITextField와 유사하게 firstResponder가 되면 키보드를 자동으로 올라감
resignFirstResponder()를 호출하면 searchBar가 입력 포커스를 잃고 키보드가 내려감.
사용자가 검색 버튼(검색 키보드의 "검색")을 눌렀을 때, 키보드를 숨기고, 이후 처리 (검색 실행 등)를 진행할 수 있도록 함.
searchBarTextDidEndEditing
- 의미: searchBar의 편집이 끝났을 때 호출되는 델리게이트 메서드
- 텍스트 입력이 끝나고 키보드가 내려간 뒤, 또는 포커스가 다른 곳으로 이동했을 때 발생
- 사용자가 키보드를 내리면
searchBarTextDidEndEditing이 호출되어, 입력된 검색어로 데이터를 가져오도록 처리
2. setContentHuggingPriority 와 setContentCompressionResistancePriority 설명
이 두 가지는 Auto Layout의 우선순위 설정입니다. 뷰가 레이아웃 변화(늘어나거나 줄어드는 상황)에 어떻게 반응할지를 지정
setContentHuggingPriority
- "얼마나 자신의 크기를 유지하고 싶어하는지"를 나타냄.
- hugging = 끌어안다 → 자신을 작게 유지하려고 하는 성질
- 값이 높을수록 늘어나기 싫어함.
label.setContentHuggingPriority(.defaultHigh, for: .horizontal)
레이블이 다른 뷰에 의해 좌우로 늘어나는 것을 막고, 자신의 intrinsic content size(내용 크기)를 유지하려고 함.
setContentCompressionResistancePriority
- "얼마나 압축되기 싫어하는지"를 나타냄
- 값이 높을수록 작아지지 않으려는 성질이 강함.
- 낮으면 쉽게 작아지고, 높으면 내용이 잘리지 않도록 유지하려 함.
label.setContentCompressionResistancePriority(.required, for: .horizontal)
레이블이 잘리지 않도록 강하게 버티는 설정.
느낀점과 배운점
- 이번 챕터를 통해 단순한 화면 구성이나 기능 구현을 넘어서, 데이터 흐름을 구조화하고 유지보수 가능한 코드 작성에 대한 감각을 키울 수 있었다.
- 특히 처음 접한 RxSwift는 진입 장벽이 높아 어려움을 느꼈지만, 비동기 이벤트 흐름을 코드로 명확하게 표현할 수 있다는 점에서 큰 가능성을 보았다.
- 또한, AutoLayout의 Hugging/Compression 우선순위 설정 개념은 UI 디버깅 시 정말 유용한 도구임을 깨달았다.
- 단순히 뷰를 배치하는 수준을 넘어, 시스템이 뷰를 어떻게 계산하고 있는지를 이해해야 더 정교한 UI 구현이 가능하다는 사실도 함께 배웠다.
- 비록 아직 미숙한 부분도 많지만, 새로운 기술과 개념에 계속 부딪혀보며 시행착오를 기록하고 공유하는 과정이 무엇보다 값졌다.
- 다음 주차에서는 RxSwift에 더욱 익숙해지고, MVVM 패턴으로 앱을 정리해보며 실제 서비스 수준의 아키텍처 구성을 경험해보고 싶다.