2019년을 돌아보고 2020년을 목표를 다짐 하면서 작성한 회고록입니다.
지난 1년의 시간동안 경험 했던일을 정리하면서 작성해보았습니다.
최대한 타임라인대로 작성하였으나, 조금 차이가 날수도 있습니다.


1. 연구실에서 나오다.

2018년 3월부터 나는 같은 학과 교수님의 연구실에서 학부생 연구원으로 있었다. 내가 초창기 멤버로써 신설된 연구실이었다. 주로 딥러닝과 관련된 주제로 연구를 진행하는 연구실 이었다. 1년을 꽉 채우지는 못했지만, 많은 것을 배운 시간들이었는데, 2019년이 되면서 여러가지 이유로 인해 연구실에서 나왔다.

1. 인공지능과 관련된 분야로 취업하기 위해선 석사/박사 학위가 필요하다.
2. 인공지능과 관련된 분야로 취업을 하지 않는다면, 연구실에 있기 보단 취업에 직접적으로 도움이 되는 학습을 하고 싶다.
3. 하고싶은 프로젝트가 많았다. (연구실에 있어서라기 보단 게을러서...)

연구실을 나오면서 제일 힘들었던 점은, 바로 경제적인 문제였다.
연구실에서 일하면서 많지는 않지만 일정 급여를 받았었다. 하지만 나오면서 무일푼의 거지가 되었다.
하지만 그보다 더 큰 문제는…
연구실에 있을땐, 가고싶은 세미나와 컨퍼런스의 모든 지원을 받았다. 물론 도서구입비와 장비같은 것들 모두…
그럴수 있던 이유는 신생연구실이어서 대학원생이 없었고, 내가 초기 멤버이자 가장 연장자 여서 그랬을 것이다.
연구실에서는 나름 고사양의 컴퓨터를 사용했는데, 나오면서 나의 15인치 노트북을 애용하게 되었다.


2. 캡스톤 디자인

우리학과에는 4학년 1학기에 한번 2학기에 한번 이렇게 캡스톤 디자인 1,2 수업을 듣는다.
별로 특별한건 없고, 팀단위로 모여 하나의 주제를 정한뒤, 프로젝트를 진행하면 되는 수업이다.
다른 학교나 다른 학과에서 흔히들 말하는 졸업 작품을 만든다고 할 수 있겠다.
다만, 우리과의 경우 패스, 논패스가 아니라 상대평가로 점수가 부여된다. 우리팀의 목표는 무조건 A+을 받는것이었다.
다른 팀보다 잘하는것은 물론, 스스로 만족할때까지 최선을 다하지는 목표가 있었다.

우리팀의 주제는 음주운전 테스트 앱과 얼굴인식 기반 졸음운전 방지 프로젝트 였다.
앱의 경우는 클라이언트-서버 모델로 구축을 하였고, 얼굴인식 기반 졸음운전 방지 장치는 라즈베리파이를 통해 서버없이 구현했다.
개강하자마자 바로 부지런히 준비를 해서 그런지 우리팀원들 모두 A+을 받았다.
하지만, 교내 공모전에도 참가 했지만 좋은 점수를 받지는 못했다.
처음으로 프로젝트에서 팀장을 맡았던 프로젝트라서 매우 기억에 남는다.


3. 웹 프로그래밍 수업

학점을 채워야 하기도 했고, 다른 수업은 인원이 전부 차버려서 못듣게 되어서 들었던 수업이었다.
다만 이론위주의 강의 형식이었으면 아마도 수강 취소를 하지 않았을까 싶다.
실습 위주에, 기말 프로젝트가 있는 수업이라 매우 기대가 높았던 수업이었다.
주로 배웠던 내용은 웹서버 구축을 해보고, 간단한 게시판을 구현해보는 프로젝트였다.
게다가 가장 중요한 웹서버에 어떻게 시큐어 코딩을 적용할 것인지에 대해서 배울 수 있었다.

웹 서버 프로그래밍 언어 데이터 베이스
Apache PHP MySQL
Tomcat JAVA Oracle
IIS ASP MS sql

구현 해보았던 웹서버 플랫폼들 이다.

앞서 말했다 시피 이 수업의 평가에 있어서 가장 큰 부분은 역시 기말 프로젝트 였다.
심지어 중간고사, 기말고사를 모두 합쳐도 기말 프로젝트보다 비중이 낮았다.
교수님께서 말씀하신 조건은 다음과 같았다.

  • 어떠한 라이브러리, 프레임 워크를 사용해도 무방하다.
  • 팀원은 각자의 역할을 확실하게 분배하고 수행할 것.

