Skip to content

StartStudy-project-hui/backend

Repository files navigation

Start Study

개발자들을 위한 온라인 스터디 플랫폼

example branch parameter

초기 데이터

아이디 : admin@naver.com 
pwd : Y@3r9o$7aaak

아이디 kimSky@naver.com
pwd :Y@3r9o$7k

commit-message

  • feat: 새로운 기능 추가, 요구 사항 변경으로 인해 기존 기능 변경
  • fix: 버그 수정
  • docs: 문서 추가 및 수정 (주석 등)
  • style: 코드 스타일 수정 (포매팅, 세미콜론 누락 등)
  • refactor: 프로덕션 코드 리팩토링 (버그 수정이나 기능 추가를 제외한 코드 변경)
  • test: 테스트 코드 추가 및 리팩토링 (기능을 구현할 때 테스트 코드를 함께 작성했다면 feat 사용)
  • chore: 빌드, 배포 등 기타 작업들을 추가 및 수정
  • rename: 파일명 변경
  • remove: 파일 삭제
  • revert: 작업 되돌리기

프로젝트 소개

온라인 스터디 플랫폼으로 스터디 그룹을 쉽게 생성하고 참여할 수 있도록 하며, 사용자가 스터디를 개최하고 참여함으로써 지속적인 학습과 커뮤니티 형성을 지원하다. 개발자들에게는 스터디는 지식공유와 함께 성장의 핵심 요소 중 하나여서 많은 개발자들은 스터디를 이용한다. 이 플랫폼을 통해 프로젝트를 통해 인원을 모으거나 cs공부, 코딩테스트 공부 등 지속적인 성장을 할 수 있도록 지원한다.

프로젝트 핵심 기능

  • 코딩테스트와 프로젝트, cs, 기타 카테고리를 나눔으로써 사용자가 필요한 스터디를 찾기 쉽도록 구성.
  • 관심 게시글을 등록하면 마이페이지에 저장.

Swagger

Swagger

image image image

서비스 화면

메인화면 회원가입
비회원 상세페이지[관리자]
게시글 상세(자신 게시글) 게시글 상세(타인 게시글)
글쓰기[모든 사용자] 마이페이지[모든 사용자]
회원정보[관리자] 전체글[관리자]

기술 스택

BackEnd

image

Infra

image

프로젝트 아키텍처

starstudy drawio

백엔드 아키텍처

image

CI/CD

image

주요 기능

공통 사용자 관리자
- 회원가입
- 일반 로그인
- 네이버, 카카오 소셜 로그인 연동
- 메인 페이지 게시글 조회 기능
- 게시글 상세 조회 및 댓글 조회 기능
- 게시글 관리
- 관심 게시글 및 내가 작성한 게시글 조회
- 사용자 정보 조회 및 수정 기능
- 댓글 관리
- 사용자 전체 게시글 조회 기능
- 회원 정보 조회 기능
- 사용자 게시글 삭제 기능

구현 기능

공통

회원 가입 및 로그인, 로그아웃 기능
  • 구현 기능

    • 사용자 회원 가입
    • 일반 로그인과 로 네이버, 카카오 소셜 로그인 연동
    • 로그아웃 기능
  • 구현 방법

    • 회원 가입 : 사용자 회원 정보를 받아 DB 저장
      • 회원가입 : BCryptPasswordEncoder를 이용하여 단방향 해시 암호화
      • 비밀번호와 비밀번호 확인이 같은지 체크
      • 이미 가입한 회원인지 확인
    • 로그인 : 로그인 양식을 받아 DB의 비밀번호와 같은지 확인 후, Access Token, Refresh Token 발급
    • 네이버, 카카오 소셜 로그인 연동
      • 성공 시, 메인으로 이동하며 loginSuccess=true 표시 및 Access Token, Refresh Token 발급
      • 실패 시, 메인으로 이동하며 loginSuccess=false 표시
    • 로그아웃: 로그아웃 요청 시, Refresh Token 제거
