Skip to content

Team-ThreeGo/Algo

Repository files navigation

Algo

image

개발자 취업 준비생, 지금 우리에게 필요한 건? Algo!


ThreeGo 팀원 소개

강지륜 김민지 배태용 정유진 허창훈

목차

1. 프로젝트 소개
2. 설계 문서
3. DB 모델링
4. 시스템 아키텍처
5. 세부 기술 소개
6. API 명세서
7. 테스트
8. 동료 평가


1. 프로젝트 소개

기술 요약

프로젝트 배경

image image image

주요 기능

  회원가입 및 로그인
34 35
  알고리즘 개념 학습
36 37
  코딩 풀이 및 AI 피드백 제공
38
  기업별 정보 공유
39
  스터디
40
  신고 및 추천
41

기술 스택

구분 기술 스택
언어 Java 17
프레임워크 & 런타임 환경 Spring Boot 3.5.6 · Spring Cloud Gateway 2025.0.0 · Spring Cloud Netflix Eureka Client 2025.0.0
데이터 접근 Spring Data JPA 3.5.6 · MyBatis 3.0.5
빌드 & 의존성 관리 Gradle 8.x
외부 서비스 연동 AWS S3 SDK 2.20.x · Spring Cloud AWS 2.2.6.RELEASE · SMTP (Spring Boot Starter Mail) 3.5.6
보안 & 인증 Spring Security 3.5.6 · JJWT 0.11.5
작업 툴 & 협업 IntelliJ IDEA · ERD Cloud · DA# Modeler · Postman · Swagger · GitHub · Notion
테스트 JUnit

2. 설계 문서

WBS

WBS image

요구사항 명세서

요구사항 명세서

회원 정보

image

알고리즘 학습

image

기업별 정보 공유

image

스터디

image image

AI 코딩풀이

image

시스템

image

DDD

DDD

회원 관리 및 신고 처리

회원관리및 신고

알고리즘 학습

알고리즘 학습

문제풀이 및 AI피드백

AI문제풀이

기업별 정보 공유

기업별정보공유

스터디

스터디

3. DB 모델링

논리 모델링

Da# 논리모델링

물리 모델링

ERD 물리모델링

4. 시스템 아키텍처

Algo는 Spring Cloud 기반의 MSA(Microservice Architecture) 1세대 구조를 도입하여 구현했습니다.

  • 클라이언트의 모든 요청은 Spring Cloud Gateway를 통해 진입하며, Eureka Server에서 서비스 정보를 확인하고 각 서비스로 라우팅합니다.
  • 서비스는 ALGO-MEMBER-SERVICEALGO-CORE-SERVICE로 나누어져 있으며, 각각 포트 0으로 실행되어 Eureka에 등록되고 Gateway를 통해 로드밸런싱됩니다.
  • 데이터는 단일 MariaDB를 공유하여 관리합니다.
  • 외부 시스템으로는 FastAPI(OpenAI 연동)과 AWS S3를 연결하여, AI 피드백 제공 및 이미지/파일 저장을 지원합니다.
실제 수행환경

5. 세부 기술 소개

