2019년은 나에게 무엇이었고, 무엇을 얻었는지 정리해보려고 한다.
회고글을 쓰는 것은 처음인데, 2019년은 나에게 있어 큰 발걸음이 된 것 같아 꼭 적어 기록을 남기고 싶다.
👨💻안드로이드 앱 개발
나는 그냥 평범한 코딩을 좋아하는 학생이었다, 집에서 인터넷으로 C언어 강의를 보며 하나하나 배우는 걸 좋아했고 즐겼다. 그러다가 Android Studio를 다뤄보게 되었고, 공부 삼아 만들기로 한 앱을 하나하나 기능을 채우며 만들었다. 그때 처음으로 만들던 앱은 루딘프라는 앱인데, 자각몽에 관한 도구와 정보를 제공해주고 주요 기능으로는 꿈 일기장 등이 있는 앱이다, 이 앱을 만들다 보니 자연스럽게 다양한 분야에 발을 들이게 되었다. 먼저 서버에 저장되는 꿈 일기장을 구현하기 위해 MySQL과 서버에 대한 이해가 필요했고, 자각몽 강좌, 자각몽 사전, 테크닉 리스트 등을 구현하기 위해 Android의 View들에 대해 자연스럽게 이해하게 되었고. 꿈 생각 알람, 토템화, 알리미 등을 구현하기 위해 안드로이드 체계에 관해 공부했다. 그냥 한마디로 나의 스택을 전반적으로 올려준 효자 프로젝트였다고 생각한다.
이렇게 루딘프의 기능을 하나하나 채우고 앱을 스토어에 올린 게 2019년 1월 초였다.
이때까지는 이 앱이 이렇게 흥행할 줄 절대 몰랐다. 하지만 올리고 몇 주도 안돼서 높은 다운로드 수를 기록했고, 현재는 꿈 일기장이 하루에 100개 넘게 올라온다. 그렇게 유저층이 생기고 또 자연스럽게 나는 보안에 대한 걱정이 되었다. 꿈 일기장에 가입한 회원이 몇천 명이 넘는데, 아직 암호화 등 아무런 보안체계가 없으니 말이었다. 그렇게 유저 정보를 암호화하면서 보안에 관한 이해와 암호화에 대해 알게 되었다. 아직도 루딘프 서비스는 운영 중이고, 꾸준히 상승 중이다.
https://play.google.com/store/apps/details?id=nna.ca.ha.ludinf
루딘프 - 자각몽 필수 앱 - Google Play 앱
😞지친 마음을 달래줄 나만의 공간이 필요하신가요? 루딘프 앱으로 자각몽의 모든 것을 파헤쳐 보아요. 루딘프 앱은 자각몽에 관한 정보와 도구를 제공해 루시드 드리머가 될 수 있도록 도와줍니다!😮 앱 주요 기능 - #자각몽 강좌: 자각몽에 대한 이해하기 쉬운 강좌들을 준비했습니다. #자각몽 사전: 자각몽에 대한 단어들을 한곳에 모은 자각몽 사전입니다. #꿈 일기장: 꿈 일기장은 간편한 회원가입을 통해 서버에 안전하게 저장합니다. 앱을 지우고 폰을 바꿔도 작성
play.google.com
또, 루딘프 이후에 몇 가지 만든 앱이 더 있다.
- Mute Switch - 빅스비 버튼의 재발견!
- Disposable Notepad.
- 몇초집중함
- 시크릿 메시지 생성기(TTR)
- PK Operation
여기서 가장 인기가 많았던 앱은 Mute Switch인데, 빅스비 버튼을 아이폰의 무음 스위치로 만들어주는 앱이다. 내가 만들었지만 너무 유용해서 제일 잘 쓰고 있는 앱이다. 만들었던 앱을 이렇게 정리해놓으니 다 호기심, 혹은 공부용으로 만든 것 같다.
📄 정보처리기능사 자격증 시험
정보처리기능사 자격증 시험을 봤다. 공부는 정보처리기능사 기출문제 책을 위주로 했는데 알고리즘은 all or nothing이라고 알고리즘 문제의 배점이 정말 말도 안 되게 컸다. 다른 문제를 다 맞아도 알고리즘을 틀리면 자격증 시험에 합격할 수 없다. 그래도 다행히 알고리즘 문제는 로직 설계도를 조금 보는 연습만 하면 쉽게 풀 수 있었다. (원래는 코딩으로 하다가 로직으로 보니 살짝 헷갈리는 부분이 있었다) 그렇게 열심히 공부를 하고 필기시험을 보러 갔는데 시험 직전까지 책을 보다가 시험장에 들어갔다. 근데 안내사항을 30분 동안 안내해서 직전에 보는 것은 별로 도움이 되지 않은 것 같다. 그리고 열심히 문제를 풀고 제출 버튼을 눌렀는데. 제출 버튼을 누르자마자 합격이라고 나와서 되게 놀랐다. 그리고 몇 주 뒤 실기를 보러 갔는데. 솔직히 실기와 필기 별 차이는 없었다. 필기 때는 컴퓨터로 시험을 봤고, 실기는 시험지에 직접 답안을 작성하고 로직을 짰다. 그렇게 필기/실기 모두 한 번만에 합격하고 자격증을 취득했다.
⌨️ NYPC - 온라인 코딩 대회 참가
NYPC라는 넥슨에서 주관하는 온라인 코딩 대회에 참가했는데, 나는 이때 알고리즘에 관해 알고 있는 지식이 별로 없었지만 그래도 내 실력을 테스트해보기 위해서 참가했었다. 그리고 며칠 동안 정말 열심히 코딩 문제를 풀었다. 머리를 굴리는 문제가 많이 나왔고 한 문제를 가지고 하루 종일 고민하기도 했다. 비록 상을 타지는 못했지만 이 대회에서 내가 얻은 것은 로직을 손으로 그려가며 디버깅을 할 수 있게 된 것 같다. 또, 나에게 알고리즘을 배워야겠다는 의지를 심은 대회였던 것 같기도 하다.
💬 넥슨 청소년 토크콘서트
넥슨 청소년 토크콘서트에 참가했다. 4분이 강연을 해주셨는데, 모두 재밌었고 무엇보다도 내용이 정말 좋았다. 김형진 앰버서더님의 게이미피케이션, 오상훈 앰버서더님의 럭스로보 대표에 오기까지의 경험, 김동건 앰버서더님의 대장 고양이 이야기, 남세동 앰버서더님의 딥러닝 강연까지. 가장 재미있었던 럭스로보 대표, 오상훈 앰버서더님의 이야기를 잠시 말해보자면 학생 시절 때 로봇에 너무 관심이 있어서 창업 센터에서 100만 원을 지원받고 로봇에 대해 공부하는데, 같이 창업할 사람을 월급 10만 원에 구하러 다니셨다고 한다. 나중에 제품 하나를 만들고 투자를 받으러 한국을 돌아다니는데, " 너 철은 들었니? "라는 말을 듣고나서부터 한국에서는 절대 투자받지 말아야지 라는 생각을 가지셨다고 한다. 그렇게 외국을 돌아다니면서 투자해줄 분을 구하고 있었는데, 어느 기업에 연락을 해도 다 씹혔다고 한다. 그래서 "답장을 안 해주시길래 일단 왔어요^^"라는 집착을 하시면서까지, 방문을 안 열어주길래 창문으로 종이비행기를 날리신 적도 있다고 하신다. (종이비행기: 저희 제품 좋아요!!) 이 분의 강연을 통해 느낀 건, 정말 뭐든 열정이 중요하다는 거였다.
🏃🏻 KCF 한국코드페어 해커톤
한국코드페어 해커톤에도 참가했다. 그렇게 좋은 기억으로 남은 해커톤은 아니지만, 그래도 많은 것을 느끼게 만들었던 대회였다. 우리 팀의 주제는 '일반인들도 쉽게 파악할 수 있는 미국 언론 서비스'였다. 한마디로, 미국 주요 언론사를 크롤링해서 번역해서 띄우고, AI 자연어 처리 기술까지 넣어서 이 기사의 주요 내용, 긍정/부정 파악 등을 해서 보여주는 사이트를 만드는 것이었다.
팀원 3명을 구해서 나는 python 프로그래밍(크롤링 등)을 맡았고, 한 분은 django를, 한 분은 프론트엔드를 맡아주셨다. 그렇게 순조롭게 진행이 되었고 2주간 열심히 달린 결과 주요 기사 크롤링해서 데이터 정리하고, word counting을 해 기사의 긍정 부정 논조까지 파악하는 코드가 완성되었다. 그렇지만 순조로운 진행은 여기까지였다. django를 담당하시는 분이 내가 만든 소스코드를 django에 적용하지 못한다는 것이다. 데이터를 넘기기가 쉽지 않다고. 나는 그때 django에 대해 잘 몰랐기 때문에 무슨 소린지 도통 몰랐지만 할 말이 없었다. 직접 시도해봤는데 어떻게 하는지 감이 잘 잡히지 않았다. 결국에는 내가 2주 동안 작업한 소스가 word counting부분 빼고 크롤링 부분은 모두 쓰지 않는다는 것이다. 그래서 몇 시간 동안 팀원들과 회의한 기억이 있다. 우리 팀의 주제가 '일반인도 쉽게 파악할 수 있는 미국 언론 서비스'인데. 미국 언론을 띄워놓지 않고서야 어떻게 쉽게 파악할 수 있는 미국 언론 서비스인가? 사이트에 미국 언론 기사의 링크를 띄워놓으면 일반인도 쉽게 미국 언론을 파악할 수 있는 것인가? 이건 내 생각에는 말도 안 되는 소리였다. 실제로 프로젝트 사이트에는 미국 기사 링크 몇 개와, 누르면 word counting이 되는 링크밖에 없었다. 내가 생각한 거와는 아예 달랐다. 그래서 프론트엔드쪽에 그래도 미국 언론 기사를 크롤링하는 척 사이트에 프론트엔드로만 디자인해놓으면 괜찮을 것 같다고 말했는데. 이 역시 구현되지 않고 나는 그냥 기사 링크가 몇 개 띄워져 있고 자연어 처리 기술로 이 기사가 부정인지 긍정인지 파악해주는 사이트를 그대로 가지고 발표를 했다. 물론 자연어 처리 기술도 하나의 메인 기능이었기 때문이었지만. 현재 프로젝트는 아예 첫 주제와 다른 방향으로 가게 되었다. 많이 실망스러운 결과였지만 그래도 많은 것을 배웠다.
https://github.com/Hacanna42/scrapingarticles
Hacanna42/scrapingarticles
for hackathon. Contribute to Hacanna42/scrapingarticles development by creating an account on GitHub.
github.com
📎 국민대학교 OSS 여름 캠프
국민대학교 OSS 여름 캠프에도 갔다 왔는데, 정말 의미 있는 활동이었다. 주요 내용은 AI 강화 학습이었고. 정말 어려운 이론을 모두 듣고 실제로 코딩을 해보니 내가 만든 것이 움직이면서 더 좋은 방향으로 향하는 게 보이니 흥미로웠다.
OSS 마지막 날, 주어진 과제가 있었다. 바로 Lunar Lander, 달 착륙선을 학습시켜 지정된 위치에 완벽하게 착지하도록 만드는 강화 학습 과제였다.
나는 Lunar Lander AI 학습을 오후 8시쯤부터 시작했다.
self.discount_factor = 0.99
self.learning_rate = 0.001
self.epsilon = 1.0
self.epsilon_decay = 0.784
self.epsilon_min = 0.05
self.batch_size = 64
self.train_start = 12000
이러한 값들과 optimizer을 변경하여 최적의 에이전트를 학습시켜야 했다.
먼저 나는 최대한 처음에 우주선에게 탐험(epsilon)을 많이 하도록 하고, 학습 시작점을 늦췄다. (self.train_start+=2000) 그리고, 학습을 늦게 시작하는 대신 epsilon_decay 값을 줄여서 학습에 대한 초점을 더 빠르게 맞출 수 있도록 하였다. 그러자 너무 조심스러워서 learning_rate를 0.001 정도 더 올려봤다. 그러자 땅에 아예 착륙을 안 하고 버티는 모습이 관찰되었다. 처음에 땅에 부딪혔을 때 reward 값이 낮아지면서 아예 땅에 닿으면 안 되는 걸로 학습이 됐나 보다. 그냥 땅과의 접촉을 피한다. 모험(epsilon)이 작용해서 착륙을 몇 번 더 해본다면 이런 일은 없을 것이라고 판단 해 decay 값을 0.99로 최댓값으로 올려주었다. 최대한 많은 모험을 해서 정책(policy)의 경우의 수를 최대로 만들고 시간이 오래 걸릴지라도 안정적으로 착륙하는 AI를 만들고 싶었다. 결국 안정적으로 착륙에 성공하는 에이전트를 완성했다. 우리가 만든 최적의 에이전트는 이것이었다. 더 좋은 에이전트를 학습시키고 싶었지만, 새벽 5시의 졸음을 이길 수 없었다. 모든 캠프 참가자분들이 밤을 새워서 에이전트를 학습시키셨다. 새벽 4시 전에 취침한 조는 한 조도 없었다. 우리는 겨우 과제를 끝마치고 1시간 정도를 잘 수 있었다. 새벽에 과제할 때 너무 재밌어서 시간 가는 줄 모르고 했다. 정말 하루 같은 4일간의 캠프였다! 도전적인 과제를 내주셔서 오기도 생기도 더 재밌게 한 것 같다. 정말 깊이 남을 특별한 경험이 되었다.
✏️ 원광대학교 알티노 자율주행차 캠프
원광대학교 알티노 자율주행차 캠프에도 참가했었는데. 알티노를 학습시켜 트랙을 자동으로 주행하도록 하는 캠프였다. 알티노 학습은 스크래치로 진행되었고 나는 시간이 가는 줄도 모르고 로직을 설계했다가 엎었다가 하며 최적의 로직을 설계했다.
내가 만든 로직의 주요 부분은 solution이라는 함수에 있다. solution이라는 함수는 벽을 만나서 브레이크가 작동되면 자동으로 호출되고, 함수는 아래와 같은 내용을 수행한다.
solution에서는 IR-1의 값과 IR-3의 값을 비교하고, 어디로 가야 할지 결정하게 된다. 적외선 센서가 물체를 감지하는 방법은 포토 트랜지스터가 IR-LED가 방출한 적외선이 물체에 반사되어 다시 돌아오는 정도를 측정하여 감지하는 것인데. 만약 저런 코너가 있는 구간에서 IR-1에서 방출하는 적외선을 표현해보자면
이렇게 되는데, 옆면의 벽이 없으니 다시 물체에 반사되어 되돌아오지 않고 IR-1의 수치가 낮게 나올 것이다. 반면에 IR-3에서 방출하는 적외선을 표현해보자면
이런 식으로 많은 적외선이 반사되어 IR-3의 수치 값이 높게 나올 것이다.
결국엔 solution에서 IR-1과 IR-3의 값을 비교해 비어있는 공간을 찾는 로직이다.
실제로 이 로직은 트랙에서 꽤나 부드러운 주행을 보여줬다.
☄️ 내년 목표는?
- 알고리즘 문제 해결 전략 공부하기!
- 머신러닝, 강화학습 배우기
- 웹 기반으로 운영되는 서비스 만들기
- NYPC 코딩 대회, 해커톤 재도전!
- Unity 게임 개발 입문하기
다 할 수 있을지는 모르겠지만 그래도 하고 싶은 것들을 나열해봤다.
회고를 마치며..
쓰는데 정말 오래 걸렸지만 글을 다 쓰고 나니, 2019년에는 정말 알차게 보낸 것 같다. 얻은 것도 많고 나에게 큰 의미를 주는 활동도 많았다. 2020년에는 또 어떤 일이 있을까?
'연말회고' 카테고리의 다른 글
연말회고 - 내 삶 2024 (0) | 2025.01.21 |
---|---|
연말회고 - 2023년, 남들과 달라질 용기 (0) | 2023.12.28 |
연말회고 - 2021년의 첫 발걸음 그리고 장애물 (0) | 2022.01.25 |
연말회고 - 행운만 가득했던 2020년 (1) | 2020.12.28 |