* github: https://github.com/happyduck-git/Heritage-app.git
1. 팀 소개: How We Work
웹과 앱을 활용하여 사용자의 문제를 해결하기 위해 고민하는 개발팀
2. 프로젝트 소개: Heritage(헤리티지)
인공지능 알고리즘 추천은 그만! 내가 직접 경험한 문화예술을 한줄로 추천하는 앱/웹
기간: 25.Jan~17.Mar.2022
Q. 왜 이런 프로젝트를 기획하게 되었나요?
A. 알고리즘 추천은 편중된 시선으로 점점 양극화되는 세상을 가속화한다는 우려가 있습니다. 저희는 이런 현상이 사회뿐 아니라, 개인에게도 좋지 않은 영향을 준다고 보았습니다. 그래서 사람이 몸소 경험한 문화 예술을 직접 타인에게 공유할 수 있는 플랫폼을 만들고자 하였습니다.
Q. 왜 문화 예술과 관련된 주제를 선정하셨나요?
A. 문화 예술은 사람들의 삶을 더욱 풍성하게 만들어주기 때문입니다. 다양한 문화를 경험할 수록 더욱 다채로운 삶을 살아갈 수 있다고 저희는 믿습니다. 그렇기 때문에 조금 더 많은 사람들이 쉽게 다양한 영역의 문화 예술에 대해 알 수 있도록 하는 애플리케이션을 기획하게 되었습니다.
3.앱 기능 설명 및 구현한 코드 설명
웹과 앱 모두에서 CRUD 기능을 구현하는 것이 이번 프로젝트의 가장 큰 목표였습니다.
CRUD가 사용되는 보편적인 형태 중 하나가 게시판이었기에 저희가 기획한 문화 예술 공유 웹/앱과도 일치하였습니다.
데이터베이스로는 RestfulAPI를 사용하였고, 서버 담당자분께서 구현을 해주셨습니다.
API는 GET기능만 사용해보았는데, 이번 기회에 POST, PATCH, DELETE까지 경험해 보아 아주 보람있었습니다.
UITableView가 베이스가 되었고, 0번째 행에는 CollectionView를 넣어 가장 좋아요 수가 높은 게시글이 나오도록 하였습니다.
셀은 모두 커스텀으로 제작하였고, AutoLayout이 적용되어 다양한 핸드폰 사이즈에도 레이아웃이 깨지지 않음을 확인했습니다.
셀의 하트 이미지뷰에는 tap gesture를 적용하여 탭 시에 색상이 변하고, like count가 +1 또는 -1 되도록 설정하였습니다.
또한 네비게이션바 버튼을 누르면 화면 전환이되어 글쓰기를 할 수 있고,
글을 작성한 후에 글쓰기 버튼을 탭하면 해당 글이 API로 POST되고, 메인 뷰컨트롤러로 전환되면서 tableView를 reload하여 게시판에 새 글이 나타나도록 하였습니다. 올린 글을 수정하고자 할 때에는 글을 스와이프 하여 수정할 수 있습니다. 대신 글 작성시에 입력했던 비밀번호가 맞으면 수정화면으로 넘어가고, 틀리면 비밀번호 재확인 요청을 받습니다. 수정을 할 때는 PATCH를 사용해서 이미 API에 POST되었던 데이터의 일부만을 수정하도록 하였습니다. 삭제를 원할 때에도 역시나 비밀번호 확인을 받고, 비밀번호가 맞으면 삭제가 가능합니다.
글 업데이트가 제대로 되지 않는 경우 화면을 pull하면 업데이트가 되는 기능도 추가하였습니다.
4.프로젝트에서 맡은 역할 및 사용한 기능
1) 역할: 저는 아이폰 애플리케이션의 UI와 기능구현까지 모든 과정을 담당하였습니다. (다른 두명의 팀원들은 각각 웹 프론트, 서버를 담당하셨습니다.)
2) 사용한 기능: UITableView, UICollectionView, Custom Cell, Cell Swipe, API 통신, UIAlert, TapGesture, AutoLayout, Pull to refresh 등
UITableView, Custom Cell, API 통신(GET), 화면 간 데이터 전달과 같은 기능들은 이미 알고 있었지만 본 프로젝트에 맞춰서 새롭게 적용하려니 삐그덕 거리는 부분들이 좀 있었습니다. 프로젝트 구현을 위해 새로 배운 것으로는 UICollectionView, UIAlert, API 통신(POST, PATCH, DELETE), API에 저장된 비밀번호 확인하여 해당하는 정보 불러오기, TapGesture 등이 있습니다.
이번 프로젝트에서 AutoLayout에 대해 확실히 개념을 잡을 수 있었고 커스텀 셀 제외하고는 story board를 사용하지 않고 모두 programmatical 하게 작성하여 코드로 UI를 구성하는 법에 대해 많이 배우게 되었습니다. Swift의 장점이 스토리보드라고 생각하고 있었던 저였지만, 실무에서는 머지 시의 편리함을 위해 코드로 주로 작성한다고 이야기를 들었습니다. 그래서 이번 기회에 코드로 UI 작성하는 법을 배우게되었고 생각만큼 복잡하지 않아서 좋았습니다(쓸게 많아 손가락은 좀 아팠습니다 ㅎㅎ) 특히 AutoLayout의 경우는 개인적으로 코드로 작성하는게 더 편리하더라구요. 딱딱 예쁘게 배치될 걸 머리에 그리면서 코드를 짜면 기분이 정말 좋았습니다.
5.추후 프로젝트에 적용될 깨달음
1)구성원들의 분야에 대해 어느 정도 얼개를 알고 있으면 훨씬 프로젝트 진행이 수월합니다. 세세한 기술을 알 필요는 없지만, 무슨 일을 할 수 있으며 어떤 식으로 업무가 이루어지는 지는 반드시 알아야된다고 느꼈습니다. 그래야 서로가 필요한 부분을 제공해주고 어떤 것이 나에게 필요한지 잘 이야기해낼 수 있습니다. 그렇게 되면 자연스레 회의도 간결해질 것 같습니다.
백엔드에 대한 제 지식은 ‘데이터 저장’이 거의 전부 였습니다. 그러다보니 API를 통한 데이터 통신도 다양할 수 있다는 사실을 알지 못하여 단순한 POST를 구성하는데도 한 번 애를 먹었습니다. 하지만 직접 담당자에게 설명을 듣고 방법을 이해하니 쉽게 해결할 수 있었습니다. 이 이후로 팀원간의 소통이 역시나 중요할 뿐만 아니라 상대의 분야에 대한 이해도가 높다면 업무를 해나가기 수월하다는 것을 깨달았습니다.
2)업무 진행사항에 대해 잘 알고 있어야 합니다. 제 일에만 빠져있다보면 전체적인 프로젝트의 흐름을 놓칠 수 있다는 걸 느꼈습니다. 에너지를 조금 더 써야하지만 팀 프로젝트는 말 그대로 팀이 같이 움직이는 업무이니 서로의 진도도 잘 알고 있어야 발맞추어 움직일 수 있습니다. 그리고 상대의 업무 진행사항에 대해 어느 정도 알고 있다면 같이 일하는 팀원에 대해 그만큼 관심을 가져주는 것이니 서로에게 힘을 줄 수도 있는 것 같습니다. 다만 지나쳐서 간섭이 되지만 않게 하면 되겠죠?
3)팀원의 일을 나의 일처럼 도와 같이 성장합니다. 내가 맡은 일을 해내기에도 버거운 경우라면 조금 어렵겠지만, 시간적으로 정신적으로 여유가 어느 정도 있다면 서로 도와가는 것이 훨씬 좋다고 생각합니다. 혼자서 문제를 해결한 경우보다도 더 기억에 잘 남고 협력에 대한 긍정적인 경험이 쌓여 이후 프로젝트 진행에도 좋은 영향을 주기 때문입니다.
4)본인 분야에 대한 레퍼런스를 많이 쌓아둡니다. iOS 개발자라면 많은 사람들에게 사랑받는 iOS 어플들이 어떠한 기능을 갖추고 있는지, 레이아웃은 어떤지에 대해 주의 깊게 살펴보고 관심을 가져야합니다. 그래야 내가 직접 만들 때 더 많은 아이디어가 떠오르고 어떤 기능이 어떤 프로젝트에 잘 맞는지 빠르게 생각해 낼 수 있습니다. 그래서 앞으로는 어플 하나하나 세세히 살펴보고 마음에 드는 기능과 레이아웃을 발견하거나 처음 보는 기능을 발견하면 스크랩을 해 둘 예정입니다.
6.버그 수정
1) 글쓰기 및 글 수정 시 업데이트 안되는 문제 : 사실 이 문제 때문에 pull to refresh를 넣었습니다. 이상하게 앱 구동 후 처음으로 작성 또는 처음으로 수정하는 글은 바로 테이블에 업데이트가 되는데, 그 이후부터는 업데이트가 바로 되지 않고 한 박자 느리게 됩니다. (두번째 작성한 글은 세번째 글 작성 후에 테이블뷰에 나옵니다. 세번째 글은 네번째 글 작성 이후에 나오는 식입니다.)
2) Like 버튼 reuse 문제 : reusable cell을 사용하기 때문에 발생하는 문제라는 것은 알게되었습니다. 각 셀마다 boolean으로 like 버튼 tab 상태를 저장하여 해결해보려고 합니다.
7.데이터 베이스 변경하기
현재는 AWS를 통해 배포한 API를 사용 중인데, 보완의 문제도 있고 서버 개발자 분께 부탁을 드리지 않고도 제가 직접 이것 저것 테스트를 쉽게 해보고 싶은 것들이 있어서 Realm으로 데이터 베이스를 옮긴 형태도 만들어 볼 예정입니다.
-> (변경완료) Realm으로 변경하여 github에 upload 하였습니다.
'Swfit' 카테고리의 다른 글
[Realm] 데이터 불러오는 방법(Read) (2) | 2022.03.30 |
---|---|
Swift JSON Parsing하기 (2) | 2022.03.21 |
TableViewCell 만드는 방법 정리-등록(Register)하기 (0) | 2022.03.18 |
Core Data or Realm? 어떤 것을 선택해야 할까? (0) | 2022.03.17 |
GET, POST 방법 (0) | 2022.03.09 |