Skip to content

seonghye0n/TimeSync-BE

Repository files navigation

🚀 연차/당직 관리 프로젝트

목차

🌟 프로젝트 개요

"연차/당직 을 관리하는데 좀 더 효율적이고 편리하게 사용하게끔 만들어졌다."

📅 프로젝트 기간

2023년 7월 25일 - 2023년 8 월 11일

👥 팀원 소개

박성현(BE-팀장) 서용현
    API
  1. 메인페이지 조회
  2. 연차등록, 수정, 삭제
  3. 마이 페이지 조회
  4. 관리자 페이지 조회
  5. 결재 승인
    DB
  1. 테이블 스키마 초안 작성
    서버/배포
  1. 테스트 서버 구성(EC2)
  2. SSL 적용
  3. 운영 서버 구성
    (Elastic Beanstalk)
  4. 배포 자동화
    API
  1. 로그인
  2. 회원가입
  3. 비밀번호 수정
    DB
  1. Redis 구성 (RefreshToken 관리)
    보안/인증
  1. JWT Token 구현 (AccessToken, RefreshToken)
  2. Spring Security 설정
  3. AES 암호화 구현

🚀 기술 스택

🏛️ 기술 아키텍처

image

📝 프로젝트 세부사항

⚙️ 설치 및 실행방법

프로젝트 링크 : https://hmteresting.netlify.app/

관리자 계정 : [email protected] / fastcampus12#$

📑 DB 설계

ERD

ERD

member

create table member
(
    id               bigint primary key auto_increment,
    email            varchar(100) unique not null,
    password         varchar(100)        not null,
    name             varchar(100)        not null,
    joined_at        date                not null,
    role             varchar(10)         not null,
    annual_amount_id bigint              not null,
    annual_used      int,
    annual_remain    int,
    position         varchar(5)          not null,
    loggedin_at      timestamp,
    created_at       timestamp           not null,
    modified_at      timestamp,
    foreign key (annual_amount_id) references annual (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

req

create table reg
(
    id          bigint primary key auto_increment,
    category    varchar(10) not null,
    title       varchar(40) not null,
    started_at  date        not null,
    lasted_at   date        not null,
    reason      varchar(20),
    status      varchar(10) not null,
    member_id   bigint,
    created_at  timestamp   not null,
    modified_at timestamp,
    foreign key (member_id) references member (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

annual

create table annual
(
    id            bigint primary key auto_increment,
    years         int        not null,
    annual_amount int        not null,
    position      varchar(5) not null,
    hist_year     varchar(4) not null,
    unique (years, position, hist_year)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

login_log

create table login_log
(
    id                 bigint primary key auto_increment,
    user_agent         varchar(200) not null,
    client_ip          varchar(15)  not null,
    member_id          bigint       not null,
    success_login_date timestamp,
    foreign key (member_id) references member (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

refresh_token

create table refresh_token
(
    id            bigint       not null auto_increment,
    email         varchar(255) not null,
    refresh_token varchar(255) not null,
    primary key (id)
) engine=InnoDB DEFAULT CHARSET=utf8mb4;

📄 API 문서

엔드포인트 메소드 요청 본문 (Request Body) 요청 헤더 (Request Headers) 응답 본문 (Response Body)
/api/register POST {email: [email protected], password: 1234567, name: “아무개”, join: YYYY-MM-DD } - 상태값 200 ok,json body 에 “회원가입에 성공하였습니다”. 메시지
/api/login POST - { email: 이메일password: 패스워드} 상태값 200 ok, accessToken 은 json body, refreshToken 은 cookie 값에 저장
/api/token POST {"startDate": "2023-08-15", "endDate": "2023-08-20"} Authorization: Bearer your_access_token, Cookie: refreshToken 상태값 200 ok, accessToken 은 json body, refreshToken 은 cookie 값에 저장
/api/logout POST - Authorization: Bearer your_access_token, Cookie: refreshToken 상태값 200 ok, 메시지
/api/main GET ` Authorization: Bearer your_access_token, Cookie: refreshToken image
/api/annual POST {“title” : “연차 신청합니당~~”, “category” : “연차”, “startDate” : “2023-08-02”, “endDate” : “2023-08-07”, “reason” : “병가” } Authorization: Bearer your_access_token, Cookie: refreshToken 상태값 200 ok, 메시지
/api/user GET - Authorization: Bearer your_access_token, Cookie: refreshToken image
/api/user POST {“newPassword” : “새로운 비밀번호” } Authorization: Bearer your_access_token, Cookie: refreshToken 상태값 200 ok, 메시지
/api/annual/cancel POST {“id” : annul 번호} Authorization: Bearer your_access_token, Cookie: refreshToken 상태값 200. 메시지
/api/annual/update POST {“id” : 1, “title” : “연차 수정합니다~~”, “startDate” : “2023-08-01”, “endDate” : “2023-08-04”,“reason” : “병가”} Authorization: Bearer your_access_token, `Cookie: refreshToken 상태값 200 ok 메시지
/api/admin GET - Authorization: Bearer your_access_token, Cookie: refreshToken image
/api/admin/apply POST { “id” : 1 } Authorization: Bearer your_access_token, Cookie: refreshToken 상태값 200 ok, 메시지

🛠️ 기술 설명

Java 및 Spring Boot

프로젝트는 Java 언어와 Spring Boot 프레임워크를 기반으로 개발되었습니다. Spring Boot는 간결하고 효율적인 코드 작성을 지원하며, 프로젝트의 핵심 로직을 구현하는데 활용되었습니다.

Amazon EC2 및 RDS

프로젝트는 Amazon EC2 인스턴스를 활용하여 테스트 서버와 운영 서버를 구성하였습니다. 데이터베이스는 Amazon RDS를 이용하여 관리되며, 안정적인 데이터 저장 및 관리가 가능합니다.

Redis 로 RefreshToekn 관리

Redis를 사용하여 RefreshToken 을 구현하였다. 토큰의 만료기간을 Redsi 의 유효기간으로 설정하여 토큰을 좀 더 안전하게 관리하고 삭제하는 것이 가능합니다.

Spring Security 및 JWT 인증

Spring Security를 통해 강력한 보안 기능을 구현하였으며, JWT(JSON Web Token) 기반의 인증 방식을 사용하여 안전한 사용자 인증을 보장합니다.

GitHub Actions를 통한 자동 배포

프로젝트의 소스 코드는 GitHub Actions를 활용하여 자동으로 테스트 및 배포되며, 개발자들의 작업 흐름을 자동화하고 효율성을 높였습니다.

About

TimeSync - 연차/당직 관리 프로젝트 BE

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages