Skip to content

This project is a fully functional blog application built using Spring Boot, Thymeleaf, and other popular technologies. It allows users to create, read, update, and delete posts, manage user profiles, and interact with other users through comments, likes, and follows.

Notifications You must be signed in to change notification settings

jkky-98/notej-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

notej-project

๋ชฉ์ฐจ

๊ฐœ๋ฐœ ํ™˜๊ฒฝ

  • IntelliJ
  • GitHub

์‚ฌ์šฉ ๊ธฐ์ˆ 

๋ฐฑ์—”๋“œ

์ฃผ์š” ํ”„๋ ˆ์ž„์›Œํฌ / ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Java 17 openjdk
  • SpringBoot 3.4.0
  • Spring Data JPA
  • QueryDSL 5.0.0
  • Ehcache 3.10.8

๋นŒ๋“œ Tool

  • Gradle

ํ”„๋ก ํŠธ์—”๋“œ

  • Javascript
  • Html/css
  • Thymeleaf
  • BootStrap5

๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค

  • H2(dev)
  • Mysql(prod)

์ธํ”„๋ผ

  • AWS EC2
  • AWS S3
  • GitHub Actions
  • Docker
  • AWS RDS
  • AWS Route53

๊ธฐํƒ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

  • Lombok
  • Toast Ui Editor

ํ•ต์‹ฌ ํ‚ค์›Œ๋“œ

  • ์Šคํ”„๋ง ๋ถ€ํŠธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์„ค๊ณ„ ~ ๋ฐฐํฌ ์œ ์ง€ ๋ณด์ˆ˜๊นŒ์ง€ ์ „ ๊ณผ์ • ๊ฐœ๋ฐœ ๋ฐ ์šด์˜
  • AWS / ubuntu ๊ธฐ๋ฐ˜ Github action์„ ํ™œ์šฉํ•œ ๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ๋ฐ ๋ฐฐํฌ ์ž๋™ํ™” ๊ตฌ์ถ•
  • MVC ํ”„๋ ˆ์ž„์›Œํฌ ๊ธฐ๋ฐ˜ ๋ฐฑ์—”๋“œ ์„œ๋ฒ„ ๊ตฌ์ถ•

์‹œ์Šคํ…œ ์•„ํ‚คํ…์ฒ˜

noteJ-system-architecture drawio

ํŒจํ‚ค์ง• ๊ตฌ์กฐ ์˜ˆ์‹œ

ํŒจํ‚ค์ง€๋ช… ์„ค๋ช…
NoteJApplication.java Spring Boot ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”์ธ ์‹คํ–‰ ํด๋ž˜์Šค
aop AOP(Aspect-Oriented Programming) ๊ด€๋ จ ์ฝ”๋“œ
deploy ๋ฐฐํฌ ๊ด€๋ จ ์Šคํฌ๋ฆฝํŠธ ๋ฐ ์„ค์ • ํŒŒ์ผ
domain ์—”ํ‹ฐํ‹ฐ(Entity) ๋ฐ ๋„๋ฉ”์ธ ๋ชจ๋ธ ๊ด€๋ จ ํด๋ž˜์Šค
exception ์ „์—ญ ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๋ฐ ์ปค์Šคํ…€ ์˜ˆ์™ธ ํด๋ž˜์Šค
file ํŒŒ์ผ ์—…๋กœ๋“œ/๋‹ค์šด๋กœ๋“œ ๊ด€๋ จ ์ฒ˜๋ฆฌ
filter ์ธ์ฆ ์ธ๊ฐ€ ํ•„ํ„ฐ
repository ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ ‘๊ทผ ๊ณ„์ธต (JPA)
service ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ๋‹ด๋‹นํ•˜๋Š” ์„œ๋น„์Šค ๊ณ„์ธต
web ์ปจํŠธ๋กค๋Ÿฌ ๋ฐ API ์š”์ฒญ ์ฒ˜๋ฆฌ ๊ด€๋ จ ํด๋ž˜์Šค

E-R Diagram

ํ”„๋กœ์ ํŠธ ๋ชฉ์ 

๊ธฐํš ์˜๋„

์ด ํ”„๋กœ์ ํŠธ๋Š” ๊ฐœ๋ฐœ์ž๋“ค์„ ์œ„ํ•œ ์ตœ์ ํ™”๋œ ๋ธ”๋กœ๊ทธ ํ”Œ๋žซํผ์„ ๊ตฌํ˜„ํ•˜๊ณ ์ž ์‹œ์ž‘๋˜์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐœ๋ฐœ์ž๋“ค์ด ์ž์‹ ์˜ ์ง€์‹๊ณผ ๊ฒฝํ—˜์„ ์ž์œ ๋กญ๊ฒŒ ๊ณต์œ ํ•˜๊ณ , ์ตœ์‹  ๊ธฐ์ˆ  ํŠธ๋ Œ๋“œ์™€ ๋…ธํ•˜์šฐ๋ฅผ ์†Œํ†ตํ•  ์ˆ˜ ์žˆ๋Š” ๊ณต๊ฐ„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋ฉฐ ๊ฒฝ์Ÿ์ ์ธ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

๋งŽ์€ ๋ธ”๋กœ๊ทธ๋“ค์—์„œ ์–‘์‚ฐํ˜•์œผ๋กœ ๋‚˜์˜ค๋Š” ๊ธ€๋“ค์€ ๊ฒ€์ƒ‰์—”์ง„์—์„œ์˜ ์šฐ๋ฆฌ๋“ค์˜ ๊ฒฝํ—˜์„ ์˜ค์—ผ์‹œํ‚ค๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค. noteJ๋Š” ๊ธ€์— ๋Œ€ํ•œ ํ‰๊ฐ€ ์š”์†Œ๋ฅผ ๋‹ค์–‘ํ•˜๊ฒŒ ๋‚จ๊ธธ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ž‘์„ฑ์ž๋“ค์˜ ๋™๊ธฐ๋ฅผ ๋ถˆ๋Ÿฌ์ผ์œผํ‚ค๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

ํ•ต์‹ฌ ๊ธฐ๋Šฅ Before ๋ฆด๋ฆฌ์ฆˆ

๊ฒŒ์‹œ๊ธ€ CRUD

๊ธฐ๋ณธ์ ์ธ ๊ฒŒ์‹œ๊ธ€ CRUD๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค. Read์˜ ๊ฒฝ์šฐ ๋กœ๊ทธ์ธ์ด ํ•„์š”์—†์œผ๋ฉฐ, Update, Create, Delete์— ๋Œ€ํ•ด์„œ๋Š” ๋กœ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

์ธ์ฆ ๋ฐ ์ธ๊ฐ€ ์„ธ์…˜๋ฐฉ์‹ ๊ตฌํ˜„

Tomcat์ด ์ œ๊ณตํ•˜๋Š” HttpSession ๊ฐ์ฒด๋ฅผ ์ด์šฉํ•˜์—ฌ ๋กœ๊ทธ์ธ ์‹œ ์„ธ์…˜์— User๋ฅผ ์—…๋ฐ์ดํŠธํ•˜๊ณ  JSESSIONID๋กœ ํ•˜์—ฌ๊ธˆ ์ธ๊ฐ€๋ฅผ ํŒ๋‹จํ–ˆ์Šต๋‹ˆ๋‹ค.

๋กœ๊ทธ์ธ ์„ธ์…˜์˜ ๋งŒ๋ฃŒ ์‹œ๊ฐ„์„ 30๋ถ„์œผ๋กœ ๋‘์–ด ์ฟ ํ‚ค ํƒˆ์ทจ์— ๋Œ€ํ•œ ๋ณด์•ˆ์„ ๊ฐ•ํ™”ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

User์—”ํ‹ฐํ‹ฐ์— ์ž ๊ธˆ ๊ด€๋ จ ํ•„๋“œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ๋กœ๊ทธ์ธ์‹œ ์•„์ด๋””๋Š” ๋งž์ง€๋งŒ ๋น„๋ฐ€๋ฒˆํ˜ธ๊ฐ€ ํ‹€๋ฆฌ๋Š” ๊ฒฝ์šฐ์— ๋Œ€ํ•˜์—ฌ ์‹œ๋„ 5ํšŒ ์ดˆ๊ณผ์‹œ ๊ณ„์ •์„ ์ž ๊ทธ๊ณ  ์ผ์ • ์‹œ๊ฐ„ ์ดํ›„ ์ด๊ฐ€ ์ž๋™์ ์œผ๋กœ ํ’€๋ฆฌ๋Š” ์ธ์ฆ ์ฒ˜๋ฆฌ ์ œํ•œ ๋กœ์ง์„ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋งˆํฌ๋‹ค์šด ์ž‘์„ฑ์„ ์œ„ํ•œ Toast Ui Editor ์ ์šฉ

๊ฐœ๋ฐœ์ž ๋ธ”๋กœ๊ทธ๋‹ต๊ฒŒ ๊ฒŒ์‹œ๊ธ€์„ ๋งˆํฌ๋‹ค์šด์œผ๋กœ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก Toast Ui Editor ์˜คํ”ˆ ์†Œ์Šค๋ฅผ ์‚ฌ์šฉํ–ˆ์Šต๋‹ˆ๋‹ค.

image ๊ธ€ ์ž‘์„ฑ์‹œ ์ฒจ๋ถ€ํ•˜๋Š” ์ด๋ฏธ์ง€์™€ ๊ฒŒ์‹œ๊ธ€์˜ ์ธ๋„ค์ผ ์ด๋ฏธ์ง€์˜ ๊ฒฝ์šฐ์—๋Š” S3์— ์ €์žฅ๋˜๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.(์‚ฌ์ง„ํŒŒ์ผ ์ €์žฅ์˜ ์ƒ๋ช…์ฃผ๊ธฐ๋ฅผ ๊ด€๋ฆฌํ•˜์—ฌ ์ €์žฅ๋ถ€ํ•˜๋ฅผ ์ค„์ด๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.)

์ž‘์„ฑ์‹œ js async๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋น„๋™๊ธฐ์ ์œผ๋กœ blob์‚ฌ์ง„์„ ์—…๋กœ๋“œ ์ปจํŠธ๋กค๋Ÿฌ์— ๋ณด๋‚ด์–ด ์ฆ‰๊ฐ์ ์œผ๋กœ ์ €์žฅํ•˜๊ณ  ์ €์žฅ๋œ ํŒŒ์ผ๋ช…์„ ๋ฐ›์•„ ๋‹ค์‹œ ๋‹ค์šด๋กœ๋“œ ์ปจํŠธ๋กค๋Ÿฌ๋กœ ํ•˜์—ฌ๊ธˆ Viewer์— ํ•ด๋‹น ์‚ฌ์ง„์„ ๋žœ๋”๋งํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ƒ์„ฑ๋œ ๊ธ€์„ ์กฐํšŒํ•  ๋•Œ์—๋Š” viewer ๊ธฐ๋Šฅ๋งŒ ์‚ฌ์šฉํ•˜๋„๋ก ํ•˜์˜€์œผ๋ฉฐ ์ด์— ๋”ํ•ด tocbot.js๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ธ€์— ๋Œ€ํ•œ ๋™์ ์ธ ํƒญ ๊ธฐ๋Šฅ์„ ์ฑ„ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

ํƒœ๊ทธ ๋ฐ ํ‚ค์›Œ๋“œ ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ

ํƒœ๊ทธ, ํ‚ค์›Œ๋“œ, ์‹œ๋ฆฌ์ฆˆ์ค‘ ํ•˜๋‚˜๋กœ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๋ฉฐ ๋™์ ์ธ ์ฟผ๋ฆฌ๋ฅผ ๋‹ค๋ฃจ๊ธฐ ์œ„ํ•ด QueryDSL์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ๋ฐ์ดํ„ฐ ์กฐํšŒ ๋กœ์ง์„ ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๊ทธ์˜ ์ƒ์„ฑ์€ ๊ธ€ ์ž‘์„ฑ์‹œ ์ด๋ฃจ์–ด์ง€๋ฉฐ tagging.js๋ฅผ ํ™œ์šฉํ•˜์—ฌ ํƒœ๊ทธ ์ž‘์„ฑ์‹œ ์ค‘๋ณต์„ ํ™”๋ฉด๋‹จ์—์„œ ๋™์ ์œผ๋กœ ์ œ๊ฑฐํ•˜๊ณ , ์—”ํ„ฐ๋กœ ํ•˜์—ฌ๊ธˆ ํƒœ๊ทธ๋ฅผ ์†์‰ฝ๊ฒŒ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ž‘์„ฑ ์ž๋™์ €์žฅ ๊ธฐ๋Šฅ

๊ฒŒ์‹œ๊ธ€์— ๋Œ€ํ•ด writable ํ•„๋“œ๋ฅผ ๊ตฌ๋ถ„์ž๋กœ ํ•˜์—ฌ๊ธˆ ์ž„์‹œ์ €์žฅ๊ธ€๊ณผ ๊ณต๊ฐœ๊ธ€์„ ๊ตฌ๋ถ„ํ•˜๊ณ ,

์ž‘์„ฑ ์‹œ ์ง€์†์ ์œผ๋กœ ์ž„์‹œ์ €์žฅ ๊ธ€์— ์ž๋™ ์ €์žฅ์„ ํ•˜๋„๋ก ajax๋กœ ํ•˜์—ฌ๊ธˆ ๋น„๋™๊ธฐ ํ†ต์‹ ์œผ๋กœ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ฒซ ์ž‘์„ฑ๊ณผ ์ˆ˜์ •์— ๋Œ€ํ•œ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์ฒซ ์ž‘์„ฑ ์ž๋™ ์ €์žฅ ์„ฑ๊ณต์‹œ ์ˆ˜์ • ํ…œํ”Œ๋ฆฟ์œผ๋กœ ๋ฆฌ๋‹ค์ด๋ ‰ํŠธํ•˜์—ฌ ์ฒซ ์ž‘์„ฑ์‹œ ์ž๋™์ €์žฅ ๊ธฐ๋Šฅ๊ณผ ์ˆ˜์ •์— ๋Œ€ํ•œ ์ž๋™์ €์žฅ ๊ธฐ๋Šฅ์„ ๊ตฌ๋ถ„ํ•ด์„œ ์‚ฌ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ตฌํ˜„์— ๋Œ€ํ•œ ์ž‘์„ฑ๊ธ€์€ ์•„๋ž˜์—์„œ ํ™•์ธํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค. ๊ฒŒ์‹œ๊ธ€ ์ž๋™์ €์žฅ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ํฌ์ŠคํŒ…

์•Œ๋ฆผ ๊ธฐ๋Šฅ

ํƒ€ ๋ธ”๋กœ๊ทธ ์œ ์ €๊ฐ€ ์ด์šฉ์ž์˜ ๊ฒŒ์‹œ๊ธ€์— ๋Œ“๊ธ€์„ ๋‚จ๊ธฐ๊ฑฐ๋‚˜ ์ด์šฉ์ž์˜ ๊ฒŒ์‹œ๊ธ€์— ์ข‹์•„์š”๋ฅผ ๋ˆ„๋ฅด๊ฑฐ๋‚˜ ์ด์šฉ์ž์˜ ๋ธ”๋กœ๊ทธ ์ž์ฒด๋ฅผ ํŒ”๋กœ์šฐ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์‹œ ์ด์šฉ์ž๋Š” ์ด์— ๋Œ€ํ•œ ์•Œ๋ฆผ์„ ๋ฐ›์•„์•ผ ํ•ฉ๋‹ˆ๋‹ค.

ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ์ˆ˜ํ–‰ํ•  ์‹œ ์•Œ๋ฆผ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ƒ์„ฑํ•˜์—ฌ ์•Œ๋ฆผ์ˆ˜์‹ ์ž๊ฐ€ ์ด๋ฅผ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

image ๋„ค๋น„๊ฒŒ์ด์…˜์—์„œ ์ฝ์ง€ ์•Š์€ ์•Œ๋ฆผ์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๋นจ๊ฐ„ ์ˆซ์ž๋กœ ๋žœ๋”๋งํ•˜์—ฌ ์ด๋ฅผ ์‰ฝ๊ฒŒ ์•Œ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์•Œ๋ฆผ์„ ๋ˆ„๋ฅผ ๊ฒฝ์šฐ ์•Œ๋ฆผ๊ด€๋ฆฌ ํŽ˜์ด์ง€๋กœ ๋“ค์–ด๊ฐˆ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

image ์•Œ๋ฆผํŽ˜์ด์ง€์—์„œ๋Š” ํด๋ฆญ ๊ฐ€๋Šฅํ•œ ์•Œ๋ฆผ์นด๋“œ๋“ค์ด ์กด์žฌํ•˜๋ฉฐ ์ฝ์ง€ ์•Š์•˜์„ ๊ฒฝ์šฐ ํฐ์ƒ‰์œผ๋กœ ์ฝ์—ˆ์„ ๊ฒฝ์šฐ ํšŒ์ƒ‰์œผ๋กœ ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

์•Œ๋ฆผ์„ ๋‹จ๊ฑด ํด๋ฆญํ•  ๊ฒฝ์šฐ ์ฝ์€ ๊ฒƒ์œผ๋กœ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.

(์ฝ์„ ๊ฒฝ์šฐ ๋„ค๋น„๊ฒŒ์ด์…˜ ๋ฐ” ์•Œ๋ฆผ์˜ ์ˆ˜์— ๋” ์ด์ƒ ํฌํ•จ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.)

์•Œ๋ฆผ ๋ชจ๋‘ ์ฝ๊ธฐ, ๋ชจ๋‘ ์‚ญ์ œ๋ฅผ ํ†ตํ•ด ์•Œ๋ฆผ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

์ฝ์ง€์•Š์€ ์•Œ๋ฆผ๋งŒ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•„ํ„ฐ ๊ธฐ๋Šฅ์„ ๋„ฃ์–ด๋‘์—ˆ์Šต๋‹ˆ๋‹ค.

์ข‹์•„์š” ๋ฐ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ

์ข‹์•„์š” ๋ฐ ํŒ”๋กœ์šฐ ๊ธฐ๋Šฅ์œผ๋กœ ํ•˜์—ฌ๊ธˆ ๊ฒŒ์‹œ๊ธ€์˜ ์ข‹์•„์š”์— ๋Œ€ํ•œ ์ถœ์ฒ˜ ์œ ์ €๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๊ฑฐ๋‚˜ ์œ ์ €๋“ค์˜ ํŒ”๋กœ์šฐ, ํŒ”๋กœ์ž‰ ๋ชฉ๋ก์„ ๋ณผ ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ž์‹ ์ด ๋ˆ„๋ฅธ ์ข‹์•„์š” ๊ฒŒ์‹œ๊ธ€๋งŒ ๋ชจ์•„๋ณผ ์ˆ˜ ์žˆ๋„๋ก Personal ์ข‹์•„์š” ๋ฆฌ์ŠคํŠธ ํŽ˜์ด์ง€๋ฅผ ์ถ”๊ฐ€ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋ฌดํ•œ ์Šคํฌ๋กค ํŽ˜์ด์ง• ๊ธฐ๋Šฅ