인증/인가를 위한, Spring Security
JWT 기반의 Spring Security를 적용하여 인증/인가를 처리했습니다.
  • 구현 방식

    • JwtAuthenticationProvider를 통해 토큰 검증
    • AuthenticationFilterJwtFilter를 추가하여 요청마다 JWT 유효성 확인
    • WebSecurity 설정에서 API 접근 권한을 세부적으로 분리
  • 주요 정책

    • Swagger 문서 및 Health Check는 모든 사용자 접근 허용
    • /auth/**, /signup/**, /login/** 등 인증 절차 관련 엔드포인트는 허용
    • /admin/** 경로는 관리자(ROLE_ADMIN)만 접근 가능
    • 이외의 모든 요청은 JWT 기반 인증 필요
  • 효과

    • 모든 API 요청이 JWT 기반으로 검증되어 무상태(Stateless) 구조 유지
    • 사용자/관리자 권한을 세분화하여 보안성 강화
    • MSA 구조에서도 서비스 간 안전하게 토큰을 전달하고 검증 가능
명령과 조회의 분리, CQRS
Algo는 CQRS(Command Query Responsibility Segregation) 패턴을 도입하여 쓰기(Command)와 읽기(Query) 로직을 명확히 분리했습니다.
  • Command 영역

    • JPA를 사용하여 엔티티 기반의 데이터 생성, 수정, 삭제 처리
    • 도메인 모델을 통해 데이터 변경의 일관성 보장
  • Query 영역

    • MyBatis를 사용하여 조회 전용 API 구현
    • 복잡한 SQL을 직접 다루어 성능 최적화 및 필요한 데이터만 반환
  • 장점

    • 읽기/쓰기 책임이 분리되어 서비스 구조가 명확해짐
    • 조회 성능 최적화가 가능하고, 불필요한 데이터 로딩을 줄일 수 있음
    • 유지보수와 확장이 용이해져 도메인별 서비스 관리가 수월해짐
    • 이후 MSA로 서비스 분리 시 구조적으로 확장하기 유리
코딩 풀이 AI 피드백 (FastAPI + OpenAI)
  • FastAPI 서버

    • 사용자가 제출한 코드 풀이를 OpenAI API에 전달
    • 응답을 받아 JSON 형식으로 가공 후 백엔드로 전달
  • OpenAI (gpt-4o-mini)

    • 경량 모델 gpt-4o-mini를 활용하여 빠른 응답 제공
    • 제출된 코드 풀이를 분석하고, 시간복잡도/장점/문제점/개선방안을 JSON으로 반환
  • 프롬프트 설계

    • 역할: 코딩 테스트 문제 풀이를 평가하는 AI 코치
    • 출력 형식(JSON 고정)
      {
        "aiBigO": "O(N*M)",
        "aiGood": "잘한 점 요약",
        "aiBad": "문제점 요약",
        "aiPlan": "개선 방안"
      }
    • 규칙
      • 시간복잡도는 Big-O 표기만
      • 잘한 점은 1~3개 간단히 요약
      • 불필요한 언급은 배제
      • 이전 기록 무시, 현재 제출만 평가
  • 적용 효과

    • 사용자가 문제 풀이 제출 → FastAPI 서버가 OpenAI 호출
    • 즉시 Big-O 분석 + 장점/문제점/개선방안 JSON 응답
    • 단순 정답 검증을 넘어 실질적인 개선 방향을 제시하여 학습 효과 강화
이메일 인증을 위한, SMTP
Google Gmail SMTP를 사용하여 이메일 인증 기능을 구현했습니다.
  • 인증된 이메일로만 회원가입 가능
    • 사용자가 이메일을 입력 후 인증 버튼을 클릭하면 해당 이메일로 인증번호가 전송됨
    • 받은 인증번호와 사용자가 입력한 인증번호가 일치할 경우 인증 완료
  • 인증번호 전송 및 입력값 검증으로 보안 강화
  • 추후 개선 방안: Redis + TTL 기반 인증번호 만료 처리
이미지/파일 저장소, AWS S3

AWS S3를 활용하여 이미지/파일 저장소를 구축했습니다.

  • 다양한 게시판에서 이미지/파일 업로드 가능
    • 각 게시판 특성에 맞는 이미지 첨부 기능 제공함으로써 사용자 경험 향상
    • ex) 기업별 정보 공유 게시판에서 합격 메일, 인증서 등 증빙자료 업로드 가능
  • 과정
    1. Spring Boot 서버에서 MultipartFile로 전달받은 파일 검증 진행
    2. UUID 기반의 파일명을 생성해 S3 버킷에 업로드
    3. 이후 반환된 URL을 DB에 저장

6. API 명세서 (Swagger)

회원 API image image image
알고리즘 학습 API image image image
스터디 API image image image image image image image
코딩 문제 풀이 API image image image
기업별 정보 공유 API image image

7. 테스트

단위 테스트

스터디 테스트 image image
알고리즘 학습 테스트 image
코딩풀이 테스트 Image
신고 테스트 Screenshot 2025-10-01 at 2 39 09 AM

통합 테스트

📹 POSTMAN 통합 테스트 시연 영상 바로가기


8. 동료 평가

강지륜

평가자 내용
김민지 프로젝트 설계부터 구현까지 항상 팀원들이 미처 생각하지 못한 부분까지 꼼꼼히 짚어주셔서, 단순한 코드 개발을 넘어 다양한 관점을 고려할 수 있었습니다. 덕분에 많은 성장을 할 수 있었던 것 같습니다. 또한 깔끔하고 효율적인 코드를 개발하기 위해 항상 깊이 고민하시는 모습에서 많은 것을 배울 수 있었습니다. 알고리즘 학습 개발과 관련한 용어 정리나 서로 생각하는 프로젝트의 모습이 달라 혼란스러운 부분도 많았을 텐데, 끝까지 잘 구현해주셔서 감사합니다. 마지막으로 촉박한 기한에도 밤을 새워 PPT 작업을 맡아주신 덕분에 성공적으로 발표를 마칠 수 있었습니다.
배태용 프로젝트를 진행하다가 이해하지 못하는 내용이 있으면 A4 용지에 그림을 그려가며 설명해주셨는데, 그것이 정말 프로젝트 진행에 큰 도움이 되었습니다. 그리고 PR 리뷰도 정말 꼼꼼히 체크해주셔서, 덕분에 어떻게 PR 리뷰를 해야 하는지 배울 수 있었고, 프로젝트 기간 동안 Git으로 협업하면서 큰 이슈 없이 작업할 수 있었습니다. 본인이 맡은 파트는 어떻게든 기한 내에 완료하기 위해 밤을 새서라도 작업해주시는 모습이 인상 깊었고, 덕분에 무사히 프로젝트를 마칠 수 있었습니다! 😎
정유진 좋은 아이디어들을 제안해 주셔서 프로젝트의 주제를 정하는데 중요한 역할을 했었고, 구현 과정에서 정말 깔끔한 코드를 작성해주셔서 배울 점이 많았습니다. 코드 리뷰를 해주실때 제가 놓친 부분을 예리하게 캐치해주시고, 능숙한 협업툴 사용과 분석 능력으로 팀원들의 깃허브 병합 문제나 코드 문제들을 해결하는데 기여해주셨습니다.
허창훈 알고리즘 학습 로드맵과 게시물, 개념 문제 등록 기능을 설계하고 구현하며 프로젝트의 핵심 백엔드 로직을 탄탄히 다져주었습니다. 백엔드 패키지 구조와 코딩 컨벤션을 체계화해 팀이 일관된 개발 문화를 유지할 수 있도록 이끌었고, 문제 해결 과정에서 적극적으로 의견을 공유하며 PR을 꼼꼼하게 작성해주셔서 팀원들에게 모범이 되었고 덕분에 전체적으로 코드 가독성과 효율성을 높이는데 많은 도움을 주셨습니다.

김민지

평가자 내용
강지륜 공식적으로 PM 역할을 맡으신 것은 아니지만 팀을 전체적으로 이끌어 주시는 모습이 인상 깊었습니다. 문서화를 꼼꼼히 진행해 주셔서 프로젝트 중 잊기 쉬운 부분들을 다시 확인할 수 있었고 코드 리뷰를 자세히 해주셔서 오류를 빠르게 발견하고 수정할 수 있었습니다. 특히 가장 어려웠던 MSA 구축을 밤새우면서 끝까지 수행하신 모습은 매우 인상적이었고 그 모습을 본받고 싶다고 느꼈습니다!
배태용 프로젝트 기간 동안 조의 전체적인 진행을 이끌어주시면서 필요한 내용들을 노션에 체계적으로 정리하고 문서화해주셨습니다. PR 리뷰 시 코드의 의도를 정확히 파악하고 더 나은 설계 방향을 제안해주시는 모습에서 많은 것을 배울 수 있었습니다. 본인이 담당한 기업 정보 공유 게시판 개발을 완료한 후에는 프로젝트 평가의 핵심인 MSA 아키텍처 구축을 주도해주셨습니다. 이 과정에서 팀원들이 각자 개발한 기능들을 하나의 시스템으로 통합할 때 발생한 수많은 에러와 충돌 문제를 해결하느라 정말 고생 많으셨습니다. 발표 전날까지도 밤낮없이 디버깅하시며 전체 시스템을 안정화시켜주셨고, 덕분에 모든 서비스가 유기적으로 동작하는 완성된 MSA 구조를 발표 때 시연할 수 있었습니다. 👍👍
정유진 팀원들을 항상 같은 방향으로 이끌어 주시고, 코드 리뷰를 정말 꼼꼼하게 해주시고 놓친 부분이나 더 나은 개선방안을 제시해주셔서 프로젝트를 더 완성도 높게 만들어 주신 점이 좋았습니다. 또한, 발표 직전에 시간이 매우 촉박했음에도 포기하지 않고 MSA 구현까지 완성하시는 모습이 인상깊었습니다.
허창훈 기업별 정보 공유 기능과 MSA 아키텍처 구현, 유레카 서버 구축 등 인프라 및 서비스 확장성 측면에서 핵심적인 역할을 수행했습니다. 밤늦게까지 복잡한 백엔드 구조와 서버 환경을 안정적으로 설계하고 구현하며, Swagger 기반 API 문서와 postman을 잘 정리해 주셔서 발표를 부드럽게 진행하는데 전체적인 도움을 주셨고, 이에 대한 코드 품질 관리에 많은 도움을 주셨습니다. 또한 팀원들이 이해할 수 있도록 프로젝트의 기능에 대해 적극적으로 설명하여 한 방향을 볼 수 있게 협업을 이끌어주었습니다.

배태용

평가자 내용
강지륜 가장 많은 비중을 차지하는 스터디 관련 기능을 책임감 있게 맡아 주셨습니다. 구현해야 할 부분이 많아 상당히 부담이 되었을 텐데도 힘든 내색 없이 끝까지 개발을 완수해 주신 모습이 굉장이 인상깊었습니다. S3를 처음 사용하셨음에도 불구하고 성공적으로 적용해 주셨고 발표 또한 잘해주셔서 프로젝트를 잘 마무리할 수 있었습니다.
김민지 스터디 기능은 구현 범위가 정말 넓고 정리되지 않은 개념이나 용어도 많았지만, 촉박한 시간 안에 모든 작업을 마무리해주셔서 감사합니다. 깃 작업이나 백엔드 개발, S3 적용 모두 처음 해보신다고 하셨는데도, 함께 정한 컨벤션을 잘 지키며 빠르게 개발해주셔서 큰 도움이 되었습니다. 촉박한 기간에 모두가 예민해질 수 있는 상황에서도, 특유의 여유로운 분위기로 웃으며 넘어가 주시고 창훈님과 함께 저희의 당 충전까지 챙겨주셔서 많은 힘이 되었습니다. 마지막으로 발표도 많이 긴장되셨을 텐데 준비한 내용을 차분히 잘 전달해주셔서 프로젝트를 성공적으로 마무리할 수 있었습니다.
정유진 정말 범위가 큰 일과 중간 변경사항이 매우 많았던 부분을 맡으셨음에도 불구하고 불평 불만 없이 묵묵하게 끝까지 책임감 있게 임하시고, 많은 기능을 구현해주셔서 너무 감사했습니다. 거기에 발표까지 잘 해주셔서 프로젝트를 잘 마무리하는데에 이바지 해주셨습니다.
허창훈 다른 분들보다 많은 양의 스터디 모집 및 스터디 공간 기능 구현을 담당하셨는데 주말에 밤새면서까지 개발을 빨리 끝내셔서 일정에 차질이 없도록 하신 그 의지가 보여서 좋았습니다. 또한 S3 서버 구축을 담당하며 백엔드에서 기업별 정보 공유 게시물의 신뢰성의 한 부분인 파일 관리 기능을 안정적으로 구현하여 프로젝트의 핵심가치 중 하나인 신뢰도 부분을 나타내는데 큰 역할을 하셨다고 생각합니다. 또한 문제 해결 과정에서도 적극적으로 소통하며 팀 전체의 개발 효율을 높였습니다. 이번 백엔드 프로젝트 발표를 하셨는데 첫번째 발표라 엄청 긴장하셨는데도 불구하고 잘하셨습니다. 프론트엔드 발표 때도 해주셨으면 좋겠어요! 🙏

정유진

평가자 내용
강지륜 전체 기능이 동작하기 위해 반드시 필요한 스프링 시큐리티를 담당해 주셨습니다. 난이도가 높은 영역임에도 불구하고 힘든 내색 없이 강의를 여러 차례 반복해서 들으며 기능을 구현해 주셨습니다. 더 나아가 SMTP 기능까지 처음 사용하셨음에도 안정적으로 적용해 주셔서 프로젝트 완성도에 크게 기여해주셨습니다! 발표 직전까지 PPT 작업도 함께 마무리해주셔서 감사했습니다!
김민지 항상 밤을 새워가며 맡은 부분을 성공적으로 구현 완료해주셨습니다. 특히 SMTP 이메일 인증을 구현해주셔서 프로젝트에 큰 차별점을 만들 수 있었습니다. 프로젝트 후반부, MSA 적용 전에 회원가입 기능이 동작하지 않는 오류가 발생했을 때도 빠르게 해결해주셔서 덕분에 작업을 문제없이 이어갈 수 있었습니다. 또한 지륜님과 함께 PPT 작업까지 맡아주셔서 발표까지 원활히 마무리할 수 있었습니다.
배태용 프로젝트 초반에 제가 Git 사용이 미숙할 때 직접 어떻게 해야 하는지 도움을 주셨는데, 덕분에 프로젝트가 끝나갈 때쯤에는 Git을 꽤 수월하게 사용할 수 있게 되었습니다! 프로젝트 기간 내내 PR 리뷰도 엄청 꼼꼼히 해주셔서 제 코드의 문제점들도 빠르게 찾을 수 있었습니다. 프로젝트에서 회원 관련 기능과 Spring Security 인증·인가 시스템을 구축해주셨는데, 어려운 내용이라 개발하기 힘들었을 텐데 군말 없이 밤을 새면서까지 작업해주시는 모습이 인상적이였고, 그래서 최종적으로 Algo 시스템이 잘 동작할 수 있었습니다! 😎
허창훈 회원 관리, 신고, SMTP 기능 구현을 맡아 사용자 인증과 보안, 알림 기능을 안정적으로 제공했습니다. 이메일인증을 통해 이메일 회원가입을 해서 로그인 하는 로직을 저희 조만 했는데, 덕분에 더 차별성있고 탄탄한 프로젝트가 되는데 많은 역할을 하셨습니다. 백엔드 로직과 예외 처리에 강점이 있으며, 맡은 부분을 끝까지 책임감 있게 수행하고 팀원들의 질문에도 성실히 답하며 적극적인 PR을 통해 협업 분위기를 긍정적으로 이끌었습니다.

허창훈

평가자 내용
강지륜 논리 모델링 등 시작하기 전 미리 틀을 잡아주셔서 보다 빠르고 체계적으로 프로젝트를 진행할 수 있었습니다. 또한 프로젝트의 핵심 기능인 풀이 AI 피드백을 담당하셨는데 단기간 내에 AI를 활용한 풀이 피드백 기능을 밤을 새우면서 구현해 주셨습니다. 프로젝트 종료 이후에도 AI 관련 파트를 리팩토링하며 완성도를 높이고자 하는 모습이 매우 인상 깊었습니다.
김민지 깃허브 협업이나 스프링 기반 백엔드 개발이 익숙하지 않다고 하셨는데도 힘든 내색 없이 맡은 부분을 모두 훌륭히 구현해주셨습니다. 또한 중간중간 헷갈리는 개념들에 대해 질문해주셔서 함께 논의하며 프로젝트의 기반을 더욱 탄탄하게 다져갈 수 있었습니다. 제가 PR 리뷰에 많은 내용을 달았음에도 성실히 논의하고 잘 반영해주셔서 감사드립니다. 처음 시도하신 AI 모델 연동과 FastAPI 서버 구축도 빠르게 완성해주셔서 프로젝트에 큰 차별성을 더할 수 있었습니다.
배태용 창훈님은 지난 조에 이어서 한번 더 같은 조를 하게 되었는데, 여전히 제가 모르는 내용이 있거나 해서 물어보면 명쾌하게 대답을 해주셔서, 프로젝트를 막힘 없이 진행할 수 있었습니다. 창훈님은 저희 프로젝트의 차별화 포인트인 AI 코드 리뷰 기능을 담당해주셨는데, 사실 AI쪽 기술을 사용하는건 본인이 낸 아이디어도 아닌데다가, 처음 접해보는 기술인지라 매우 어려웠을텐데도 묵묵히 밤을 새서라도 작동이 될 수 있게 개발을 해주시는 모습이 인상 깊었습니다..! 이러한 새로운 기술 스택에도 적극적으로 도전하는 모습에서 저도 많은 자극을 받았습니다. 😊
정유진 항상 밝은 에너지로 팀 분위기를 좋게 만들어 주셨고, 논리 모델링 같은 문서 작업도 담당자가 정해지기 전에 미리 시작해 주셔서 큰 도움이 되었습니다. 또한 처음 도전하신 AI 기능 개발도 스스로는 자신 없어 하시는 듯했지만 결국 완성해 내시며 뒤에서 묵묵히 열심히 잘해 주신 분이셨습니다.

About

개발자 취업 준비생, 지금 우리에게 필요한 건? Algo! 🐨

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •