AI 부트캠프/챕터5(12.30~01.31)

TIL 93

musukie 2025. 2. 4. 22:12

모의 면접에서 내가 준비한 답변들에 대해 작성해보겠다.

 

1분 자기소개

안녕하세요, 저는 이번 최종 프로젝트에서 부리더를 맡은 긍정적인 마음으로 도전하는 윤수진입니다. 저는 최근 AI 기반의 학습용 챗봇 프로젝트인 ReadRiddle을 개발하며 다양한 기술을 사용하고, 실제 서비스 아키텍처를 설계하는 경험을 쌓았습니다.

성실함과 책임감을 바탕으로 주어진 과제를 완수하며, 새로운 기술에 도전하는 데 두려움이 없다는 점이 제 강점입니다. 이번 프로젝트에서는 React라는 새로운 기술을 배우고 실무에 적용하는 과정에서 많은 성장을 이루었습니다. 빠른 시간 내에 기술을 익히고 사용해야 한다는 부담감이 있었지만, 이를 통해 단시간에 문제를 해결하는 능력을 키울 수 있었습니다. 또한, 언제나 열린 마음으로 소통하고 협력하는 것을 중요하게 생각합니다. 이러한 점을 바탕으로, 앞으로도 다양한 기술을 습득하고 팀과 함께 성장할 수 있도록 노력할 것입니다.

 

 

프로젝트 관련 질문

1. 프로젝트에 대한 이해도 / 배경 및 기술적 설명

ReadRiddle은 AI 챗봇을 활용하여 개발자들이 배운 내용을 퀴즈를 통해 복습할 수 있도록 하는 서비스입니다. 기본적인 학습용 퀴즈 생성 기능뿐만 아니라, RAG (Retrieval-Augmented Generation) 기반 AI 챗봇을 활용하여 Django, DRF, React 등의 공식 문서를 참고하여 질문에 답변할 수 있도록 구현했습니다. 사용자는 퀴즈를 푼 후, 퀴즈에 대한 전체적인 피드백과 문제별 피드백을 받을 수 있습니다. 또한 실시간 단체 퀴즈 기능인 POP QUIZ를 통해 단순한 개별 학습에서 벗어나 사용자 간의 실시간 경쟁 요소를 도입하여 학습의 흥미를 높였습니다.

기술적으로는 Django DRF를 백엔드로 사용하여 API를 설계했고, React를 이용해 프론트엔드를 개발하였습니다. 데이터베이스는 PostgreSQL을 사용하였으며, Docker를 통해 개발 및 배포 환경을 일관되게 유지하였습니다. AWS EC2, S3, Route53, CloudFront, ELB 등을 활용하여 배포를 진행했습니다.

 

React

  • HTML 에 비해 사용자 인터페이스를 구축하고 동적인 웹 애플리케이션 환경을 구축하는데 더 적합하여 채택했습니다.

 

Django DRF

  • AI 기반의 웹서비스에서 Python 언어모델을 사용하는 프레임워크로 Django 를 채택했습니다.
  • 프론트엔드와의 분리 구현을 위해 DRF 를 채택했습니다.

 

  • PostgreSQL
    • 대규모 데이터를 처리(RAG 관련 전처리데이터, 대화내용 등)하는데 용이합니다.
    • JSON/JSONB 등 비정형 데이터와 정형 데이터를 함께 사용할 경우를 고려하여 채택했습니다.

 

  • DockerAWS를 같이 활용하면 유지보수 및 확장성의 이점을 가질 수 있다고 판단했습니다.
  • Open AI - GPT-4o
    • 공식문서 및 다양한 교재를 사용하는 서비스 특성을 고려하여 컨텍스트 용량이 큰 Open AI의 모델을 사용했습니다.
    • 일정한 구조의 퀴즈 생성을 위해 구조화된 출력 기능을 지원하는 GPT-4 이상 모델을 사용했습니다.

 

 

2. 팀 내에서 어려움과 해결 방법 / 일정 지연 시 대응

