교육과정에서 스프링 MVC 및 Mybatis(SQL Mapper Framework)를 마무리 하고 과제의 성격으로 미니 프로젝트를 진행하게 되었다. 그리고 어쩌다 보니 이 프로젝트에서 조장을 맡게 되었다. 3일이라는 기간이 주어진다고 하였고, 거기다 일정이 넉넉하지 않아 완전한 애플리케이션을 완성시키기에는 무리가 있을 것으로 판단, 조원들과 프로젝트가 시작되기 전에 몇 차례 회의를 진행하게 되었다.
위의 고려사항을 만족하며 팀원들과 상의하게 된 프로젝트 주제가 마니또 애플리케이션,
이 주제를 선정하게 된 근거는 우선 마니또라는 게임이 모두가 직관적으로 이해하기 쉽다고 생각해서였고, 또한 단순히 게시판을 구현하는것 보다는 누군가가 호기심을 가질만한 서비스를 이번기회에 만들어 볼 수 있으면 어떨까 하는 의견에 모든 조원들이 동의하였다.
다음 회의에서는 마니또 서비스라는 것을 어떻게 구체화 할 것 인지에 대해 이야기 하였고, 부가적인 기능을 제외한 필수 기능들에 대한 명세를 작성하게 되었다.
프로젝트 공유 GitHub Public Repository
create table user
(
id int primary key auto_increment,
username varchar(30) unique not null,
password varchar(255) not null,
name varchar(30) not null,
email varchar(30) unique not null,
random_name varchar(30) default null,
role varchar(30) default 'none' not null,
aware_role boolean default false not null,
prev_contributor boolean default false not null,
prev_receiver boolean default false not null,
is_admin boolean default false not null
);
create table `match`
(
id int primary key auto_increment,
title varchar(255) not null,
match_ymd date default now() not null,
round int not null,
`status` varchar(100) default false not null,
result boolean default null
);
create table user_match
(
id int primary key auto_increment,
user_id int not null,
match_id int not null,
is_contributor boolean default false not null,
is_receiver boolean default false not null,
constraint foreign key (user_id) references user (id),
constraint foreign key (match_id) references `match` (id)
);
create table action
(
id int primary key auto_increment,
type varchar(100) not null,
match_id int not null,
task text not null,
recommendation int default 0 not null,
constraint foreign key (match_id) references `match` (id)
);
create table comment
(
id int primary key auto_increment,
user_id int not null,
match_id int not null,
writer varchar(30) not null,
content text not null,
write_at datetime default now() not null,
edited boolean default false not null,
constraint foreign key (user_id) references user (id),
constraint foreign key (match_id) references `match` (id)
);
("/api/user")
MethodName | ReturnType | ArgsType | Method | Mapping | |
---|---|---|---|---|---|
유저생성 | registerUser | void | User.CreateDto createDto | POST | / |
로그인 | login | void | User.AuthDto authDto | POST | /login |
로그아웃 | logout | void | GET | /logout | |
유저 정보리스트 | getUserInfoList | List<User.InfoDto> | GET | /list | |
유저 정보 확인 | getUserInfo | User.InfoDto | long id | GET | /{id} |
("/api/match")
MethodName | ReturnType | ArgsType | Method | Mapping | |
---|---|---|---|---|---|
활성상태 매치 정보리스트 | getMatchListActive | List<Match.InfoDto> | GET | /list |
("/api/user-match")
MethodName | ReturnType | ArgsType | Method | Mapping | |
---|---|---|---|---|---|
유저-매치 정보리스트 | getUserInfoList | List<UserMatch.InfoDto> | GET | /list |
("/api/action")
MethodName | ReturnType | ArgsType | Method | Mapping | |
---|---|---|---|---|---|
액션 생성 | createAction | void | Action.CreateDto createDto | POST | / |
미션 정보리스트 | getMissionList | List<Action.InfoDto> | GET | /mission-list |
("/api/comment")
MethodName | ReturnType | ArgsType | Method | Mapping | |
---|---|---|---|---|---|
댓글 생성 | registerUser | void | Action.CreateDto createDto | POST | / |
댓글 정보리스트 | login | List<Comment.InfoDto> | POST | /login |
. ~/IdeaProjects/manitto/src main ❯ tree --gitignore 14:07:27
├── main
│ ├── java
│ │ └── com
│ │ └── example
│ │ └── manitto
│ │ ├── ManittoApplication.java
│ │ ├── apicall
│ │ │ └── NicknameApiService.java
│ │ ├── common
│ │ │ ├── Constants.java
│ │ │ └── LoginSessionManager.java
│ │ ├── controllers
│ │ │ ├── mvc
│ │ │ │ ├── IndexPageController.java
│ │ │ │ └── UserPageController.java
│ │ │ └── rest
│ │ │ ├── ActionApiController.java
│ │ │ ├── CommentApiController.java
│ │ │ ├── MatchApiController.java
│ │ │ ├── UserApiController.java
│ │ │ └── UserMatchApiController.java
│ │ ├── dtos
│ │ │ ├── Action.java
│ │ │ ├── Comment.java
│ │ │ ├── Match.java
│ │ │ ├── User.java
│ │ │ └── UserMatch.java
│ │ ├── repositories
│ │ │ ├── ActionRepository.java
│ │ │ ├── CommentRepository.java
│ │ │ ├── MatchRepository.java
│ │ │ ├── UserMatchRepository.java
│ │ │ └── UserRepository.java
│ │ └── services
│ │ ├── ActionService.java
│ │ ├── CommentService.java
│ │ ├── MatchService.java
│ │ ├── SchedulerService.java
│ │ ├── UserMatchService.java
│ │ └── UserService.java
│ ├── resources
│ │ ├── application.yaml
│ │ ├── draft
│ │ │ ├── page-structure.drawio
│ │ │ └── schema.drawio
│ │ ├── mybatis
│ │ │ ├── mappers
│ │ │ │ ├── action-mapper.xml
│ │ │ │ ├── comment-mapper.xml
│ │ │ │ ├── match-mapper.xml
│ │ │ │ ├── user-mapper.xml
│ │ │ │ └── usermatch-mapper.xml
│ │ │ └── mybatis-config.xml
│ │ └── sql
│ │ ├── data.sql
│ │ └── schema.sql
│ └── webapp
│ ├── WEB-INF
│ │ └── views
│ │ ├── admin.jsp
│ │ ├── frame
│ │ │ ├── common.jsp
│ │ │ ├── footer.jsp
│ │ │ └── header.jsp
│ │ ├── index.jsp
│ │ ├── login.jsp
│ │ ├── main.jsp
│ │ ├── match-detail.jsp
│ │ ├── match-list.jsp
│ │ ├── register.jsp
│ │ └── role-check.jsp
│ └── static
│ ├── images
│ │ └── logo.png
│ └── js
│ ├── comment.js
│ ├── index.js
│ ├── login.js
│ ├── main.js
│ ├── match-detail.js
│ ├── register.js
│ └── role-check.js
매번 생각하지만 키보드에 손을 올리는 것 보다 50000배 더 중요한 것이 구현하고자 하는 아이디어를 구체화 하는 것이라고 느끼게 되었고, 철저하게 책임을 분리하되, 유기적으로 코드 공유가 가능하도록 팀원과의 소통을 통해 양식과 규칙을 수립하는것이 중요하다고 느끼게 되었음. 프로젝트 기간도 짧았고, 예상한 것 보다 서비스 로직이 더 복잡했던 탓에 힘들기도 했지만 기술적인 부분이나 노하우를 공유할 수 있어 의미있었고 열정을 다했기 때문에 즐거웠던 프로젝트였습니다.