2023년의 마지막이 코 앞으로 다가온 현재, 올해 내가 했던(지금까지도 하고 있는) 일들과 그 과정에서 느끼고 생각하며 배운 점을 정리하여 2024년을 어떻게 살아갈지 작성해보고자 한다.

2023, 다양하게 많은 일이 있었다

1. 대학교 4학년 시작 전 겨울방학 동안 현장 실습 진행

2022년 12월 ~ 1월

한 달간 계절 학기로 한 기업체에서 현장 실습(인턴)을 진행하였다.

주 업무는 이미지 분류, 객체 탐지를 위한 Ai 학습 이미지에 대한 전 처리 작업 수행이었다. 추가적인 업무로 내가 잘 모르는 분야인 Ai 비전 모델 학습 및 검증도 수행했다.

회사의 사업 모델이 건강 관련 Ai인데, 여기서 Ai로 분류하고자 하는 이미지(데이터)는 특징과 패턴이 명확하지 않고, 의사도 정확하게 구분 짓지 못하는 정도라 괜찮은 Ai 모델을 학습 시키는 데에 큰 어려움이 있었다.

일하면서 논문과 자료를 찾는데 많은 시간을 할애했다. 또한 OpenCV로 코딩도 많이 했었고, Ai 모델들을 학습도 시켜봤었다. 마침 그 시기에 ChatGPT가 오픈해서 도움을 많이 받기도 했다.

짦은 기간 이었지만 여러모로 많은 걸 느끼고 배웠다. 하루종일 자료 찾고 코딩하는게 흥미롭고 재밌었는데 이 때 내 적성이 개발임을 확신하게 되었다. 좋았던 추억이다. 회사에서 키우던 귀여운 고양이, 사장님, 직원분들 모두 좋은 분들이라서 느끼는 감정이지 싶다.

이 때 경험이 취업 후에 도움이 될 거 라고 생각한다.

2. Medilenz 앱 개발

3월 ~ 현재 진행

의약품 정보를 찾고, 사람들과 댓글로 이야기를 나눌 수 있으며, 카메라로 약을 비추면 비전 Ai가 2000개 종류의 약을 자동 검색해주는 앱

교내 동아리 WAP 에서 팀을 꾸려 진행하고 있는 프로젝트로, 내게 큰 전환점이라 여기는데, 그 이유는 정말 많은 기술과 API를 배우고 적용해볼 수 있었기 때문이다.

  • 백엔드 개발자 분들과 함께 진행해본 첫 프로젝트
  • 코루틴을 전체적으로 적용해본 첫 프로젝트 이기도 하다
  • 소스코드 패키지 모듈화
  • Compose 사용
  • 있는지도 몰랐던 바인딩 어댑터 등 여러 API를 사용
  • 내부적으로 구현한 기능을 외부 라이브러리로 배포
  • 현장 실습 때의 경험으로 Ai 모델 학습
  • Ai학습을 위해 데이터 전처리, Ai 작업에 상당히 많은 시간이 걸렸다
  • 백엔드 관련 지식 습득

이 중에서 안드로이드 관련해서는 같이 안드로이드 개발을 진행한 @tgyuuAn님이 열정적으로 함께 해주신 덕분에 얻은 경험과 지식이다. 정말 감사하다.

실제로는 더 길고 많은 내용이 있다

또한 앱의 규모를 내가 처음 구상했던 것 보다 많이 키웠는데, 이 선택이 개발자로서 성장하는데 내게 큰 도움이 되었고, 키우길 잘했다고 느낀다.

처음 앱을 구상했을 때 빠르게 개발하고자 기능을 최대한 단순하게 가려고 했었다. 먼저 의약품 관련 앱을 구상한 시점이 현장 실습 때였는데, 그 때 Ai 모델을 단순히 가져다 학습을 시키는 건 간단하다는 걸 알게 되었다. 그래서 다음 번에 앱을 만든다면 Ai를 적용하고자 했었고, 마침 그 때 내가 먹던 약이 있었는데, 약을 카메라로 찍으면 자동으로 찾아주는 앱이 있었으면 좋겠다는 생각이 들면서, 이번 프로젝트를 진행하게 되었다.

