TABA 4기 프로젝트 후기

차현민·2024년 1월 30일
0

TABA 4th

목록 보기
2/2
post-thumbnail

안녕하세요 !

이번 글은 개발 주제가 아닌 학기 중에 진행했던 'TABA 4기' 프로젝트를 무사히 수료하여 이에 대한 이야기를 할까 합니다.

현재 단국대학교 4학년 진학을 앞두고 있었던 시기에서 이번에 진행했던 프로젝트는 여러모로 저에게 큰 교훈과 뜻깊은 시간이었습니다.

팀 프로젝트였기에 모르는 사람들과 함께 어울려 진행했던 점과 짧은 기간 내에 프로젝트를 완성시키는 것이 매우 어려웠기 때문이었습니다.

항상 공부하고 시험을 보는 것 대신 학기 중에 개발을 통해 발표를 하는 시간은 저에게 매우 새로운 경험이었습니다.

이 프로젝트를 시작하게 된 계기는 학교 동기와 수강신청을 같이 하고 있던 도중 TABA 프로젝트 포스터를 보게 되었고, 그 안에 내용은 프로그래밍 관련 이론 교육 및 실무 협업 프로젝트였고 어느정도 지원금도 있으며 AI를 활용한 아이디어로 꼭 진행을 했어야 했기 때문에 어려울 거라고 생각했습니다.😂

다만, AI 관련한 지식도 조금은 배우고 싶은 마음이 있었고 다른 사람들의 실력도 궁금할 뿐더러 학기 중에 프로젝트를 할 수 있는 기회는 몇 안될 거라고 생각해서 지원했고 합격을 했습니다.

프로젝트 초반

TABA 프로젝트를 지원하고 나서 약 1달 반 정도는 이론 교육 및 실습을 진행하였습니다.
강의 목록은

  • 운영체제 이론 및 실습
  • AI 이론 및 실습
  • 데이터베이스 이론 및 실습
  • Tmax Tibero 이론 및 실습

로 구성을 이루었습니다.

각각의 과목들을 2주안에 공부하여 시험을 치뤘기 때문에 공부량이 엄청 많았습니다🥹
하지만, 조금이라도 얻어갈 수 있는 부분은 챙기고 싶어서 끝까지 포기하지 않고 열심히 한 결과 제가 마음에 들 정도의 성적보다 더 높게 나와서 뿌듯했습니다 !

그 중, Tmax Tibero는 Tmax라는 소프트웨어 회사에서 직접 개발한 DBMS로 Java Oracle 과의 연동성도 좋아 많은 기업에서 사용 중이라고 합니다.
저도 Tibero DBMS를 설치하고 실습을 진행하는 과정에서 조금 많이 불편한 느낌은 받았지만, 정말 많은 기능을 제공하고 있고 좋은 지식들을 얻어가는 것 같아서 좋았습니다.

프로젝트 후반

이론 및 실습을 끝내고 난 이후에는 실무 협업 프로젝트를 진행하였습니다.

프로젝트의 주제는 총 3가지였습니다.

  • ChatGpt를 이용한 프로젝트
  • 웹 크롤링을 이용한 프로젝트
  • 이미지 분석을 이용한 프로젝트

저희 팀은 이 중 이미지 분석을 이용한 프로젝트를 선택하였습니다.

제가 속해있던 팀은 총 6명으로 구성되어 있었으며 AI를 활용한 프로젝트 아이디어를 구상하기 위해서 팀에서 얘기하는 내용을 Notion으로 정리하였습니다.

이외에도 훨씬 더 많은 아이디어들이 나왔으며, 그 중에서 멘토님들과 상의한 결과
AI를 활용한 영정사진 제공 플랫폼 이 선택되었습니다.

저희는 이 플랫폼 이름을 별하 라고 지었으며, 그 의미는
" 별처럼 높이 빛나는 사람이 되어라 "
입니다.

아이디어를 채택한 후, 개발을 진행하였는데 중간에 비즈니스 모델에 대한 한계점과 이미지 생성을 할 때 사용자 맞춤형 서비스를 제공하는 부분에 있어 확신이 없었습니다. 이러한 이유로 인해 저희는 다른 아이디어로 바꿔서 진행을 해야겠다고 결론이 나왔습니다.

다른 아이디어로 교체하는 것은 좋으나 저희는 이미 개발을 시작한 단계였고 최대한 빠르게 전환하여 어느정도 완성형 프로젝트로 마무리하는 것이 저희의 목표였기 때문에 이전 아이디어를 제외한 다른 아이디어 중 저희는 하나를 선택했습니다.

그건 바로 사용자 분위기를 이용한 향수 추천 플랫폼 이었습니다.

저희끼리 이야기 중 나온 얘기를 통해 아이디어를 낼 수 있었습니다.

'향수 추천을 해줄 때 노트나 브랜드 별로는 제공해주잖아.
근데, 내 사진으로 향수를 추천해주는 건 어때?'

'그러면 사진에서 AI로 분위기를 추출해서 제공해주자'

이렇게되어 저희는 최대한 빠르게 완성하게 위해서 각자 역할을 맡아 진행하게 되었습니다.

AI 향수 추천 플랫폼, Purple

Purple의 의미

저희의 아이디어를 통한 플랫폼 이름은 Purple이라고 지었습니다.

Purple은 발음으로 '퍼플' 이며 뜻은 보라색입니다.

저희만의 색깔은 보라색이 가장 어울렸었고, 또한 사용자 맞춤형 향수를 제공해주는 플랫폼 Perfume Playlist 를 줄여서 사용했습니다.

개발을 시작하기 전에 사용자 맞춤형 서비스로 향수를 추천해주는 플랫폼이 왜 필요한지에 대해서 먼저 조사를 진행하였습니다.

위에 사진처럼 노션에 정리를 하였고 나중에 발표자료로도 사용을 하였습니다.

코드 개발

저희는 이미 별하 라는 프로젝트를 진행하다가 중간에 멈췄기 때문에 공통적으로 사용할 수 있는 기능은 가져오고 필요한 부분만 더 추가하는 식으로 개발했습니다.

하지만, 개발에 있어 모든 부분이 순탄치는 않았고 그 중 가장 어려웠던 2가지는
스프링 백엔드 서버와 Django서버 사이의 데이터 수신/송신AI모델로부터 받은 분위기로 사용자에게 향수 추천하는 알고리즘 구현 이었습니다.

스프링 백엔드 서버와 Django서버 사이의 통신

이 문제는 지금 제 블로그에도 게시되어 있는
[스프링] Spring Boot에서 Flask로 데이터 전송하기
글을 문제 해결한 후 작성하였으며 글에서는 Flask로 되어있지만 테스트 후 Django 서버로 교체하여 사용하였습니다.

이 부분에서 알 수 있었던 건, restTemplate의 사용법과 Docker에 올린 컨테이너들끼리 통신을 하기 위해서는 꼭 Docker Network로 연결하여 사용해야 한다는 점이었습니다.

AI 모덜로부터 받은 분위기로 향수 추천 알고리즘 구현

이 알고리즘은 제가 이때까지 코딩해오면서 제일 길게 작성한 알고리즘이 아닐까 싶습니다...

저희 프로젝트에서 사용한 알고리즘을 소개하기 전에 사용자가 향수를 추천받는 방법부터 설명하자면

AI로 추천받기(버튼) -> 사용자 이미지 업로드 -> 데이터 가공 -> 향수 추천

이 과정 중 데이터를 가공할 때 사용자에게 어떻게 향수를 추천을 해야하는가에 대해서 여러가지 의견이 나왔습니다.

그 중, 저희가 선택한 방법은 미리 사진별로 분위기를 분리하여 AI 모델에 넣고 학습을 시킨 후에 사용자가 이미지를 넣으면 분위기를 추출하여 향수를 조회하는 방법이었습니다.

다만, 분위기를 받았다고 해도 어떻게 사용자에게 추천을 해줄 건가? 라는 문제는 해결되지 않았습니다.

그래서 저희는 향수를 구성하는 노트를 기반으로 데이터를 가공하였습니다.

노트란 향수를 제작할 때 향과 분위기를 결정하는 요소로써 노트의 수가 적은 것부터 많은 것까지 다양하게 존재합니다.

저희가 만든 알고리즘은 이 노트를 사용하는데, 그 순서는
1. 퍼센트 높은 세개의 카테고리를 Django에서 response로 전달