매우 관대한 조건이었다.
내가 구현하고자 했던 목표는 다음과 같았다.

1. 자바스크립트를 최대한으로 활용해 시각적으로 화려하지만, 난잡하지 않고 깔끔해야 한다.
2. 코드의 재사용성을 최대한으로 활용하고, 깔끔하게 코드를 작성할것.
3. 다양한 기능을 구현해볼 것. (회원가입 인증을 위한 메일 전송 같은 기능)

팀은 나와 후배 한명 이렇게 2명으로 구성했다. 백엔드-프론트 엔드. 물론 백엔드는 내 담당이었다.
환경은 APM을 사용하기로 했고, 프론트에서는 제이쿼리와 부트스트랩을 사용하 기로 했다.

프로젝트는 차근차근 진행되었다. 다만, 기말 프로젝트와 캡스톤 디자인 프로젝트의 기한이 3일 밖에 차이가 안났다.
그래서 기한이 다가올수록 양 쪽 팀을 오가면서 프로젝트를 진행했다.
열심한 덕분인지 우리팀이 평가에서 1등을 했다. 너무나도 뿌듯한 순간이었다.
후배에게 깔끔하고 이쁜 웹사이트를 부분별로 보여준 뒤 짜집기 해서 구현하도록 일러 두었는데,
정말 원하는대로 잘 구현을 해줬다.


4. 한이음 공모전

한이음 공모전 역시 작년 부터 참여하고자 했던 목표중 하나였다.
개강한뒤 3월에는 오리엔테이션 및 개강 초기 이므로 수업이 많지 않았다.
실습 위주의 강의를 주로 수강해서 그랬던것 같았다.

3월에는 주로 보고서를 작성하고, 회의록을 작성하는 등의 문서작업을 주로했다.
이때 남는 시간을 활용해서 한이음 공모전에 참여했다. 총 2개의 프로젝트에 참여 하기로 했다.
2개 모두 같은 멘토님과 프로젝트를 진행했는데, 총 2번의 오프라인 만남을 가졌다.
아무래도 거리가 있어서 주로 온라인 상으로 지도를 받았다. 멘토님은 최대한 우리를 배려 해주셨다.
배려를 많이 해주셔서 필요한 재료도 많이 구비 할 수 있었고, 프로젝트를 진행하면서 올바른 방향을 지도 해주셨던 것 같다.


5. 여름방학

내 계획대로 된다면, 올해 여름 방학은 나의 마지막 방학이었다.
마지막 방학이라면 정말 후회 없이 보내고 싶었다.
우선 2학기의 가장 큰 목표가 생겼다. 바로 인턴십에 도전 해보기로 마음을 먹었다.
인턴을 방학기간에 하는 경우도 있는데 짧게는 4주 길게는 8주 정도 하는것같았다.
방학기간 동안이 아닌 학기중에 진행하는 인턴을 목표로 잡았다.
기왕이면 채용 전제형 같은 인턴을 해보고 싶었다. 인턴 기간동안 평가를 받고 따로 준비 없이 취업에 성공하는 그런…

우선은 방학이 시작하자마자, 1학기에 진행한 프로젝트들의 미흡한 점을 끝마무리 지었다.
진행했던 프로젝트들의 정리가 끝나고 난뒤 바로 인턴십 준비에 돌입했다.
인턴십을 나가기 위해 포트폴리오도 만들고 자기소개서도 작성하고, 나름 면접 준비도 했다.
포트폴리오는 간략하게 학기중에 만든것이 있었는데, 거기에 진행한 프로젝트들을 추가했다.
또한 전체적으로 이쁘게(?) 꾸몄다.

인턴을 나가기 위해서 준비를 하다가 보니, 인턴을 나가는 것도 좋지만, 취업을 해도 좋을것 같았다.
인턴 준비 과정이나 취업 준비 과정이나 비슷한점도 있었고, 기왕이면 인턴보다는 바로 취업되는게 좋으니까…
여러 기업을 찾아 보다가 스타트 업에 서류를 넣어보았다. 서류는 바로 통과했고, 면접을 보게 되었다.
첫 면접을 보기 위해 나름 준비를 철저하게 했고, 나름 면접 질문에 대해 모두 대답했다.
결과는 합격을 했다. 회사의 규모는 조금 작았지만, 개발자를 매우 배려해주는 회사였고, 분위기가 정말 좋아 보였다.
방학기간동안 한이음을 마무리 지어야 해서 시간이 필요하다고 했는데도, 기다려 주겠다고 하셨다.

