대학교도 졸업하기도 하고 최근에 블로그를 하기 시작하면서 22년도 끝나가는데 올해를 회고해보려고 한다.
개발
📋Node.js CRUD 게시판
전공자이긴 하지만 학점을 위한 공부만 하고 수업실습도 웹 통신 안쓰는 쪽으로만 했어서 입문 난이도가 쉽고 구현이 빠른 Express.js로 졸업작품을 준비하기 위해 시작했다. 코딩애플 강의를 들으면서 자바스크립트 언어도 익스프레스 프레임워크도 처음 써봐서 기초가 탄탄하다기 보다는 익스프레스 사용법을 빠르게 익히기 위해 강의를 들으며 진행했었다. MongoDb 연동도 처음해봐서 신기했고 ejs와 ajax 활용한 서버사이드 렌더링 비동기 통신, 비교적으로 배포가 쉬운 구글 클라우드도 경험해봤다.
게시판 후기
이걸 다 끝내고 나서도 그냥 백엔드만 배운 건줄 알았는데 나중에 깨달은건 서버 사이드 렌더링은 백엔드가 뷰까지 책임진다는거였다. 이후 졸업작품과 자바, 스프링을 배우면서 깨달았다. 또 자바스크립트가 Non Blocking I/O이고 싱글 쓰레드로 돌아가고 약간의 웹 프로그래밍의 기초, 라우터 사이의 미들웨어의 흐름등에 대해 알게됐다.
🏫졸업작품(지문 인증 플랫폼)
지문 데이터 어떻게 ...?
기획단계에서는 스마트폰의 지문인증 데이터를 어떻게 써볼 수 있지 않을까 하는 생각으로 시작했는데 데이터가 USIM에 저장되있고 어떻게 이용할 수도 없어서 후면 카메라로 지문을 찍는 방향으로 변경되면서 당시 가장 핫한 기술인 "블록체인", "인공지능"이 추가됐다.
Virtual Box, Hyperledger Fabric
프라이빗 블록체인인 하이퍼레저 페브릭으로 개발하기로 하고 나를 제외한 팀원들의 M1 칩과 하이퍼레저 도커 이미지의 충돌 때문에 혼자 블록체인 공부를 시작하게 됐고, VirtualBox도 방학 때 해킹 깔짝 배워본다고 칼리 리눅스 깔아본거 말고는 써본적이 없어서 예제 실행을 위해서 Hyper 가상화를 키느니 끄느니 부터 시작해서 설정을 갈아 엎은 기간만 일주일이 넘은 것 같다. 이후에 페브릭 블록체인도 공부하려고 3만원짜리 책을 샀지만 산 책을 비롯해 인터넷의 거의 모든게 1.4v의 정보였지만 프로젝트를 시작할 때는 2.0v이상이 서비스 중이어서 1.x 버젼과는 동작 방식에 체인코드를 압축해 배포하는 부분이 추가되어 안그래도 혼자 공부하는데 더 힘이 빠졌었다. 인도 형님들이 아니었다면 아마 졸업프로젝트는 블록체인 연동도 못하고 끝났을 것 같다.
맡은 부분
- 앱과 연결되는 Express.js로 만든 API 서버 구축
- API 서버와 블록체인 네트워크를 연결하는 Hyperledger Fabric Javascript SDK 사용
- Hyperledger Fabric Network 내의 SmartContract(chain code) 예제를 프로젝트에 맞게 수정
- 기본 API 서버와 통신해 지문 정보 비교 결과를 반환해주는 Flask 서버 구축
시스템 구성도
앱 화면
졸업작품 후기
개발자로서 너무 부족함을 느꼈다. 생각은 많이했지만 막상 설계는 구체적이지 않았고, 초짜끼리 모이다보니 자기 공부 할 것 공부해서 구현을 하느라 뭐가 잘못됐는지도 몰랐었다.
백엔드를 맡은 나는 블록체인 네트워크와 백엔드 서버를 연결하고 체인코드(스마트컨트랙)까지 구현하고 어느정도 원했던 기능들이 돌아가자 설계가 너무 부실한 것을 깨달았다. 사실상 회원가입과 로그인 이후에 정보를 가져와서 보여주는 부분밖에 없는데 이것도 블록체인을 잘 쓴 것도, 자바스크립트를 잘 쓴 것도 아니였던 것 같다. 블록체인에 보안을 위한다고 사용자 정보를 올리기 위해 프라이빗 블록체인을 썼는데 막상 구현을 하고보니 분산형 NoSQL DB를 한 노드에서만 접속해서 써서 일반 No SQL DB와 인증절차가 다른것 말고는 차별점이 없었고, 기초가 없는 상태에서 신기술들을 들이부으니 점점더 산으로 갔던 것 같다.
또 내가 맡은 백엔드를 제외한 프론트엔드, 인공지능을 각자 한명씩 맡아 시작했지만 사진을 찍을 때 손가락에 따라 초점을 맞춰주고 서버로 보내기 전에 지문 이미지를 데이터로 쓸 수 있는지 판단하는 정도를 생각했지만 구현물의 퀄리티는 그렇지 않았고, 이는 지문끼리 비교할 때 정확도가 떨어지는 결과로 이어졌다.
인공지능도 원래 있는 샴 네트워크 베이스 라인 모델을 조금 만지작한거고 데이터 셋도 우리가 사용할 비접촉식 이미지가 아니라 접촉식 이미지여서 인공지능 쪽은 97% 정확도로 지문 비교를 할 수 있다고해서 내거 하기 바빴다가 졸업 작품 제출 삼주전에 갑자기 정확도가 50~60% 떨어졌다는 말을 듣고 화들짝 놀라 그때서야 주변 친구들의 지문 데이터를 모아 학습을 진행했지만 지문 비교하는 부분도 애매하게 끝이 났다.
아이디어를 구현하는데 급급해서 이 프로젝트를 개발자로서의 밑거름이 되게 만들겠다는 생각이 없이 진행했던 것 같다.
배운점은
1. 기초가 부실한데 구현에 급급했던 것 같다. 기초부터 쌓고 가는게 돌아가는 것 같아도 그게 맞는 것 같다.
2. 팀 프로젝트를 진행할 땐 프로젝트의 방향성에 대해 많은 소통이 필요한걸 느꼈다.
3. 신기술을 적용할 땐 뭘 모르는지 모르는 상태가 가장 위험 한것 같다.
신기술 적용전 설계에서 이 기술이 진짜 필요한지, 필요하다면 어떻게 사용하고 어떤 부분이 막힐 것 같은지 빠르게 파악하기 위한 넓은 분야의 안목을 키워야 할 것 같다.
4. 미약하지만 프론트엔드와 백엔드를 나눠서 프로젝트를 진행해봤다.
5. 프로젝트의 주제는 니즈가 있으며 새로운 기능을 추가하고 프로그램의 설계를 꽤 오래 생각해볼 것
📝알고리즘
4학년 되면서 백준 수학문제도 못푸는 자신을 보면서 정말 답이 없구나를 느꼈고 졸업 프로젝트를 진행하면서 백엔드로 가려고 마음을 먹었고 우리나라에서 백엔드 하려면 자바를 하는게 좋을 것 같다는 생각을 해 인프런에서 자바 코딩테스트 강의도 사서 보면서 문제를 풀었다. 처음엔 자바도 오랜만에 공부해서 변수 선언 및 초기화도 익숙치 않았지만 배열, 리스트, 스택, 큐 등의 자료구조와 자바가 메모리를 어떻게 사용하는지 생각하면서 코드를 짜보면서 지금은 그나마 조금 나아진 상태다.
아직 그리디 알고리즘과 DP는 많이 어렵고, 그보다 쉬운 것들도 조금만 쉬어도 감을 잃는 것 같아서 오전 공부를 알고리즘 몇 문제 푸는걸로 시작하고 있다.
📝스프링, JPA
졸업작품을 진행하면서 기초의 부족함을 느끼고 김영한님의 스프링 강의를 듣게 되었고 스프링과 JPA의 기초부터 시작했다. 진행하다보니 자바의 기초도 많이 부족하다고 느껴서 2학년 때 전공 수업을 위해 샀지만 한번도 보지 않은 자바책도 보면서 컴파일, JVM 내의 메모리, 객체 지향에 대해 공부를 시작했다.
그러면서 클래스와 오브젝트의 관계, 추상화 클래스와 인터페이스의 차이 등을 이해하면서 자바는 객체지향을 어떻게 표현하나 맛을 볼 수 있었고, 이런 개념들이 객체를 컨테이너 관리하는 스프링 프레임워크에서는 제어의 역전과 의존성 주입을 어떻게 해결하는지 약간이나마 알 수 있었다.
또 객체와 데이터베이스 간의 개념의 간격을 좁혀주는 자바의 ORM인 JPA의 구현체인 하이버네이트를 공부하면서 간단하게 공부를 해봤지만 아직 자신만의 서비스의 데이터베이스를 구축해본 적은 없어서 12월, 1월 생각했던 프로젝트를 진행하면서 숙련시킬 생각이다.
김영한님의 강의를 보고 프로젝트를 만들어야 겠다고 생각은 했지만 마땅히 어떻게 해야할지 몰라서 찾던 강의인데 스프링과 JPA, Spring Rest Docs, 간단한 git 사용법과 Vue.js, 배포까지 다루고 있어 현재 도움을 많이 받고 있다. 특히 요청,응답 사이의 관계 그리고 서비스 단과 컨트롤러 단의 설계와 테스트에 대해서 실용적인 사용법에 대해서 조금이나마 더 알게 된 것 같다.
감사해요 호돌맨
📝우테코 프리코스
우아한 테크코스5기는 참가하기전에 한달간의 프리코스 과정을 거쳤는데 물론 광탈했지만 배운게 꽤 많았다.
일단 깃허브에서 포크와 풀리퀘스트, 코드리뷰는 처음이였고 프로그래밍 전에 기능요구사항을 분석하고 기능목록을 작성하고 메서드 별로 커밋하는 것도 새로웠다.
순수한 자바로 주제를 가진 애플리케이션을 100줄 이상짜리는 짜본적이 없던 것 같은데 입출력부터 예외처리, 테스트까지 한주에 하나의 과제를 해결하면서 자바의 이해도가 많이 올라갔다.
또 남의 코드도 보면서 배우는 것도 많았는데 일급 컬렉션, 도메인 내의 생성자에서 예외처리, getter 대신 메시지를 이용하는 방법 등이 생각이 나고 전체적으론 객체지향적으로 프로그래밍하는 법을 배운 것 같다.
살면서 올해 11월만큼 커밋을 많이 한 달은 없었다. 상당한 실력자라면 굳이 참가할 필요는 없겠지만 개발자의 진로를 가진사람이라면 우테코 프리코스를 참가하면 좋을 것 같다.
배운 점은
자소서부터 느낀 거지만 내가 뭔가를 해온 과정들을 기록을 잘 해야한다는 필요성을 느낀 것 같다.
운동
👊 복싱
세상이 흉흉하고 헬스만 하다보니 스포츠를 좀 접해보고 싶어서 3월부터 9월까지 복싱을 했었다. 첫날부터 끝날까지 줄넘기가 가장 힘들었고 첫날 이후에 종아리에 알이 배겨 못 걷기도 해보고 발에 물집도 잡혀보면서 힘들었지만 스파링도 많이해보면서 꽤 재미있었다. 하지만 원래 약했던 손목이 샌드백을 조금만 세게치면 자주 아파서 그만두고 다시 홈트로 돌아왔다.