Skip to content

jy-b/miniproject_review

ย 
ย 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

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

๐Ÿ“ ํ”„๋กœ์ ํŠธ ์„ธ๋ถ€์‚ฌํ•ญ

  • ๐Ÿ“… ์—ฐ์ฐจ ๋ฐ ๋‹น์ง ๊ด€๋ฆฌ ์‹œ์Šคํ…œ ๊ฐœ๋ฐœ

    ์—ฐ์ฐจ, ๋‹น์ง ๊ด€๋ฆฌ ์‹œ์Šคํ…œ
  • ๐Ÿ’ผ ์‚ฌ์šฉ์ž ์นœํ™”์ ์ธ UI/UX ๋””์ž์ธ

    ์—ฐ์ฐจ, ๋‹น์ง ๋ฉ”์ธ ํŽ˜์ด์ง€
  • ๐Ÿ› ๏ธ ๋ฐฑ์—”๋“œ์™€ ํ”„๋ก ํŠธ์—”๋“œ ํ˜‘์—…์„ ํ†ตํ•œ ํ”„๋กœ์ ํŠธ

    ํ”„๋ก ํŠธ์—”๋“œ ํ”„๋กœ์ ํŠธ ๋งํฌ : https://github.com/FastCampusGroupFE9/MiniProject_KDT9

โš™๏ธ ์„ค์น˜ ๋ฐ ์‹คํ–‰๋ฐฉ๋ฒ•

ํ”„๋กœ์ ํŠธ ๋งํฌ : 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

review

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 100.0%