HAVIT

2022.01 - 현재

팀 구성:

iOS 5명 ⎻ 디자인 3명 ⎻ 서버 2명 ⎻ 안드로이드 4명 ⎻ 기획 2명

본인 역할:

iOS 앱 개발(40%), iOS 파트 리드

원하는 링크를 저장하고 앱 내에서 저장된 콘텐츠를 관리할 수 있는 iOS 애플리케이션입니다. 공유 프로세스를 통해서 앱 내에 크롤링한 링크를 저장합니다. 사용자가 원하는 시간에 해당 컨텐츠 관련 푸시 알림을 받아볼 수도 있습니다.

github
github

사용 기술

UIKit

UI 컴포넌트로 화면 UI 구성 및 Codebase 형식으로 AutoLayout 설정

WebKit

앱 내 브라우저 구현

URLSession

REST API 통신을 위한 기본 코드 작성

Share Extension

앱 내 링크 저장을 위한 공유 프로세스 구현

Notification Extension

이미지가 포함된 푸시 알림 구현

Authentication Services

Apple 로그인, 회원가입 및 탈퇴 코드 작성

Jenkins, Github Action

build Test 실행 자동화(Jenkins → Github Action self-hosted)

라이브러리(Swift Package Manager)

SnapKit

Codebase 형식으로 간단하게 AutoLayout 코드를 작성할 수 있도록 도와줌

Kingfisher

이미지 다운로드 및 캐싱 API 제공

SwiftSoup

웹 크롤링 API 제공

KakaoSDKAuth

Auth API를 통한 카카오 로그인, 회원가입, 로그아웃, 탈퇴 코드 작성

Firebase

Firebase Analytics 사용한 유저 행동 분석

Crashlytics로 빠른 이슈 파악

Auth API를 통한 Firebase 로그인 코드 작성

Messaging API로 푸시 알림 받는 코드 작성

본인 개발 내용

⏺ Apple, Kakao 로그인 API를 이용한 소셜 로그인 기능 구현

⏺ Notification Extension을 사용하여 이미지를 포함한 푸시 알림 구현

-

Payload에 포함된 image를 받아서 Notification Attachments에 추가

⏺ Firebase Analytics 이벤트를 이용한 유저 행동 모니터링 기능 개발

-

기획 팀원과 함께 이벤트 로그, 파라미터를 정하여 효과적으로 유저 행동 분석 가능한 환경 설정

⏺ Firebase Crashlytics를 Slack과 연동하여 빠르게 이슈 확인 가능한 환경 구축

Configuration를 Dev, Prod로 분리하여 개발 작업 환경 개선

-

xcconfig로 scheme 환경을 분리하여 Dev, Prod 서버 URL를 간단하게 변경

-

GoogleService 파일이 Configuration 별로 분리되어, 개발 버전의 이벤트 로그와 배포 버전의 이벤트 로그가 섞이는 문제 방지

⏺ Xcode Archive부터 새로운 버전 업데이트까지의 전체적인 앱 배포 과정 관리

⏺ 앱 내 메인 화면 제작

-

UITableView와 Cell를 사용하여 전체 레이아웃 구성

-

TableView Header로 콘텐츠 검색바가 스크롤 중에 상단에 고정되도록 구현

-

카테고리 영역에 페이지당 총 6개의 카테고리를 수용할 수 있게 UICollectionViewFlowLayout를 사용한 Dynamic Height 구현

-

메인에서 열 수 있는 다른 화면과의 Flow 연결

-

서버 통신을 통해 받아온 데이터를 화면에 얹는 작업 진행

HAVIT를 통한 성장

Jenkins를 통한 자동화

HAVIT은 5명의 iOS 개발자가 함께 하는 만큼 많은 도전을 해보자는 생각으로 임했던 프로젝트였습니다. 제가 HAVIT에서 진행했던 가장 큰 도전은 Jenkins를 통한 자동화 였습니다. Jenkins를 로컬 호스트에서 작동하는 방법은 쉬웠지만, Pull Request를 날릴 때마다 테스트를 하는건 쉽지 않았습니다. 제 로컬 호스트를 대체해줄 IP가 필요했기 때문입니다.

처음에 도커를 사용해보려고 했지만, 쉽지 않았습니다. 도커 내에 Jenkins를 구축했지만 도커 자체가 Linux 기반의 아키텍쳐를 가지고 있었기 때문에 Xcodebuild가 계속 실패할 수 밖에 없었던거죠. 며칠 남지 않았던 시간 내에 빌드를 성공해야 했기에 도커에서 다른 방식으로 방법을 변경했습니다. 외부에서 로컬에 접속 가능하게 하는 터널 프로그램인 ‘ngrok’이었습니다. 해당 프로그램을 사용해서 제 로컬 호스트에 외부 접속이 가능해지도록 만들었습니다. 결국, Jenkins를 사용해서 빌드 테스트를 성공했습니다.

어떤 문제점이 있었고 어떻게 해결했는지는 Jenkins 문제 해결 이슈에서 보실 수 있습니다. Github Action만 간간히 돌려봤던 저에게 Jenkins는 정말 큰 시련이자 도전이었습니다. 덕분에 다른 CI툴 적용시에도 어떻게 부분들을 신경써야 하는지 맛보기할 수 있는 시간이었습니다.

© Yoon Ah Shin. 2024

  1. 01. 02 Latest Update