본문 바로가기
생각 정리/SSAFY

[SSAFY] 특화 프로젝트 회고

by mintropy 2022. 5. 22.

0. 프로젝트 소개 및 정리

인공지능을 활용한 일기 애플리케이션, 비화

- 인공지능을 활용하여 업로드한 이미지 기반 꽃 추천

- 일기를 작성하며 꽃을 모아가는 게이미피케이션

- 노인을 위한 기능 (폰트 크기, 색상 등)

사용 기술 스택

- 프론트 : Kotlin

- 백 : Django + DRF, Oauth

- 인공지능 : TensorFlow, Numpy, Pandas

- 기타 : Gitlab CI/CD + Docker, Nginx

기여도

- 백엔드 80%

  - 대부분은 백엔드 코드를 작성

  - 다른 팀원이 작성한 코드 리뷰 및 리팩토링

- 인공지능 20 %

  - 인공지능에 사용되는 코드 일부 기여

  - 백엔드를 통하여 인공지능 제공과 관련한 부분에 대하여 기여

- 인프라 100%

  - 처음으로 CI/CD 전반적인 과정을 모두 시행한 프로젝트

 

1. 프로젝트를 시작하며

프로젝트 주제 선정

처음 인공지능(영상)이라는 주제에 대해 고민하며 영상을 잘 사용하기 위해 모바일을 선택했다. 처음에는 나보다는 안드로이드를 새로 공부하여 프로젝트를 만들어갈 프런트 개발자가 걱정되었지만, 막상 결과물만 생각하는 것이 아니라 그 과정에서 소통이 잘 이루어지지 않아 모두가 힘들어졌다. 소통과 관련해서는 뒷부분에서 더 다루겠다. 소통과 관련하여, 주제 변경도 몇 차례 이야기가 되었고, 이 때문에 프로젝트를 진행이 더뎠던 여러 문제 중 한 가지로 작동했다.

우선적으로 이미지에서 정보를 추출, 해당 정보를 꽃과 매칭 하는 방식을 선택한 것 까지는 다른 의견이 없어 진행했지만, 다른 전반적인 DB, API 설계 등과 관련하여 많이 변경되는 의견이 여러 차례 흘러왔다. 팀장으로서 팀원들과 의견을 잘 만들어내지 못한 게 아닌가 라는 고민도 했다.

 

WebRTC를 기반으로 다양한 주제에 관한 아이디어를 나누었다.

스터디 그룹과 관련한 아이디어도 나왔지만, 비슷한 주제의 프로젝트와 사용 서비스와의 차별성을 만들기 어려울 것이라 생각했다. 약간 생각을 틀어서 학교 또는 교육기관 입장에서 각 수업을 생성 및 관리하는 과정에 적용할 수 있을 것이라 떠올랐다. 기존 온라인 수업을 듣던 과정을 생각해보면, 수업을 기존 화상회의 프로그램(줌, 구글 미팅 등)을 활용할 수 있지만, 교육과 이어지는 작업들이 편하지는 않았다. 수업, 공지, 숙제를 위해 서로 다른 서비스를 활용하는 경우도 많았다.

그래서 온라인 스터디와 유사한 아이디어이지만, 그 대상을 학교 및 교육기관으로 대상으로 생각해보았다

프로젝트 주제 구체화

이 과정에서 ERD 구축에서 많은 고민을 했다

최대한 FK 참조를 줄이는 방식으로 구현할 수 있지만, 그렇게 되면 실제 성능 및 데이터 저장과 활용이 번거로워질 수 있다. 그렇다고 무제한 늘리게 되면 순환 참조가 생겨서 실제 코드로 다루기 번거로워질 수 있다.

이를 해결하기 위해 로그인을 위한 아이디/비밀번호가 저장되는 유저 테이블을 기준으로 다른 테이블을 이어나가는 방식을 선택했는데, 더 좋은 방식을 선택할 수 있지 않았을까 라는 고민도 한다.

프로젝트 기술 스택 선정

백엔드 개발자 3명이 이전 프로젝트에서 이어져와서 Django, DRF 기술 스택을 그대로 선정했다.

