졸업프로젝트

'바른 글씨' 프로젝트 회고록

달팽이포뇨 2022. 6. 28. 20:32

졸업프로젝트가 드디어 끝났다..!

졸업프로젝트에 대한 간단한 소개와 전반적인 수행 과정, 프로젝트를 끝내고 나서 배운 점, 느낀 점 등에 대해 회고록을 작성해보고자 한다.

 

졸업프로젝트 (2021-2학기~2022-1학기)

 지금 내가 재학하는 대학교 컴퓨터공학과에서는 졸업프로젝트 수행이 졸업 요건 중에 하나이다.

 정확히 말하면 '캡스톤 디자인 프로젝트'이지만 대부분의 사람들이 그냥 졸업프로젝트라고 부른다. 언제 할지는 자유이지만 2개의 학기에 걸쳐 이수해야하므로 일단, 커리큘럼 상에는 3학년 2학기와 4학년 1학기에 하는 것으로 정해져있다. 나는 지금까지 휴학 없이 쭉 학교를 다녔기 때문에 커리큘럼대로 3-2, 4-1에 해당 과목을 수강하였다. 사실상 2개의 학기를 연속해서 수강해야하므로 겨울방학도 프로젝트 수행 기간에 포함된다. 

 

주제

 우리 팀의 주제는 '딥러닝 기반 글씨 검사기능을 탑재한 태블릿 PC용 글씨 연습 어플' 이었다.

 이 주제는 내가 글씨를 잘 못 써서.. 제안하였는데 어릴 때부터 손글씨 교본 등으로 연습을 해도 글씨는 정말 고쳐지지가 않았다. 글씨체를 바꾼다는 것은 정말 어려운 일이었다. 그리고 태블릿 PC를 쓰는 친구들 이야기를 들었을 때, 인터넷에서 보았을 때, 태블릿 PC에서 필기할 때, 글씨를 만족스럽게 쓰기가 어렵다는 이야기를 많이 들었기 때문에 이 주제를 제안하였다. 

 사실, 처음 이 주제를 제안했을 때만해도 한글이 이렇게 어려운 문자인지 몰랐다.. 그래서 중간에 영어로 방향을 바꿀까도 생각했지만 그때는 이미 시간이 많이 지났고 우리가 해왔던 것들이 많았기에 열심히 하면 잘 끝낼 수 있을 것이라는 믿음 하나만으로 끝까지 달려왔다.

 

2021-2학기

 해당 학기 이전, 여름방학 때 친구 한 명과 졸업프로젝트를 같이 하자고 이야기를 했었다. 그리고 그 친구가 인공지능 쪽에 관심이 있는 친구를 소개해주어 총 3명이서 프로젝트를 진행하였다.

 3명이서 백엔드, 프론트엔드, 인공지능 이렇게 각자 파트를 맡았고 나는 백엔드를 맡았다. 2021-1학기에 데이터베이스 강의, 정보통신공학 강의 등을 수강하면서 너무 재밌었기 때문에 나는 백엔드가 잘 맞을 것이라는 생각이 들었다. 그래서 백엔드를 맡겠다고 했었다. 이제와서 생각해보면 졸업프로젝트를 하기 전에 작은 프로젝트라도 백엔드를 맡아서 진행하는 것이 여러모로 좋았겠다는 아쉬움이 남는다. 그랬다면 조금이라도 덜 수고스럽게 진행했을 것 같다.

 백엔드를 맡았지만 데이터베이스 말고 서버에 대해서는 아무것도 몰랐기 때문에 2021-2학기는 정말 스프링 강의를 열심히 들었다. 인프런에서 김영한님의 스프링 완전정복 로드맵을 따라가며 공부를 했다.

한마디로 말하자면, 2021-2학기에는 백엔드, 인공지능 파트는 각자 공부하는 시간이었고, 다같이 디자인을 하는 시기였다.  

 

겨울방학

 겨울방학에는 프론트엔드 파트는 본격적으로 개발을 시작했고, 백엔드와 인공지능 파트는 공부와 개발을 병행하였다.

한글 데이터가 부족하다보니 한글 음절 데이터를 하나하나 수작업으로 라벨링하는 기간도 있었고 서버 초기 개발 설정 관련해서 시간도 많이 소요되기도 했었다. 

이 시기에는 김영한님의 스프링 완전정복 로드맵 강의를 들으며 Spring boot로 코드를 작성하였고, AWS에 가입하고 인스턴스를 생성하고, 도메인 설정 등 서버 개발의 기초적인 부분들을 수행하였다.

 

