logo


๐Ÿ“š ํ”„๋กœ์ ํŠธ (2023. 07. 24. ~ 2023. 08. 11.)

์ˆœ์–‘๊ทธ๋ฃน์˜ ์—ฐ์ฐจ ๋ฐ ๋‹น์ง์„ ๊ด€๋ฆฌํ•˜๋Š” ํ”„๋กœ์ ํŠธ์ž…๋‹ˆ๋‹ค.


๐Ÿ‘จโ€๐Ÿ‘จโ€๐Ÿ‘งโ€๐Ÿ‘ฆ ํŒ€์›

์„ ์˜ˆ์€ ์žฅ์ง„์˜ ์ •์ค€ํฌ
ํด๋ผ์ด์–ธํŠธ ํŽ˜์ด์ง€
ํ”„๋กœํ•„ ๊ด€๋ฆฌ API ๊ฐœ๋ฐœ
ํŒŒ์ผ ์—…๋กœ๋“œ API ๊ฐœ๋ฐœ
ํด๋ผ์ด์–ธํŠธ ํŽ˜์ด์ง€
ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ ๊ฐœ๋ฐœ
์ธ์ฆ/์ธ๊ฐ€ API ๊ฐœ๋ฐœ
์Šคํ”„๋ง ์‹œํ๋ฆฌํ‹ฐ ์„ค์ •
ํด๋ผ์ด์–ธํŠธ ํŽ˜์ด์ง€
์—ฐ์ฐจ/๋‹น์ง API ๊ฐœ๋ฐœ
(์กฐํšŒ, ๋“ฑ๋ก, ์ˆ˜์ •, ์ทจ์†Œ)
๊ด€๋ฆฌ์ž ํŽ˜์ด์ง€
์ง์› ๊ด€๋ฆฌ API ๊ฐœ๋ฐœ
์—ฐ์ฐจ, ๋‹น์ง API ๊ฐœ๋ฐœ
์Šค์ผ€์ฅด๋Ÿฌ
์ง๊ธ‰์— ๋”ฐ๋ฅธ ์—ฐ์ฐจ ์ง€๊ธ‰ ์Šค์ผ€์ฅด๋Ÿฌ ๊ฐœ๋ฐœ
AWS ์„œ๋ฒ„ ์„ค์ •
์„œ๋ฒ„ ๋ฐฐํฌ
์„œ๋ฒ„ ๋„๋ฉ”์ธ ์„ค์ •

๐Ÿ›  ๋ฐฑ์—”๋“œ ๊ธฐ์ˆ  ์Šคํƒ

๊ธฐ์ˆ ์Šคํƒ


๐Ÿ’พ ERD

image


๐Ÿ“ ํ…Œ์ด๋ธ” ์„ค๊ณ„

-- ์ง๊ธ‰(์‚ฌ์›, ๋Œ€๋ฆฌ, ๊ณผ์žฅ, ๋ถ€์žฅ, ์ฐจ์žฅ, ์ „๋ฌด, ์ƒ๋ฌด, ์‚ฌ์žฅ ๋“ฑ..)
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)
);

๐Ÿ“• API ๋ช…์„ธ

API์„ค๊ณ„


๐Ÿ‘ฉโ€๐Ÿ’ป ํ˜‘์—…

์ด์Šˆ ๊ด€๋ฆฌ

image


Git-flow ์ „๋žต

image

AWS ๋ช…๋ น์–ด

๋นŒ๋“œ

./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) 

๐Ÿ—‘ ํŠธ๋Ÿฌ๋ธ” ์ŠˆํŒ