/MALICON

AI 온라인 콘서트 플랫폼

Primary LanguageTypeScript

ReadMe

Ⅰ. 서비스 소개

1. 서비스 설명

개요

  • 한줄 소개 : 아바타로 소통하는 아티스트와 나, 아바타로 표현하는 내 감정

타겟

  • 시청자들(관객들)의 생동감있는 피드백을 받으며 공연하고싶은 뮤지션
  • 언제 어디서나 콘서트 장의 열기를 느끼고 싶은 사람들

2. 기획 배경

배경

코로나 이후 언제 어디서든지 즐길 수 있는 비대면 온라인 공연이 활성화되고 있는 가운데, 실제 공연장처럼 실시간으로 아티스트와 팬이 실시간으로 교류할 수 있는 가능한 플랫폼의 필요를 느꼈습니다.

의의

관객은 자신의 표정과 행동을 개성을 드러낼 수 있는 아바타를 통해 아티스트에게 전달하고, 아티스트는 이러한 비언어적 표현을 통해 기존의 채팅보다 완전한 커뮤니케이션이 가능하도록 합니다.

3. 서비스 화면

메인 페이지

Untitled

피드 페이지


Untitled

아바타 페이지

Untitled

튜토리얼 페이지

Untitled

프로필 페이지

Untitled

방송 페이지

Untitled

Untitled


Ⅱ. 기술스택

1. WebRTC

WebRTC란?

Web Real-Time Communication의 약자로써, 웹/앱에서 카메라, 마이크 등을 별도의 어플리케이션의 도움 없이 사용하여 실시간 커뮤니케이션을 가능하게 하는 기술입니다. 기존의 영상통화, 화면공유 등을 구현할 수 있는 기술로, 비디오와 오디오 데이터를 P2P 혹은 Server-Client 방식으로 전송할 수 있습니다.

openVidu

openvidu.png

openvidu는 WebRTC 기술을 쉽게 구현할 수 있게 만든 플랫폼으로, Kurento 기반의 Media Server를 웹/앱에 쉽게 추가할 수 있도록 기술을 제공해줍니다. 사용자 간의 영상/음성/채팅 등의 데이터는 WebSocket을 통해 전송됩니다.

적용

실시간으로 아티스트의 공연을 관객들이 시청할 수 있는 1:N , 공연이 끝난 후에는 openvidu서버에 저장하여 관리하였습니다.

2. Web Socket

Web socket이란?

websocket.png

WebSocket은 하나의 TCP 접속에 Full Duplex 통신 채널을 제공하는 프로토콜로써, IETF에 의해 제정된 표준 프로토콜입니다. HTTP와 WebSocket 모두 L7에서 구현되어있으나, 약간의 차이를 보입니다. HTTP는 개별 요청에 대해 연결을 맺어야 하지만, WebSocket은 기존의 TCP 소켓과 같이 한번 맺은 연결을 유지할 수 있게 구현한 것이 특징입니다.

적용

3. 라이브러리

Tensorflow.js

TensorFlow.js는 웹 브라우저와 Node.js에서 기계 학습 모델을 교육하고 배포하기 위한 JavaScript 라이브러리입니다.

Face-api.js

Tensorflow.js 위에 구현된, 브라우저에서 얼굴 감지 및 얼굴 인식을 위한 JavaScript API입니다.

https://user-images.githubusercontent.com/31125521/46063404-00928b00-c16d-11e8-8f29-e9c50afd2bc8.jpg

Dicebear

javacript를 사용해 프로젝트를 위한 멋진 아바타를 즉시 만들 수 있는 라이브러리입니다.

Untitled

React-player

파일 경로, YouTube, Facebook, Twitch, SoundCloud, Streamable, Vimeo, Wistia, Mixcloud, DailyMotion 및 Kaltura를 포함한 다양한 URL를 재생하기 위한 React 컴포넌트입니다.

https://i.stack.imgur.com/mTbEU.png

React-Quill

quill은 rich text editor의 일종으로 마이크로소프트 등의 기업에서 후원하고 있는 텍스트 에디터입니다.

https://velog.velcdn.com/images/holim0/post/24db4789-097f-4029-ac55-144b617defde/1*5nrbmhbM0h4dhT4mzkQ1uA.png

React-Toolkit

리덕스 툴킷은 리덕스를 통한 상태관리 로직을 더욱 효율적으로 수행하기 위한 라이브러리 입니다.

Untitled


Ⅲ. 서비스 컨텐츠 소개

1. 아바타 생성 & 튜토리얼

9가지 요소로 95,256,000가지의 조합이 가능한 DiceBear 라이브러리를 이용하여 사용자가 직접 자기만의 아바타를 꾸밀 수 있도록 하였습니다.

Untitled

해당 아바타는 실시간 방송에 입장시 하단에 표시되어 스트리머와 시청자들에게 ‘나’의 존재를 알리고 내가 느끼고 있는 감정을 고스란히 전할 수 있도록 구현되었습니다.

흥미롭고 친절한 튜토리얼을 제공하여, 나의 감정을 어떻게 아바타를 통해 전달 할 수 있는지, 아바타를 통해 스트리머와 어떠한 방식으로 소통할 수 있는지 사용자가 미리 학습하고 편리하게 이용할 수 있도록 하였습니다.

Untitled

2. 실시간 공연

openVidu를 사용하여 실시간 다대다 통신이 가능하도록 구현하였고, Face-api와 모션티칭 어쩌고로 인식한 사용자의 표정과 동작이 아바타를 통해 나타나도록 이펙트를 구현하였습니다.

실시간 공연을 시청중인 사용자가 웃거나 놀라는 등의 표정을 짓거나, 손들기, 머리 위로 하트 그리기 등의 행동을 하면 해당 행동이 아바타를 통해 표현됩니다.

Untitled

스트리머는 아바타들을 통해 시청자들의 보다 더 현실적인 반응을 실시간으로 확인하고 소통할 수 있습니다. 단순히 텍스트로 전달하는 감정이 아닌, 표정과 행동으로 나타나는 직접적인 표현을 통해 스트리머와 시청자가 실제로 한 공간에 함께 있는 듯한 현장감을 느낄 수 있으며 한 층 생동감있는 공연을 즐길 수 있습니다.

표정과 행동으로 못다 전한 마음은 채팅을 통해 실시간으로 나눌 수 있습니다.

시청자의 입퇴장 역시 아바타로 실시간으로 표현됩니다.

스트리머가 방송을 시작하면 일정 시간을 주기로 썸네일이 자동으로 캡쳐되도록 하였습니다.

시청자들이 한눈에 방송을 파악하고, 원하는 방송을 찾아볼 수 있도록 해시태그를 등록할 수 있습니다.

3. 공연 다시보기

실시간 방송은 자동으로 녹화되어, 방송 종료 직후 스트리머의 ‘지난영상’으로 자동 등록됩니다.

생생한 현장감을 저장하기 위해 실시간 방송된 영상과 그 때 당시 사용자들의 아바타 상호작용 모두 그대로 재현하는데 집중했습니다.

생방송을 시청했던 참여 아바타가 모두 나타나며, 실시간으로 표현된 아바타들의 감정표현이 모두 그대로 재현되어 생방송 당시 느꼈던 감정과 분위기를 그대로 느낄 수 있도록 하였습니다.

지난 방송을 다시 시청하며 댓글을 남기거나, 영상에 좋아요를 표시할 수 있습니다.

sdasdad.png

사용자가 원하는 영상을 골라보기 편하도록 해시태그를 통한 필터링 기능을 제공합니다.

Untitled

4. 커뮤니티 페이지

피드를 통해 공연을 홍보하거나, 공연에 대한 감상을 나누는 커뮤니티 페이지입니다.

React-Quill 에디터 라이브러리를 사용하여, 동영상과 이미지를 임베드하고 여러 스타일을 적용할 수 있습니다. 피드를 수정하거나 삭제할 수 있고, 좋아요와 덧글을 남길 수 있습니다.

Untitled

Untitled

보다 편리한 UX를 위해 좋아요와 덧글은 페이지에 바로 반영되며, 무한 스크롤로 구현하여 랜더링 최적화에 신경을 기울였습니다.


Ⅳ. 프로젝트 진행

1. Git Flow

  • 팀원과의 소통을 원활히 하고 과거 내역을 추적하기 위해 Git Branch와 Commit message 각각의 컨벤션을 마련하고 실무처럼 엄격하게 지키도록 노력했습니다.
  • branch는 작업의 유형에 따라 feature, fix, test로 분류하여 생성하였습니다. (ex. feature/backend/dev/signup) 각 브랜치에서 작업을 완료한 후 develop에 merge request를 요청하였습니다. 이때 최소 한명의 검토자를 설정하여 코드의 안정성을 보장하려고 노력했습니다.
  • commit message는 BE/FE/DB/DOCS/ETC의 대분류와 Feat, Fix, Docs, Refactor, Rename 등의 유형으로 나누었습니다. (ex. [FE] Feat: 회원가입 모달 구현)

2. Jira

  • 기본 단위를 Epic으로 잡고 Task, Story, Bug의 분류로 나누었습니다. 각 분류마다 네이밍 규칙과 카테고리 분류를 컨벤션으로 정했습니다.
  • Epic은 메인, 피드, 방송, 아바타 등 페이지 단위로 나누고, 에픽링크 태그를 통해 한눈에 볼 수 있도록 구성했습니다.
  • 보다 정확한 작업 추적을 위해 각 Story Point는 3을 넘지 않도록 작업을 세분화하였습니다.
  • 규칙적인 Jira 관리를 위해 정해진 시각에 회의를 진행하였습니다. 매주 금요일까지 차주에 진행되어야 할 이슈를 백로그에 등록하고, 매주 월요일 회의를 통해 작업을 검토하고 분배하였습니다.

3. Notion

Untitled

컨벤션, 회의 기록, 문서 명세 등 협업에 필요한 다양한 사항들을 노션을 통해 공유했습니다.


Ⅴ. 배포

프로젝트 구조

그림2.png

상세

Server

서버는 AWS EC2 t2.xlarge 타입의 인스턴스를 사용했습니다.

DB는 AWS RDS의 MySQL 인스턴스를 사용했으며, OpenVidu 서버에서 사용할 Redis, 감정표현을 실시간으로 기록하기 위한 TSDB인 influxdb를 사용했습니다.

각각의 서버 이미지 사이에서 리버스 프록싱을 위해 envoy proxy를 사용했습니다. Nginx 대신 Envoy를 사용한 이유는 nginx보다 envoy의 성능이 비교적 뛰어남과 동시에 설정과 확장성, 보안 측면에서 이점을 가지기 때문입니다.

Docker

마리콘에 사용되는 모든 서버는 dockerize되어있으며, docker-compose를 사용해 한번에 실행할 수 있습니다. 서비스에 사용되는 포트는 다음과 같습니다.

- 80, 443 : http
- 3030 : Frontend
- 3478, 5349 : OpenVidu coturn
- 6379 : Redis
- 8080 : API Gateway
- 8081 : Backend
- 8086 : InfluxDB
- 9901 : Envoy-proxy admin 페이지
- 33332 : OpenVidu Wrapping API 서버

모든 서비스를 일괄로 boot하기 위해서는 다음과 같이 docker-compose를 실행하면 됩니다.

docker-compose up -d

개별 서비스를 제어하기 위해서는 다음과 같이 docker-compose를 실행하면 됩니다.

docker-compose up -d [docker_image]

docker_image 인수에는 다음과 같은 값이 사용됩니다.
blahblah_frontend : FE 서비스
blahblah_webserver : 웹서버
blahblah_api_gateway : API Gateway
blahblah_rtc_server : OpenVidu Server Wrapper
blahblah-openvidu-server : OpenVidu Server

DevOps

CI/CD를 위해 Jenkins의 자동 빌드 기능을 사용했습니다.

develop 브랜치에 커밋이 푸시되는 경우 Jenkins 서버로 webhook 이벤트를 전송하고, Jenkins에서는 해당 webhook을 수신하면 최신 상태의 develop 브랜치의 데이터를 기반으로 빌드 및 배포를 자동으로 수행합니다.


Ⅵ. UI / UX

