1) 경력 요약
Android 및 iOS 위치기반 SNS 신규 개발
2) 프로젝트 상세 내역
(1) UUUS
- 내용 : 사진 및 동영상의 위치를 기반으로 한 SNS 앱
- 담당직무 : 신규 개발
- 형상 관리 : Git (Bitbucket)
- 협업 도구 : Slack, Asana
- 기타 툴 : Figma(기획서/디자인 가이드), Postman(API 테스트), Sourcetree(형상관리)
(2) Android 주요 개발 내역
- 아키텍처 설계
a. 언어 : Kotlin
b. 아키텍처 패턴 : MVVM(Model, View, ViewModel), Repository Pattern
c. 의존성 주입 : Koin
d. 반응형 프로그래밍 : LiveData + Flow
e. 네트워크 : Okhttp3 + Retrofit2
f. 데이터베이스 : Room
g. 유닛 테스트 : JUnit5, Mockito
h. Firebase : Cloud Messaging(Push 알림), Crashlytics(오류 보고서), Remote Config(원격 환경설정 데이터), App Indexing(앱 색인)
i. AndroidX : camerax, databinding, lifecycle, navigation 등..
j. 기타 라이브러리 : Moshi(데이터 파싱), Branch(딥링크), FlowBinding(UI as Flow), Glide(이미지 로드), JJWT(JWT),
- Build Variants 설정
a. Local, Mock, Development, Staging, Product로 구분하여 각 Debug, Release 빌드 가능하도록 설계
b. Build Variants 별로 별도의 의존성 주입 적용(ex: Mock의 경우 네트워크가 아닌 더미 데이터를 주입 받도록 적용하는 등..)
- 지도 연동 및 클러스터링 마커
a. 기본적인 구글 지도 연동 및 마커 커스터마이징
b. 사용자의 작성글(피드)별 점수가 높은 순으로 클러스터링이 되도록 AbstractAlgorithm, ScreenBasedAlgorithm 클래스 구현
- 사진/동영상 촬영 및 불러오기
a. MediaStore의 Query를 이용하여 갤러리 제작
b. AndroidX의 Camera를 이용하여 사진/동영상 촬영 기능
- 사진 편집 및 메타데이터 수정
a. 사진에 CROP, 회전, 반전 가능하도록 개발
b. Levels, Curves(RGB 채널 별도 적용 가능), Saturation, Brightness/Contrast 조절하여 필터 기능 개발
c. 위치정보 없는 사진에 메타데이터를 수정하여 위치정보를 추가할 수 있도록 개발
- 동영상 편집 및 메타데이터 수정
a. NDK를 이용하여 FFmpeg Share 빌드
b. ffmpeg 바이너리 프로그램 모바일로 이식
c. 동영상 편집에 사용되는 타임라인 컴포넌트 제작
d. 위치정보 없는 동영상에 메타데이터를 수정하여 위치정보를 추가할 수 있도록 개발(Frame별 위치정보 삽입은 아님)
- 사용자 인증
a. 단기 토큰(Access Token) 및 장기 토큰(Refresh Token) 암호화
b. 단기 토큰 만료될 경우 장기 토큰으로 갱신절차 수행(장기 토큰 만료시 로그아웃)
c. 구글, 애플, 페이스북, 인스타그램, 카카오톡 로그인 구현
- 컴포넌트 제작
- 기타
a. XmlPullParser를 이용한 Customize XML Selector(Shadow Selector)
(3) iOS 주요 개발 내역
- 아키텍처 설계
a. Language : Swift
b. Architectural Patterns : MVVM(Model, View, ViewModel), Repository Pattern
c. Dependency Injection : DIKit
d. Reactive Programming : SwiftUI + Combine
e. Network Module : Alamofire
f. Unit Test : XCTest
g. Firebase : Cloud Messaging(Push 알림), Crashlytics(오류 보고서), Remote Config(원격 환경설정 데이터)
- Build Variants 설정
a. Mock, Development, Staging, Product로 구분하여 각 Debug, Release 빌드 가능하도록 설정
b. Build Variants 별로 별도의 의존성 주입 적용(ex: Mock의 경우 네트워크가 아닌 더미 데이터를 주입 받도록 적용하는 등..)
- 컴포넌트 제작
a. Action 가능한 TabView
(4) 서버 주요 개발 내역
- 아키텍처 설계
a. Language or Framework : Node+Express
b. Architecture : 3 Layer Architecture(API, Service, Integration)
c. Dependency Injection : 간단하게 직접 구현
d. Unit Test : Jest
e. 기타 라이브러리 : Knex(네이티브 쿼리 빌드)
- Access Token, Refresh Token을 이용한 인증 체계 구축
(5) AWS 설계 및 구현 내역
- Terraform을 사용하여 Code로 개발/유지 되도록 구현
- 도메인 적용
a. 가비아에서 제공하는 도메인에 AWS 네임서버 적용
b. 빌드 환경별 서브 도메인(dev.example.com, staging.example.com, example.com) 사용
c. AWS에서 제공하는 SSL 사용하여 네트워크 통신에 필요한 기본적인 보안 확보
- VPC 설계
a. Internet Gateway와 NAT Gateway를 사용하여 Public Subnet/Private Subnet으로 분리하여 설계
b. Private Subnet은 다시 데이터 영역과 어플리케이션 영역으로 분리
c. Private Subnet의 보안 그룹은 Public Subnet의 보안 그룹에서 전달하는 인바운드만 허용하여 기본적인 보안 확보
d. 서울 리전의 총 세개 가용영역(a, b, c)에 8개(Public * 3, Application Subnet * 3, Data Subnet * 2)의 서브넷으로 고가용성 확보
- Load Balancer/Auto Scaling 적용
a. 부하분산을 위하여 Target Group을 생성해 Load Balancing 적용
b. 장애상황 혹은 갑작스런 사용량 증가에 대비하여 Auto Scaling 적용
- 배포 자동화
a. CodePipeline을 사용하여 Github에서 변경사항 발행을 감지하여 자동 빌드 및 배포가 실행 되도록 구현
b. CodePipeline에서 제공 받은 소스를 가지고 CodeBuild에서 Docker 컨테이너를 이용하여 빌드 및 테스트
c. CodeBuild에서 빌드가 완료되면 CodePipeline에서 인식하여 CodeDeploy로 Blue-Green 배포
- CDN 설정
a. CloudFront 사용하여 CDN 설정
b. AWS Lambda@Edge 활용하여 캐시 이미지 리사이즈 처리
(6) 데이터베이스 설계 및 구현 내역
- MySQL 5.7 기준으로 데이터베이스 설계
- 모든 테이블 InnoDB 엔진 사용
- 네이티브 쿼리 작성 및 튜닝을 통한 성능 향상
- GIS(Geographic Information System)를 통한 지리 정보 저장 및 조회 함
3) 기타
- 이직 사유 : 경영악화
더보기