[토이 프로젝트] 프로젝트 모집 플랫폼(1)

lsh9672·2022년 1월 30일
0

spring boot

목록 보기
3/3

진행환경

  • os : ubuntu 20.04.3
  • IDE : IntelliJ
  • open jdk 11, spring boot
  • DB: h2(개발 단계 - ver 1.4.200) ,mysql(실제배포)
  • AWS EC2, RDS, S3 (사용예정)
  • 진행인원 : 3명(프론트:1 - react , 백엔드:2 - spring boot)

개요

토이 프로젝트를 진행하려면 개인프로젝트보다는 팀을 꾸려서 파트별로 진행하는 것이 좋다고 생각한다.
하지만 이렇게 진행을 하려면 사람을 모아야 하는데 각 분야에 맞는 사람 모으기가 쉽지가 않다
필자의 경우, 컴퓨터공학과에 재학중인데, 프로젝트를 하려고 사람을 모으면 10에 9은 백엔드 또는 ai를 희망한다고 한다.
웹을 개발하려면 프론트엔드가 필요했는데 재학중인 과 안에서는 구하기가 쉽지 않았다.
이런 프로젝트를 모집하는 플랫폼이 있나 찾아보면 대부분 수도권쪽에서만 활동을 하는 사람을 구하는 플랫폼이 대부분이었다.
그래서 spring boot공부겸 진행하는 토이 프로젝트로 이러한 주제를 선정해서 만들어보려고 한다.

기능

이 프로젝트에서는 다음과 같은 기능들을 구현해 보려고 한다
(스프링부트 공부를 막 시작한 터라 기술적인 내용은 진행하면서 채워나가려고 한다.)

  • 회원가입
    • 아이디
    • 닉네임
      1) 서비스에서 표시되는 것은 아이디가 아니라 닉네임
    • 프로필 사진
      1) 없으면 디폴트 이미지를 넣음.
    • 비밀번호
    • 비민번호 확인
    • 대학교 정보
      1) 학교
      2) 학과
      3) 재적상태 - 졸업,졸업예정, 재학, 휴학

    • 학교 이메일
      1) 인증용으로 사용함
    • 희망분야
      1) 백엔드
      2) 프론트엔드
      3) 풀스택
      4) 디자이너
      5) 모바일 - android
      6) 모바일 - IOS
      7) AI-컴퓨터비전
      8) AI-자연어처리
      9) 게임
    • 기술스택
      1) 주사용언어와 프레임워크 등등의 내용을 사용자가 직접 입력하도록 함
  • 로그인
    • 아이디
    • 비밀번호
  • 아이디 및 비밀번호 찾기
    • 가입시 사용한 이메일
      1) 입력한 이메일로 인증번호를 보냄
      2) 인증번호의 경우, 서버에서 랜덤하게 생성한 번호를 메일로 보내고,
      메일에서 확인후에 다시 웹페이지로 돌아와서 입력하고 확인버튼을 누름
      3) 인증완료되면 비밀번호 새로 설정
  • 정보수정
    • 닉네임
    • 비밀번호
    • 대학교 정보
      1) 대학교 정보 수정시에 학교 이메일 인증과정을 다시 거치도록함.
  • 게시물(작성자)
    • 프로젝트 제목
    • 프로젝트 설명
    • 모집인원
      1) 사용자가 직접 입력하도록 함
    • 모집내용
      1) 개발자 분야(드롭박스로 선택)
      2) 주요업무
      3) 자격요건
      4) 우대사항
      5) 모집분야가 여러개이면 추가버튼을 이용해 1~4번의 내용을 여러개 추가할수 있음
      6) 추가버튼 누를시에 1~4의 내용이 하나의 블록처럼 추가됨
    • 작성자 연락처
      1) 개인연락처 또는 오픈채팅이나, 연락받을 메일을 자유롭게 입력하도록함.
    • 프로젝트의 기술스택
      1) 드롭박스를 이용해서 사용자가 주어진 기술스택중에 선택하도록 함.
      2) 기술스택은 여러개 선택할수 있게 함.
    • 마감일입력
      1) (년/월/일/시/분)을 입력하게 함
      2) 해당시간이 넘으면 마감처리됨
    • 댓글 기능
      1) 작성자가 작성시에는 작성자표시를 넣음
      2) 작성, 삭제, 수정 가능하게 함.
    • 마감버튼
      1) 버튼을 누르면 진행중에서 마감으로 바뀌도록 함.
  • 게시물(사용자)

    • 작성자 정보
      1) 작성자의 정보(회원가입시 입력한 정보의 일부)를 보여줌
    • 댓글
      1) 댓글입력, 삭제가능
      2) 대댓글 기능(대댓글은 하나의 댓글에 한번의 대댓글만 가능 - 대댓글의 대댓글은 안됨)
      3) 마감처리된 게시물에는 댓글작성 불가
  • 보류 - 추가예정(현재 필요성을 못느끼거나, 기본기능 구현후에 구현할 기능들)

    • 공모전 수상실적을 인증하면 등급을 부여(ex. github의 별개수처럼)
    • 서비스내 채팅기능
      1) 모바일 앱으로도 서비스를 했다면 바로 추가하려했지만,웹으로만 구현예정이라
      일단은 보류(위의 기능이 완성된 후에 고려예정)
    • 쪽지 기능
      1) 작성자에게 직접 메시지를 남기는 기능
      2) 개인적인 질문을 할수 있게 하는 용도
      3) 기술적으로 어떤식으로 구현하는지 파악이 잘안되서 잠시 보류
      4) 작성자가 연락처를 남겼는데 굳이 필요한지에 대한 의문으로 보류(앱으로도 서비스를 한다면 구현했지만 웹이라 보류중임)
    • 즐겨찾기 기능
      1) 기본적인 기능들을 테스트 해보고 나서 결정할 예정

도메인 모델 설계

위의 기능들을 보고 jpa를 이용해서 1차적으로 모델을 설계해 보았다.
h2를 이용해보았으며, jpa강의를 듣고 이를 토대로 설계후, 코드로 작성해보았다.

spring boot에 jpa를 이용해서 디비를 생성하기 위해서 다음과 같이 설계해 보았다.

  • Member
    1) 회원의 모든 정보를 담고 있는 테이블
    2) 회원가입시에 필요한 정보들을 전부 넣어줌.
    3) Poster,Comment,SubComment와 1대다로 맵핑함.
    4) 대학교 정보에 대한 내용은 UnivInfo객체를 만들어줌.
    5) UnivInfo에 재적정보는 Enum타입으로 만들어줌.

  • Poster
    1) 게시물의 정보를 담고 있는 테이블
    2) 사용자 한명에 여러 게시물이 생길수 있기 때문에 Member 테이블과 Poster테이블은 1대다로 맵핑해줌
    3) 모집분야는 하나의 게시물에서 여러개가 생기기 때문에 별도의 테이블(RecruitmentField)로 구분해서 1대다로 맵핑해줌(게시물하나에 여러개의 모집분야가 생김)

  • Comment
    1) 댓글을 저장하는 테이블
    2) 사용자 한명에 여러개의 댓글이 있기때문에 1대다,게시물또한 여러개의 댓글을 가지기 때문에 1대다로 맵핑함
    3) 댓글에서 사용자 닉네임을 눌러서 프로필을 보는 경우를 생각해서 Member테이블이랑 맵핑함

  • SubComment
    1) 댓글에 댓글을 다는 대댓글 정보를 저장하는 테이블
    2) 이 또한 마찬가지로 대댓글의 사용자닉네임을 통해서 프로필을 보는 경우를 생각해서 Member테이블이랑 맵핑함.

  • RecruitmentField
    1) 위의 기능중에 게시물작성시에 추가버튼을 이용해서 추가하는 모집분야내용이 들어있는 테이블

  • UnivInfo
    1) 학교 정보를 나타냄(학교이름, 학과,재적상태)

  • UnivStatus
    1) 학교 재적상태 4가지를 Enum으로 나타냄

  • Status
    1) 게시물의 마감 상태 2가지(마감, 진행중)를 Enum으로 나타냄

Spring boot 생성

start.spring.io에서 다음과 같이 버전을 설정하고 디펜던시를 추가해 주었다.
Thymeleaf의 경우 만약의 사태를 대비해서 넣어두었다.(백에서 프론트 화면을 만들어야되는 최악의 상황에서 사용하기 위해)

디비 결과

위의 도메인 설계 모델을 토대로 코드로 작성후에 실행해서 h2디비에 테이블이 생성된 결과이다.
(코드의 경우 깃허브에 push해두었다.)

  • h2 디비 테이블

github : https://github.com/lsh9672/toy_project_platform.git

profile
백엔드 개발자를 희망하는 취준생입니다.

0개의 댓글