개발/🚀 데브코스

📆 데브코스 최종 프로젝트 회고

정소은 2024. 12. 11. 11:05

 

 

 

드디어... 데브코스 최종 프로젝트까지... 끝났다...

우오아아아ㅏㅇ왕아알알아ㅏ🎉🎉🎉

 

 

 

[ 프로젝트 소개 ]

 

PlanWIth

: 나만의 AI 플래너

컨셉은 AI 비서로, 기존의 플래너 서비스 + AI 챗봇 기능 + 그룹 기능 느낌

 

💫 핵심 기능

1.  개인 캘린더 기능

  • 월별 / 주별 / 일별 캘린더 -> 일정, 투두

 

2.  그룹 캘린더 기능

  • 월별 / 주별 / 일별 캘린더 -> 일정, 투두
  • 그룹에서 생성한 일정, 투두에 할당자 설정
  • 할당된 일정, 투두 개인 캘린더에 연동

 

3.  AI 챗봇 기능

  • 일정, 투두 기입 자동화
  • 계획 추천

 

4.  실시간 알림 기능

  • 일정 알림
  • 그룹 초대 알림

 

 


 

 

[ KPT 회고]

 

 

< Keep >

 

( 개발 )

기술적 도전

: Open API 사용, 배포 모두 아예 처음 시도해보는 거였는데 도전했던 것

 

저번 프로젝트에서는 항상 해오던 CRUD 개발을 진행했는데

이번에는 OpenAI API 사용해서 개발도 해보고,

AWS로 배포 및 CI/CD도 구현해봤다

 

역시 냅다 부딪혀보면서 개발할 때 제일 빠르게 배우고 성장하는 것 같다

 

새로운 기술을 배울 때 가장 효과 본 로직
1.  전체적인 로직, 구조 파악하기
2.  빈 부분 채우기 : 전체적인 로직을 상세하게 살피면서 이해 안 되는 부분(개념 빵꾸 난 부분) 정리해서 ChatGPT한테 물어보기
3.  구현 시작

 

예시 ) CI/CD

1.  전체적인 로직, 구조 파악하기

2.  이해 안 되는 상세 로직 ChatGPT한테 물어보기

 

3.  구현 시작

 

 

마음 급해서 냅다 ChatGPT한테 코드 부탁해서 구현부터 시작하면

훨씬 더 오래 걸리고 트러블 발생했을 때 ChatGPT한테 완전히 의존하게 된다

 

( 커뮤니케이션 )

기능 문서화

: 요구 명세서에 기능 상세 설명을 꼼꼼하게 작성한 것

 

노션에다가 기능 명세서를 엄청 구체적으로 작성하고

서로 이해 안 되는 부분을 댓글로 달면서 소통했다

이런 식으로 모두가 통일된 기능 로직을 공유할 수 있었고

노션에 기록해놓으니 로직을 까먹을 때마다 정확하게 확인할 수 있었다

 

 


 

 

< Problem >

 

( 개발 )

주먹구구식 구현

앞서 CI/CD 구현하기 전 AWS에 배포할 때는 마음이 너무 급해서

'그래 일단 EC2 인스턴스랑 RDS 생성하고 보자' 라는 마인드로 접근했다가

추후에 멘토님이랑 같이 트러블 슈팅하면서 EC2 완전 다시 생성하는 지경에 이르렀다

마음이 급해도 일단 어느정도 input을 넣고, 전체적인 구조 파악은 진행하고 구현에 돌입해야 한다는 걸 뼈저리게 느꼈다

 

개발 순서

나는 챗봇 구현을 맡았는데

이 기능은 사실 개인 일정, 투두 CRUD가 어느정도 완성이 돼야 테스트가 가능했다

근데 너무 개발 초반에 챗봇 구현을 시작하다보니 챗봇 구현 마감 기한이 계속 밀렸다

그러다보니 나는 챗봇에 묶여 있고 다른 백엔드 분들은 나머지 기능 구현하시느라 너무 고생하셨을 것 같다ㅠ

그래서 초반에 구현 순서를 엮여있는 기능들 생각하면서 꼼꼼하게 정하는 게 필요하다고 느꼈다

 

 

< Try >

 

( 개발 )

성능 테스트

최종 프로젝트 발표 진행할 때 배포 링크도 함께 뿌렸는데

거의 100명 가까이 되는 사람들이 접속하니까 서버가 뻥 터져버렸다

사실 개발 도중에 계속 서버가 터져서... 내 머리도 같이 터져버리는 줄 알았다...

 

멘토님께 여쭤보니 여러 부분에서 문제가 될 수 있는데

그중에서 의심이 가는 부분은

1.  로그인 - Redis 접속

로그인할 때 Redis에 접속하는 와중에 무한 로딩되다가 터지는 경우 발생

2.  Chatbot - OpenAI API 통신

ChatGPT의 응답에 과부하 오면서 터지는 경우 발생

-> ChatGPT 응답은 지연이 발생하고 그 와중에 다른 요청들이 우다다 들어오니까 뻥 터져버린 게 아닐지

3.  실시간 알림 - Scheduler

 

성능 테스트할 수 있는 여러 도구도 소개해주셨다

 

APM(Application Performance Monitoring)  -  ex ) PinPoint

: CPU 터지는 순간 날렸던 쿼리 확인 가능

JMeter

: 100개의 API 요청 한번에 날릴 수 있음

: 스트레스 테스트 가능

 

등등등

 

그래서 백엔드 분들과 일주일간 이 부분 파보기로 했다!

 

 

추후 개발해보고 싶은 기능

1.  Spring Security 
2.  Redis
     - Refresh Token => Redis에 저장
     - Pub/Sub => 실시간 데이터 처리   ex ) 실시간 채팅 
     - Redison 라이브러리 이용해서 동시성 문제 해결 => 비관적 락, 분산 락
3.  카프카 => 실시간 데이터 처리
4.  Scheduler / Batch : 서버에 대용량으로 적재된 데이터 뿌릴 때 -> Batch Partitioning
5.  AOP로 효율성 체크하기
6.  Open API 사용
7.  백엔드 / AI 연결
8.  CQRS => 조회용 DB, 삽입/수정/삭제용 DB 분리 및 동기화 기술
9.  소켓 통신
10.  서버 로드밸런싱

 

 

역시 최종 프로젝트에서 제일 많이 배울 수 있었던 것 같다...

스트레스도 잔뜩 받았지만 많이 성장할 수 있었고

팀원분들이 실시간으로 미쳐가는(ㅎㅎ) 과정을 보는 재미도 있었다

 

데브코스도 끝나가는구나아아아 파이티이이이이잉