정말 좋은 기회였으나 결국에는 가지 못했다. 아직은 채워야할 학점이 남아있어서 취업계보다는 학점 연계 인턴을 진행해야 했다. 처음 도전 해보았지만 합격을 해서 나름 기분도 좋았고 회사를 보는 기준이 나름 생겼다고 해야될까?
무튼 정말 가고싶었던 회사였는데, 못가게 되었다.

리액트와 Vue js등 웹 프로그래밍 쪽 공부를 해보고 싶었는데, 관심만 있고 미루다가 하지 못했는다.
그러다가 노마드 코더의 리액트 강의를 2~3개 정도 보면서 클론 코딩을 했다.
정말 웹쪽은 잘 몰라서 밑 바닥부터 공부하는데, 도움이 많이 되었다.

앞서 구직 경험을 했기 때문에 무엇을 준비해야될지 감이 좀 잡혔다.
인턴십은 서류 통과 - 코딩 테스트 - 면접의 과정을 겪어 보았다.
서류 통과에서는 포트폴리오를 계속 다듬었기에 합격한 것 같고, 코딩 테스트는 일주일간 준비를 통해서 합격했다.
마지막으로 앞서 한번의 심층적인 기술 면접 경험을 바탕으로 면접을 잘 보았던 것 같다.
방학이 끝나갈쯤에 인턴을 합격 통지를 받아 볼 수 있었다.


6. 인턴쉽

인턴기간동안 총 2개의 프로젝트와 2번의 발표를 했다.
프로젝트를 진행하기 전에 나의 수준 테스트(?)를 위해 프로그래밍 과제를 2개 내주셨다.
하나는 이중 링크드 리스트를 이용한 과제였고 다른 하나는 멀티쓰레드 관련 과제 였다.
자료구조는 평상시에도 공부를 게을리 하지 않았고, 멀티쓰레드는 프로젝트를 하면서 많이 다뤄 보았다.
어렵지 않은 과제였기에 무사히 끝낼 수 있었다. 과제 완료후 1차 프로젝트를 시작했다.

1차 프로젝트는 와이어 샤크처럼 패킷을 감청하는 프로젝트 였다. MFC를 이용해서 구현하는 프로젝트 였다.
학교에서 프로젝트를 진행할때는 개발부터 진행 하면서 그에맞춰 서류를 작성했었다.
클래스 다이어그램이나 간트 차트등을 작성할때도 우선 개발을 진행 한뒤에 작성했었다.
하지만 인턴십을 하면서 배운것은 중구난방으로 개발을 하면 안된다는 것이었다.
설계문서를 우선 작성하고 수정해나가면서 개발을 진행했다.
체계적으로 그리고 협업을 위해 개발하는 법을 배울 수 있었다.

MFC는 처음 접해보는것이 아니었다. 학생때 공부를 하기도 했고, 작은 규모의 프로젝트를 진행했었다.
따라서 MFC를 새로 공부해야 되는것이 아니라 오로지 프로젝트 개발에만 집중 할 수 있었다.
프로젝트를 진행하면서 많은 칭찬도 받았고, 조언도 받았다. 문제가 발생하다가 해결이 안되면 고민을 통해 해결해나갔다. 퇴근하는 지하철에서도 고민해보고, 점심시간때도 시간으르 쪼개어 개발을 진행했다.
대학교때와는 프로젝트 막바지가 되갈때쯤에는 요구 사항을 모두 구현했고, 추가적으로 내가 기능을 추가한것도 있었다.
그렇게 무사히 발표를 마쳤다. 정말 발표를 못헀다고 생각했는데, 과분한 칭찬을 받았다.

1차 프로젝트가 끝나고 바로 2차 프로젝트에 돌입했다.
2차 프로젝트는 윈도우 환경이 아닌, 리눅스 환경에서 DNS 스푸핑 툴을 만드는 것이었다.
역시 배운대로 개발부터 시작하는것이 아닌, 설계와 구상 부터 한뒤 개발에 돌입했다.
리눅스 환경에서 개발 경험이 없었던 것은 아니었다. 소켓 프로그래밍을 공부할때 리눅스 환경에서 개발을 해본 경험이있었다. 게다가 1차 프로젝트와 성격이 비슷한점이 많아서 수월하게 프로젝트를 수행했다.