기능으로 간단하게 Ai로 약을 찾고 정보를 볼 수 있는 정도만 구현하자 했었는데, 점점 계속 생각하면 할 수록 이거 잘 만들면 되게 괜찮을 거 같았다. 이 때문에 단순히 Ai가 있는게 아니라 다른 사람들과 소통하면서 약 정보를 알아갈 수 있는 커뮤니티 앱으로 발전시켜나갔고, 현재는 약 정보를 찾고, 커뮤니티와, Ai 기능을 모두 다 갖춘 앱으로 만들고 있다.

기능이 늘어나니 서버가 필요하게 되었고, 백엔드 개발자 분들도 모집하여 함께하게 되었다. 백엔드 개발자 분들(@ho-sick99, @winocreative)은 내가 생각했던 기능을 다 구현해주셔서 정말 감사했다. 백엔드 개발자 분들과 함께 작업하면서 관련 지식(JWT, HTTP 등)을 습득할 수 있었고, 서버와 클라이언트가 어떻게 통신하는지, 어떤 방식으로 데이터를 주고 받는지 등을 알 수 있었다. 백엔드 개발자와는 처음 작업을 한거라 클라이언트만 다루는 내겐 소중한 경험이었다.

작업 진행

  • 3 ~ 6월
    • 기획, 디자인, 개발, 배포(알파 단계)
    • 동아리에서 3차 까지 프로젝트 진행 현황을 발표(기획: 3월 말, 중간: 4월 초, 최종: 6월 초)하였다.
    • 나는 안드로이드, Ai(혼자)를 담당했다.

학교 수업과 시험 때문에 오로지 개발에 시간을 쏟을 수 있는 시간은 짧은 편이었지만, 정말 재밌고 행복하게 개발했다. 서로 코드 리뷰 하면서 의견을 나누고 코드를 고치는 등 협업이 잘 진행되었는데, 내 코드를 다른 분이 읽고 피드백을 하는 게 필요했기 때문에 이 과정에서 나의 잘못된 습관이나 코드 형태를 어느 정도 파악하고 개선할 수 있었다. 또한 내가 잘 모르는 것을 배울 수 있어 좋았다.

그런데 Ai 작업은 달랐다. Ai 학습 자체는 간단하지만, 다른게 문제였다. 학습 데이터는 Ai Hub에 있다는 걸 알고 기획했던 거라 지장이 없었는데, 학습할 컴퓨터가 가장 큰 문제였던 거다. 인턴 때는 초기 데이터 세트가 크지 않아서 지장이 크게 없었는데, Medilenz는 다르다. 의약품 5,000개를 분류해야 하는 Ai이기 때문에, 학습하려면 약 하나 당 최소 100장은 써야하며, 이걸 다 합치면 크기가 어마어마하다. 이런 이유로 컴퓨터 성능이 절대적으로 중요한데, 슬프게도 학습이 가능한 컴퓨터가 없어서 구글 코랩, AutoML 등 여러 방법을 시도해봤지만, 결국 만족할 만한 성과는 얻지 못했다.

따라서 Ai 작업은 제대로 못했고 최종 발표에서 Ai기능 시연은 당연하게도 실망적이었다. 그래도 Ai만 빼면 기획 당시 얘기했던 걸 다 구현했기에 발표는 잘 마무리했다.

  • 7월 ~ 현재
    • 리팩터링, 기능 추가
    • 백엔드, Ai 작업 진행

학교 종강 후 7월에 다시 작업을 재개 했다.

다른 팀원 분들과 같이 열심히 으쌰으쌰 하며 개발했다. 나는 Ai를 어떻게든 처리해보고자 8월에 좀 싸게 컴퓨터를 샀었다. 열심히 데이터 라벨링과 수 많은 모델 별로 학습을 두 달 동안 한 결과, 60% 이상의 추론능력을 가진 Ai 모델을 마침내 구축하는데 성공했다. 컴퓨터가 좋지는 않아서 약은 2,000개 종류만 학습시켰다. 그래도 2,000개 종류의 약을 분류할 수 있는 Ai 모델을 만들었다는 것에 만족한다. 아쉽지만 몇 백만원 컴퓨터를 구입할 여력은 없었기에 어쩔수 없다.