Spring Security, JWT 발급 및 재발급
  • 구현 기능
    • Spring Security, JWT 발급
    • JWT토큰 재발급
  • 구현 방법
    • JWT

      • 로그인 시, Refresh Token DB에 저장
      • Access Token 재발급 /renew-token로 요청
        1. 기존 Access Token과 Refresh Token 일치하는 지 비교
          • 기존 Access Token이 만료되었다면
          • Access Token 재발급하여 header에 Access Token과 Refresh Token 전송
        2. 둘다 만료가 되지 않았다면
          • header에 기존의 Access Token과 Refresh Token 전송
        3. Refresh Token도 만료되었을 경우
          • "토큰이 만료되었습니다. 다시 로그인해주세요" 예외 발생
    • Spring Security

      • 사용자, 관리자 권한 설정하여 API 요청에 따라 접근 제어
메인 페이지 게시글 조회 기능
  • 구현 기능
    • 모집 중인 게시글 조회 기능
    • 카테고리는 기타, CS, 전체, 코테, 프로젝트로 조회 가능
    • 조회 순서는 최신순, 인기순으로 조회 가능
    • 오프라인/온라인 여부 : 전체, 온라인, 오프라인
  • 구현 방법
    • 기본 정렬은 최신순으로 조회되며, 카테고리는 전체 조회로 됨
    • 기본 정렬은 전체로 조회됨.
    • 카테고리 및 주문 순서 별 게시글 조회
      • 카테고리 및 주문 순서에 대한 정보를 받아 Querydsl 동적 쿼리를 이용하여 모집중인 게시글만 조회
    • PageableExecutionUtils 사용하여 페이징 처리하여 게시글 조회
    • null값을 이용하여 동적 쿼리를 이용하여 게시 조회
    • 서브 쿼리를 이용하여 댓글 수 조회
    • board테이블과 join하여 조회수 조회
    • 10개씩 게시글 조회가 되며, 크기 조절 가능
게시글 상세 조회 및 댓글 조회 기능
  • 구현 기능
    • 게시글 상세 조회 및 댓글 조회 기능
  • 구현 방법
    • 쿠키를 통해 조회수 중복 방지
    • 게시글 번호를 이용하여 DB에서 select
    • Access Token이 존재하는 경우, 사용자의 Id를 통해 해당 게시글이 관심 게시글인지 판단
    • 댓글 조회 기능
      • 해당 게시글 댓글들 가져오기
      • 댓글들 중에서 내 댓글인지 확인 및 삭제된 댓글인지 확인

사용자

게시글 관리
  • 구현 기능
    • 게시글 등록 , 수정 , 삭제 및 모집 여부 변경 기능
  • 구현 방법
    • 게시글 등록
      • 게시글 등록 정보를 받아, DB에 게시글 등록
    • 게시글 수정
      • 수정할 카테고리 및 제목, 내용에 대한 정보를 받아 존재하는 게시글인지 판단 후, DB 수정
    • 게시글 삭제
      • 댓글 또는 관심글이 있는 게시글일 경우, DB에서 삭제 불가
      • 댓글 또는 관심글이 없는 게시글일 경우, DB에서 삭제 가능
    • 모집 여부 수정
      • 모집 구분( 모집중, 모집완료 )
      • 수정할 모집 구분에 대한 정보를 제공 받아, 게시글이 존재하는지 검사 후 수정
관심 게시글 및 내가 작성한 게시글 조회
  • 구현 기능

    • 게시글 등록 , 수정 , 삭제 및 모집 여부 변경 기능
    • 관심 게시글 조회, 등록, 삭제 기능 및 내가 작성한 게시글 조회
      • 관심 게시글 조회 및 내가 작성한 게시글 조회
      • 카테고리는 기타, CS, 전체, 코테, 프로젝트 조회
      • 조회 순서는 최신순, 인기순으로 조회
  • 구현 방법

    • 관심 게시글 조회 및 내가 작성한 게시글 조회
      • 기본 정렬은 카테고리는 전체, 조회 순서는 최신순, 모집 여부는모집중, 모집완료로 조회
      • 모집 여부, 카테고리, 주문 순서에 대한 정보를 받고, Access Token을 통해 현재 사용자 정보에 대해 제공 받아 Querydsl의 PageableExecutionUtils이용하여 페이징 처리
      • null값을 이용하여 동적 쿼리를 이용하여 게시글 조회
      • 서브 쿼리를 이용하여 댓글 수 조회
      • board와 join하여 조회수 조회
      • 10개씩 게시글 조회되며, 크기 조절 가능
사용자 정보 조회 및 수정 기능
  • 구현 기능
    • 사용자 정보 조회 및 수정 기능
  • 구현 방법
    • 사용자 정보 조회
      • Access Token을 통해 현재 사용자가 있는지 검사 후, 정보 조회
    • 사용자 정보 수정
      • 사용자 정보 수정 관련 데이터를 받아 사용자가 있는지 검사 후, 사용자 정보 수정
댓글 관리
  • 구현 기능
    • 댓글 등록, 수정, 삭제 기능
  • 구현 방법
    • 댓글 등록
      • 게시글 번호와 부모 댓글 번호, 댓글 내용에 대한 정보를 받는다.
      • 부모 댓글이 null이 아닌 경우, 대댓글로 작성되어 DB에 Insert한다.
    • 댓글 수정
      • 댓글 번호와 내용에 대한 정보를 받아 해당 댓글을 DB에 Update한다.
    • 댓글 삭제
      • 선택한 해당 댓글 번호에 대한 정보를 받아 해당 댓글과 부모 댓글을 fetch join을 이용하여 한꺼번에 가져온다.
      • 해당 댓글에 대댓글이 있는 상태라면, 해당 댓글을 삭제 여부 컬럼에서 TURE로 DB에 Update한다
      • 해당 댓글에 대댓글이 없다면, 부모 댓글 DB에서 삭제한다.
      • orphanRemoval = true 로 부모 댓글이 삭제되면 해당 댓글도 삭제된다.

관리자

사용자 전체 게시글 조회 기능
  • 구현 기능
    • 사용자 전체 게시글 조회 기능
      • 모집 여부는 모집중, 모집완료 및 둘 다(모집중, 모집완료) 로 조회 가능
      • 카테고리는 기타, CS, 전체, 코테, 프로젝트로 조회 가능
      • 조회 순서는 최신순, 인기순으로 조회 가능
  • 구현 방법
    • 전체 게시글 조회 기능
      • 기본 정렬은 카테고리는 전체, 조회 순서는 최신순, 모집 여부는모집중, 모집완료 모두 조회
      • 모집 여부, 카테고리, 주문 순서에 대한 정보를 받고 Querydsl의 PageableExecutionUtils이용하여 페이징 처리
      • null값을 이용하여 동적 쿼리를 이용하여 게시글 조회
      • 서브 쿼리를 이용하여 댓글 수 조회
      • board와 join을 조회수 조회
      • 10개 씩 게시글 조회되며, 크기 조절 가능
사용자 게시글 삭제 기능
  • 구현 기능
    • 관리자가 사용자 게시글 삭제하는 기능
  • 구현 방법
    • 해당 게시글 번호에 대한 정보를 제공 받아 게시글이 있는지 판단한다.
    • 해당 게시글을 삭제여부커럼에 True라고 DB에 Update
    • 게시글의 제목을 “관리자로 의해 게시글 삭제” 로 DB에 Update
    • 게시글 내용을 “관리자로 의해 게시글 삭제되었습니다.”로 DB에 Update
회원 정보 조회 기능
  • 구현 기능
    • 회원 정보 전체 조회 및 특정 문자열에 시작하는 모든 회원 정보 제공
  • 구현 방법
    • Querydsl의 동적 쿼리를 null값을 이용하여 회원 정체를 제공 받거나 startsWith()를 이용하여 특정 문자열에 시작되는 사용자 정보 조회

Member

Backend Frontend
전유진 원종대

About

개발자들을 위한 온라인 스터디 플랫폼

Resources

Stars

Watchers

Forks