Oauth는 사용경험이 있었지만, 도입하는데 시간이 많이 소모되었고, 소통의 부재로 같은 작업을 여러 번 하는 결과를 가져왔다. 그리고 Oauth를 어떻게 API 서버에서 활용하면 좋을지 배우는 계기도 되었다.

인공지능을 활용하기 위해 TensorFlow, Numpy, Pandas 등을 활용했다.

 

2. 프로젝트 진행

Django + DRF

이전 프로젝트에서 열심히 갈고닦은 DRF ViewSet기반으로 빠르게 작성했다. 확실히 CBV는 익숙해지면 더욱 빠른 개발 속도를 보여줄 수 있는 기술인 것 같다.

Oauth

Oauth를 사용해본 적이 있지만, API 서버에서 어떻게 적용하면 좋을지는 이번 기회에 많이 고민하게 되었다.

처음 프런트로 사용할 안드로이드 개발은 처음부터 학습해야 해서 많이 지연되었고, 소통도 원활하지 않았다. 그래서 API 서버를 통하여 Oauth를 사용하는 것을 고민했고, 이것에 많은 시간이 소모되었다. 하지만 후에 알게 된 것은 보통 Oauth token은 프론트에서 발급받더라도, 실제 사용은 JWT 등으로 진행한다는 것이다.

인공지능

고도화된 인공지능 모델을 사용하지는 않았지만, 인공지능을 훈련, 실제 API 서버를 통하여 제공하는 과정은 쉽지는 않았다. 그리고 인공지능 서비스를 제공하는 더 좋은 방법이 무엇일까 고민하기도 했다.

Docker-Compose

CI/CD 전 과정을 혼자서 진행하는 첫 프로젝트였다. 그 과정이 만만치 않았지만, 이전 프로젝트 다름 팀원이 작성한 Dockerfile, 공식문서, 블로그 등을 확인하며 작성 해고, 배포에 성공했다. HTTPS를 적용하지 못한 것은 아쉽지만, 적어도 자동적으로 동작하는 CI/CD 구축을 통한 서비스 운영을 했다.

협업과 소통

소통이 매우 부족했다. 많은 고민을 했고, 다음과 같은 결론이 났다.

첫 번째, 문서화 부족. 회의록이나 프로젝트 기록 등을 했지만, 구체적인 문서화가 부족했다. 따라서 회의를 거쳐 이미 결정 난 부분에 대하여 뒤집히는 의견이 자주 나오기도 했다. 회의록 양식이 있었지만, 세부적인 회의의 목적, 결론 등에 대한 기록 부족과 결론이 난 것에 대한 새로운 문서화가 부족했다. 이를테면 주제가 변경이 되면 프로젝트 요구사항, ERD, UI목업 등 변경이 생길 수 있는데 바로 반영되지 못했다.

두 번째, 팀장으로서 역량. 아직도 많이 고민하고 있지만, 팀장, 그리고 PM과 관련한 역량이 많이 부족했던 게 아닐까 생각한다. 각 상황별 업무 분담과 작업 상황 보고 등이 잘 이루어지지 않았다. 그리고 이건 세 번째 이어지는 팀원 역량과도 관련 있을 것 같다.

세 번째, 팀원 역량 파악과 협업. 짧은 기간 모든 것을 파악하기는 힘들지만, 프로젝트를 시작하기 전 팀원의 역량을 어느 정도는 파악했었어야 했다. Git에 대한 이해가 부족한 팀원들도 많았고, 안드로이드를 처음부터 공부하며 프로젝트 진행에 크게 차질이 생기기도 했다.

 

3. 프로젝트를 마무리하며

잘한 점

- Django, DRF를 활용한 API 서버 구성

- Black 등을 활용한 코드 포매팅, 린팅

- Oauth 적용

- Docker-Compose를 활용한 CI/CD 구성

아쉬운 점

- ERD, API 설계 및 구현 과정 문서화의 부족

- CI/CD를 구현하며 Docker의 원리를 익히기보다 실제 구현물에 더 집중

- 팀원과 소통을 통한 협업

개선할 점

- Docker를 활용한 CI/CD에서의 그 원리 공부

- 자동 포맷팅, 린팅

- 소통 과정 문서화 규칙을 정하고, 문서에 따른 협업 진행

댓글