사실 글을 쓰는 재주가 그렇게 뛰어나지도 않고, 항상 쓰고도 내 마음에 들지 않기에 지나간 경험을 문서로 남기는 것보다 내 머릿속에 추억으로만 남겨둔다.
but, 가족이 된 중급 팀원들의 매서운 분위기로 인해 즐거운 마음을 지니고 중급 프로젝트를 작성하기로 했다 🤗
첫 팀 프로젝트 경험인 초급 프로젝트를 정신없게 끝낸 후에 바로 중급 프로젝트를 위한 팀이 발표되었다.
여기서부터 팀원들을 팀원 A, B, C, D로 나눠서 부르겠다.
한번 쯤 같이 팀을 해보고 싶었던 분들도 많이 보였고, 전체적인 구성이 좋다고 느껴서 이번에도 많이 배우고 즐겁게 팀 프로젝트를 할 수 있을거 같은 예감이 들었다 😊
프로젝트 주제로는 2가지가 주어졌다.
덕후감
도서 이미지 OCR 및 ISBN 매칭 서비스를 통한 책 커뮤니티 플랫폼 📚
모뉴
MongoDB 및 PostgreSQL 백업 및 복구 시스템를 통한 뉴스 통합 관리 플랫폼 📰
덕후감은 좀 더 새로운 기술에 비중을 둔 느낌이었고, 모뉴는 중급 전까지 배운 내용을 더 상기시키며 복습하는 느낌을 받았기에 모뉴에 더 끌렸었다.

역시 인생은 재밌다.
인생이란 원래 자기 생각대로 되지 않는 법이라는 중성마녀님들의 말씀이 떠올랐다.
내가 원하는 프로젝트가 되지 않았지만, 덕후감이 하기 싫다는 것은 또 아니였다.
그렇기에 크게 낙심할 것 없이 팀원들과 앞으로 프로젝트를 위해 필요한 Ground Rule과 R&R 수립, 프로젝트를 위해 사용할 Tool 선정, 요구사항 분석을 진행하기로 했다.
역시 초급을 끝낸지 얼마 안 되었기에 다들 프로젝트에 대한 감이 살아있었다.
금방 Ground Rule과 R&R을 정하였다.
나는 Github 형상관리자였다. 하지만, 천재인 팀원 D가 Github 관련된 설정을 순식간에 많이 잡아주셨다.
중급을 하는 당시에는 몰랐지만 고급 프로젝트를 하고 있는 지금 해당 설정을 내가 일일이 찾아보고 설정하며 다시금 그가 왜 천재인지 알게 되었다.
(나도 이렇게 될 수 있을까?)
우리가 선정한 덕후감의 주요 기능으로는 아래와 같이 정리할 수 있다.
기능이 가진 볼륨을 고려하며 api 단위로 5명 분을 나누었다.
거기서 무엇을 할지 보던 중에서 기왕 할거면 새로운 거 좀 해보고 싶다는 생각이 있었기에 도서 관리에서 OCR 처리를 통한 ISBN 인식을 해보고 싶었다.
다른 팀원들이 배려해주셔서 해당 기능이 포함된 파트를 맡게 되었다.
그 후에 다 같이 ERD Cloud를 통해 본인이 맡은 기능에 대한 ERD Cloud를 작성하였다.
이렇게 요구사항을 분석하고 ERD를 작성하는 중에 새삼 느낀건데, 팀원 B는 역시 굉장히 노련했다.
뭔가 내가 생각하지 못한 부분을 통찰력있게 짚어내는게 경험도 경험이며 생각이 깊으신 분이라고 느꼈다.
(나도 이렇게 될 수 있을까?)
해당 프로젝트 외적인 이야기를 먼저 하고 시작하려고 한다.
코로나 이후로는 사람들이 많이 내향적으로 변했다고 생각한다.
상대방 쪽에서 나에게 다가와 친해지는 경우가 많이 드물다.
그래서 나는 내가 먼저 다가가서 어떤 사람인지 알아가고 친해지는 걸 선호한다.
딱딱하고 무거운 분위기 속에서 프로젝트 얘기만 진행해도 프로젝트는 완성할 수는 있다.
하지만, 그런 분위기에 진행하면 완성 후에 뭔가 나한테 크게 남지도 않고 부담감으로 인해 실수도 많이 나올 수 있으며 서로 눈쌀 찌푸러지는 상황에서 최악의 상황으로 갈 수도 있다고 생각한다.
( 사실 실수는 나만 할 거 같음 )
그렇기에 내가 먼저 이야기를 꺼내고 팀원들과 친해져서 좋은 분위기 속에서 프로젝트를 진행하고자 하는 마음이 컸다.
마침 중급 프로젝트를 시작하기 전에 한 2주일 정도 강사님께 이론을 배우고 개인 실습하는 시간을 가지기에 서로의 개인 실습이 어느 정도 진행되었고, 어떻게 하고 있는지, 뭐가 문제가 되었었는지를 이야기하는 시간을 매일마다 가지면 어떻겠냐고 제안하였다.
샤라웃 투 팀장즈 감사하게도 모두 수락해 주셨다. 🙇
그 과정에서 실습 이야기도 하고 서로에 대해 알아가며 너무 무겁지 않으며, 서로에게 민폐는 끼치고 싶지 않기에 맡은 바를 열심히 하는 좋은 면학 분위기가 형성되어졌다고 느꼈다.
당연히 이런 분위기는 내가 먼저 말을 꺼냈다고 완성되는게 아니다.
샤라웃 투 팀장으로써 진행을 잘해준 멋있는 팀원 A
다시 본론으로 돌아와 프로젝트를 진행하며 우리는 매일 우리가 열심히 개발하고 있다는 것을 남기기위해 출석부 사진을 찍었다. ( 출석부 빌런인 내가 제안함 )
감동스럽게 모두 너무 즐기면서 찍어주셔서 찍자고 제안한게 뿌듯했다.
평일은 정규과정에 포함되기에 모두 참석이였고, 주말에는 개인 스케줄이 존재하기에 자율 참석이였다.
but, 팀원 C는 주말에 알바와 함께 부트캠프 과정을 병행하고 있었는데 프로젝트를 위해 알바하고 있는 곳에서도 개발도 진행하며 출석부도 함께 해주셨다.
위에서 첫인상으로 차갑게 느꼈다고 하였는데, 팀원 C는 따뜻하고 열정적이며 좋은 사람이였다.
역시 사람은 대화하고 친해지기 전까지는 어떤 사람인지 모르는 것이다.
( 팀원 C님 제 마음 아시죠? )

