/Spring-Toy-Project

๐Ÿงธ[ToyProject] Spring + Redis + S3 + ์ด๋ฉ”์ผ ์ธ์ฆ + Docker + CI/CD ๊ตฌํ˜„๐Ÿงธ

Primary LanguageHTML

Spring-Toy-Project

Java + Spring Boot + AWS S3๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•œ ํ† ์ด ํ”„๋กœ์ ํŠธ

Spring Security + JWT Boilerplate๋ฅผ ํ™œ์šฉ Spring Rest Docs๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ๋ฐœ(AsciiDoctor)

๐Ÿ“š STACKS

Tech Stack

  • Java
  • Spring Boot 3.1.8
  • Gradle 8.5
  • MySQL
  • Spring Data JPA
  • Spring Security
  • JWT
  • AWS S3
  • Redis
  • Docker + Github actions CI/CD
  • Spring Rest Docs

Project Architecture

ํ”„๋กœ์ ํŠธ ์•„ํ‚คํ…์ฒ˜ แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-03-03 แ„‹แ…ฉแ„’แ…ฎ 3 41 58

ERD

https://dbdiagram.io/d/ToyProject-65bc90f1ac844320ae493fa3

ToyProject

Postman

https://documenter.getpostman.com/view/24415208/2sA2rFRKMi#ee46b019-b7e1-4344-bbed-1bff32f630b7

Postman

AsciiDoctor

ํ…Œ์ŠคํŠธ ์„ฑ๊ณต ํ›„ ๋นŒ๋“œ ๋ฐ ์‹คํ–‰์‹œ ์ž๋™์œผ๋กœ ์ž‘์„ฑ๋œ API ๋ช…์„ธ แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-03-01 แ„‹แ…ฉแ„’แ…ฎ 12 59 07 แ„‰แ…ณแ„แ…ณแ„…แ…ตแ†ซแ„‰แ…ฃแ†บ 2024-03-01 แ„‹แ…ฉแ„’แ…ฎ 12 58 29

Dockerhub

https://hub.docker.com/repositories/hanyoonsoo

image

๊ตฌํ˜„๋‚ด์šฉ

  • Spring Security + JWT๋ฅผ ํ™œ์šฉํ•œ stateless ๋ฐฉ์‹ ์‚ฌ์šฉ, Redis๋ฅผ ํ†ตํ•œ RefreshToken ๊ตฌํ˜„
  • ์ด๋ฉ”์ผ ์ธ์ฆ์„ ํ†ตํ•œ ์‚ฌ์šฉ์ž ์ธ์ฆ ๊ธฐ๋Šฅ
  • ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž์— ๋”ฐ๋ฅธ ์ฃผ๋ฌธ ๊ถŒํ•œ ํ™•์ธ
  • Spring Rest Docs๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๊ฐœ๋ฐœ
  • ํ…Œ์ŠคํŠธ ์„ฑ๊ณต์‹œ ๊ด€๋ จ API ๋ฌธ์„œ๊ฐ€ ์ž๋™์œผ๋กœ ์ž‘์„ฑ๋  ํผ ๊ตฌํ˜„
  • AWS S3 ํ™œ์šฉ ํ”„๋กœํ•„ ์ด๋ฏธ์ง€ CRUD
  • VirtualBox ํ™œ์šฉ Docker + Github actions CI/CD
  • ์•„์ดํ…œ ๋“ฑ๋ก ๋ฐ ์•„์ดํ…œ ์ฃผ๋ฌธ ๊ธฐ๋Šฅ

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