그리고 백엔드 개발도 좀 해보았다. 서버가 8월 까지 @winocreative님의 개인 컴퓨터에서 돌아가는 상황이었다.(지난 몇 달 동안 서버를 돌릴 수 있게 해주셔서 정말 감사하다) 하지만 언제까지나 계속 그렇게 운영할 수는 없다고 생각했다. 내 컴퓨터가 아니니까.

그래서 한번 백엔드 개발해보는 것도 흥미로울거 같아 개발하기 시작했다. 스프링이나 노드.js를 배워서 구축하기에는 비효율적이라 생각했고, AWS를 기반으로 서버를 구축하기로 했다. 이쪽 분야는 초급 수준도 안되기 때문에 많이 어려웠다. 다행히 만들 기능이 적고 단순한거라 냈고, API Gateway에 연동하여 클라이언트와 실제 통신 하는 작업만이 남았다.

아직 끝나지 않았고 현재 진행형이다. 그런데도 참 많이 배우고 성장할 수 있었다. 특히 얇게 나마 백엔드, Ai를 다뤄보는 경험이 지식의 폭을 넓혀주었기 때문에 상당히 긍정적이다. 최근에 작업을 멈췄지만 곧 재개해서, 플레이스토어에 출시 하겠다.

Medilenz를 위해 함께 해주시는 팀원 @tgyuuAn, @winocreative, @ho-sick99 세 분 모두 감사하고 리스펙을 보낸다.

3. 안드로이드 개발 스터디

5월 ~ 현재 진행

항상 하고 싶었던 거였고, 마침내 시작했다. 이 스터디도 WAP 내에서 그룹을 만들어 진행하고 있다.

개인 블로그에 공부한 내용을 작성한 것을 매주 발표하는 식으로 진행하고 있다.

많은 도움이 되고 있고 정말 잘 했다고 생각한다. 내가 몰랐던 부분을 알아갈 수 있고, 코드도 참고하기 좋다. 특히 기술 내용을 얘기할 수 있는게 나에겐 참 좋은 부분이다. 이 스터디가 아니라면 다수와 코딩얘기 하는게 쉽지 않기 때문이다.

기술적인 내용을 공유하는 것 뿐만 아니라, 개인 발표를 한다는 것에서도 큰 힘이 된다. 공부한 내용을 말로 누군가에게 설명하는게 좋은 공부법 인데다가, 나서서 발표를 하는 경험을 하기가 쉽지 않은데 지금 경험을 쌓아갈 수 있으니 얼마나 다행인지 모르겠다. 나중에 회사나 어떠한 자리에서 발표를 하게 되는 경우에 경험이 별로 없다면 앞이 컴컴할거다.

스터디를 함께 한 @jeongjaino, @tgyuuAn, @Zepelown, @Redish03, @SeongHoonC 다섯분 모두에게도 감사와 리스펙을 보낸다.

4. 라이브러리 배포

개발하면서 외부 라이브러리 사용은 필수적이다. 어느 순간 나도 라이브러리를 만들어 배포하고 싶다는 생각이 들었다. 다른 개발자가 가져다 쓰면 고맙지만, 안쓰더라도 경험 삼아 만들어보고 싶었다. 물론 버그 덩어리면서 쓸모없는 라이브러리여서는 안된다. 이렇게 생각만 가지고 있다가 같은 동아리인 @alstn113님이 리액트 라이브러리를 배포하는 것을 보고 실행에 옮겼다.

  • 배포한 건 두 개이다.
    • smartdeeplink: 안드로이드 네비게이션 컴포넌트로 딥링크 이동시에 데이터 전달을 간편하게 해주는 라이브러리
    • ksealedbinding: 코틀린 sealed class 바인딩 함수를 자동으로 생성해주는 라이브러리

Medilenz개발 시 딥링크로 다른 모듈의 화면으로 이동할 때 네비게이션 컴포넌트를 사용했는데, 제공하는 API로는 출발지에서 도착지 화면으로 데이터를 전달하기가 까다로웠다. 그래서 이를 간편하게 해주는 라이브러리(smartdeeplink)를 만들어 배포했다.

ksealedbinding은 코틀린 sealed class사용 시 불편함을 느꼈기 때문에 제작했다. enum의 기능을 제공하는 sealed class가 있다. 보통 부모 sealed class의 자식 클래스 별로 when, if로 분기 처리를 하여 다음 작업을 진행하게 된다. 이 때, 자식 클래스가 많아지면 분기 처리가 많아지고, 코드가 길어지는 단점이 있다.

이를 좀 개선해보고자 @KBindFunc 어노테이션을 부모 sealed class에 붙여주면, on자식클래스명의 이름으로 컴파일 시 자동으로 함수를 생성해주는 기능을 만들었다. 이걸 쓰면 분기문 없이 함수형으로 다음 작업을 진행할 수 있다. 이 라이브러리를 사용하면 코드가 간결해지고 가독성이 좋아진다. 따로 개인 개발 중인 앱이 있는데 잘 써먹고 있다.

@KBindFunc
sealed class TestSealed {
    data object A : TestSealed()
    data object B : TestSealed()
    data object C : TestSealed()
}

// 적용 전
when(result) {
    is TestSealed.A -> {
        // A일 때 실행
    }
    is TestSealed.B -> {
        // B일 때 실행
    }
    is TestSealed.C -> {
        // C일 때 실행
    }
}

// 적용 후, 함수형으로 사용한다
result.onA {
    // A일 때 실행
}.onB {
    // B일 때 실행
}.onC {
    // C일 때 실행
}

라이브러리를 실제로 사용하는 지는 모르겠는데, ksealedbinding은 Github clone 기록을 보니 최소 수십명이 클론했다고 나온다. 사용자가 거의 없는 건 맞는거 같다. 하지만 아쉽거나 괜히 만들었나 싶은 생각은 전혀없는데 수요를 기대하고 개발한 게 아니라서 그렇다. 몇 달간 유기해놓아서 조만간 업데이트를 진행할 것이다. 꾸준히 관리해나가다 보면 수요는 늘지 않을까.

smartdeeplink는 뷰에 최적화 되어 있어 컴포즈를 지원하도록 업데이트 할 예정이고, ksealedbinding은 자식 클래스의 속성이 많아지면 간간히 컴파일 시 오류가 발생하는 문제가 있어, 오류를 해결해야 한다. 또한, 현재는 컴파일 시에 함수가 자동 생성되는데 Gradle 플러그인으로 변경해서 실시간으로 자동 함수 생성이 되도록 업데이트 할 예정이다.

5. GDG I/O Extended, Devfest 컨퍼런스 참가 및 두 번의 연사 경험

연사

WAP(11월) GDSC PKNU 2023년도 2분기 TechTalk(5월)

좌측부터 여러 프로그래밍 언어를 비슷한 구문과 문법에 따라 한번에 배우기, 앱 아이콘 클릭부터 앱 실행까지의 여정을 주제로 발표했었다.

  • 여러 프로그래밍 언어를 비슷한 구문과 문법에 따라 한번에 배우기: 프로그래밍 언어는 대체적으로 기본적으로 비슷한 형태를 가지고 있기 때문에, 언어를 배우면 다른 언어를 배우기가 쉬워진다는 것을 알려주고자 발표했다. 발표를 준비하면서 여러 언어들을 비교해보면서 프로그래밍 패러다임 관련한(객체지향) 부분이나 자료형 등 몇몇 영역을 제외하고는 비슷한 구조를 가지고 있음을 다시 한번 알 수 있었다. 공부할 게 많아 준비에 시간을 나름 많이 투자했는데, 개인적으로 발표를 잘 못해서 아쉽다.

  • 앱 아이콘 클릭부터 앱 실행까지의 여정: 안드로이드 액티비티가 열리는 과정에 대한 내용이 궁금했는데, 인터넷에 관련한 자료가 거의 없어서 직접 공부해본 후 공유해보고자 발표를 하였다. 자료가 너무 없다보니 Android Code Search에서 코드를 뒤적뒤적 하면서 공부했는데, 보다보니 안드로이드 OS 코드는 아주 정교하고 추상화가 잘 되어있다는 생각이 들었고, Zygote, Application Thread등 여러 모듈이 상호 작용하면서 앱이 실행되는 과정이 흥미로웠다. 안드로이드 개발자 공식 문서에 이런 내용이 있으면 좋겠다는 생각이 든다.

