개발놀이터

스프링 프로젝트 : 스터디 모임 사이트 (개요) 본문

사이드 프로젝트/스터디 모임 사이트

스프링 프로젝트 : 스터디 모임 사이트 (개요)

마늘냄새폴폴 2022. 9. 19. 14:30

이번 프로젝트의 주제와 별개로 제 나름대로의 목표는 두가지입니다. 

 

  1. TDD 적극 이용
  2. 네이티브 쿼리 없애기

제 프로젝트는 아무 생각없이 프로젝트를 진행하는 것이 아니라 제가 얻어가는 것이 하나라도 있어야 한다는 대전제를 가지고 있습니다. 따라서 이번 프로젝트에서는 TDD 적극 이용, 그리고 네이티브 쿼리 없애기를 목표로 진행하도록 합니다. 

 

 

개요

주제 선정 이유

이번 주제는 스터디 모임 사이트입니다. 말 그대로 스터디 모임에 있어서 편리함을 주는 사이트입니다. 기존 스터디 모임 사이트가 있긴 하지만 단순히 스터디 할 사람 모여라~ 하고 모이고 스터디하고 이런 사이트가 주로 이룹니다. 

 

따라서 제 사이트는 다른 스터디 사이트들과 차별점을 이룹니다. 바로 프로그램이 알아서 스터디를 관리해준다는 것입니다. 

 

이런 사이트는 왜 없을까 하고 생각하다가 만든 사이트라고 생각해주시면 좋겠습니다. 

 

 

사용하는 기술 스택

IDEA : IntelliJ, VSCode

백엔드 : Spring boot, Spring Batch, Spring Security

프론트엔드 : html, css

DB : MySQL

 

 

 

들어가는 기능

우선 크게 일곱가지로 구분할 수 있습니다. 

 

  1. 로그인, 회원가입
  2. 스터디 생성
  3. 과제 업로드
  4. 참여한 스터디 방 관리
  5. 알람 기능
  6. 물을 흐리는 회원을 강퇴하는 기능 (스터디 장만 이용 가능)
  7. 스터디 게시판

하나씩 설명해보도록 하겠습니다. 

 

우선 로그인, 회원가입 부문입니다. 

 

로그인, 회원가입

로그인은 크게 일반 로그인, 소셜 로그인 두개로 나뉩니다. 일반 로그인은 회원가입을 통해 가입하는 루트입니다. 일반 로그인의 특징으로는 스프링 시큐리티의 BCryptPasswordEncoder를 이용해 비밀번호를 암호화 한다는 점입니다. 또한 Remember-Me 기능을 이용해 한번 로그인 한 사용자는 재접속 했을 때 로그인 정보를 가지고 있는 디비를 바탕으로 사용자를 구분합니다. 

 

소셜 로그인은 OAuth 2.0을 이용해 구글, 네이버, 카카오로 로그인 할 수 있는 기능입니다. 로그인은 간편하고 편하지만 비밀번호 암호화나 Remember-Me 기능을 사용할 수 없다는 특징이 있습니다. 

 

 

스터디 생성

스터디 장은 언제든지 스터디를 생성할 수 있습니다. 스터디를 생성하는데에 필요한 자격은 없으며 아무나 손 쉽게 스터디를 생성할 수 있습니다. 

 

스터디 장이 스터디를 생성할 때 눈여겨 봐야 하는 점은 두가지입니다. 

 

  1. 마감 기한
  2. 경고 횟수

이 외에도 스터디 이름이나 스터디 내용 등을 기입할 수 있습니다. 먼저 마감 기한부터 알아보도록 하겠습니다. 

 

마감 기한은 해당 스터디를 참여한 사람들이 과제를 반드시 제출해야 하는 기간입니다. 예를 들어서 "마감 기한이 3일이다" 라면 3일에 한번씩은 스터디에 참여한 사람들이 과제를 반드시 제출해야 하며 제출하지 못한 경우에는 경고가 1회 추가됩니다. 

 

다음 경고 횟수입니다. 방금 마감 기한과 연결되는 부분이며 경고 횟수를 정할 수 있습니다. 예를 들어서 "경고 횟수가 3회다" 라고 한다면 경고 횟수가 3이 되는 순간 스터디에 참여된 사람이 강퇴됩니다. 강퇴된 회원은 다시 입장할 수 없습니다. 

 

 

과제 업로드

과제는 업로드로 진행됩니다. 물론 게시글로 인증하는 방법도 있겠지만 그런 방법은 프로그램이 이 사람이 정말 과제를 제출했는지 체크하기 쉽지 않습니다. 과제를 제출했다는 게시글일 수도 있지만 단순한 잡담일 가능성도 있기 때문입니다. 

 

과제 업로드는 aws의 s3 버킷을 사용합니다. 스터디에 가입한 사람은 스터디 장이 정한 마감 기한 안에 과제를 제출해야 합니다. 과제 제출은 이미지, 한글파일, 워드, 피피티 아무거나 상관 없습니다. 

 

과제 업로드 부분은 나 자신과의 약속이기도 합니다. 물론 그 약속을 어겼을 때의 상황에는 프로그램의 도움이 조금 들어가지만 기본적으로는 나 자신과의 약속입니다. 

 

예를 들어서 "토익 스터디방이다" 라고 한다면 내가 공부한 토익을 스터디 방에 꾸준히 업로드 하는 것을 과제 제출로 봅니다. 하지만 토익에 관련된 내용이 아니라 다른 파일을 제출할 수도 있습니다. 프로그램은 이러한 거짓말을 걸러내지 못합니다. 단순히 냈는지 안냈는지만 확인할 수 있습니다. 

 

이러한 부분에서는 프로그램이 관여하지 않습니다. 때문에 이러한 상황은 온전히 개인과의 약속에 의존합니다. 

 

스터디에 참여한 회원들은 자신이 제출한 요일을 상시로 볼 수 있으며 냈는지 안냈는지를 일주일 단위로 체크할 수 있게 도와줍니다. 

 

 

참여한 스터디 관리

참여한 스터디들은 스케줄러와 스프링 배치를 이용해 자동으로 관리됩니다. 우선 크게 봤을 때 배치 잡은 두개입니다. 

 

  1. 모든 과제 제출 내역을 일주일마다 null로 바꾸는 잡
  2. 참여한 스터디 방을 관리하는 잡

우선 간단한 1번부터 확인해보도록 하겠습니다. 

 

모든 회원들은 과제를 제출할 때마다 자신이 냈는지 안냈는지를 일주일 단위로 체크할 수 있습니다. 따라서 일주일이 지났을 경우에는 다시 원래대로 돌아와야 합니다. 이러한 작업을 도와주는 잡이 바로 1번 잡입니다. 

 

조금 복잡한 2번 잡을 확인해보도록 하겠습니다. 

 

모든 회원들은 스터디 장이 설정한 마감 기한과 경고 횟수에 영향을 받습니다. 우선 회원이 마감 기한 내에 과제를 제출하지 못했다고 가정합니다.

 

그럼 우선 첫번째 Step에서 해당 회원을 걸러냅니다. 해당 회원은 경고 횟수가 1회 증가합니다.

 

다음 Step에서는 경고 횟수가 스터디 장이 설정한 경고 횟수에 다달았을 경우 해당 회원을 걸러내어 이 회원을 강퇴시킵니다. 강퇴된 회원은 다시 해당 스터디에 참여할 수 없습니다. 

 

마지막 Step에서는 모든 회원이 강퇴되었을 경우를 상정합니다. 모든 회원이 경고 횟수를 채워 모두 강퇴되었다면 해당 방에는 아무도 남지 않습니다. 따라서 이러한 상황에서는 방이 CLOSE 됩니다. CLOSE가 된 방은 다시 참여할 수 없으며 클라이언트 단에서 "종료된 스터디" 라고 표시해 줍니다. 

 

 

알람 기능

스터디에 참여된 회원들은 자신이 경고를 받았거나 강퇴되었을 경우를 대비해 알람 기능이 있습니다. 자동으로 스터디를 관리해주는 배치 잡에 의하여 경고 횟수가 1회 증가하였으면 "~방에서 경고 횟수가 1회 증가하였습니다." 라는 알람이 전달됩니다. 또한 해당 스터디에서 강퇴되었을 경우 "~방에서 강퇴되었습니다." 라는 알람이 전달됩니다. 

 

해당 알람은 일주일 동안 유지되고 일주일이 지나면 알람이 더이상 보이지 않습니다. 

 

 

물을 흐리는 회원을 강퇴하는 기능

뒤에 나올 게시판을 이용하다 보면 물을 흐리는 사용자가 있을 수 있습니다. 이러한 사용자는 스터디 장에 한해 강제로 강퇴시킬 수 있습니다. 

 

해당 기능은 스터디 장만 이용 가능하며 나머지 회원들은 해당 기능을 사용할 수 없습니다. 

 

 

스터디 게시판

스터디 과제 제출 페이지에서 게시판을 이용할 수 있습니다. 이곳에서 스터디에 모인 사용자들끼리 잡담을 주고 받을 수 있습니다. 여기서 물을 흐리는 회원에 대해서 위에서 언급한 강퇴 기능이 활성화 되어있습니다.