인프런 워밍업 클럽 0기 (BE)에서 진행하는 미니 프로젝트입니다.
- JDK 17
- Spring Boot 3.x.x
- JPA
- MySQL
- 팀 등록: 회사 팀을 등록할 수 있어야 한다. 필수 정보는 다음과 같다.
팀 이름
- 직원 등록: 직원을 등록할 수 있어야 한다. 필수 정보는 다음과 같다.
직원 이름
매니저 여부
입사 일자
생일
- 팀 조회: 모든 팀의 정보를 한 번에 조회할 수 있어야 한다.
name
: 팀 이름manager
: 팀 매니저 (없으면 null)memberCount
: 팀 인원 수[ { "name": "경영지원", "manager": "민병관", "memberCount": 2 }, ... ]
- 직원 조회: 모든 직원의 정보를 한 눈에 조회할 수 있어야 한다.
name
: 직원 이름teamName
: 소속 팀 이름role
: 매니저인지 직원인지birthday
: 생일workStartDate
: 입사일[ { "name": "강호식", "teamName": "경영지원", "role": "MEMBER" "birthday": "2000-01-01", "workStartDate": "2024-01-01" }, ... ]
스프링 이니셜라이저에서 스프링 프로젝트를 생성한다.
- Project: Gradle - Groovy
- Language: Java
- Spring Boot: 3.1.9
- Project Metadata
- Group: club.warmingup
- Artifact: emp-app
- Name: emp-app
- Description: practice
- Package-name: club.warmingup.emp-app
- Packaging: Jar
- Java: 17
- Dependencies: Spring Web / Lombok / Spring Data JPA / MySQL Driver
create table team (
team_id bigint auto_increment,
name varchar(20) not null unique,
primary key (team_id)
);
create table employee (
emp_id bigint auto_increment,
name varchar(50) not null,
team_id bigint not null,
role varchar(50) not null check (role in ('MANAGER', 'MEMBER')),
work_start_date datetime not null default (current_time),
birthday datetime not null default '2000-01-01',
primary key (emp_id),
FOREIGN KEY (team_id) REFERENCES team (team_id)
);
emp-app/src/main/java/club/warmingup/empapp/domain/Team.java
Lines 18 to 43 in d3eee45
emp-app/src/main/java/club/warmingup/empapp/domain/Employee.java
Lines 17 to 49 in d3eee45
emp-app/src/main/java/club/warmingup/empapp/domain/Role.java
Lines 3 to 6 in d3eee45
emp-app/src/main/resources/application.yml
Lines 16 to 18 in d3eee45
application.yml
파일에 관련 옵션을 설정한다.
- 팀 등록: 팀 이름의 중복 여부 검사
- 팀 조회: 엔티티 안에 담긴 데이터를 응답용 DTO로 전달
- 직원 등록: 존재하는 팀인지 검사한다. 검사를 통과하면 요청용 DTO 안에 담긴 데이터를 갖고 직원 엔티티를 생성해 직원 레포지토리에 추가한다.
- 직원 조회: 엔티티 안에 담긴 데이터를 응답용 DTO로 전달