๊ฒŒ์‹œ๊ธ€ ๋ฆฌ์ŠคํŠธ ๋ Œ๋”๋ง์— Pageable์„ ํ™œ์šฉํ•œ ํŽ˜์ด์ง• ๊ธฐ์ˆ ์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ดˆ๊ธฐ ๋กœ๋“œ ์‹œ 5๊ฐœ์˜ ๊ฒŒ์‹œ๊ธ€ ์นด๋“œ๋ฅผ ๋ Œ๋”๋งํ•˜๋ฉฐ, AJAX ๊ธฐ๋ฐ˜์˜ ๋ฌดํ•œ ์Šคํฌ๋กค ๊ธฐ๋Šฅ์„ ๊ตฌํ˜„ํ•˜์—ฌ ์‚ฌ์šฉ์ž๊ฐ€ ์Šคํฌ๋กค์„ ์ตœํ•˜๋‹จ์œผ๋กœ ๋‚ด๋ฆด ๊ฒฝ์šฐ ์ถ”๊ฐ€๋กœ 5๊ฐœ์˜ ๊ฒŒ์‹œ๊ธ€ ์นด๋“œ๋ฅผ ๊ฐ€์ ธ์˜ค๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, ์ฟผ๋ฆฌ ์ŠคํŠธ๋ง์„ ํ†ตํ•ด tagName, seriesName, search์™€ ๊ฐ™์€ ์กฐ๊ฑด๋ณ„ ์กฐํšŒ ๊ธฐ๋Šฅ์„ ์ง€์›ํ•˜๋ฉฐ, ์ด๋ฅผ Querydsl์„ ํ™œ์šฉํ•œ ๋™์  ์กฐํšŒ ์ฟผ๋ฆฌ๋กœ ์ฒ˜๋ฆฌํ•˜์—ฌ ํšจ์œจ์ ์ธ ์กฐ๊ฑด๋ณ„ ๋ฐ์ดํ„ฐ ์กฐํšŒ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ž‘์„ฑ๊ธ€

๋ฌดํ•œ ์Šคํฌ๋กค ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ๊ตฌํ˜„ ๊ณผ์ •

๋Œ“๊ธ€ ๋Œ€๋Œ“๊ธ€ ๊ธฐ๋Šฅ

Thymeleaf์˜ ํ…œํ”Œ๋ฆฟ ์กฐ๊ฐ(th:fragment)์„ ํ™œ์šฉํ•˜์—ฌ ๊ณ„์ธต์ ์ธ ๋Œ“๊ธ€(๋Œ€๋Œ“๊ธ€ ํฌํ•จ)์„ ์žฌ๊ท€์ ์œผ๋กœ ๋ Œ๋”๋งํ•˜๋Š” ๊ตฌ์กฐ๋กœ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

์ž๊ธฐ ์ž์‹ ์„ ์—ฐ๊ด€๊ด€๊ณ„๋กœ ๋งบ๋Š” parentId์™€ childrens๋ฅผ ์ด์šฉํ•˜์—ฌ ๋Œ“๊ธ€๊ณผ ๋Œ€๋Œ“๊ธ€์„ ๋…ผ๋ฆฌ์  ๊ณ„์ธต ๊ตฌ์กฐ๋กœ ์˜์†ํ™” ํ›„, ๋ฐ˜ํ™˜์„ ์œ„ํ•œ DTO์ž‘์—…์—์„œ children์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ๋ฌดํ•œ์œผ๋กœ ๋ถ€๋ชจCommentsDto๊ฐ€ ์ž์‹CommentsDto๋ฅผ ๊ฐ€์ง€๋„๋ก ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.

ํ…œํ”Œ๋ฆฟ์—์„œ๋Š” th:block ๋ฐ th:replace๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ commentBlock์„ ์žฌ๊ท€์ ์œผ๋กœ ํ˜ธ์ถœํ•จ์œผ๋กœ์จ ๋ฌดํ•œ ๋Œ€๋Œ“๊ธ€ ๊ตฌ์กฐ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, collapse ๊ธฐ๋Šฅ์„ ํ™œ์šฉํ•œ ๋Œ€๋Œ“๊ธ€ ์ž…๋ ฅ ํผ์„ ์ œ๊ณตํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐœ์„ ํ•˜๋ฉฐ, ๋กœ๊ทธ์ธ ์ƒํƒœ์— ๋”ฐ๋ผ ๋Œ“๊ธ€ ์ž‘์„ฑ UI๋ฅผ ์ œ์–ดํ•˜์—ฌ ์ ‘๊ทผ์„ฑ์„ ๋ณด์žฅํ•ฉ๋‹ˆ๋‹ค.

แ„ƒแ…ขแ„ƒแ…ขแ†บแ„€แ…ณแ†ฏ

์ž๋ฐ”8 ์ŠคํŠธ๋ฆผ ๋žŒ๋‹ค ๋ฌธ๋ฒ• ๋„์ž…

์ŠคํŠธ๋ฆผ, ๋žŒ๋‹ค๋ฅผ ํ•™์Šตํ•˜์—ฌ ์ด๋ฅผ ํ”„๋กœ์ ํŠธ์— ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค. ์ ์šฉํ•˜์ง€ ์•Š์€ ์ฝ”๋“œ๊ฐ€ ์กด์žฌํ•˜๋Š”๋ฐ ์ด๋Š” ๊ฐ€๋…์„ฑ์„ ๊ธฐ์ค€์œผ๋กœ ๊ฐœ๋ฐœ์ž ๋ณธ์ธ์˜ ํŒ๋‹จํ•˜์— ๊ฒฐ์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋žŒ๋‹ค ์ ์šฉ ์ปค๋ฐ‹

์‚ฌ์ง„ ์ €์žฅ์šฉ๋Ÿ‰ ์ตœ์ ํ™”