스토리보드

  • 사용자의 경험을 위주로 Flow를 예측하여 스토리보드를 구성하였습니다.
  • ‘온라인 콘서트’라는 실시간 스트리밍 사이트를 목적으로 다양한 비디오가 어우러지도록 심플하고 미니멀한 테마로 디자인했습니다.
  • 특히 방송 화면에서 아티스트와 관객 모두의 편리성을 고려하여 채팅창과 아바타, 인포메이션 영역을 구성하였습니다. 보다 깔끔하고 현대적인 UI를 위해 openvidu의 화면을 커스텀하였습니다.

storyboard.png

감정표현

  • 관객과의 완벽한 커뮤니케이션을 위해 감정 이모티콘 5종과 동작 이모티콘 3종을 디자인했습니다.

aa.png

아바타 테마

  • 테마인 ‘아바타’를 디자인 전 영역에 활용하였습니다. 온라인 콘서트라는 테마에 맞춰 콘서트에 입장하는 느낌을 주기 위해 브릿지 문구와 티켓 아이콘 등을 적용하였습니다.
  • 아래는 아바타를 활용한 로딩스피너입니다.

loading_spinner.gif


Ⅶ. 회고

매주 진행된 스프린트 회고

  • 1주차 Untitled
    • 변준우 - 처음 만나는 팀원들과 간단하게나마 협업 규칙을 정하고, 그 규칙대로 진행하는 과정에서 발생하는 장단점을 파악해서 본격적으로 프로젝트를 진행하기 전에 개선하고 아이디어를 공유할 수 있어서 좋았습니다.
    • 김범식 - 다른 사람들과 작업 내용을 실시간으로 공유할 수 있다는 점이 인상 깊었습니다. 진행 상황을 색별로 표시하고 현제 작업상태가 무엇인지 파악하기 쉬워 할일을 까먹거나 딴길로 세는것을 방지할 수 있었습니다. 지금은 초보적인 기능밖에 사용하지 못하지만 프로젝트를 시작하면서 본격적으로 지라에 대한 이해도도 높아질것으로 기대됩니다.
    • 서다경 - 작업을 기록하니까 파악에도 용이하고 개인적으로 뿌듯했습니다. 개선해야 할 점은 스프린트가 시작될 때 전체 테스크를 파악하는 게 어려워서 이후에도 계속 추가한 점입니다. 경험을 쌓아서 작업량과 스토리포인트 파악에 능숙해져야 할 것 같습니다.
    • 오종석 - 지라 처음 써봐서 익히는데 어려움이 있었지만 해야할 일을 객관적으로 파악할 수 있고, 다른 팀원들의 진행 상황을 한눈에 파악할 수 있어 좋은것 같습니다. 지라를 익혀 추후의 협업에서도 큰 도움이 될것 같습니다! : )
    • 장엄지 - 현업에서 많이 사용하는 툴을 미리 사용해볼 수 있는 좋은 기회였다고 생각합니다. 지라 내에서 제공하는 여러가지 기능들이 무엇을 위한 기능인지 알고 익숙해지는데에 잠깐 시간이 걸렸지만, 에픽과 하위작업을 등록하고 등록된 일을 완료하는 과정들을 거치며, 개발 계획을 생각보다 세부적으로 짜야했다고 느꼈다. 팀원들의 진행사항을 한 눈에 확인할 수 있어 좋았고 스토리포인트를 할당하는 작업을 했던것이 재밌었습니다.
    • 조승희 - 해야할 작업을 세세하게 기록하면서 한눈에 작업들을 정리할 수 있어서 좋았고, 작업을 하나씩 완료한 상태로 옮기는 재미가 있고 성취감을 느낄 수 있었습니다. 본격적인 프로젝트 부터는 번다운 차트 모양을 내리막길로 만들도록 하고 좀 더 story내용과 story points를 신경써서 작성해야할 것 같습니다.
  • 2주차 Untitled
    • 변준우 - 이번 주 목표로 설정했던 프로젝트 자동 배포 구성을 계획대로 성공해서 다행이라고 생각합니다. 다만, 기획에 생각보다 시간이 오래 걸렸던 관계로 개발 일정이 다소 지연된 부분은 아쉽습니다.
    • 김범식 - 처음보는 기술들이라 실제로 코딩하는 것보다 공부하는 시간이 길었습니다. 공부를 하더라도 실제로 적용하는것까지 많은 시간이 걸렸고, 한기술을 적용하기 위해 다른 기술을 배워야 했습니다. 지라의 openvidu 학습 스토리도 시작한지 얼마 되지 않았기 때문에 완료하지 못했습니다. 그래도 팀원들과 2주간에 걸친 긴 토의끝에 프로젝트에 대한 전체적인 그림이 완성된것 같아 뿌듯했습니다.
    • 서다경 - 프로젝트를 기획하는 것과 프로젝트를 실제로 구현하는 것에는 큰 차이가 있다는 것을 다시금 깨달았습니다. 구체적인 디자인에 어려움을 겪어 프론트 일정이 살짝 밀렸는데 다음주에 팀원과 협력을 해서 커버하고 싶습니다.
    • 오종석 - 드디어 길고 길었던 기획의 단계를 마무리하고 내 꿈을 펼치는 개발의 시간이 왔습니다. 팀원들과 함께 토의를 하며 구조를 잡아나가는 것이 재미있고 앞으로 그려나갈 기능들이 하나하나 완성될 때마다 느껴질 효능감이 기대됩니다. 블라블라 프로젝트의 성공적인 런칭을 위해 꾸준히 구현해나가겠습니다. 파이팅그 : )
    • 장엄지 - 지라, 깃을 통해 협업하는 과정이 아직은 완전히 익숙하지 않지만 그래도 처음 마주했을 때 보다 많이 나아진 것 같아 앞으로가 더 기대됩니다. 지라에 올렸던 스프린트가 모두 끝나지 않은 부분을 생각해봤을 때, 작업 하나하나가 예상했던 것 보다 더 오래 걸렸던 것 같습니다. 다음번엔 이부분들을 고려하여 현실적으로 가능한 스프린트를 올리고 시간이 부족한것은 사실이므로 최대한 효율적이고 빠르게 작업을 진행해야함을 명심해야겠습니다.
    • 조승희 - 아직 본격적인 개발을 시작하기 전이라 내가 어떤 일을 해야할지 잘 모르고 시간을 알차게 보내지 못한 것 같아 아쉬웠고, 앞으로 최대한 개발 시간에 집중해야겠는 생각을 하게 되었습니다. 스토리 포인트를 정하는 거에 아직 익숙하지 않아서 실제 시간과 많이 차이가 났는데 계속 사용하면서 계획했던 시간에 맞춰 마감할 수 있도록 노력하겠습니다.
  • 3주차 Untitled
    • 개발 속도를 맞춰나가는 과정이 재밌었습니다. 다음주부터는 속도를 조금 높여 진행하면 되겠다는 생각이 들었습니다.
    • 발표준비로 개발기간이 적어 맡은 바를 제대로 끝내지 못해 아쉬웠습니다. 개발 주간이 진행되면서 서로 소통하는 방식이 매끄러워 진것같고 다들 개발에 속도를 가하는 것같아서 다행이라는 생각이 들었습니다. 이제 저만 잘하면 될것같아 정신을 바짝차리고 주말에 일을 진행할 수 있도록 해야겠습니다.
    • 프론트와 백 사이의 소통과 의견조율하는 법을 직접 체험하며 배운 한 주였습니다. 아무리 기본적인 기능이라도 제대로 구축하는 데에 긴 시간이 걸린다는 것을 깨달았습니다. 기본 기능 개발을 마치고 다음주부터는 팀원들과 협력하여 핵심기능 개발에 진입하고 싶습니다.
    • 솔직히 말하겠습니다. 한주에 세번만 나와서 너무 좋았습니다. 물론 우리 훌륭한 팀원들과 함께하는 줄어들었다는 사실에 슬픔을 숨기기 쉽지 않았지만, 이 마저도 저의 심신의 안정을 넘어서진 못했던것 같습니다. 이번주는 짧은 기간 출근한 만큼 탄력적이고 압축된 생활을 하려 노력했던것 같습니다. 제 고농도의 개발이 세상을 바꿀 수 있을까요? 벌써 다음주가 기대됩니다. 앞으로 한걸음 한걸음 나아갈 우리의 프로젝트가 기대됩니다.
    • 아이디어를 기획하고 구체화하면 큰 틀이 잡힐 줄 알았지만 서비스를 디자인 하는 창작의 고통이 얼마나 괴로운 것인지 새삼 느끼게 되었습니다. 일명 '대기업의 디자인'을 따라가는 것이 경계되어 많이 고민했지만 그러한 디자인이 '대기업의 디자인'이 된 데에는 이유가 있지 않을까 생각해보게 되었습니다.
    • 각각의 기능에 따라 구체적으로 작업을 나눠서 진행을 하여서 내가 해야 할 일에 대해 정리하면서 진행할 수 있어서 좋았습니다. 개발을 진행하면서 내가 생각했던 시간보다 별 것 아닌 거 가지고 시간을 너무 많이 할애한 것 같아서 아쉬웠고, 다음부터 더 정신을 바짝 차려서 빠르게 일을 진행할 수 있도록 해야겠습니다.
  • 4주차 Untitled
    • OpenVidu 서버 설정과 관련해서 오래 걸린 부분이 상당히 아쉽습니다. 다음주에는 더 빨리 작업해야겠다는 생각이 듭니다.
    • 모르는게 있을 때 공식문서와 구글링을 하는 법에 점점더 익숙해져 가고 있습니다. 2주동안 쩔쩔매던 openvidu코드를 팀원 덕분에 잘구현해서 뿌듯했습니다. 다른 사람이 짠 코드를 많은 시간을 들여 분석하고 감탄하면서 이 세상에는 정말 똑똑한 사람이 많다는 것을 다시한번 느꼈고 앞으로 갈길이 멀다는걸 다시한번 상기하게 됐습니다. 프로젝트가 2주도 남지 않았습니다. 마지막까지 후회 없이 열심히 하려합니다.
    • 생각보다 빨리 끝난 작업도 있고 예측하지 못한 에러 해결에 시간을 많이 쏟기도 해서 작업량 예측은 조금 더 노력해봐야 할 것 같습니다. 프론트엔드는 작은 효과 구현에도 엄청난 시간이 든다는 것을 다시 깨달았습니다. 그래도 Jira를 사용하는데 능숙해진 것 같아 뿌듯합니다.
    • 개발이 점점 진행되면서 보여줄 수 있는 완성물이 점점 보인다는 사실에 즐겁습니다. 더 열심해 개발하여 의미 있는 결과물을 내고 싶습니다.
    • 중간시연을 하며 더 잘 해내고 싶은 마음이 더욱 커졌습니다. 아직 남은 기한에 비해 해야할 작업량이 많이 남아있지만 끝까지 뒷심 잃지않고 팀원들과 멋진 작품을 완성하고 싶습니다!! 화팅호아팅
    • 작업을 좀 더 세세하게 나눠서 작업해야할 것 같고, 스토리 포인트를 실제 작업시간과 일치할 수 있도록 더 노력해야할 것 같습니다. 기능별로 에픽을 만들고 세세하게 작업을 만들어서 하나씩 지워나가는게 재밌었습니다. 다음 주에는 스토리포인트에 맞게 작업을 진행해나가고 싶습니다.
  • 5주차 Untitled
    • 풀스택,,, 힘들다,,, 그래도 다들 마무리 잘 해봐용!!
    • 프로젝트의 막바지에 이른것 같습니다. 어느새 끝난다니 마음이 심숭생숭 하지만 또 한편은 기나긴 여정이 끝나감에 안도의 한숨이 쉬어지기도 합니다. 꽤나 힘들었지만 팀원들과 함께 의견을 공유하며 프로젝트가 성장해 나감에 사뭇 뿌듯함을 느끼기도 했습니다. 끼약호웅
    • 이번 주는 열심히 개발을 했는데 남은 작업이 아직 많이 남아있어서 놀라운 한 주입니다. API 연결에 있어 컨벤션의 중요성을 깨달았습니다. 그래도 수많은 에러를 경험하며 에러를 익숙하게 해결하고, 팀원들과 소통하여 문제를 하나하나 해결해서 뿌듯했습니다. 주말에는 잔업을 열심히 처리하려 합니다.
    • 프로젝트 기간이 막바지에 달하고 있는데 아직 해아할 것이 많이 남아 마음이 무거운 주였던 것 같다. 피곤하기도 했지만 역시 개발 프로젝트는 팀원이 좋으면 즐겁게 할 수 있는 것 같다. 재밌다. 재밌다. 화이팅
    • 개발을 위한 거의 마지막 주라 정신없이 지나가서 지라 관리를 전보다 좀 소홀하게 하고 어떤 일을 했는지 정리를 잘 하지 못해서 아쉽다. 남은 한주도 나머지 구현 잘 마무리해서 즐겁게 끝냈으면 좋겠다
    • 프로젝트 마지막을 신경씀과 동시에 다음 특화 프로젝트 팀빌딩 을 한다는 압박감에 평소보다 더 힘들었던 한주였다. 마지막까지 후회없는 개발하고 잘 마무리 했으면 좋겠다. 화이팅!
  • 6주차
    • 프로젝트 마무리는 역시나 힘들다. 신경써야 할 것도 많고, 해야 할 일도 많다. 가면 갈수록 다들 지쳐가는 모습을 보는게 안타까웠다. 팀원들이 잘 따라와 준 덕분에 프로젝트를 잘 마무리 할 수 있어 감사하다.
    • 생각했던 것보다 마지막 주에 해야할 일이 많아서 여유롭게 마무리하지 못한 점이 조금 아쉽다. 프로젝트를 진행하면서 계속 기능이 추가되어서 계획을 제대로 세우지 못한 것 같아서 다음부터는 본격적으로 시작하기 전에 꼭 필요한 기능들을 구체적으로 정리한 후에 진행해야할 것 같다. 시간이 빨리가서 아쉽고 프로젝트 하나를 끝냈다는 게 후련하기도 하다.
    • 좋은 팀원들을 만나 트러블 없이 밝은 분위기에서 개발을 한것이 너무 감사하게 느껴진다. 팀원들의 소중함을 느꼈고, 팀원들을 보며 나도 더 나은 팀원이 되기 위한 길을 많이 생각하게 되었다. 개발을 여유롭게 했다고 생각하지 않음에도 불구하고 시간이 조금만 더 있었다면 조금 더 퀄리티 있는 결과물이 나왔을 것 같아 아쉬움이 많이 남는다. 기능적으로, 디자인 적으로 부족한 부분도 조금씩 보이고 무엇보다 코드를 클린하게 정리할 수 있었다면 더 좋았을 것 같다. 기회가 된다면 리팩토링을 통해 한 층 더 나은 프로젝트로 남기고 싶다.
    • 사용자 중심의 UI를 구현하려고 노력했지만 생각보다 더 UI/UX 는 쉽지 않은 분야인 것 같습니다. 팀원이 QA 역할을 해줘서 버그 픽스를 열심히 했던 일이 기억에 남습니다. 팀원들과 협동하여 기획했던 기능을 대부분 구현하여 뿌듯합니다.
    • 드디어 마지막 주입니다. 쉼 없이 달려온 지난 날들이 주마등처럼 지나가는것 같습니다. 이제 끝난다는 생각에 시원섭섭한것 같습니다. 지난 6주동안 배워간 것들이 참 많았고, 좋은 팀원들을 알게되어 좋았습니다.
    • 개발 보다 토대가 되는 기획이 더 중요할지도 모른다는 생각이 드는 공통 프로젝트였습니다. jira로 일정을 관리하고 notion으로 api문서를 관리하면서 실제 개발보다는 서로 소통하고 의견을 공유하는 시간이 참 많았던것 같습니다. 또 팀분위기가 프로젝트에 얼마나 큰 영향을 미치는지도 깨달았습니다. 큰 트러블 없이 밝은 모습으로 바쁜 개발기간와중에도 웃음을 잃지 않은 팀원들에게 늘 감사했습니다. 이 경험을 토대로 다음부터는 더 나은 개발을 할 수 있을것 같습니다.