미리보기
기본 정보
___________________________________________________________________ "세 마리 토끼 사냥꾼" : [합리적인 로직] + [UI / UX] + [깔끔한 코딩] 모두 잡으려는 개발자입니다. 수학교육과를 졸업하고, 수학교육 IT 기업에서 비개발자로 근무하다, 개발자들과의 일상에서 점차 준개발자가 되었고, 만들고 싶은 앱을 떠올리며 이직을 결심, 2년간 iOS 앱 개발자를 준비하며 Swift / SwiftUI 3개의 앱을 기획 / 개발 / 출시했습니다. 1. 프로세스나 환경을 이해하고 개선하려는 데 적극적인 개발자입니다. 2. Needs에 큰 가치를 두며, 기획자 의도와 사용자 편의성을 중시하는 개발자입니다. 3. [비지니스 로직]뿐만 아니라 [UI/UX 로직]에도 의욕을 부리는 개발자입니다. 4. 나만의 언어로 대화하지 않고, 약속을 중시하는 개발자입니다. 5. 늦깎이지만 센스 있고, 참신한 상상력에 객관적인 시선을 유지하려 노력합니다.
포트폴리오
프로젝트
멀티 리스트 (MultiList)
개인
2023.07. ~ 2023.11.
다양한 형식의 리스트(텍스트리스트 / 체크리스트 / 링크리스트) 등을 쉽게 관리하고, 친구와 공유할 수 있는 App
SwiftUI / MVVM
기기 : iPhone, iPad
FirebaseAuth, RemoteConfig / GoogleSignIn / KakaoSDKUser / Lottie / PieChart
계정 구분
− 익명 로그인 지원, SNS (구글 / 카카오 / 애플) 로그인 지원
− 익명 계정 -> SNS 계정 전환 지원 (데이터 인계 포함)
− 익명 계정은 친구 추가 및 공유 기능 사용 불가DB 관리 요소
︎− 서버 : Firebase FireStore(데이터) / FireStorage(이미지)
− 익명 계정 - 로그아웃 시 탈퇴 처리 / 30일 후 자동 삭제 (데이터 포함)
− 리스트 생성 2단계 스텝으로 불필요한 데이터 생성 방지1단계 : 원클릭 생성 - 임시 컨텐츠 (-> DB 저장하지 않음)
2단계 : 컨텐츠(리스트 형태) 세팅 (-> DB 저장)친구/공유 기능
− 이메일로 친구(User) 검색 / 추가, 알 수도 있는 친구 제공
− 현재 2가지 공유(복제 / 공동작성) 지원, 단방향 수정 가능한 공유 방식 제공 예정
− 공유 내역(받은 항목 / 보낸 항목) 및 결과 기록 제공여러 리스트 구조체를 동일 레이아웃으로 표현하기 위해 Generic View 개발
차후 업데이트 요소
− 날짜 기록 리스트, 사진 기록 리스트 등 추가 리스트
− 단방향 수정 가능한 공유 방식 추가
마이 리틀 앨범 (MyLittleAlbum)
개인
2022.11. ~ 2023.04.
아이폰 사진첩과 실시간 연동하는, 보기 좋고 정리하기 편한 앨범 App
SwiftUI (Photos, AVKit, LocalAuthentication)
앱 설명 : "앨범"에 초점을 둔 사진앱 / "정리하지 않은 사진함" 제공 / 3가지 스킨 제공
기기 : iPhone (ver1.2.2에 iPad 추가)
커스텀 개발 뷰
− 10,000장 이상의 사진을 감상할 수 있는 Recycling PageViews
− 동영상 이동 슬라이딩 인식 영역을 전체로 확대한 동영상 컨트롤러
− 정리하지 않은 사진만 나타나는 PhotosPicker
− 동영상 런치스크린기본 사진 앱 대비 추가된 기능
− 사진을 다른 앨범으로 옮기기
− 앨범 / 폴더를 다른 폴더로 옮기기
앱 성능 최적화 요소
− 터치에 즉각 반응하도록 뷰 async 처리(imageView / Navigation 이동)
− 속도 / 메모리 고려 LazyGrid뷰 대신 UIRepresentable-UICollection뷰 이용
− PHCachingImageManager로 앨범 내 썸네일 캐싱 / 화면 이탈 시 캐싱 지우기UI/UX 요소
− 아이폰 사진첩의 기본 제스처 / 작업루틴 유지 -> 사용자 기대액션에 부합
− 폴더와 앨범의 구분이 명확한 레이아웃
− 2단계 폴더 구조 레이아웃을 통해 한 화면에 더 많은 앨범 정보를 깔끔하게 노출
− 사진 정리 기능들 1단계 뎁스로 뷰 하단에 정렬 -> 앨범 정리하는 동선 단축
− 뷰 중간에서 Swipe로 네비게이션 dismiss 작동
− 폴더 내 하위 폴더 없을 시 앨범 펼쳐보기 작동
− 비디오 슬라이더 바 커스텀 제작 -> 드래그 영역 확대 / 현재 포인트 기준 이동Funny 디테일링 요소
− 포효하는 고양이 동영상 런치 스크린
− 숨김 기능 1. 탭버튼1 롱탭시 런치스크린 재감상
− 숨김 기능 2. 탭버튼2 롱탭시 썸네일 랜덤사진 셔플
마이 카포트 (myCarport)
개인
2022.10. ~ 2023.03.
차량 관리 기록 App
테이블뷰 Row를 각 주기에 따라 그래프로 표현 -> 관리상태를 직관적으로 파악
CoreData에 CarInfo-Maintenance, CarInfo-Insurance 관계형 Entity 구축
ReFactoring (비지니스 로직 완료 / UI 작업 중)
− Swift -> RxSwift+MVVM
− Storyboard -> SnapKit
− RxDataSource로 테이블뷰에 2개 이상 섹션/로우 형태 구축
− UX 업그레이드 : 5개 TextFiled 입력 과정에서 키보드 Accessary뷰 버튼으로 이동 제공
기술 스택
Swift, SwiftUI, RxSwift, Firebase, firestore, iOS Autolayout, combine
자격증
정보처리기사
기사 | 한국산업인력공단
2015.04.
교육
더조은컴퓨터아카데미
사설 교육 | IOS 앱 제작 SWIFT프로그래밍 입문
2022.03. ~ 2022.04. | 졸업
단국대학교
대학교(학사) | 수학교육과
2010.03. ~ 2012.02. | 졸업
동국대학교
대학교(학사) | 국어국문학과
중퇴
경력
주식회사 클래스큐브
대리 | (비개발)컨텐츠팀
2017.05. ~ 2021.10. (4년 6개월)
(비개발직) 수학 컨텐츠 DB 담당 : 개발자 주축 IT 회사에서 준개발자로 성장
개발자들과의 일상 :
원하는 것을 명확히 하자
개발자님, 여기 100문항 한번에 속성 지정하는 화면에서요, 문항편집은 안하니까 미리 개발한 뷰어로만 문제 보여주면 되고, 여기 셀렉트 박스 4개 중에서 3개는 DB에 값 있으니까 그대로 가지고 와서 노출해줘야 해요. 그러지 않으면 셀렉트 박스 400번 선택해야 해서, 이 화면 개발하는 이유가 없어집니다.
아는 것이 힘 :
개발 프로세스를 알면 프로젝트가 쉬워진다.
개발자님, 12만 문항 작업하는 거 중간중간 개발서버에서 실서버로 옮길 거잖아요? 그거 개발서버 카테고리 그대로 옮기면 실서버가 굉장히 지전분해져서요, 제가 실서버에 카테고리를 먼저 생성하고, 개발서버 카테고리와 매칭표를 만들어 드릴테니 매칭표대로 옮겨주실 수 있나요?
마무리 짓는 것도 능력 :
개발은 완벽하지 않을 수 있다, 그럴 땐 리스트를 짜자
(새벽 2시) 기획자님, 이대로는 오전에 오픈하는 건 불가능합니다. 제가 공유 사이트에 리스트 짜놨는데, 오픈에 필요한 최소한의 리스트만 우선적으로 해결해서 오픈하고, 나머지는 업데이트로 가는 것이 어떨까요?
준AI 후기 :
자동이 무조건 좋은 것은 아니다
내가 푼 시험문제를 기반으로, 내 누적 학습을 함께 파악하여 자동으로 시험지를 출제해주는 시스템은 매우 흥미로운 요소였지만 실상 그 시험지를 받아든 감상은 기대와 좀 달랐습니다. 그 시스템이 정확하냐 아니냐의 문제가 아니라, 왜 이렇게 나왔지, 믿어도 되나 등 의구심이 우선 들었습니다. 이를 경험하며 아무리 AI건 자동이건, 이들에 의한 정보가 100퍼센트 정확한 정보이건 간에 사용자를 설득하는 것이 얼마나 중요한지를 깨달을 수 있었습니다.
자기소개
1⃣ 프로세스나 환경을 이해하고 개선하려는 데 적극적인 개발자입니다.
[멀리리스트] 앱에서
SNS 로그인
을 기획하며 진입 장벽을 낮추고 애플 심사가 원활히 이루어지도록익명 계정
을 함께 도입했습니다. 이에 따라 익명 사용자가 SNS 계정으로 전환하는 프로세스까지 고려해야 했고, 다행히 Firebase에서 사용하는 credential을 연결시켜주는 것만으로 간단히 해결했습니다.
서버를 결정하며 사용경험이 있던 Firebase의 realtimeDB 대신 FireStore를 이용하여 둘의 차이점을 파악할 수 있었고, 서버 세팅에 있어서는 채팅방처럼 공동작성이 가능한 공유를 고려해 사용자가 리스트 자체를 소유하는 대신 리스트의 아이디만을 소유하여, 공유 과정에서 누군가의 리스트 자체 삭제 / 숨김 등의 설정이 다른 공유자에게 영향을 끼치지 않도록 세팅했습니다.
이전 회사에서 기획자가 개발자는 아니더라도 개발에 대해 알고 있어야 한다는 말을 익히 들었는데, 반대로 개발자도 개발하려는 기능의 프로세스를 알고 있어야 제대로 된 개발이 이루어진다는 것을 깨달은 경험이었습니다. 단순히 요청받은 대로 기능만을 만들어주는 것이 아니라 함께 협의하여 프로세스를 정립해 나갈 수 있는 개발자로 성장하고 싶습니다.
2⃣ Needs에 큰 가치를 두며, 기획자 의도와 사용자 편의성을 중시하는 개발자입니다.
[마이리틀앨범] 앱은 확고한 기획없이 두가지 포인트를 가지고 시작한 프로젝트였습니다.
1 정리하지 않은 사진만 모아 보여주기
,2 자주 보고 싶은 앨범다운 앱 만들기
였습니다. 당시 공부를 시작하던 SwiftUI로 작성, 사용자의 모든 앨범의 FetchResult와 전체 사진의 FetchResult의 차를 이용해 비지니스 로직을 완성하고, 이를 기본 사진함은 물론 photo Picker로도 제공하기 위해 PhotosUI의 기본 photoPicker 대신 직접 제작한 Picker뷰를 이용했습니다. 또한 PHPhotoLibraryChangeObserver를 이용해 아이폰 사진첩과실시간 연동시킴
은 물론 사진 / 동영상 감상을 위한 pageView를 개발하면서는 만장이 넘는 페이지뷰가 딜레이 없이 작동하도록다섯개의 뷰를 재활용하는 페이지 뷰
를 커스텀으로 개발했습니다. 또한 사용하면서 있었으면 하는 기능들 -사진을 다른 앨범으로 옮기기
,앨범 / 폴더를 다른 폴더로 옮기기
등을 추가로 개발했고, 터치나 명령에 따른 상태를 최대한 즉각적으로 나타내기 위해 async 처리를 하되 그 외에는 ProgressView를 적극 활용해 사용자가 상태에 의구심이 들지 않게끔 하는 데 의욕을 부렸습니다.
이전 회사에서 시험지 출력 시 문항 사이즈를 계산하기 위해 어쩔 수 없이 이미지 출력을 할 수밖에 없다는 개발자의 의견에 사용자가 받을 출력물의 퀄리티를 놓치고 싶지 않아, 어차피 이미지와 원문서의 사이즈가 같으니 이미지는 출력 사이즈 측정에만 쓰고 실출력은 원문서로 해달라는 의견으로 개발자의 고충은 물론 사용자 편의성까지 놓치지 않았던 경험이 있습니다. 이와 같은 욕심으로 개발에서도 기획자/개발자의 관점뿐 아니라 사용자 관점을 놓치지 않는 개발자로 성장할 것입니다.
3⃣ [비지니스 로직]뿐만 아니라 [UI/UX 로직]에도 열정을 부리는 개발자입니다.
[마이카포트] 앱을 만들며 테이블뷰의 각 Row를 그래프로 활용해 사용자가 직관적으로 관리 상태를 확인할 수 있도록 만들었고, 애니메이션이 업데이트나 새로 진입시에만 작동하도록 로직을 짜는 데 공을 들였습니다. 또 최근 RxSwift로 리팩토링하면서는 관리기록 화면을 보다 깔끔하게 나타내줄 레이아웃이 떠올라 처음 하는 리팩토링에 대한 부담을 지고도 RxDataSource를 도입해 화면을 새로 잡는 등 UI/UX에 열정을 부렸습니다. [마이리틀앨범]에서는 로딩 시간을 줄이는 방법을 모색하다가 2차 방법으로 이를 반감시켜줄 재미있는 런치스크린이 있으면 되겠다라는 생각으로 동영상과 애니메이션을 이용한 런치스크린을 만들었고, 개발을 하며 새로운 앨범 레이아웃이 떠오를 때마다 스킨을 추가하여 총3개의 스킨을 제공하고 있습니다. [멀티리스트] 에서는 사용자가 내용을 쉽게 찾을 수 있도록 리스트에 자동으로 순번을 삽입했고, 이것이 컨텐츠와 구별되게 하는 데 공을 들였으며, 또 추가된 내용에 반짝이 효과를 주어 사용자가 상태를 즉각 확인할 수 있도록 했습니다.
비개발자 시절에도 작업 화면을 직접 기획해 개발 요청하기도 하고, 서비스 화면 역시도 떠오르는 아이디어가 있으면 과감하게 제안해 실제로 제 아이디어로 화면이 구성되기도 했습니다. 개발에서야 기획자나 디자이너의 몫이 큰 부분이겠지만 개발자로서 알고 있는 디테일링에 대한 요구와 제안을 할 수 있는 개발자가 되고 싶습니다.