๊ธฐ์กด Editor ์ž‘์—…์—์„œ ์‚ฌ์ง„์„ ์ฒจ๋ถ€ํ•  ๋•Œ, ์ฆ‰๊ฐ์ ์œผ๋กœ ์ €์žฅ์†Œ์— ์—…๋กœ๋“œ ๋˜์–ด ์‹ค์ œ ์ €์žฅ์‹œ ํ•ด๋‹น ์‚ฌ์ง„๋“ค์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ์ €์žฅ์†Œ์— ์“ฐ์ง€ ์•Š๋Š” ์‚ฌ์ง„๋“ค์ด ์Œ“์ด๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ S3 ๊ฐ์ฒด ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•œ ์ƒ๋ช…์ฃผ๊ธฐ ๊ด€๋ฆฌ๋ฅผ ํ†ตํ•ด ์‹ค์ œ ๊ฒŒ์‹œ๊ธ€ ์ €์žฅ ์‹œ์ ์— content์—์„œ ์“ฐ์ด๋Š” ์‚ฌ์ง„ ๊ฐ์ฒด์— ๋Œ€ํ•ด ์˜์†ํ™” ํƒœ๊ทธ๋ฅผ ๋ถ€์ฐฉํ•˜๊ณ , ์ž‘์„ฑ ์‹œ์  ์—…๋กœ๋“œ๋œ ํƒœ๊ทธ์—๋Š” ์ž„์‹œํƒœ๊ทธ๋ฅผ ๋ถ€์ฐฉํ–ˆ์Šต๋‹ˆ๋‹ค.

ํƒœ๊ทธ์˜ ์ƒํƒœ๊ด€๋ฆฌ๋Š” PostFile์ด๋ผ๋Š” ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜์—ฌ ์ˆ˜์ •์‹œ ์ƒˆ๋กœ์šด ์˜์†ํ™” ํƒœ๊ทธ๋ฅผ ๋ถ€์ฐฉํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ์˜์†ํ™” ํƒœ๊ทธ๋ฅผ ์ž„์‹œํƒœ๊ทธ๋กœ ๋ณ€ํ™˜ํ•˜๋Š” ๋“ฑ์˜ ์ž‘์—…์ด ๊ฐ€๋Šฅํ–ˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ž‘์„ฑ๊ธ€

์‚ฌ์ง„ ์ €์žฅ์šฉ๋Ÿ‰ ์ตœ์ ํ™” ๊ตฌํ˜„ ๊ณผ์ •

์•…์„ฑ ์‚ฌ์šฉ์ž ๋ง‰๊ธฐ

๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ทน๋‹จ์ ์ธ ์•…์„ฑ ์‚ฌ์šฉ์ž ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ๋ฐฉ์ง€ํ•˜๊ณ ์ž ์งง์€ ์‹œ๊ฐ„์•ˆ์— ์—๋””ํ„ฐ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๊ฐ€ ๋งค์šฐ ์ž์ฃผ ๋“ค์–ด์™”์„ ๊ฒฝ์šฐ ํ•ด๋‹น ์ปจํŠธ๋กค๋Ÿฌ์˜ ์ ‘๊ทผ์„ 1๋ถ„๊ฐ„ ๋ง‰๋„๋ก ๊ตฌํ˜„ํ–ˆ์Šต๋‹ˆ๋‹ค.

์š”์ฒญ ์ˆ˜๋ฅผ ์นด์šดํŠธํ•˜๊ณ  ์ƒํƒœ๋ฅผ ์•ˆ์ „ํ•˜๊ฒŒ ๊ด€๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด, ๋™์‹œ์„ฑ ๊ด€์ ์—์„œ ์•ˆ์ „ํ•œ ์บ์‹œ๋ฅผ ์ œ๊ณตํ•˜๋Š” Google์˜ ์˜คํ”ˆ์†Œ์Šค ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ธ Guava๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒํƒœ ๊ด€๋ฆฌ๋ฅผ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค. Guava๋Š” ๋™์‹œ์„ฑ ์ œ์–ด์™€ ์ž๋™ ๋งŒ๋ฃŒ ๊ธฐ๋Šฅ์„ ๋‚ด์žฅํ•˜๊ณ  ์žˆ์–ด, ๋ณต์žกํ•œ ๋กœ์ง ์—†์ด ํšจ์œจ์ ์œผ๋กœ ์š”์ฒญ ์ œํ•œ ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ง€์ •ํ•œ ์‹œ๊ฐ„๋™์•ˆ ์ตœ๋Œ€ ์š”์ฒญ์ˆ˜๋ฅผ ์ธ์ž๋กœ ๋ฐ›๋Š” RateLimit AOP๋ฅผ ์„ค๊ณ„ํ•˜์—ฌ ํ•ด๋‹น ๊ธฐ๋Šฅ์„ ๋‹ค๋ฅธ ์ปจํŠธ๋กค๋Ÿฌ ๋ฉ”์„œ๋“œ์—์„œ๋„ ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

(์•„๋ž˜์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•œ ์˜์ƒ์œผ๋กœ, 1๋ถ„๊ฐ„ 5ํšŒ ์ดˆ๊ณผ ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๊ฒฝ์šฐ alert๋ฅผ ๋„์šฐ๋Š” ๊ฒƒ์œผ๋กœ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. ์‹ค์ œ ์ ์šฉ์‹œ์—๋Š” ๋”์šฑ ๊ด€๋Œ€ํ•˜๊ฒŒ ์ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค.) แ„’แ…ชแ„†แ…งแ†ซ แ„€แ…ตแ„…แ…ฉแ†จ 2025-01-21 แ„‹แ…ฉแ„’แ…ฎ 4 52 14

