- ์ฐ์ฃผ์ ๋ํด ์ด์ผ๊ธฐ๋ฅผ ๋๋๊ณ ์ถ์ ์ฌ์ฉ์์๊ฒ ๋ค์ํ ์๋น์ค๋ฅผ ์ ๊ณตํ๊ธฐ ์ํ
์ฐ์ฃผ์ ๋ํด ์ํตํ๋ ์ปค๋ฎค๋ํฐํ๋ก์ ํธ์ ๋๋ค. - ์ฌ๋ฌ ๊ธฐ๋ฅ์ด ๋ค์ด๊ฐ ์์ ์ด๊ธฐ ๋๋ฌธ์ ํ๋ก์ ํธ ํน์ฑ์ ํ์ฅ์ด ์ฉ์ดํ๊ณ ์์กด์ฑ ๊ด๋ฆฌ๊ฐ ์ฌ์ด ๊ทธ๋ฆฌ๊ณ MVP ์น์ฌ์ดํธ๋ฅผ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์๋
Spring Bootํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํํ์ต๋๋ค.
- ๊ฐ๋ฐ๊ธฐ๊ฐ : 2024-10-03 ~ 2024-12-07
- ๊ฐ๋ฐ ์ธ์ : ํ๋ก ํธ์๋/๋ฐฑ์๋ 1๋ช (๋ณธ์ธ)
Spring BootJPA,lombok: ๊ฐ๋ฐ ํธ์์ฑ ํฅ์ ๋ฐ DB ์ฟผ๋ฆฌ ๋ฉ์๋ ์๋ํAWS: Auto Scaling Group, Application Load Balancer, Route 53, API Gateway, Lamdba, RDS, VPC, LamdbaDocker: ์๋ก ๋ค๋ฅธ ์ด์์ฒด์ ๋ฐ ํ๊ฒฝ์์ ํด๋น ์๋น์ค๋ฅผ ๋ฐฐํฌํ๊ธฐ ์ํด ๊ทธ๋ฆฌ๊ณ CI/CD์ ํ ์คํธ๋ฅผ ๋๋ฆด ๋ ๋งค๋ฒ ๊ฐ์ ํ๊ฒฝ์ ์ ์งํ๊ธฐ ์ํด ์ฌ์ฉํ์์ต๋๋ค.Docker Compse: docker ์คํ ์, ์๋ฏผํ ๊ฐ๋ค์ด ๋ค์ด์๋ envํ์ผ์ ์ฐธ์กฐํ๊ณ ์ถํ์ ํ๋์ ์๋ฒ์์ ์ฌ๋ฌ ์ปจํ ์ด๋๋ค์ ๋์์ ๋์ธ ๋๋ฅผ ์ํด ์ฌ์ฉํ์์ต๋๋ค.Github Actions: ์ปจํ ์ด๋์ ํ๊ฒฝ ์์์ ํ ์คํธ, ๋น๋ ๊ทธ๋ฆฌ๊ณ ๋ฐฐํฌ๋ฅผ ์๋ํํ์ฌ ๊ฐ๋ฐ ํธ์์ฑ๊ณผ ์๋๋ฅผ ํฅ์์ํค๋ ค๊ณ ์ฌ์ฉํ์์ต๋๋ค
Auth
| Controller | Service | Repository | |
|---|---|---|---|
| login | LoginController | LoginService | UserRepository |
| logout | LogoutController | LogoutService | UserRepository |
| signup | SignUpController | SignUpService | UserRepository |
| refresh | TokenRefreshController | TokenRefreshService | UserRepository |
Comment
| Controller | Service | Repository | |
|---|---|---|---|
| CRUD | CommentController | CommentService | CommentRepository |
Post
| Controller | Service | Repository | |
|---|---|---|---|
| CRUD | PostController | PostService | PostRepository |
| like | PostLikeController | PostLikeService | PostLikeRepository |
User
| Controller | Service | Repository | |
|---|---|---|---|
| CRUD | UserController | UserService | UserRepository |
| password | PasswordController | PassWordService | UserRepository |
| profile | ProfileController | UserService | UserRepository |
- Spring Security๊ฐ AuthenticationProvider์ Bcrypt ๋จ๋ฐฉํฅ ์ํธํ๋ฅผ ์ฌ์ฉํ๊ฒ ๊ตฌํ
- Bcrypt์ ์์ ํ์ง๋ง ์ํธํ๊ฐ ๋๋ฆฐ Blowfish๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๋ฅด๊ฒ ๋ก๊ทธ์ธ์ด ๋์ง ์๊ฒ ํจ์ผ๋ก์ ๋ก๊ทธ์ธ ๋ฌด์ฐจ๋ณ ๋์
๊ณต๊ฒฉ ๋๋น
- ์๋ฒ์ ๋ก๊ทธ์ธ ์ ๋ณด ์ ์ฅ ๋ฉ๋ชจ๋ฆฌ ๋ถ๋ด์ ์ค์ด๊ธฐ ์ํ์ฌ Jwt ํ ํฐ ์ฌ์ฉ
- ๋ก๊ทธ์ธ ์ ์ง ๊ธฐ๊ฐ์ ๋๋ฉ์ธ๋ณ ์ฟ ํค(๋ฆฌํ๋ ์ ํ ํฐ)์ ์ ์ฅํ์ฌ ์ธ๊ฐ์ ์ฌ์ฉ๋๋ ์ก์ธ์ค ํ ํฐ ๋ง๋ฃ ์, ๋ฆฌํ๋ ์ ํ ํฐ์ ์ฌ์ฉํ์ฌ ์๋ฒ์ ์ก์ธ์ค ํ ํฐ ์ฌ ๋ฐ๊ธ ์์ฒญํ๋ ๋ก์ง ๊ตฌํ
- ์ฌ์ฉ์๊ฐ ์๋น์ค ํํด ํ ๋ณต๊ตฌ ํ ์ ์๊ฒ ์ ์ ์ํํธ ์ญ์ ๊ตฌํ
- ์ํํธ ์ญ์ ํ, 1๋ฌ ์ดํ DB์ ํ์์๋ ๋ฐ์ดํฐ๋ฅผ ์ญ์ ํ๊ธฐ ์ํ์ฌ ํ๋ ์ญ์ ๊ตฌํ
- ๋น๋ฐ๋ฒํธ ํ๋ ์ฝ๋ฉ์ ๋ฐฉ์ง ํ๊ธฐ ์ํด ํ์๊ฐ์
, ๋ก๊ทธ์ธ, ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ์ bcrypt๋ก ๋น๋ฐ๋ฒํธ ์ํธํํ์ฌ ์ฒ๋ฆฌ
- User CRUD ๊ตฌํ
- ํ๋ก ํธ๊ฐ ํ์
์ ํ๋์ API๋ก ์ข์์ ๋ฐ ์ข์์ ์ทจ์ ์์ฒญ ๋ณด๋ด๋๋ก ๊ฒ์๊ธ ์ข์์ ํ ๊ธ ํ์ ๊ธฐ๋ฅ ๊ตฌํ
- ๋ก๊ทธ์ธํ ์ฌ์ฉ์๋ง ๊ฒ์๊ธ์ ์์ฑํ ์ ์๊ฒ ์ ํจํ ์ก์ธ์ค ํ ํฐ์ ์ฌ์ฉํ์ฌ ๊ฒ์๊ธ ์์ฑํ ์ ์๊ฒ ๊ตฌํ
- ๊ฒ์๊ธ CRUD ๊ธฐ๋ฅ ๊ตฌํ
- ๋ค๋ฅธ ์ฌ์ฉ์์ ๋๊ธ ์ญ์ ๋ฐ ์์ ์ ๋ฐฉ์งํ๊ธฐ ์ํด, ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๊ฒ์๊ธ ์์ฑ์์ ID๊ฐ ๊ฐ์ ๊ฒฝ์ฐ๋ฉ๋ ํด๋น ๋๊ธ์ ์์ ๋ฐ ์ญ์ ํ ์ ์๊ฒ ๊ตฌํ
- ๋๊ธ CRUD ๊ธฐ๋ฅ ๊ตฌํ
- ๊ฒ์๊ธ ์ญ์ , ๋๊ธ ๋ฑ๋ก ๊ทธ๋ฆฌ๊ณ ์ ์ ๊ฒ์ ๋ฑ ๋น์ฆ๋์ค ๋ก์ง์์ ์ผ์ด๋ ์ ์๋ ๋ณ๋์ ์์ธ์ฒ๋ฆฌ ํธ๋ค๋ฌ ๊ตฌํ
- ๋น์ฆ๋์ค ๋ก์ง ์์ธ ์ธํฐํ์ด์ค๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ ๋๋ฉ์ธ๋ณ ์์ธ ๊ตฌํ์ฒด๋ฅผ ์์ฑํ์๋ค.
- API ์ฑ๊ณต ๋ฐ ์คํจ ์๋ต ์ฝ๋๋ค์ ๋๋ฉ์ธ ๋ณ๋ก ๋ถ๋ฅํ์ฌ ๊ด๋ฆฌํด์ผํ๋ ๊ด์ฌ์ฌ๋ฅผ ๋ถ๋ฆฌํ์๋ค.
- API๋ฅผ RestFulํ๊ฒ ๊ตฌํํ์ฌ ๋ฆฌ์์ค์ ํํ๋ก URL ๊ทธ๋ฆฌ๊ณ ํ์๋ก ๋ฉ์๋๋ฅผ ๊ตฌํํจ์ผ๋ก์จ ๊ฐ๋ฐ ๋ฐ ํ์
์ ์ฉ์ดํ๊ฒ ๊ตฌํ
์ธ์ฆ
- ์ฌ์ฉ์๋ ์ด๋ฉ์ผ, ๋๋ค์ ๊ทธ๋ฆฌ๊ณ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ํ์๊ฐ์
- ์ฌ์ฉ์๋ ์ด๋ฉ์ผ๊ณผ ๋น๋ฐ๋ฒํธ๋ฅผ ์ฌ์ฉํ์ฌ ๋ก๊ทธ์ธ
- ์ฌ์ฉ์๋ ํ์ฌ ๋น๋ฐ๋ฒํธ๋ฅผ ์๊ณ ์๋ ์ํ์์๋ง ๋น๋ฐ๋ฒํธ ๋ณ๊ฒฝ ๊ฐ๋ฅ
- ์ฌ์ฉ์์ ๊ณ์ ํํด
์ ์ ๊ด๋ฆฌ
- ์ฌ์ฉ์๋ ์ด๋ฉ์ผ, ํ๋กํ ์ด๋ฏธ์ง, ๋น๋ฐ๋ฒํธ, ๋๋ค์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ํ๋กํ ์ ๋ณด ๋ฐ ์์ ๊ฐ๋ฅ
- ๊ฐ ์ ์ ๋ ๊ณ ์ ํ ์๋ณ์๋ฅผ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ด๋ฉ์ผ๊ณผ ๋๋ค์์ ์ ๋ํฌํ๊ฒ ์ค์ ํ์ฌ ์ค๋ณต ๋ฐฉ์ง
๊ฒ์๊ธ ๊ด๋ฆฌ
- ์ฌ์ฉ์๊ฐ ์ ๋ชฉ, ๋ด์ฉ, ์ด๋ฏธ์ง, ์์ฑ์ผ์, ์์ ์ผ์ ๋ฑ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๊ฒ์๊ธ ๊ด๋ฆฌ
- ๊ฒ์๊ธ์ ์์ฑ์๋ฅผ ์ฐธ์กฐํ์ฌ ๊ด๊ณ๋ฅผ ์ค์
- ์ฌ์ฉ์์ ๊ฒ์๊ธ ์ข์์ ์ ๋ณด๋ฅผ ๋ณ๋์ Table๋ก ๋ถ๋ฆฌ
๋๊ธ ๊ด๋ฆฌ
- ์ฌ์ฉ์๊ฐ ๋ด์ฉ, ์์ฑ์, ์์ฑ์ผ์ ๋ฑ์ ์ ๋ณด๋ฅผ ํฌํจํ๋ ๋๊ธ ๊ด๋ฆฌ
- ๋๊ธ์ ์ด๋ค ๊ฒ์๊ธ์ ์ํด ์๋์ง ๋ํ๋ด๋ ์ฐธ์กฐ ํฌํจ
์๊ตฌ์ฌํญ์ ๊ธฐ๋ฐ์ผ๋ก ๋ชจ๋ธ๋งํ E-R Diagram์ ๋๋ค.
์ถํ ๋ฐฑ์๋ ์๋ฒ์ DB๋ฅผ ํ๋ผ์ด๋น ์๋ฒ์ ๋ฐฐ์นํ๊ธฐ ์ํด ๋ด๋ถ ์ฌ์ค๋ง์ธ VPC๋ฅผ ๊ตฌ์ถํ๊ณ ์์ ์ ์ธ ์๋ฒ๋ฅผ ์ํ ํธ๋ํฝ ๋ณ๋ก ์๋ฒ์ ๊ฐ์๋ฅผ ๋ณํ๊ฒ ํ ์ ์๋ Auto Scaling Group๊ธฐ๋ฐ Application Load Balancer ์ฌ์ฉํ์๋ค.
๊ทธ๋ฆฌ๊ณ Docker Compose์ DockerFile์ ํ์ฉํ์ฌ ์ปจํ
์ด๋ ์์ฑ ๋ฐ ์๋ฉธ ์คํฌ๋ฆฝํธ๋ฅผ env ํ์ผ๊ณผ ํจ๊ป ์คํํ์ฌ ์ฌ๋ฌ ์ปจํ
์ด๋๋ฅผ ๊ด๋ฆฌํ๋ ๋์ปคํ์ผ์ ๋ํ ์ฑ
์์ compose๋ก ๋ถ๋ฆฌํ์๋ค.
Auto Scaling Group(ASG): ํธ๋ํฝ ์ฆ๊ฐ์ ์๋ฒ๋ฅผ ์๋์ผ๋ก ์ถ๊ฐํ๊ฒ ํ์ฌ ํธ๋ํฝ๋ณ๋ก ์ ์ ํ ์๋ฒ ๋น์ฉ์ ์ฌ์ฉํ๊ฒ ํ์์ต๋๋ค.Application Load Balancer(ALB): ASG์ ๋ค์ด๊ฐ๋ ํธ๋ํฝ๋ค์ ๊ณ ๋ฅด๊ฒ ๋ถ์ฐ์ํค๊ณ ํธ๋ํฝ์ ์ธก์ ํด์ฃผ๊ธฐ ์ํ์ฌ ์ฌ์ฉํ์์ต๋๋ค.Route 53: ๊ตฌ๋งคํ ๋๋ฉ์ธ์ ALB์ ์ฐ๊ฒฐํด์ฃผ๊ณ ํฌ์ค์ฒดํฌ๋ฅผ ํ๋ ์ฉ๋๋ก ์ฌ์ฉํ์์๋๋ค.API Gateway: ์๋ฒ๋ฅผ ๊ฑฐ์น์ง ์์๋ ๋๋ ServerLess ๋ฆฌ์์ค๋ค์ ๋ํ ์์ฒญ์ ๋ฐ๋ก ๊ฐ๋ก์ฑ๊ธฐ ์ํด ์ฌ์ฉํ์์ต๋๋ค.Lamdba: ์ฌ์ฉ์๊ฐ ์ด๋ฏธ์ง ์ฌ๋ฌ๊ฐ๋ฅผ ๋์์ ์ ์ฅํ ์๋ ์๋, ์ผ๋ฐ API ๋ณด๋ค ๋ง์ ์์ฒญ,๋ค์ Lamdba๋ฅผ ์ฌ์ฉํ์ฌ ์๋ฒ์ ๋ถ๋ด์ด ๋์ง ์๊ธฐ ํ๊ธฐ ์ํด ์ฌ์ฉํ์์ต๋๋ค.S3: ์ด๋ฏธ์ง๊ฐ์ ๋์ฉ๋ ํ์ผ์ DB์ ์ ์ฅํ๋ฉด ๋น์ฉ์ ์ผ๋ก ๋ถ๋ด์ด ๋์ด AWS์์ ์ ๊ณตํด์ฃผ๋ S3์ ์ ์ฅํ์์ต๋๋ค.VPC: ์ถํ ๋ฐฑ์๋ ๋ฐ RDS๊ฐ์ ๊ณต๊ฐ๋๋ฉด ์ํํ ์๋ฒ๋ค์ ํ๋ผ์ด๋น ์๋ธ๋ท์ ์ ์ฅํ๊ธฐ ์ํด, ๊ฐ์ ์ฌ์ค ๋คํธ์ํฌ ๋ง์ ๊ตฌ์ถํ๋ ค๊ณ ํด๋น ๋ฆฌ์๋ฅด๋ฅผ ์ฌ์ฉํ์์ต๋๋ค.RDS: DB์ ๋ํ ๊ด๋ฆฌ ๋ถ๋ด์ ์ค์ฌ์ฃผ๊ณ CloudWatch๋ก DB ์ํ๋ฅผ ์ค์๊ฐ์ผ๋ก ๊ด์ฐฐํ๊ธฐ ์ํ์ฌ ์ฌ์ฉํ์์ต๋๋ค.
- ์ปค์คํ
์ํ๋ฆฌํฐ ๊ตฌํ์ ์ค๋ ๋ ๋ก์ปฌ์ด ํ์ํ๋ ๋ฌธ์
๊ฐ ์์ฒญ ์ธ์ฆ ์ ๋ณด๋ฅผ ์ ์ฅํ๊ธฐ ์ํด ์ค๋ ๋ ๋ก์ปฌ์ ๊ตฌํํ ํ์์ฑ์ด ์์๊ธฐ ๋๋ฌธ์
ThreadLocalํด๋์ค๋ฅผ ์ฌ์ฉํ์ฌ ๊ฐ ์ค๋ ๋์ ๋ํ ์ธ์ฆ์ ๋ณด๋ฅผ ์ ์ฅํ๊ณ ๋ถ๋ฌ์ค๋CustomSecurityContextHolder๋ฅผ ๊ตฌํํ์ฌ ํด๊ฒฐํ์๋ค.
- ์ธ์ฆ ๋ฐ ์ธ๊ฐ
- ์คํ๋ง ํ๋ ์์ํฌ์์ ๋ด๋ถ์ ์ผ๋ก Proivder๋ฅผ ์ ํํ ๋, argon2, bcrypt ๊ทธ๋ฆฌ๊ณ pbkdf2 ๊ฐ์ ์ํธํ ์๊ณ ๋ฆฌ์ฆ๋ค์ด Default๋ก ๋ค์ด๊ฐ๋ ๊ฒ์ ์ฝ๋์์ผ๋ก ํ์ธํ ์ ์๋ ์ข์ ๊ฒฝํ์ด์๋ค.
- JWT๋ ๋ธ๋๋ฆฌ์คํธ๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์๋ฒ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ผ์ ๋ถ๋ถ ํ ๋นํ์ฌ ์ฌ์ฉํ๋ค๋ ๊ฒ์ ์ ์ธํ๊ณ ๋ ์๋ฒ์ ์ง์ ์ ์ธ ์์ฒญ์ ๋ณด๋ด์ง ์์ง๋ง ๊ทธ ์๋ฒ๊ฐ ๊ฐ์ ํ์ง ์๋, ์ฆ jwt ์ก์ธ์ค ํ ํฐ์ด ์ด์์๋ ๊ธฐ๊ฐ ๋์ ํดํน์ ๋นํ๋ฉด ์๋ฒ๊ฐ ๋ฐ๋ก ์กฐ์นํ ์ ์๋ ๋ฐฉ๋ฒ์ด ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๊ณ ์๋ฒฝํ ๋ณด์์ ์กด์ฌํ์ง ์๋๋ค๋ผ๋ ๊ฒ์ด ์์ธํ๊ฒ ๋๊ปด์ก์๋ค.
- RestFull API
1. URL์ ๋ฆฌ์์ค๋ฅผ ๊ทธ๋ฆฌ๊ณ ๋ฉ์๋์ ํ์๋ฅผ ์ ๊ณ ์ด๊ฒ์ ์ง๊ด์ ์ผ๋ก ์ดํดํ๊ฒ ํจ์ผ๋ก์จ ํด๋น ์ปจํ ์คํธ๋ฅผ ์ดํดํ๋๋ฐ ๋๋ ์๊ฐ์ ์ค์์ผ๋ก์ ๊ฐ๋ฐ์ ์ฉ์ดํ๊ฒ ๋์์ ์ค ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์์ต๋๋ค.

.webp)