프로젝트 초기에는 팀 내에서 상대적으로 경험이 부족해 어려움을 느꼈습니다. 하지만 성실함과 책임감을 바탕으로 맡은 역할을 충실히 수행하기 위해 노력했습니다. 문제가 발생했을 때 스스로 해결 방법을 찾아보며 학습하면서 문제를 해결하려고 노력했고, 팀원들에게 적극적으로 도움을 요청하기도 했습니다. 팀원들의 피드백과 도움을 통해 많은 것을 배울 수 있었고, 이를 통해 점점 더 능동적으로 개발에 참여할 수 있었습니다. 팀 내 협업을 통해 어려운 문제들을 함께 해결해 나가면서 팀워크의 중요성을 깊이 느꼈습니다.

 

개발 과정에서 구현하고 싶은 기능이 많았지만, 시간이 제한적인 상황에서 우선순위를 정하는 것이 중요했습니다. 팀원들과의 논의를 통해 가장 필요한 핵심 기능을 우선적으로 개발하고, 남은 시간에 추가적인 기능을 점진적으로 구현해 나갔습니다. 이러한 방식으로 일정을 효율적으로 조율하며, 프로젝트를 성공적으로 마무리할 수 있었습니다.

 

3. 맡은 역할

최종 팀 프로젝트에서 부리더를 맡아 리더를 도와 프로젝트를 원활하게 진행할 수 있도록 노력했습니다. 초기 데이터베이스를 설계하고, Quiz 모델을 개발하였으며, 배포를 위한 기본적인 AWS 환경을 구축했습니다. 또한 반응형 UI를 개선하고, 프론트엔드 개발 및 전반적인 스타일 수정 작업을 담당하며 최종 결과물의 완성도를 높이는 데 기여했습니다.

 

4. 유사 프로젝트 대비 고민한 점 및 차별점

기존의 학습용 퀴즈 시스템과 달리, 실제 개발자들이 자주 참고하는 공식 문서 및 오픈소스를 기반으로 문제를 출제하고 답변을 제공하는 기능을 추가했습니다. 이를 위해 RAG 기술을 적용하여 공식 문서 및 오픈소스 코드에서 정보를 검색한 후 AI가 답변을 생성하도록 했습니다.

프롬프트 : Shot 기법  / Act As 기법 / 정보 제공 기법 / 형식 지정 기법

 

5. 사용자 피드백 반영 사례

프로젝트를 진행하면서 사용자 피드백을 적극적으로 반영하여 개선한 사례가 두 가지 있습니다.

첫 번째로 대화 내역을 불러오는 속도를 개선하였습니다.
처음에는 대화 내역을 DB에서 직접 불러오다 보니 속도가 느렸습니다. 이를 해결하기 위해 캐싱 전략을 도입하여 데이터를 메모리에 저장하도록 변경했습니다. 그 결과, 속도가 약 30% 향상되었습니다.

두 번째로 POP QUIZ 기능을 개선하였습니다.
사용자 피드백 중에서 “단체 퀴즈방에 좀 더 다양한 기능이 있으면 좋겠다"는 의견이 있었습니다.

그래서 점수제 및 랭킹 시스템을 도입했고,
실시간으로 본인의 순위를 확인할 수 있는 랭킹 보드를 구현하였습니다. 또한, 사용자가 다른 사용자의 닉네임을 클릭하면 프로필을 확인할 수 있는 기능도 추가했습니다.
이러한 개선을 통해 퀴즈의 경쟁 요소가 강화되었고, 사용자들의 참여율을 증가시키는 효과를 얻을 수 있었습니다.

 

6. 초기 계획과 변경점 및 적응 과정

처음에는 단순히 AI 챗봇이 객관식 퀴즈를 생성하면 사용자가 답변을 입력하고, 사용자의 답변에 대한 간단한 피드백을 제공하는 챗봇으로 시작했습니다. 하지만 프로젝트를 진행하면서 더 효과적인 학습 경험을 제공하기 위해 몇 가지 주요 변경 사항을 적용했습니다.

 