2022-1학기

 이 학기부터 프론트엔드, 백엔드, 인공지능, 이 세 파트가 협업하여 본격적으로 개발을 시작했다. 다른 팀들은 어땠을지 모르겠으나 개발을 조금 늦게 시작한 탓에 정말정말 바빴다. 아마 내 인생 가장 바쁜 시기였을 것 같다. 이 시기를 거치며 왜 구글링이 그렇게 중요한지 알았고, 좋은 서버 개발자, 백엔드 개발자가 되려면 정말 공부를 많이 해야겠구나하는 생각이 들었다. 그리고 이 학기에 프로젝트를 하며 제일 많이 했던 말이 "뭐 하나 쉽게 넘어가는 것이 없다."였을 만큼 많은 시행착오도 겪었다.

 AWS Certificate Manager, Route 53을 이용하여 웹서버를 https를 적용하였고,  점수 계산 알고리즘을 구성하고 작성하였고, 프론트엔드와의 연결, 딥러닝 서버와의 연결을 하였다.

 https를 적용하는 과정에서 정말 많은 구글링을 하였고 공식 문서, 다른 분들의 기술 블로그 등등을 통해 정말 많이 도움을 받았다. 이 과정에서 AWS의 페이지 모양이 바뀌어서 어려움을 겪었던 부분도 있어 다른 분들에게 도움이 되었으면 하는 마음으로 내 블로그에도 관련 게시글을 작성하기도 하였다. 

 점수 계산 알고리즘은 딥러닝 서버에서 받아오는 형태, 즉, 바운딩 박스 정보를 이용하여 글자간 기울기, 크기, 자음, 모음의 비율 등을 비교하여 감점 방식으로 구성하고 작성하였다.

 그리고 대망의 연결 부분!

 나는 이렇게 연결 부분에서 시간이 오래 걸릴 줄 몰랐다.. 프론트엔드에서 사진을 넘기면 AWS S3에 저장이 되고 프론트엔드에서 조회할 수 있어야했는데 하나가 되면 하나가 안되고 이런 상황들이 꽤 있어서 어려움이 있었다. 그리고 딥러닝 서버 연결 부분도 우리 셋 모두 도커 사용 경험이 없어 딥러닝 서빙에 어려움이 있었는데 멘토님 도움으로 해결할 수 있었다.

 이렇게 정~말 바쁘게 프로젝트 진행하면서 중간 발표, 포스터 세션, 최종 발표, 1차/2차/최종 보고서까지 수행하며 정말 말그대로 눈코뜰새 없이 한 학기를 보냈다.

 

성과

1. 2022 한국 정보처리학회 ASK 춘계학술발표대회에 참여

2. 학교 졸업프로젝트 포스터세션 장려상 수상

 

배운점

1. 멘토링의 중요성

 이전까지는 직접적으로 기술 도움을 주실 수 있는 멘토님을 만나뵌 적이 없었다. 이번 프로젝트를 하면서 처음으로 담당 멘토님이 생기고 여러 가지 말씀을 듣고, 질문을 하고, 조언을 받으면서 멘토링의 중요성을 참 많이 깨달았다. 담당 멘토님의 분야도 우리 프로젝트와 관련이 있었고 굉장히 꼼꼼하고 친절하게 알려주시고 조언해주셔서 프로젝트의 방향도 잡을 수 있었고 기술적으로 어려움이 생겼을 때 극복하는 것에도 많은 도움을 주셨다. 프로젝트 외에도 우리들의 진로에 대해서도 도움이 될만한 말씀들을 많이 해주셔서 세부적인 진로에 대해서도 많이 생각할 수 있었다.

 정말 멘토님의 도움이 감동적으로 다가왔기에 나도 미래에 학생들을 도와줄 수 있는 멘토가 되고 싶다고 생각하였다. 미래에 내가 어떤 위치에 있을지는 아직 모르겠지만 도움이 절실한 학생들을 도와줄 수 있다는 것 자체가 굉장히 뿌듯할 것 같고 과거의 내 모습이 학생들에게 투영되며 이만큼 성장한 나 자신에 대한 자부심도 커지지 않을까 싶다.

 

