미리보기
기본 정보
안녕하세요. 작동을 제대로 하면서도 유지보수가 원활한 지속 가능한 소스코드를 만들기 위해 노력하는 안드로이드 개발자 김태욱입니다.
기술 스택
Android, Java, Kotlin, Flutter, iOS
프로젝트
가상 e-Amusement Application
2024.07. ~ 진행 중
즐겨하는 아케이드 게임인 일본 코나미사의 계정카드인 e-Amusement PASS 카드를 따로 들고 다닐 필요없이 휴대폰 상에서 가상의 카드를 에뮬레이션 해주는 앱입니다. 원래 원할한 Test를 위해서 ViewModel이 Android Platform에 의존적이지 않기 위해 Context를 직접적으로 받지 않아야하나 NFC기능의 직접적인 활용을 위해 불가피하게 Context를 View로 부터 의존성 주입을 한점이 기술적으로 아쉬움이 남습니다. 현재도 지속적으로 개발을 진행중입니다.
Use : NFC(HCE-F), Jetpack Compose, MVVM
Learned : 기존 XML기반으로 UI를 작성하는 방식은 아무래도 XML에서 코드로 Databinding을 거쳐야 하는등 복잡했으나 Flutter나 SwiftUI와 같은 선언형 UI 방식을 이용한 Jetpack Compose를 사용하니 코드 상에서 직접적으로 UI를 선언할수 있어 개발이 한결 편해졌다고 생각합니다.
Coinminer
2022.07. ~ 2022.09.
Code : https://github.com/neolabs120-mobile/ethermine
블록체인에도 관심이 많아 이더리움이 POS로 전환되기전 지분보증 방식을 POW시기 일때 GPU를 활용한 채굴을 한적이 있었습니다. 그런데 채굴 Pool의 현황을 보여주는 사이트가 따로 모바일 앱을 지원하지 않아서 마침 관심이 있었던 Flutter를 기반으로 채굴 Pool 현황을 파싱하여 화면에 보여주는 애플리케이션을 개발하였습니다.
Passcode - 패스워드 저장 애플리케이션
2021.01. ~ 2021.03.
암호화된 DB를 사용한 개인계정 및 패스워드 저장 어플리케이션 입니다.
Use : Kotlin, Room
Learned : 애플리케이션 성격 특성상 패스워드 원문을 암호화해서 저장해두어야 했습니다. 또한 이러한 과정에서 메모리 안의 패스워드 원문이 유출되는 일이 없도록 신경을 써야 했는데 이 과정에서 앱 보안에 대해 많은것을 배웠습니다. 저장을 해둬야하는곳이 중요한 개인정보인 비밀번호인 만큼 비밀번호를 암호화하는 RSA 암호화 방식에 대하여 공부하였으며, 특히 아래 링크를 적극적으로 참고하여서 개발을 진행하였습니다.
안드로이드 앱의 Persistent data를 제대로 암호화해 보자! (1/2)
여행 관련 애플리케이션 리뉴얼
2018.07. ~ 2018.09.
여행관련 애플리케이션 앱 리뉴얼 및 코드레벨 리팩토링 진행 프로젝트 입니다.
저렴한 항공권을 조건에 맞게 검색하여 결과를 검색하는 애플리케이션 입니다.
외주 프로젝트 였기 때문에 디자인이 이미 정해져 있었고, 그에 맞게 프로그래밍 하기 위해 여러가지 어려움을 해결하였습니다.
Use : Rxjava2, Retrofit2, ViewPager, Glide, AirCalendar
AirCalendar 라는 오픈소스 달력 라이브러리를 수정하여, CustomView를 Client요구에 맞게 수정하여서 원하는 모양에 맞게 구현하였습니다.
클라이언트 요구에 맞추어서 복잡한 UI를 구성하는 여러가지 방법을 외주 프로젝트를 통해서 알게되었습니다. 이 과정에서 디자이너와 협업을 위해 Zeplin을 활용하였습니다.
ViewPager를 활용하여서 각 지역에 맞는 특가항공권을 보여주는것을 구현하였고, 이미지 로딩에 Glide라는 이미지 라이브러리를 활용하였습니다. Glide라는 오픈소스 라이브러리가 타 라이브러리에 비해 라이브러리 자체의 용량은 많고 무거운 편이지만 확장성, 이미지 로드 성능등이 타 라이브러리에 비해 나은것 같아 Glide를 사용하기로 하였습니다.
Kok!
2018.10. ~ 2018.11.
'특정 장소에 내가 방문했다는 흔적을 남기고 그를 통해 사용자와 소통할수 있는 SNS앱을 만들면 어떨까?'라는 생각에서 출발한 앱입니다. 사용기술로는 Android, Java, Kotlin, Node.js(백엔드), MongoDB, Retrofit2(GET통신), Glide(이미지 처리)가 있습니다.
Use : Android, Java, Kotlin, Node.js, MongoDB, Retrofit2, Glide
-Node.js 서버를 작성할때 이미지 저장 처리를 코딩한게 제일 기억에 남습니다. 전혀 시도해보지 않은 분야였지만 Youtube 영상등을 참고하여서 끝까지 시도하였고, 결국에는 기능구현에 성공하였습니다.
반려견 관리 앱 개발
2018.07. ~ 2018.08.
-서버 구현 일부 + 레이아웃 + UI + 날씨 가져오기를 담당하였습니다. (전체 코드의 약 45%)
활용기술 : Kotlin, Java, Retrofit2
개고생 프로젝트란, 애견인을 위한 앱으로써 사료 자동배급 기능, 원적외선 원격 On/Off, 애견 과 통화하기, 원격으로 노래틀어주기, 사료 자동구매 기능등을 구현한 애플리케이션으로 본인은 이에 대해 안드로이드 앱 개발을 담당했습니다. 앱은 Kotlin + Java로 개발되었으며, 사용한 라 이브러리는 Retrofit2로, 서버와의 통신을 위해 사용하였습니다. 공동 개발한 어플리케이션으로, 서버 구현 일부 + 레이아웃 + UI + 날씨 가져오기 등을 담당하였습니다
네이버 안드로이드 부스트코스 과정 수료
네이버 커넥트재단
2018.06. ~ 2018.07.
Use : Sqlite, RecyclerView, Volley, Fragment, Viewpager
Refactoring Use : Databinding, Retrofit2, Room, Coroutine, Kotlin, Dagger-Hilt
프로젝트 소개 : 1단계에서 8단계로 이루어져 있으며, 각각 영화상세 화면을 만들고, 한줄평 화면을 만들고, 영화목록을 만드는 프로젝트 였습니다.
Learned : 신입 안드로이드 개발자에게 필수적으로 필요한 것을 속성 과정으로 배우는 좋은 계기가 되었습니다. (Activity, Fragment, RecyclerView, Java 등등) 코스 과정이 만들어진 시기 전후 안드로이드 개발 패러다임이 많이 바뀌어서 리팩토링 소스코드도 대격변을 겪었습니다. 소스 리팩토링 후 소스코드는 모두 공개되어 있습니다. 우선 많이 쓰이지 않고 확장성이 떨어지는 Volley 대신 안드로이드에서 자주 쓰이는 네트워크 통신을 위해 Retrofit2 라이브러리를 이용하였고, 데이터를 체계적으로 저장하는것을 구현하는데에 더 편리한 SQL DB 사용을 위해 AAC JetPack중 하나인 Room을 활용하였습니다. 또한 비동기 처리를 위해 Coroutine을 활용하였으며 DI를 위해 기존 Dagger2에서 간소화된 Dagger-Hilt를 사용하였습니다.
포트폴리오
교육
평생교육진흥원
대학교(학사) | 컴퓨터공학과
2020.02. ~ 2024.08. | 졸업
자격증
정보처리기능사
취득 | 한국산업인력공단
2011.09.
외국어
영어
비즈니스 회화 가능
자기소개
안드로이드 라는 플랫폼을 과거부터 접하면서 현재는 deprecated된 Asynctask 등을 이용하여 비동기 처리를 하다가, RxJava를 알게 된후 더 간편해진 비동기 처리와 개선된 코드 가독성에 편리함을 느꼈던 기억이 납니다. 이후에는 프로젝트에서 Rx를 덜어내고 Coroutine + Flow 을 이용한 비동기 + 함수형 프로그래밍 처리와 클린 아키텍처를 익힌후에는 프로젝트를 모두 위의 기술 스택을 활용하여 만들고 있습니다.