첫 번째로, AI 챗봇 학습과 Quiz 시험지 기능을 분리했습니다. 초기에는 챗봇이 퀴즈 생성과 학습을 모두 담당했지만, 학습과 평가 기능이 뒤섞이면서 사용자 경험이 명확하지 않았습니다. 그래서 학습 기능은 AI 챗봇이 담당하고, 평가 기능은 시험지 형태의 Quiz 시스템으로 분리하여 사용자가 더욱 체계적으로 학습할 수 있도록 개선했습니다.

 

두 번째로, **실시간 단체 퀴즈 기능(POP QUIZ)**을 추가했습니다. 단순한 개별 학습에서 벗어나 사용자 간의 실시간 경쟁 요소를 도입하여 학습의 흥미를 높이고자 했습니다. 이를 위해 WebSocket을 활용한 실시간 통신을 도입했고, 이를 통해 사용자들이 같은 문제를 동시에 풀고, 점수를 실시간으로 반영하는 랭킹 시스템을 구현했습니다.

 

이러한 과정에서 필요한 모델을 추가하거나 불필요한 모델을 삭제하고 API를 재설계하는 등의 작업이 필요했습니다. 특히, WebSocket은 처음 다뤄보는 기술이었기 때문에 많은 시행착오가 있었습니다. 하지만 팀원들과 적극적으로 소통하고, 관련 문서를 찾아보며 빠르게 적응할 수 있었습니다.

 

 

7. 버전 관리 활용

Git과 GitHub을 활용하여 프로젝트의 버전을 체계적으로 관리했습니다. 팀 내에서 효율적인 협업을 위해 코드 컨벤션을 정하고, 이를 바탕으로 PR(Pull Request)을 작성했습니다. 주로 feat, fix, design 등의 태그를 사용하여 커밋 메시지를 작성하며, 명확한 버전 관리를 유지했습니다. 또한, 코드 품질을 보장하기 위해 최소 1명의 승인을 받아야만 merge가 가능하도록 규칙을 설정했습니다. 프로젝트 초반에는 프론트엔드와 백엔드를 별도의 디렉토리로 나누어 작업했으나, Docker를 도입한 후에는 container라는 새로운 디렉토리를 추가하여 프론트엔드와 백엔드를 한 번에 작업할 수 있는 환경을 구축했습니다. 이로 인해 개발 효율성이 크게 향상되었습니다.

 

8. 사용한 기술과 프로젝트에서의 경험

  • Django DRF: RESTful API 설계 및 인증 시스템 구축 (JWT 활용)
  • PostgreSQL: JSONB 활용한 비정형 데이터 저장
  • React: 사용자 인터페이스 구축
  • Docker & AWS: 컨테이너화된 환경에서 배포 및 유지보수
  • WebSocket: 실시간 단체 퀴즈 기능 구현

 

9. 프로젝트에서 아쉬운 점과 개선 방향

챗봇을 통한 학습 기능에서, ChatGPT와 같은 스트리밍 방식으로 AI의 응답을 실시간으로 받는 기능을 추가하고 싶었습니다. 그러나 제한된 시간 내에 구현을 마치지 못해 아쉬움이 남습니다. 현재 로딩 화면에서는 사용자가 대기 시간을 예상할 수 없는데, 이를 개선하기 위해 스트리밍 방식의 채팅 응답 기능을 도입하고 싶습니다. 이 방식은 사용자가 실시간으로 답변을 받을 수 있게 해주어, 대기 시간이 더 이상 지루하지 않게 만들 수 있을 것입니다.

 

10. API 설계 과정

서비스의 주요 기능을 바탕으로 효율적인 구조로 설계했습니다. 우선, 기능별로 필요한 엔드포인트와 HTTP 메서드를 정의한 후, 이를 바탕으로 API 명세서를 작성하여 협업을 원활하게 했습니다.

또한, Swagger UI와 Postman을 사용하여 테스트하고 문서화된 API 명세서를 공유함으로써 팀원들이 손쉽게 API를 사용하고 문제를 빠르게 해결할 수 있도록 했습니다. 각 기능별로 필요한 데이터 전송 형식과 요청/응답을 세분화하고, 필요한 인증 방식과 권한을 명확히 구분하여 보안을 강화했습니다. 예를 들어, JWT 토큰 기반의 인증을 사용하여 사용자 인증을 처리했습니다.

 

11. 데이터베이스 구조

저희 프로젝트에서는 4개의 주요 앱을 사용하여 각각의 역할에 맞는 데이터를 관리했습니다.

 

  1. Accounts 앱
    • 사용자 관련 정보를 관리하는 앱으로, User 모델을 통해 사용자명, 이메일, 닉네임, 생년월일 등을 저장하고, 비밀번호와 JWT 토큰 등의 인증 정보를 처리합니다.
    • UserManager 클래스는 사용자 계정 생성과 관리를 담당하며, 일반 사용자와 관리자(superuser)를 구분할 수 있도록 설계되었습니다.
  2. Chatbot 앱:
    • ChatHistory 모델은 사용자의 대화 기록을 저장하고, 대화의 요약 및 주요 내용을 JSON 형식으로 관리합니다.
    • Documents 모델은 학습용 문서 정보를 관리하는데 사용되며, 카테고리, 제목, 내용을 저장하여 챗봇의 학습 자료로 활용됩니다.
  3. Quizbot 앱:
    • Quiz 모델은 퀴즈의 제목, 설명 및 사용자의 퀴즈 결과를 저장합니다.
    • Question 모델은 각 퀴즈의 문제를 정의하며, Choice 모델을 통해 문제의 보기를 저장하고, 정답 여부를 관리합니다.
  4. Chat 앱:
    • Room 모델은 채팅방 정보를 관리하며, Message 모델은 각 채팅방에서의 메시지를 저장합니다. 각 메시지는 타임스탬프와 사용자 정보를 포함하여, 실시간 채팅 데이터를 효과적으로 관리할 수 있도록 설계하였습니다.

각 앱은 외래 키와 역참조 기능을 통해 데이터 간 관계를 명확하게 정의하여, 필요한 정보를 효율적으로 관리하고 있습니다. 이와 같은 구조로 각 앱의 데이터가 독립적이면서도 유기적으로 연결되어 시스템 전체의 효율성을 높일 수 있습니다.

 

 

인성 면접

1. 원활한 협업을 위한 노력

프로젝트의 효율적인 진행을 위해 코드 컨벤션을 정하고 PR을 작성하는 규칙을 마련했습니다. 또한, Slack과 Notion을 활용해 문서화 작업을 진행하고, 일정을 공유하여 팀원들이 업무를 원활하게 수행할 수 있도록 했습니다. 프로젝트 초반에는 오전과 오후에 정해진 시간에 회의를 두 번 진행하며 소통을 강화했으나, 프로젝트 후반으로 갈수록 필요할 때마다 실시간으로 화면을 공유하며 개발을 진행했습니다. 이런 방식으로 협업의 효율성을 높이고, 빠르게 개발을 진행할 수 있었습니다.

 

2. 갈등 해결 경험

프로젝트 중에 Token 처리 방식에 대한 의견 차이가 있었습니다. 팀원들이 각기 다른 방식으로 Token을 중요하게 생각했고, 그에 대한 이해도 차이가 있었습니다. 이를 해결하기 위해 서로의 의견을 적극적으로 나누며 이해의 폭을 넓혔고, 멘토링을 통해 다양한 접근법을 배우며 문제를 해결할 수 있었습니다. 이렇게 서로의 의견을 존중하고 소통하며 문제를 해결하는 경험을 얻었습니다.

 

마지막 하고 싶은 말

이번 프로젝트를 통해 AI 기반 학습 도구의 가능성을 확실히 느낄 수 있었습니다. 앞으로는 개발자들이 학습을 보다 효과적으로 할 수 있도록 돕는 더 나은 AI 챗봇을 만들기 위해 계속해서 노력하고 싶습니다. 감사합니다.

'AI 부트캠프 > 챕터5(12.30~01.31)' 카테고리의 다른 글

TIL 92  (1) 2025.01.31
TIL 91  (0) 2025.01.27
TIL 90  (0) 2025.01.24
TIL 89  (0) 2025.01.24
TIL 88  (1) 2025.01.22