์•…์„ฑ ์‚ฌ์šฉ์ž ๋ง‰๊ธฐ V2

๊ธฐ์กด AOP ๋ฐฉ์‹์˜ RateLimit(์ฒ˜๋ฆฌ์œจ ์ œํ•œ) ๊ธฐ๋Šฅ์„ ํ•„ํ„ฐ๋กœ ์˜ฎ๊ฒจ ์žฌ ๊ตฌํ˜„ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ž‘์„ฑ๊ธ€ : ์ฒ˜๋ฆฌ์œจ ์ œํ•œ ์žฅ์น˜ AOP -> Filter

Ehcache ์ ์šฉ

์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํƒœ๊ทธ ๋ชฉ๋ก์ด๋‚˜ ๋„ค๋น„๊ฒŒ์ด์…˜๊ณผ ๊ฐ™์€ ๋ฐ˜๋ณต์ ์œผ๋กœ ๋™์ผํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์กฐํšŒํ•˜๋Š” ๊ฒฝ์šฐ, ๋งค๋ฒˆ DB์— ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์„ฑ๋Šฅ ์ €ํ•˜์™€ ๋ถˆํ•„์š”ํ•œ ๋ฆฌ์†Œ์Šค ์†Œ๋ชจ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด Ehcache๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์บ์‹ฑ์„ ์ ์šฉํ•˜์˜€์Šต๋‹ˆ๋‹ค.

Ehcache๋ฅผ ํ†ตํ•ด ๋ณ€๊ฒฝ์ด ์ ๊ณ , ์กฐํšŒ ๋ถ€๋‹ด์ด ํฐ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ๋ถˆํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์กฐํšŒ๋ฅผ ์ตœ์†Œํ™”ํ•˜์˜€์œผ๋ฉฐ, ์บ์‹œ์˜ Key-Value ๊ตฌ์กฐ๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‹ค์–‘ํ•œ ๋ฉ”์„œ๋“œ์—์„œ ์บ์‹œ ๋ฐ์ดํ„ฐ๋ฅผ ํšจ๊ณผ์ ์œผ๋กœ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

๋˜ํ•œ, LRU(Least Recently Used) ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ ์šฉํ•˜์—ฌ ๊ฐ€์žฅ ์˜ค๋ž˜๋œ ๋ฐ์ดํ„ฐ๋ถ€ํ„ฐ ํ๊ธฐํ•˜๋„๋ก ์„ค์ •ํ•˜์˜€์œผ๋ฉฐ, TTL(Time-To-Live)์„ 6์‹œ๊ฐ„์œผ๋กœ ์ง€์ •ํ•˜์—ฌ ์ผ์ • ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด ์ž๋™์œผ๋กœ ์บ์‹œ๊ฐ€ ๊ฐฑ์‹ ๋˜๋„๋ก ์„ค์ •ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ์„ ์œ ์ง€ํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ ์ตœ์ ํ™”๋ฅผ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ ๋กœ์ง

์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€์˜ ๊ฒฝ์šฐ ๊ฒŒ์‹œ๊ธ€ ์—”ํ‹ฐํ‹ฐ์— viewCount๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฅผ increaseํ•˜๋Š” ๋ฐฉ์‹์œผ๋กœ ์„ ํƒํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์ฟ ํ‚ค์™€ Ehcache๋ฅผ ์ด์šฉํ•˜์—ฌ ์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ ์ค‘๋ณต์„ ๋ง‰๊ณ  ๋‚™๊ด€์  ๋ฝ์„ ์ด์šฉํ•˜์—ฌ ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ์ตœ์†Œํ™”ํ•˜๋ฉด์„œ๋„ ์„ฑ๋Šฅ์€ ํฌ๊ฒŒ ๋–จ์–ด์ง€์ง€ ์•Š๋„๋ก ํ•˜์˜€์Šต๋‹ˆ๋‹ค.

์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ ๋กœ์ง ๊ตฌํ˜„ ์ž‘์„ฑ ๊ธ€ : ์กฐํšŒ์ˆ˜ ์ฆ๊ฐ€ ๋กœ์ง ๊ตฌํ˜„

MapStruct ๋„์ž…