GDG Songdo Devfest, GDG I/O Extended

GDG Songdo Devfest(12월) GDG I/O Extended Busan(9월)

9월 I/O Extended Busan에서 현업자 분과 길게 대화하면서 많은 걸 얻어갔기 때문에, 그런 컨퍼런스를 또 한다면 꼭 가야겠다고 다짐했었다. 마침 12월에 인천에서 GDG Songdo Devfest가 열렸고, 멀지만 당일치기로 다녀왔다. 연사자 분들께 내가 평소에 궁금했던 것들을 질문하고, 답변을 들을 수 있어서 좋았다. 그리고 내 옆에는 광주광역시에서 왔다는 고등학생 분이 계셨는데 신기하면서도 대단하다고 느꼈다. 열심히 들으시는 걸 보면서 나중에 뛰어난 개발자가 될거 같았다.

여기를 다녀와서 여러 생각과 고민을 하게 되었다. 원래는 SSAFY, 우아한테크코스, 소프트웨어 마에스트로 등 교육 프로그램은 최대 1년의 긴 기간 동안 연수를 받아야 하니 그냥 빨리 취업하자 였는데, 같은 분야에 몸 담고 계시는 다른 분들과 얘기하고 강연을 듣고 나니, 내가 아직 한참 부족하고 멀었다는 느낌이 더 크게 들었다. 그러다보니, 내가 더 성장할 수 있는 환경에서 공부하는 것도 좋을거 같다는 생각이 들었고, 평소 알고있던 소프트웨어 마에스트로가 최적이라고 생각되어 여기에 합격하기 위해 준비하고 있는 상태이다. 너무 매력적이고 좋아보인다. 확실하게 여러 단계 내가 더 성장할 수 있지 않을까 싶다. 학교 다닐 때는 학교 공부 때문에 개발에 온 집중을 못했는데, 연수 기간 동안에는 집중이 가능할테니 기대된다.

하지만 취업 준비는 여전히 하고 있다.

6. 알고리즘 스터디

10월 ~ 현재 진행

평소에 코딩 테스트를 위해 알고리즘 문제 풀이를 하고 있었는데, 어려운 문제는 맞춰도 내가 괜찮게 푼건지를 잘 모르겠어서 같이 풀이를 공유하고 서로 피드백을 주고받으면서 성장할 수 있는 스터디를 하고 싶었다.

마침 동아리 내에서 스터디를 할 수 있게 되어서 현재까지 계속 진행 하고 있다.

문제 풀이를 공유하고 리뷰를 하고, 받아가면서 점점 실력이 향상 됨을 느끼고 있다. 요즘 코딩 테스트가 워낙 중요하다보니 걱정이 앞서는데, 스터디로 자신감이 점점 붙고 있다.

그래서, 2024년은 어떻게 보낼까

현재로서는 앱 개발, 알고리즘 문제 풀이 이 두 개가 최우선이다.

빠른 시일 내로 앱을 출시해서, 포트폴리오를 추가하고자 한다.

알고리즘 문제 풀이는 점점 난이도를 올려서 실전에서도 흔들리지 않고 풀어낼 수 있게 준비해야 겠다.

취업은 걱정이 안되면 좋겠지만, 걱정이 된다. 근데 걱정이 되는게 사람으로서 당연한거라고 생각한다. 안되는게 신기한거다. 내가 할 수 있는 만큼 다 해보고, 더 노력해보자. 보니까 다른 사람들도 다 비슷한 상태인 거 같다. 개발에 미치고 성장을 갈망하자.