1차 프로젝트에서는 코드를 정말 막 작성했었다.
그래서 2차 프로젝트에서는 보기 좋고 읽기 좋은 코드를 작성해보고 싶었다.
그렇다 보니 작업시간에 비해 작업량이 비례하지 않았다.
빠르게 구현하기 보다는 천천히 구현하되 꾸준히 코드 리팩토링을 진행했다.
팀장님께서도 코드 리뷰를 해주셨고, 어떻게 코드를 짜야할 것인가에대한 고민을 꽤나 깊이있게 해보았다.
전까지느 구현이 제1의 목표였는데, 회사에서는 현업이 매우 중요하기 때문에 양질의 코드를 작성해야 했기 때문이다.

2차 프로젝트를 진행하면서, TDD와 테스트에대해 관심을 가지게 되었다.
TDD로 프로젝트를 진행하라는 요구사항이 있었던 것은 아니었다.
하지만 요구사항중 유닛테스트를 해보라는 요구사항이 있어서 찾아보게 되었는데, 그러다 보니 자연스레 TDD를 알게 되었다. 유닛 테스트는 작년에 프로젝트르 진행하면서 파이테스트를 통해서 해본적이 있었다.
하지만 테스트를 통해 테스트 케이스를 뽑거나 하는 목적이 아닌, 서버 구동을 위해서 간단 테스트를 진행했던 것이었다.
TDD를 알게된 것은 2018년도 여름이었는데, 그때 당시에는 과연 이게 가능 할 지 싶었다.

하지만 클린코드 라는 책을 읽게 되면서, TDD에 대한 환상을 갖게 되었다.
TDD 및 유닛테스트 자료들을 찾아보니, 클린코드 책을 읽어보라는 말이 많아서 알게 되었다.
게다가 마침 회사 보유 도서중에 클린 코드가 있어서 읽게 되었다.
책 전체를 정독해서 읽은것은 아니고 필요에 따라 부분 부분 읽었다.
옆에 두고 자주 읽어야할 책인것 같아 최대한 빠른 시일내에 책을 구매할 예정이다.

2차 프로젝트 발표도 무사히 마쳤고, 그렇게 무사히 인턴십을 마무리 지었다.


7. 취업

1년동안 나의 가장 큰 고민이었다. 불안 하기도 했고, 두렵기도 헀다.
우선 인턴을 하고 있던 회사에서 1차 프로젝트 종료 후 정직원 제의가 들어왔다.
여기서 부터 고민이 되었다. 보통은 인턴이 끝나기 전쯤에 제의가 들어온다는데… 나는 엄청 일찍 제의가 왔다.
나는 인턴중인 회사에서 제의가 들어올지 몰랐기 떄문이기도 했고, 혹시나 모를 여러가지 상황을 고려 해야 했다.
언제 어떤 일이 벌어질지 모르기 때문에, 포트폴리오는 인턴 중에 틈틈히 업데이트 해두었다.
취준생이 된다고 하더라도 바로 구직활동을 할 수 있도록 만만의 준비를 해두었다.

별다른 구직 활동을 하지 않고 인턴했던 회사에 들어가면 좋은점도 있을 것이다.
실제로도 회사에서는 조금은 파격적인 조건으로 나에게 제시를 했다.
하지만 노력해서 만든 포트폴리오로 좀 도전을 해보고 싶었다.
비롯 좋은 소식이 없다고 하더라도 준비하는 과정에서 얻게되는 무언가가 있기 때문이다.
인턴중에 다른 회사에 이력서를 넣었고, 서류를 가볍게 통과하고 1차 면접, 2차 면접 까지 모두 통과했다.
지금은 합격한 회사에 다니고 있다.


8. 2019년을 돌아보며..

성취한것

  1. 인턴십 하기
  2. 취업에 성공했다.
  3. 정보처리기사 자격증 획득

실패한것

1일 1커밋실패

초기목표는 공부를 하는데에 1일 1커밋을 하면 도움이 되겠지! 해보자 였다.
하지만, 1일 1커밋이 중요해 개발 작업 이외의 이론 공부를 게을리 하게되는 상황이 되어버렸다.
하루에 반드시 커밋을 하는 것 자체 보다는, 의미있는 학습을 하는게 중요한 것 같다.

무언가를 얻기위해 공부하자. 공부한것을 증명하기만을 위해 공부하지 말자.
학습을 했다는 확인보다 학습 자체에 중점을 두자!

건강 관리

운동을 하지 못했다.
정말 1도 하지 못했다… 숨쉬기 운동말곤 하나도 못했다.

헬스클럽을 다녀야 겠다.


9. 2020년 계획

  1. 기술 블로그 운영 (주 1회 포스팅)
  2. 사이드 프로젝트 진행
  3. 기술 서적 읽기 (월 1권 이상)
  4. 스터디 참여 하기