diff --git a/README.md b/README.md index 82b05f1..6e3df00 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,50 @@ * **Markdown Parser** (Content) --- +## ๐Ÿณ Infrastructure & Deployment +์•ˆ์ •์ ์ด๊ณ  ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ ํ™˜๊ฒฝ์„ ๋ณด์žฅํ•˜๊ธฐ ์œ„ํ•ด **Docker** ๊ธฐ๋ฐ˜์˜ ์ปจํ…Œ์ด๋„ˆ ์•„ํ‚คํ…์ฒ˜๋ฅผ ๊ตฌ์ถ•ํ–ˆ์Šต๋‹ˆ๋‹ค. +### ๐Ÿ—๏ธ Dockerfile Highlights +์ œ๊ณต๋œ Dockerfile์€ ๋ณด์•ˆ๊ณผ ์ด๋ฏธ์ง€ ๊ฒฝ๋Ÿ‰ํ™”์— ์ดˆ์ ์„ ๋งž์ถฐ ์„ค๊ณ„๋˜์—ˆ์Šต๋‹ˆ๋‹ค. + +- **Multi-stage Build**: ๋นŒ๋“œ ํ™˜๊ฒฝ(JDK)๊ณผ ์‹คํ–‰ ํ™˜๊ฒฝ(JRE)์„ ๋ถ„๋ฆฌํ•˜์—ฌ ์ตœ์ข… ์ด๋ฏธ์ง€ ํฌ๊ธฐ๋ฅผ ์ตœ์†Œํ™”ํ–ˆ์Šต๋‹ˆ๋‹ค. + +- **Alpine Linux**: ๊ฒฝ๋Ÿ‰ํ™”๋œ alpine ๋ฒ ์ด์Šค ์ด๋ฏธ์ง€๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ฐฐํฌ ํšจ์œจ์„ฑ์„ ๋†’์˜€์Šต๋‹ˆ๋‹ค. + +- **Security (Non-root)**: ์ปจํ…Œ์ด๋„ˆ ํƒˆ์ทจ ์‹œ ํ˜ธ์ŠคํŠธ ์‹œ์Šคํ…œ ๋ณดํ˜ธ๋ฅผ ์œ„ํ•ด ๋ฃจํŠธ ๊ถŒํ•œ์ด ์•„๋‹Œ spring ์ „์šฉ ์œ ์ €๋กœ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. + +
๐Ÿ‘‰ Dockerfile ๋ฏธ๋ฆฌ๋ณด๊ธฐ + +```Dockerfile +# 1. Build Stage +FROM eclipse-temurin:21-jdk-alpine AS build +WORKDIR /app +COPY . . +RUN ./gradlew clean bootJar -x test + +# 2. Run Stage +FROM eclipse-temurin:21-jre-alpine +WORKDIR /app +# ๋ณด์•ˆ์„ ์œ„ํ•œ ์ „์šฉ ์œ ์ € ์ƒ์„ฑ ๋ฐ ๊ถŒํ•œ ๋ถ€์—ฌ +RUN addgroup -S spring && adduser -S spring -G spring +COPY --from=build --chown=spring:spring /app/build/libs/*.jar app.jar +USER spring:spring + +ENTRYPOINT ["java", "-jar", "-Dspring.profiles.active=prod", "app.jar"] +``` +
+ +### ๐Ÿš€ How to Run (with Docker Compose) +DB(PostgreSQL), Cache(Redis), Object Storage(MinIO)๋ฅผ ํฌํ•จํ•œ ์ „์ฒด ์ธํ”„๋ผ๋ฅผ ํ•œ ๋ฒˆ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. + +```Bash +# 1. ํ”„๋กœ์ ํŠธ ๋นŒ๋“œ ๋ฐ ์ปจํ…Œ์ด๋„ˆ ์‹คํ–‰ +$ docker-compose up -d --build + +# 2. ๋กœ๊ทธ ํ™•์ธ +$ docker-compose logs -f blog-api +```` +--- ## ๐Ÿ”Œ API Reference **Base URL**: `http://localhost:8080`