(category_percent = ‘SPORTY:70,asdf:50,wefdf:40’)
  1. 겹치지 않는 모든 노트를 해쉬맵으로 설정해서 key, value=0으로 설정
  2. 카테고리 안에 있는 노트에 해당하는 key에 percent 값을 더해줌
  3. value 값을 기준으로 내림차순으로 정렬하여 상위 3개의 노트를 가져옴
  4. 모든 향수에서 3개의 노트가 포함되어있는 향수를 리스트로 가져옴
  5. 향수 안에 notes를 parsing하여 3개의 노트랑 비교했을 때 String list의 인덱스 합을 구하여 가장 작은 순으로 정렬
  6. 나온 리스트를 response로 프론트에 전달

이런 식으로 구성하여 최대한 사용자에게 맞춤형 향수를 제공하려고 노력했습니다.

알고리즘은 정확하게 구현이 되었지만, 실력이 많이 좋지 않아 코드가 길었고 시간복잡도도 생각하지 않아서 조금 아쉬웠지만 그래도 사용이 가능했다는 점만으로도 뿌듯했습니다.

알고리즘 코드가 궁금하신분은 아래 깃허브 링크로 이동해서 구경해주세요 😁

사용자 맞춤형 향수 추천 알고리즘
p.s. 알고리즘 메소드 이름은 uploadImage 입니다 !

앱 제작

저희는 사용자 사진을 통한 아이디어였기 때문에 웹사이트 제작이 아닌 앱으로 출시를 해야한다고 생각을 했습니다. 따라서, Flutter의 Dart 언어를 사용하여 앱으로 개발을 했습니다.

제가 Flutter를 조금 공부하여 다른 팀원과 함께 앱을 제작하였고, 저희는 Purple이라는 이름으로 앱을 완성했습니다.

비록, 여러가지 기능을 다 추가하지는 못하고 추천하는 기능만 제대로 만들었기 때문에 아쉽기도 했지만 그래도 앱을 제작하여 마무리했다는 것 하나만으로도 행복함을 느낄 수 있었습니다.

발표회

TABA 4기 발표회는 모든 팀이 한 자리에 모여 정해진 시간안에 팀에서 진행한 프로젝트를 발표하는 것이었습니다.

발표는 팀당 15분이었으며 저희는 발표 PPT를 열심히 준비하여 후회 없이 끝까지 잘 마무리하였습니다.

비록, 수상은 하지 못하고 4등이라는 아쉬운 성적을 받긴 했지만 다른 사람들과 같이 협업하여 프로젝트를 할 수 있다는 기회를 얻었으며 끝까지 포기하지 않고 마무리하여 앱을 제작하였다는 경험은 다른 학기에 공부와 시험으로 보낸 시간보다는 훨씬 몇 배 더 값졌습니다.

마지막까지 포기하지 않고 열심히 프로젝트에 참여해준 팀원분들과 같이 재밌고 좋은 시간을 보낸 것 같아서 매우 재밌게 마무리했던 것 같습니다.

또한, 저도 저 나름대로 열심히 한 것 같다고 생각했고 그에 대한 보답으로 성적우수자 수료증도 받게 되어서 정말 기뻤습니다. 😊

마무리

한 한기 동안 프로젝트를 진행하면서 여러가지 어려움도 있었고 뜻대도 되지 않았던 상황도 많았습니다.

항상 포기하지 말자는 생각을 하면서 끝까지 버텼고 협업을 같이 한 팀원분들도 정말 너무 착하고 잘 따라와주셔서 감사했습니다.

비록 프로젝트는 좋은 결과를 받지 못했지만, 값진 경험을 제공해준 TABA 4기 프로젝트, 교육생들 옆에서 열심히 일해주신 조교님들과 멘토님들 정말 모두 감사했습니다.

앞으로 더욱 더 열심히 하여 항상 발전하는 개발자가 되도록 하겠습니다.

이상 긴 글 읽어주셔서 감사합니다. 😊

p.s. 깃허브가 궁금하신 분들은 아래 링크를 통해 들어가주세요 !

profile
항상 열심히 하는 개발자가 되자 !

0개의 댓글