2. 꼼꼼하게 코드 작성하기, 로그 분석의 중요성

 이 프로젝트를 하며 꼼꼼하게 코드를 작성하는 것과 로그 분석의 중요성을 느꼈다. 왜냐하면 오류 때문이다. 모든 오류가 그렇지는 않지만 한번 오류가 발생하면 그 오류가 해결될 때까지 아무것도 못하는 경우가 있다. 그런데 만약, 그 오류가 황당하고 사소한 이유 때문에 발생한 것이었다면?! 정말 허탈하고 난감할 것이다. 이런 것을 내가 AWS EC2에 직접 올린 파일과 내 github에 있는 코드를 설정 파일로 연결할 때 겪었었다. 그 당시에는 로그의 중요성을 잘 몰랐고 에러 관련 로그가 엄청 많이 떠서 열심히 삽질을 했다. 아무리 바꿔봐도 안되어서 로그를 꼼꼼하게 다시 읽어봤더니 띄어쓰기와 형식 때문에 오류가 발생했던 것이었다. 그때 기분은 참.. 내가 바보가 된 기분이었다.. 그 이후로는 정말 꼼꼼하게 로그를 읽어보았다. 

 

힘들었던 점

1. 백엔드, 특히, 서버를 해본 적이 없기에 기초부터 공부를 했어야했다. 생각보다 양이 엄청 방대했고 시간과 노력이 엄청나게 들어갔다.

2. 내가 백엔드 전담을 한 것이 처음이다보니 나 자신에 대한 확신이 부족해서 계속 '이게 맞나?'하는 의심이 들었다. 물론 처음이다보니 이런 생각을 아예 안할 수는 없겠지만 지금와서 생각해보면 조금은 덜해도 되지 않았을까하는 생각이 든다.

3. 2022년 1학기에 정말 개발에 내 인생을 갈아넣듯이 하다보니 정신적으로 조금은 힘들었던 것 같다. 주변에 졸업프로젝트 하는 동기들도 다들 힘들어보였으니, 나만 그런 것은 아니었겠지만 말이다. 개발자로서 계속 일을 하고, 성장해나가려면 정신적으로도, 육체적으로도 건강 관리 잘하고 체력 관리도 잘해야겠다는 생각이 들었다. 이 생각으로 그래도 꾸준히 클라이밍 하러 갔었는데 이것이라도 안했으면 더 힘들었을 거라는 생각이 든다.

 

느낀점

 일단 한마디로 정리하자면.. '힘들었다'. 프로젝트 기간이 너무 길어서 힘들었고, 공부해야할 것이 많아서 힘들었고, 처음 해보는 것이 많다보니 시행착오도 많아서 힘들었다. 그래도 정말 배운 것은 많다. 멘토님께서 처음에 우리 수준 체크하시려고 여러 기술 질문을 하셨었는데 사실 처음에는 '모르겠다'고 답한 것이 대부분이었다. 하지만 지금은 대답할 수 있는 것들이 많이 늘었다. AWS EC2, S3, RDS, Certificate Manager, Route 53, Load Balancer 등 AWS의 기능에 대해 많이 배웠고 사용했고, Spring boot에 대해서도 많이 배웠고 사용했다.

 힘들었지만 만족할만한 성과가 나서 기분이 참 좋다. 개발자로서, 사람으로서 많이 발전한 것 같은 느낌이 들고, 어떤 마음가짐을 갖고 일하고, 생활해야할지에 대해서도 생각하게 되었다.

 그리고 그동안에 이 프로젝트를 응원해준 친구들이 꽤 많았다. 솔직히, 이전까지는 말로하는 응원이 얼마나 힘이 되는지 잘 못 느꼈었는데 이번 프로젝트를 진행하면서 그 말들이 많이 의지가 되고 힘이 나게 한다는 것을 느꼈다. 프로젝트를 마치고 응원해준 친구들에게 감사 인사를 보냈는데 '정말 이 사람들이 나의 소중한 인연들이구나'하는 것을 다시 한 번 깨달았다. 나도 앞으로도 친구들을 응원하고 베풀고 감사하며 살아가야겠다고 다짐하였다.

 

앞으로의 계획

1. 일단은 이 프로젝트를 보완해보려고 한다. 일단 기능 구현은 되었지만 부족한 부분도 많기 때문에 보완이 필요하다. 그리고 최대한 노력해서 AppStore에 배포해보려고 한다. 

2. 학교 지원으로 여름방학동안 프랑스 파리에 있는 EPITA로 단기 해외파견을 나간다. 새로운 문화를 경험하고, 우리나라와 다른 분위기를 느끼며, 공부도 하고, 생각 정리도 하고 앞으로의 삶에 대한 생각도 정립해오고 싶다.

3. 이 프로젝트가 지금까지 내가 해왔던 프로젝트 중 가장 실무에 가까운 프로젝트인 것 같다. 하지만 완전 실무는 아니기에 다음 학기에 인턴을 할 생각이다. 나는 졸업하기 전에 꼭 실무를 경험하고 싶기 때문이다.