๋ฐ์ดํ„ฐ ๊ฐ์ฒด์™€ ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๊ฐ„์˜ ๋ณ€ํ™˜์„ ์œ„ํ•ด MapStruct, ModelMapper์ค‘ ๊ธฐ์ˆ  ์ ์šฉ ์—ฌ๋ถ€๋ฅผ ์œ„ํ•œ ์‚ฌ์ „์กฐ์‚ฌ์‚ฌ์ „์กฐ์‚ฌ ๊ด€๋ จ ๊ธ€ ํ›„ MapStruct๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์„ฑ๋Šฅ์ ์œผ๋กœ ๋ฆฌํ”Œ๋ ‰์…˜ ๋ฐฉ์‹์˜ ModelMapper๋ณด๋‹ค ํ›Œ๋ฅญํ•œ ํผํฌ๋จผ์Šค๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ๊ณ  ์‚ฌ์šฉํ•˜๋Š”๋ฐ ์žˆ์–ด ์–ด๋ ค์šด ๋Š๋‚Œ์€ ํฌ๊ฒŒ ์—†์—ˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ MapStruct๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์—”ํ‹ฐํ‹ฐ๋‚˜ DTO์˜ ์ƒ์„ฑ๋กœ์ง์„ ํ•œ ์˜์—ญ์œผ๋กœ ๋ชฐ์•„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์—ˆ์œผ๋ฉฐ List ๋ณ€ํ™˜๊ณผ ๊ฐ™์ด ์ž๋™์ ์ธ ๋ถ€๋ถ„์—์„œ ์˜ค๋Š” ์ฝ”๋“œ๋Ÿ‰ ๊ฐ์†Œ์˜ ํšจ๊ณผ๊ฐ€ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๋ฌด์ค‘๋‹จ ๋ฐฐํฌ ์ž๋™ํ™”

image

Nginx๋ฅผ ๋ฆฌ๋ฒ„์Šค ํ”„๋ก์‹œ๋กœ ์‚ฌ์šฉํ•˜์˜€์œผ๋ฉฐ, ์„œ๋ฒ„๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ EC2์—์„œ ๋„์ปค ์ปดํฌ์ฆˆ๋ฅผ ํ†ตํ•ด ๋„์›Œ์ง€๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

main ๋ธŒ๋žœ์น˜์— Push, Pull Request์‹œ์— github action์ด ๋™์ž‘ํ•˜์—ฌ ์ž๋™ ๋ฐฐํฌ๊ฐ€ ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๋ฐฐํฌ ์ž๋™ํ™” ์Šคํฌ๋ฆฝํŠธ์—์„œ AWS KEY์™€ ๊ฐ™์€ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋Š” GITHUB Secrets์— ๋‹ด์•„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

main ๋ธŒ๋žœ์น˜์— ์—…๋ฐ์ดํŠธ๋œ ๋‚ด์šฉ์„ ๋นŒ๋“œํ•˜๊ณ  ๋„์ปคํŒŒ์ผ๋กœ ํ•˜์—ฌ๊ธˆ ์ด๋ฏธ์ง€๋ฅผ ๋งŒ๋“ค์–ด ๋„์ปค ํ—ˆ๋ธŒ์— ์—…๋กœ๋“œ ํ•˜๋Š” ๊ฒƒ์œผ๋กœ ๋นŒ๋“œ ๊ณผ์ •์ด ์ด๋ฃจ์–ด์ง‘๋‹ˆ๋‹ค.

๋ฐฐํฌ ๊ณผ์ •์€ ๋นŒ๋“œ ๊ณผ์ •์„ ์•ˆ์ „ํžˆ ์™„๋ฃŒํ–ˆ์„ ๊ฒฝ์šฐ ์‹œํ–‰๋ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ์„œ๋ฒ„๊ฐ€ blue ํ”„๋กœํ•„์ธ์ง€ green ํ”„๋กœํ•„์ธ์ง€ env ์—”๋“œํฌ์ธํŠธ๋กœ ํ•˜์—ฌ๊ธˆ ํ™•์ธํ•ฉ๋‹ˆ๋‹ค.

์ด ํ™•์ธ ์ ˆ์ฐจ๋ฅผ ํ†ตํ•ด ํ˜„์žฌ ๋ฐฐํฌ์‹œ ๋„์›Œ์งˆ ํ”„๋กœํ•„์„ ๊ฒฐ์ •ํ•ฉ๋‹ˆ๋‹ค (blue -> green) or (green -> blue)

๋„์ปค ํ—ˆ๋ธŒ์—์„œ ์ด๋ฏธ์ง€๋ฅผ pull๋ฐ›๊ณ  ์ด๋ฅผ docker compose ํ•˜์—ฌ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋„์›๋‹ˆ๋‹ค.

์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž˜ ๋„์›Œ์ง„์ง€ ํ™•์ธํ•˜๊ณ , ๊ธฐ์กด์— ๋„์›Œ์ง„ ์ปจํ…Œ์ด๋„ˆ๋ฅผ ๋•๋‹ˆ๋‹ค.

์ด๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉ์ž๋Š” ์„œ๋ฒ„์˜ ์—…๋ฐ์ดํŠธ๋ฅผ ์„œ๋ฒ„ ์ค‘๋‹จ ์—†์ด ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ๊ฒฝํ—˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ด€๋ จ ์ž‘์„ฑ๊ธ€

๋ฐฐํฌ ์ž๋™ํ™”์— ๊ด€ํ•œ ์„ธ๋ถ€ ์ž‘์„ฑ๊ธ€

About

This project is a fully functional blog application built using Spring Boot, Thymeleaf, and other popular technologies. It allows users to create, read, update, and delete posts, manage user profiles, and interact with other users through comments, likes, and follows.

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published