순양그룹의 연차 및 당직을 관리하는 프로젝트입니다.
선예은 | 장진영 | 정준희 |
클라이언트 페이지 프로필 관리 API 개발 파일 업로드 API 개발 |
클라이언트 페이지 회원가입, 로그인 개발 인증/인가 API 개발 스프링 시큐리티 설정 |
클라이언트 페이지 연차/당직 API 개발 (조회, 등록, 수정, 취소) |
관리자 페이지 직원 관리 API 개발 연차, 당직 API 개발 |
스케쥴러 직급에 따른 연차 지급 스케쥴러 개발 |
AWS 서버 설정 서버 배포 서버 도메인 설정 |
-- 직급(사원, 대리, 과장, 부장, 차장, 전무, 상무, 사장 등..)
CREATE TABLE position
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
type VARCHAR(50) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 회원 상태(입사, 퇴사, 재입사, 휴직, 육아휴직, 복직 등..)
CREATE TABLE status
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
type VARCHAR(20) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 부서(개발, 기획, 영업, 인사, 회계, 법무 등..)
CREATE TABLE department
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
type VARCHAR(20) NOT NULL UNIQUE,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
);
-- 연차(직급 별 지급하는 연차의 개수)
CREATE TABLE day_off_by_position
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
position_id BIGINT NOT NULL UNIQUE,
amount TINYINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
FOREIGN KEY (position_id) REFERENCES position (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 연차(오전 반차, 오후 반차, 연차, 특별 휴가)
CREATE TABLE day_off
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
type VARCHAR(20) NOT NULL UNIQUE,
amount FLOAT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 회원 테이블 생성
CREATE TABLE employee
(
id BIGINT PRIMARY KEY AUTO_INCREMENT COMMENT 'ID',
auth_token VARCHAR(36) NOT NULL COMMENT '인증 토큰',
position_id BIGINT NOT NULL COMMENT '직급 ID',
department_id BIGINT NOT NULL COMMENT '부서 ID',
status_id BIGINT NOT NULL COMMENT '회원상태 ID',
name VARCHAR(100) NOT NULL COMMENT '이름',
email VARCHAR(100) NOT NULL UNIQUE COMMENT '이메일',
password CHAR(60) NOT NULL COLLATE ascii_bin COMMENT '비밀번호',
profile_image_path VARCHAR(255) COMMENT '프로필 이미지', -- 추가된 칼럼
hire_date DATE NOT NULL COMMENT '입사일',
quit_date DATE COMMENT '퇴사일',
day_off_remains FLOAT NOT NULL COMMENT '잔여 연차수',
role VARCHAR(20) NOT NULL COMMENT '권한',
phone VARCHAR(60) NOT NULL COMMENT '전화번호',
birthdate DATE COMMENT '생년월일',
zip_address CHAR(5) COLLATE ascii_bin COMMENT '우편번호',
road_address VARCHAR(255) COMMENT '주소1(도로명)',
detail_address VARCHAR(255) COMMENT '주소2(상세주소)',
created_at TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '생성일',
updated_at TIMESTAMP NOT NULL DEFAULT NOW() COMMENT '수정일',
last_login_at TIMESTAMP DEFAULT NOW() COMMENT '최종 로그인',
FOREIGN KEY (position_id) REFERENCES position (id), -- position 테이블의 id 칼럼을 참조
FOREIGN KEY (department_id) REFERENCES department (id), -- department 테이블의 id 칼럼을 참조
FOREIGN KEY (status_id) REFERENCES status (id) -- status 테이블의 id 칼럼을 참조;
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE position_history
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
employee_id BIGINT NOT NULL,
position_id BIGINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
FOREIGN KEY (employee_id) REFERENCES employee (id),
FOREIGN KEY (position_id) REFERENCES position (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE department_history
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
employee_id BIGINT NOT NULL,
department_id BIGINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
FOREIGN KEY (employee_id) REFERENCES employee (id),
FOREIGN KEY (department_id) REFERENCES department(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 회원 상태 이력 테이블 생성
CREATE TABLE status_history
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
employee_id BIGINT NOT NULL,
status_id BIGINT NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
FOREIGN KEY (employee_id) REFERENCES employee (id),
FOREIGN KEY (status_id) REFERENCES status (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 연차 등록요청/응답 이력
CREATE TABLE day_off_history
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
employee_id BIGINT NOT NULL,
day_off_id BIGINT NOT NULL,
status VARCHAR(20) NOT NULL,
start_date DATE NOT NULL,
end_date DATE NOT NULL,
total_amount FLOAT NOT NULL,
reason VARCHAR(100) NOT NULL, -- 100자 이내로 사유를 쓸 수 있음
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
FOREIGN KEY (employee_id) REFERENCES employee (id),
FOREIGN KEY (day_off_id) REFERENCES day_off (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
-- 당직 테이블 생성
CREATE TABLE duty_history
(
id BIGINT PRIMARY KEY AUTO_INCREMENT,
employee_id BIGINT NOT NULL,
status VARCHAR(20) NOT NULL,
date DATE NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
FOREIGN KEY (employee_id) REFERENCES employee (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
CREATE TABLE login_history (
id BIGINT PRIMARY KEY AUTO_INCREMENT,
employee_id BIGINT NOT NULL,
client_ip VARCHAR(255),
user_agent VARCHAR(255),
created_at TIMESTAMP,
updated_at TIMESTAMP,
FOREIGN KEY (employee_id) REFERENCES employee (id)
);
이슈 관리
Git-flow 전략
빌드
./gradlew clean build bootJar -x test
빌드된 앱 jar 서버에 전달
scp -i {KEY파일} ./build/libs/*.jar {호스트명}@{호스트아이피}:{저장경로}/{jar 파일명}.jar
앱 백그라운드로 무중단 실행 및 로그 저장
nohup java -jar {jar 파일명}.jar > {로그 파일 경로} &
앱 로그 확인
tail -f -n 200 {로그 파일 경로}
앱 프로세스 종료
kill -9 $(ps -ef | grep {jar 파일명} | head -n 1 | cut -d ' ' -f 6)