토이 프로젝트를 진행하려면 개인프로젝트보다는 팀을 꾸려서 파트별로 진행하는 것이 좋다고 생각한다.
하지만 이렇게 진행을 하려면 사람을 모아야 하는데 각 분야에 맞는 사람 모으기가 쉽지가 않다
필자의 경우, 컴퓨터공학과에 재학중인데, 프로젝트를 하려고 사람을 모으면 10에 9은 백엔드 또는 ai를 희망한다고 한다.
웹을 개발하려면 프론트엔드가 필요했는데 재학중인 과 안에서는 구하기가 쉽지 않았다.
이런 프로젝트를 모집하는 플랫폼이 있나 찾아보면 대부분 수도권쪽에서만 활동을 하는 사람을 구하는 플랫폼이 대부분이었다.
그래서 spring boot공부겸 진행하는 토이 프로젝트로 이러한 주제를 선정해서 만들어보려고 한다.
이 프로젝트에서는 다음과 같은 기능들을 구현해 보려고 한다
(스프링부트 공부를 막 시작한 터라 기술적인 내용은 진행하면서 채워나가려고 한다.)
게시물(사용자)
보류 - 추가예정(현재 필요성을 못느끼거나, 기본기능 구현후에 구현할 기능들)
위의 기능들을 보고 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으로 나타냄
start.spring.io에서 다음과 같이 버전을 설정하고 디펜던시를 추가해 주었다.
Thymeleaf의 경우 만약의 사태를 대비해서 넣어두었다.(백에서 프론트 화면을 만들어야되는 최악의 상황에서 사용하기 위해)
위의 도메인 설계 모델을 토대로 코드로 작성후에 실행해서 h2디비에 테이블이 생성된 결과이다.
(코드의 경우 깃허브에 push해두었다.)
github : https://github.com/lsh9672/toy_project_platform.git