이번 프로젝트를 진행하며 도서 관리를 팀원 D와 함께 진행하였다.
그 안에서도 작업을 좀 나누긴 했지만, 공통으로 쓰기 위한 Entity나 Dto를 같이 이야기하고 고려하며 작업하였다.

그 과정에서 이론으로 들어만 봤던 pair 프로그래밍 비슷한 경험도 해보고 재밌었다.
덕분에 클릭하는 방법을 천재인 팀원 D에게 배웠다.
내가 맡은 기능으로는 크게 도서 관리 기능과 대시 보드의 파워 유저 관리가 있었다.
대표적으로 각각의 기능에서 하나씩 트러블 슈팅에 대해 정리해보겠다.
1 . OCR ( Tesseract )
이번 프로젝트 덕후감 과정에서 OCR을 통해 이미지 ISBN을 추출하는 기능 구현을 요구하였다.
해당 OCR을 처리하기 위해 공부를 하며 여러 가지 OCR 엔진을 알게 되었다.
대표적으로 많이 쓰는 것은 Naver Clova, Google Vision Cloud, Tesseract가 존재하였는데,
나는 aws외에도 과금 문제로 골머리를 썩히고 싶지 않았기에 Open source인 Tesseract를 사용하기로 하였다.
해당 기능을 사용하기 위해 Tesseract 설정을 잡고 ISBN 값이 들어있는 사진을 넣어 Test를 진행하였다.
OMG.. 10개정도 이미지를 넣으면 3개정도밖에 ISBN 값을 읽어오지 못했다.. 😫 ( 처참 )
이는 내가 Tesseract에 이미지 처리 과정을 제대로 잡아주지 않아서 발생한 문제였고, 이를 해결하기 위해 이미지 전처리 과정으로 크기 최적화,그레이스케일, 노이즈 제거등 과 같은 과정을 거치고 추가로 다중 페이지 모드를 통해 다양한 방법으로 ISBN을 분석하였다.
그 결과 부록과 같이 여러 개 ISBN값이 있는 이미지도 처리하며 10개 중 8~9개는 처리하는 성능으로 향상시키며 문제를 해결하였다.
2 . 어색한 스프링 배치와 의존하는 구조
경험이 없는 Spring Batch를 사용하여 파워 유저를 구현하여야 했다.
생각보다 구조가 어려웠고, 파워 유저는 기간 별 인기 리뷰 점수를 가져와서 처리하는 로직을 지니고 있었기에 해당 과정에서 많이 헤맸고, 어려움을 느꼈다.
혼자서는 답이 없다고 느꼈기에, 인기 리뷰를 담당하는 팀원들과 많은 소통을 하였고 그 과정에서 완벽하다고 할 수는 없지만 Spring Batch를 사용하여 인기리뷰를 의존하며 기간 별 점수를 가져오는 파워 유저를 구현할 수 있었다.
위에서 정리한 파워 유저를 구현하는 과정에서 어려움을 느껴 멘탈적으로 힘들어 하고 있었다.
그래서 한 숨 돌릴 겸 쉬는 시간에 구름과자를 먹고 있었는데, 모르는 번호로 전화가 왔다.
자세한 이야기는 할 수 없는데,
피싱이였다... 💀 💀 💀
이야기를 들어만 봤지 내가 이런걸 당할 줄은 상상도 못했다.
지금 생각해보면 진짜 말 같지도 않은데, 정신적으로 많이 힘들었나보다...
피싱인줄 모르고 팀원들한테 이런 일이 있었는데, 어떻게 할까요? 라고 물어보았다.
팀원들은 싸함을 감지하고 혹시 이런 사이트였냐 이런 이야기였냐라며 물었고, 팀원 C가 내가 보았던 사이트랑 관련 기사같은 링크를 보내주었는데 완전 내 이야기였다.
이미 금가고 있던 멘탈이 완전 박살났었다. 💫
그래서 팀원들이 작업 잠시 쉬고, 해당 문제 해결하라고 배려해주었다..
그 덕에 해당 문제에 대해 조취를 취하고 지금까지 별 문제없이 지내고 있다.
정말.. 많이 힘들었는데, 배려해주고 챙겨준 팀장즈 감사합니다 🧡
슬슬 마무리 단계에서는 코드 마무리할 인원과 발표 PPT 작성할 인원 그리고 발표할 인원으로 나뉘어 각자 할 일을 진행하였다.
나는 후반부 발표를 담당하게 되었고, 대본 작성을 위해 PPT가 어떻게 작성되었는지 확인하였다.
괜찮은 PPT라고 생각하고 있었는데, 회의 시간에 팀원 B의 표정이 점점 굳어갔다.
팀원 B가 보기에 해당 PPT는 너무 공대st였나보다.. ( 나는 괜찮던데..? 상처 받지마요 팀원 A,D )
그래서 팀원 B 본인이 PPT를 좀 손봐도 괜찮겠냐고 제안해주셔서 우리는 알겠다고 했다.
역시 팀원 B는 노련했다.
큰 틀은 해치지 않으며 포인트 포인트를 수정해서 훨씬 퀄리티 좋은 PPT로 만들어주셨다.
좋은 PPT를 토대로 전반부는 팀원C가 후반 부는 내가 발표를 진행했고, 선방했다고 생각한다. 🙌
써본 적이 없는 기술을 사용하고 부족했던 기본기도 팀원들에게 많이 배웠다고 생각한다. ( ex - OCR, Spring Batch )
지금 글을 쓰면서 최대한 쥐어짜내고 있는데도, 뭔가 놓치는게 많은 것 같다..
문서화를 좋아하지는 않지만, 개발자로써 성장하고 놓친 부분을 확인하기 위해서는 좀 더 기록하고 남기는 문서화를 습관화하는게 좋은 것 같다.
그런 의미에서 해당 리뷰를 쓰게 밀어준 팀원들께 또 한번 감사.. 🤟
정말 좋은 분위기 속에서 좋은 사람들과 좋은 프로젝트를 했다.
아마 프로젝트가 끝나고도 잊지 못할 추억일 것이다.
개발자로써 성장한 것도 의미가 있지만, 사람 대 사람으로 좋은 사람들을 알게 된 게 나에게는 더 크게 다가오는 중급 프로젝트였던 것 같다.

팀원 A가 누군지는 모르겠지만 존잘 + 성격 짱좋음 인 것 같네요 ㅎ.ㅎ