์˜ค๋ฅ˜ ๋ฐœ๊ฒฌ์‹œ ์›์ธ ์ฐพ๊ธฐ ์–ด๋ ค์›€ Spring Security๋ฅผ ๋น„๋กฏํ•œ ๋‹ค์–‘ํ•œ ์˜ค๋ฅ˜๋“ค์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ์˜ ์›์ผ์„ ์ฐพ๋Š” ๊ฒƒ์ด ์–ด๋ ค์›€. ๋”ฐ๋ผ์„œ, Spring Rest Docs๋ฅผ ํ™œ์šฉํ•œ ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ ๋ฐ ์˜ค๋ฅ˜ ๋ฐœ์ƒ์‹œ ์ ์ ˆํ•œ ์˜ˆ์™ธ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๋Š” ์˜ˆ์™ธ์ฒ˜๋ฆฌ ํ•ธ๋“ค๋Ÿฌ ์‚ฌ์šฉ.
Spring Security ์˜ค๋ฅ˜์‹œ ์•„๋ฌด๋Ÿฐ ๊ฐ’๋„ ๋ฐ˜ํ™˜ํ•˜์ง€ ์•Š์Œ Spring Security Filter๋Š” ์ผ๋ฐ˜ Filter๋กœ DispatchServlet์ „์— ๋™์ž‘ํ•˜์—ฌ Controller๊นŒ์ง€ ์ „๋‹ฌ๋˜์ง€ ์•Š์Œ. ๋”ฐ๋ผ์„œ, Spring Security ํ•„ํ„ฐ ๋ฐ ๊ฒ€์ฆ ๋‹จ๊ณ„์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ์‹œ response์— ๊ด€๋ จ ์ •๋ณด๋ฅผ ๋‹ด์Œ์œผ๋กœ ํ•ด๊ฒฐ.
๊ฐ์ฒด์ง€ํ–ฅ๊ณผ ์„ฑ๋Šฅ ๋ฌธ์ œ์— ๊ด€ํ•œ ํŠธ๋ ˆ์ด๋“œ ์˜คํ”„ ์„ฑ๋Šฅ์„ ๊ณ ๋ คํ•˜์ง€ ์•Š๊ณ  ๊ฐ์ฒด์ง€ํ–ฅ์ ์œผ๋กœ๋งŒ ์„ค๊ณ„ํ•  ๊ฒฝ์šฐ ์‚ญ์ œ ๋ฐ ์—…๋ฐ์ดํŠธ ์‹œ ๋ฆฌ์ŠคํŠธ์˜ ๋ฐ˜๋ณต๋ฌธ์œผ๋กœ ์‹œ๊ฐ„ ๋‚ญ๋น„๊ฐ€ ๋ฐœ์ƒ๊ฐ€๋Šฅ. ๋ฐ˜๋ฉด์— ์„ฑ๋Šฅ์— ์ด์ ์„ ๋‘์–ด ์„ค๊ณ„๋ฅผ ์ง„ํ–‰ํ•  ๊ฒฝ์šฐ ํ•œ๋ฒˆ์˜ ์ฟผ๋ฆฌ๋งŒ ๋‚˜๊ฐ€์ง€๋งŒ ๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„๊ฐ€ ์•„๋‹˜. ํ”„๋กœ์ ํŠธ ํŠน์„ฑ์ƒ ๋ฆฌ์ŠคํŠธ์— ํฐ ๊ฐ’์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— CRD์˜ ๊ฒฝ์šฐ๋Š” ๊ฐ์ฒด์ง€ํ–ฅ์  ์„ค๊ณ„๋ฅผ ํ•˜์˜€๊ณ  Update์˜ ๊ฒฝ์šฐ์—๋งŒ ์ฟผ๋ฆฌ๊ฐ€ ํ•œ๋ฒˆ๋งŒ ๋‚˜๊ฐ€๋„๋ก ์„ค๊ณ„.
๊ฐ€์ƒ๋จธ์‹ ์„ ์™ธ๋ถ€์—์„œ ์ ‘์†ํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์›€. CI/CD ๋ถˆ๊ฐ€. ๊ณต์œ ๊ธฐ ํ™˜๊ฒฝ ๋‚ด๋ถ€์— ์žˆ๋Š” ์ปดํ“จํ„ฐ ํ™˜๊ฒฝ ๋‚ด๋ถ€์— ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ์ด ์–ด๋ ค์›€. ๋”ฐ๋ผ์„œ, ๊ฐ€์ƒ๋จธ์‹ ์˜ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์–ด๋Œ‘ํ„ฐ์— ๋ธŒ๋ฆฟ์ง€๋กœ ์„ค์ •ํ•˜์—ฌ ์ผ๋ฐ˜ ๋ฐ์Šคํฌํƒ‘์ฒ˜๋Ÿผ ํ˜ธ์ŠคํŠธ๋กœ ์ธ์‹. ๊ทธ ํ›„, ๊ณต์œ ๊ธฐ์— VPN ํ™˜๊ฒฝ ๊ตฌ์ถ• ํ›„ ssh๋กœ ์ ‘์† ๊ฐ€๋Šฅ. ๋˜ํ•œ, ๊ฐ€์ƒ๋จธ์‹  ๋‚ด๋ถ€์˜ ํฌํŠธ์— ์ ‘์†ํ•˜๋ ค๋ฉด ๊ฐ€์ƒ๋จธ์‹ ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋Š” ์™ธ๋ถ€ IP๊ฐ€ ํ•„์š”ํ•จ. Ngrok ๊ตฌ์„ฑ์„ ํ†ตํ•˜์—ฌ ๋ฌธ์ œ ํ•ด๊ฒฐ.
EC2๊ฐ€ ์•„๋‹Œ VirtualBox ์‚ฌ์šฉ์œผ๋กœ ์ธํ•œ ๋„คํŠธ์›Œํฌ ์˜ค๋ฅ˜ EC2์™€๋Š” ๋‹ฌ๋ฆฌ VirtualBox๋Š” ์ง์ ‘ ๋„คํŠธ์›Œํฌ ๊ตฌ์„ฑ์„ ํ•ด์ค˜์•ผ ํ•จ. ๋ฐฉํ™”๋ฒฝ์„ ์ž‘๋™์‹œํ‚ค์ง€ ์•Š์œผ๋ฉด openssh-server๋ฅผ ์ ์šฉํ•œ 22 ํฌํŠธ ์ด์™ธ์—๋Š” ์ „๋ถ€ ๋ง‰ํ˜€์žˆ์Œ. ๋”ฐ๋ผ์„œ, ufw๋ฅผ ํ™œ์„ฑํ™”ํ•˜๊ณ  ์ ์ ˆํ•œ ํฌํŠธ๋ฅผ ์—ด์–ด์คŒ์œผ๋กœ ๋ฌธ์ œ ํ•ด๊ฒฐ.

์ž์„ธํ•œ ์„ค๋ช… ๋ฐ ์ฝ”๋“œ ๊ตฌํ˜„

๊ธฐ๋ณธ ์„ธํŒ…
https://hdbstn3055.tistory.com/17

Spring Security ์„ค๋ช… ๋ฐ ๊ตฌํ˜„
https://hdbstn3055.tistory.com/25

ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ๋ฐ ์˜ˆ์™ธ์ฒ˜๋ฆฌ ์ฝ”๋“œ ์ž‘์„ฑ
https://hdbstn3055.tistory.com/31

์ด๋ฉ”์ผ ์ธ์ฆ
https://hdbstn3055.tistory.com/32

์ฃผ๋ฌธ ์„œ๋น„์Šค ๊ตฌํ˜„
https://hdbstn3055.tistory.com/33

Docker + Github Actions CI/CD
https://hdbstn3055.tistory.com/35

AWS S3 ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ/์ˆ˜์ •/์‚ญ์ œ
https://hdbstn3055.tistory.com/36

Mock ๊ฐ์ฒด ์‚ฌ์šฉ S3 ํ…Œ์ŠคํŠธ ์ฝ”๋“œ ์ž‘์„ฑ
https://hdbstn3055.tistory.com/37