Skip to content

kusitms-com/32nd_Meetup_Team6_Teamficial_Back

Repository files navigation

🗣️ 함께의 시작을 부드럽게, 팀빌딩 서비스 "팀피셜"

팀피셜_웹썸네일(최종)

프로젝트 소개

팀피셜은 스펙이 아닌 ‘함께 일해본 사람들의 진짜 이야기’로 나를 보여주는 소프트스킬 기반의 팀빌딩 플랫폼입니다.

질문 템플릿을 통해 동료들이 기록한 나의 협업 성향, 일하는 태도, 커뮤니케이션 스타일을 투명하게 제공합니다.

팀피셜은 더 신뢰할 수 있는 협업, 더 조화로운 팀워크로 이어지는 과정 전반을 설계합니다. 3 4 5 15 19 21 28

주요기능

30

🚨 프로필 수정 및 삭제 시에는, 다른 유저들에게 혼동을 주지않기 위해 제약과 에러처리를 세세하게 로직에 구현해두었습니다.
  코드 경로 : src/main/java/teamficial/teamficial_be/domain/profile/dto/ProfileStatus.java

31 32 33 34

프로젝트 뷰 & 지원하기

Section 1

🚨 메인페이지에 게시글 리스트가 있는 만큼, 게시글 리스트 조회 API 쿼리 성능 개선에 집중했습니다.   서브쿼리를 사용하고 관련 인덱스를 사용하여, 300만건의 데이터에서 쿼리 속도를 300ms ~ 500ms정도로 개선하였습니다.

기술 스택

역할 기술 / 도구
Backend

: Java 17

  • 장기 지원(LTS, Long Term Support)을 제공하므로 안정성과 보안성이 높습니다.
  • 최신 언어 기능(레코드, 패턴 매칭, switch 표현식 등)을 활용할 수 있어 코드 가독성과 유지보수성이 개선됩니다.
  • 또한 GC 개선과 퍼포먼스 향상 기능들이 포함되어 있어 생산환경 운영에 유리합니다.

: Spring Boot 3.5.4

  • Spring Boot 3 버전은 최신 Spring Framework 기반이며, 성능, 보안, 관측성(observability) 등이 강화되어 있습니다.
  • 기본 설정으로도 안정적이고 빠른 개발/배포가 가능하며, 요즘 트렌드인 마이크로서비스 또는 클라우드 네이티브 환경에서 잘 맞습니다.

: Spring Data JPA

  • 관계형 데이터베이스(MySQL)와의 상호작용을 객체지향적으로 다룰 수 있게 해 주며, 복잡한 SQL 없이 CRUD 및 쿼리 정의가 간편합니다.
  • 트랜잭션 관리, 영속성 컨텍스트, 캐시 사용 등 엔터프라이즈 애플리케이션에 필수적인 기능을 제공합니다.

: Spring Security + JWT + OAuth2

  • 인증·인가를 표준화된 방식으로 처리 가능합니다
  • JWT 토큰 기반 인증으로 무상태(Stateless) 서버 아키텍처 구성합니다
  • OAuth2 연동을 통해 카카오, 구글 등 외부 로그인 지원합니다

: Docker

  • 개발 환경과 프로덕션 환경 간의 차이를 줄이고, 배포 일관성(consistency)을 확보할 수 있습니다. 그리고 컨테이너를 통해 의존성 관리, 확장성, 롤백 등이 쉬워지고, CI/CD와의 통합이 용이하여 사용했습니다.

: Github Actions

  • 자동화된 빌드(build), 테스트, 이미지 생성, 배포 파이프라인을 구성하기에 매우 적합하며, 코드 변경이 있을 때마다 지속적 통합(Continuous Integration) 및 지속적 배포(Continuous Deployment) 과정 자동화가 가능해 에러 가능성을 낮추고 배포 속도를 높이기에 사용했습니다.

: Swagger

  • API 문서화를 자동으로 생성해 주므로 프론트엔드 개발자가 API 명세를 쉽게 이해하고 사용할 수 있습니다.
  • 또한 API 변경 시 문서 유지보수가 쉬워지며, API 테스트/검증 시 유용합니다.

: MySQL

  • 안정성과 성숙성이 검증된 관계형 데이터베이스이며, 트랜잭션, 조인 쿼리, 데이터 무결성(INTEGRITY) 등이 중요한 데이터 저장소로 저희 프로젝트에 적합합니다.
  • 스케일업 및 스케일아웃 구조 설계 시에도 다양한 옵션과 커뮤니티/툴 지원이 풍부하여 사용했습니다.

: Redis

  • 빠른 읽기/쓰기 응답(latency)이 필요한 캐시(cache) 용도 또는 세션 관리, 빈번히 조회되는 데이터 저장 등에 적합합니다.
  • MySQL 등의 디스크 기반 DB와 혼합 사용 시 전체 시스템 응답성(performance) 및 확장성(scalability)을 향상시킬 수 있습니다.
  • 카카오 로그인을 통해 인증을 마친 뒤, token 정보 저장 및 관리를 위해 사용합니다.

: CLOVA Studio

  • 키워드 임베딩: 키워드를 벡터화하여 단순 키워드 매칭이 아닌 의미적 유사도 검색이 가능하도록 구현했습니다
  • 즉, 사용자가 질문에 대한 대답을 했을 때 문맥파악을 하여 키워드를 추출하였습니다.

: Open Search

  • 벡터 검색(Vector Search): 기능을 활용해 임베딩된 키워드를 효율적으로 저장·조회했습니다.

단순 키워드 일치 방식이 아니라, 질문·답변의 의미적 유사도(semantic similarity) 를 기반으로 콘텐츠를 추천하거나 관련 키워드를 찾아낼 수 있도록 구성했습니다.

  • 전체적으로 RAG 파이프라인의 Retrieval 단계를 담당하며, CLOVA Studio로 생성한 벡터를 OpenSearch에 저장하고, KNN 검색을 통해 가장 의미적으로 가까운 결과를 빠르게 반환하도록 구성했습니다.

BE 팀원

Backend (BE)
이연호 GitHub Avatar
이연호
Backend Lead
이민호 GitHub Avatar
이민호
Backend

시스템 아키텍처

팀피셜_아키텍처

ERD

teamficial_erd (3)

데이터 파이프라인

image

✅ 팀원이 작성해준 팀피셜록과 유사한 키워드를 찾기위해 우선 미리 선정한 키워드 100여개를 먼저 벡터 DB에 임베딩합니다.
  이후, 3개의 팀피셜록에 대해 각각 LLM을 이용하여 키워드 위주의 짧은 문장으로 변환합니다.
  그 문장을 임베딩하고, KNN 벡터 검색을 사용해 가장 의미가 유사한 키워드를 추출합니다.

프로젝트 구조

src
 └─ main
     └─ java
         └─ teamficial
             └─ teamficial_be
                 ├─ batch
                 │   ├─ job
                 │   ├─ scheduler
                 │   ├─ step
                 │   └─ tasklet
                 │
                 ├─ domain
                 │   ├─ application
                 │   ├─ auth
                 │   ├─ confirmed
                 │   ├─ keyword
                 │   ├─ myPage
                 │   ├─ profile
                 │   ├─ recruitingDetail
                 │   ├─ recruitingPost
                 │   └─ user
                 │
                 └─ global
                     ├─ apiPayload
                     ├─ config
                     ├─ entity
                     ├─ enums
                     ├─ redis
                     ├─ security
                     ├─ test
                     └─ util

관련 블로그

About

함께의 시작을 부드럽게 자연스러운 연결로 시작되는 팀빌딩, TEAMFICIAL

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •