/stelligence-backend

지식을 별처럼 연결해 탐색하는 사용자 참여형 지식 공유 플랫폼, stelligence 백엔드

Primary LanguageJava

Stelligence - 함께 만들어가는 지식의 별자리

구름톤 트레이닝 풀스택 개발자 과정
개발 기간 : 2024.01.04 ~ 2024.02.22

배포 주소

백엔드 서버 : https://api.stelligence.site
프론트엔드 서버 : https://www.stelligence.site

팀 소개

Pictures
Name 서범석 이영민 이은지 황한나
Role 문서 상세, 알림, 히스토리
문서 그래프, 토론, 신고
수정요청, 투표
로그인, 회원, 북마크, 배지
GitHub

프로젝트 소개

함께 만들어나가는 지식의 별자리, Stelligence사용자 참여형 그래프 기반 지식 공유 애플리케이션입니다 .

🔍 프로젝트 컨셉

프로젝트의 목표는 정보 검색의 새로운 패러다임과 함께 사용자 참여형 정보 공유의 장을 제공하는 것이었습니다.

위 한계를 해결하기 위한 새로운 패러다임으로 세컨드 브레인이라는 개념을 도입하였습니다. 정보를 제공하는 방법으로 그래프 구조를 채택하여 사용자에게 1차원적인 정보 전달이 아닌 계층 및 맥락과 관련한 정보를 함께 제공할 수 있게 하였습니다.

또한 검색될 내용들의 대상이 될 문서들을 제공하는 주체를 관리자 측이 아닌 사용자 측에 열어줌으로써, 사용자가 자유롭게 본인이 원하는 글을 작성하고 이를 기존의 그래프에 편입시킬 수 있도록 만들었습니다.

🔍 아키텍처

🔍 기술 스택





기능 명세

✨ 그래프 조회 및 검색

메인 페이지에서의 그래프 데이터와 검색 데이터를 제공합니다. 그래프 DB인 neo4j를 도입하여 글의 일부 정보를 중복 저장하여 효율적인 그래프 조회를 제공합니다. 메인 페이지인만큼 많은 조회가 예상되어 redis에 정보를 캐싱하여 더욱 더 효율적인 응답을 제공합니다. 적절한 트랜잭션 관리를 통해 관계형 DB와의 정합성을 유지합니다.

✨ 글 작성하기

사용자는 여러 프로젝트를 만들고, 소스코드를 작성하며 실행시킬 수 있습니다. 모든 내용은 저장되며, 다른 사용자를 초대해 함께 소스코드를 수정할 수 있습니다. 각 프로젝트 개발환경은 ECS를 통해 컨테이너로 관리됩니다.

✨ 글 수정 요청

프로젝트 생성 시점에 사용할 언어를 선택할 수 있습니다. 선택한 언어를 통해 컨테이너 이미지를 생성하여 사용자에게 개발 환경을 제공합니다.

✨ 투표

✨ 토론

논쟁의 여지가 있는 수정 요청에 대해 토론을 진행할 수 있는 환경을 제공합니다. 토론의 지속/종료는 스케쥴러에 의해 관리되어 관리자 없이도 적절히 처리됩니다.

✨ 알림

현재 작성중인 소스코드에 대한 코드 리뷰를 간편하게 받을 수 있으며, 질문이 있는 경우 내장되어있는 ChatGPT 기능을 통해 결과를 받아 볼 수 있습니다.

✨ 북마크

사용자는 원하는 글에 북마크를 추가해 나중에 쉽게 찾을 수 있습니다. 추가한 글, 혹은 마이페이지에서 삭제도 가능합니다. 추가한 북마크는 마이페이지에서 더보기(Paging)로 추가 조회할 수 있습니다.

✨ 배지

사용자는 활동에 따라 다양한 배지를 획득할 수 있습니다. 이벤트 리스너를 통해 사용자의 활동을 감지하고, 적절한 배지를 부여합니다. 획득한 배지는 마이페이지에서 확인할 수 있습니다.

✨ 히스토리

✨ 신고

부적절한 글이나 댓글을 신고할 수 있습니다. (글, 댓글) 신고는 그 특성상 비슷한 구조를 하고 있고, 추후 더 많은 카테고리에 대한 신고가 추가될 수 있으므로 추상 클래스와 상속을 통해 도메인을 효율적으로 관리합니다.

✨ 소셜 로그인(OAuth2)

사용자는 소셜 로그인을 통해 간편하게 회원가입 및 로그인을 할 수 있습니다. 회원가입 시 사용자의 이메일, 이름(별명), 프로필 사진을 저장합니다. 소셜 로그인은 구글, 카카오, 네이버를 지원합니다. Spring Security, JWT, OAuth2를 사용했으며, RTR(Refresh Token Rotation)을 적용해 보안을 강화합니다. 쿠키에 토큰을 저장하고, 쿠키의 HttpOnly 속성을 true로 설정해 XSS 공격을 방어합니다.

🔗 산출물

🎞 시연 영상

Stelligence

📝 팀 노션

notion

📌 API Docs

🔗 Swagger

🔗 Notion Link

ERD

🤝 공동작업 GitHub

💫 프론트엔드