๐ซ JAVA
๐ Board_with_bcrypt
๐ฟ git
โ
1. ๊ฐ์
| ๊ตฌ์ฑ ์์ | ์ค๋ช
| ๋น์ |
|---|
| ๋ชจ๋ธ(Model) | ๋ฐ์ดํฐ์ ๊ตฌ์กฐ์ ๊ด๊ณ๋ฅผ ์ ์ | ๊ฑด๋ฌผ์ ์ค๊ณ๋(์ด๋ค ๋ฐฉ์ด ์๊ณ , ์ด๋ป๊ฒ ์ฐ๊ฒฐ๋๋์ง) |
| DTO | ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๋ "ํ์" | ํ๋ฐฐ ์์(๋ด๋ถ ๋ฌผ๊ฑด์ ์ค๊ณ๋์ ๋ง์ง๋ง, ์ด์ก ์ ํฌ์ฅ๋ฐฉ์์ ๋ฐ๋ก) |
| ๋ฆฌํฌ์งํ ๋ฆฌ(Repository) | DB์ ์ ๊ทผํ๋ ์ธํฐํ์ด์ค | ์ฐฝ๊ณ ๊ด๋ฆฌ์(๋ฐ์ดํฐ๋ฅผ ๊บผ๋ด๊ณ ์ ์ฅ) |
| ์๋น์ค(Service) | ๋น์ฆ๋์ค ๋ก์ง(๊ท์น, ์ ์ฐจ) | ์ฃผ๋ฐฉ์ ์
ฐํ(์ฌ๋ฃ๋ฅผ ์กฐํฉํด ์๋ฆฌ๋ฅผ ๋ง๋ฆ) |
| ์ปจํธ๋กค๋ฌ(Controller) | HTTP ์์ฒญ์ ๋ฐ๊ณ ์๋ต | ์๋น์ ์จ์ดํฐ(์๋ ์ฃผ๋ฌธ์ ๋ฐ๊ณ ์
ฐํ์๊ฒ ์ ๋ฌ, ๊ฒฐ๊ณผ ์ ๋ฌ) |
| ๊ธฐ์ ๋ชจ๋ | BCrypt, Pageable, JPA ๋ฑ | ์ฃผ๋ฐฉ ๋๊ตฌ(๋ฏน์๊ธฐ, ์ค๋ธ, ์นผ ๋ฑ ํน์ ๋ชฉ์ ์ ๋๊ตฌ) |
โ๏ธ 2. ํ์ผ๋ณ ์ญํ
๐ง Model
User.java
- ์ญํ : ํ์ ์ ๋ณด(์์ด๋, ๋น๋ฐ๋ฒํธ ํด์)๋ฅผ ์ ์ฅํ๋ ํ
์ด๋ธ.
- ์ค์ ํฌ์ธํธ
@Entity โ ์ด ํด๋์ค๋ DB ํ
์ด๋ธ๊ณผ ๋งคํ๋จ.
@Table(name="users") โ ํ
์ด๋ธ ์ด๋ฆ ์ง์ .
@Column(unique = true) โ ์์ด๋ ์ค๋ณต ๋ฐฉ์ง.
passwordHash โ ๋น๋ฐ๋ฒํธ ์๋ฌธ์ด ์๋๋ผ ํด์ ๊ฐ ์ ์ฅ (BCrypt๋ก ์์ฑ).
Post.java
- ์ญํ : ๊ฒ์๊ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ. ์ ๋ชฉ, ๋ด์ฉ, ์์ฑ์, ๋๊ธ ๋ชฉ๋ก ํฌํจ.
- ๊ด๊ณ
@ManyToOne User author โ ๊ฒ์๊ธ์ ํ๋์ ์์ฑ์๋ฅผ ๊ฐ์ง.
@OneToMany comments โ ํ๋์ ๊ฒ์๊ธ์๋ ์ฌ๋ฌ ๋๊ธ์ด ๋ฌ๋ฆด ์ ์์.
Comment.java
- ์ญํ : ๋๊ธ ๋ฐ์ดํฐ ๊ตฌ์กฐ.
- ๊ด๊ณ
@ManyToOne Post โ ๋๊ธ์ ํน์ ๊ฒ์๊ธ์ ์ํจ.
@ManyToOne User author โ ๋๊ธ ์์ฑ์๋ฅผ ์ฐธ์กฐ.
๐ฆ DTO
DTO(Data Transfer Object)๋ API ์์ฒญ/์๋ต ์ ์ฌ์ฉํ๋ ๋ฐ์ดํฐ ํฌ๋งท์ด์์.
"๋ด๋ถ DB ์ค๊ณ ๊ทธ๋๋ก ์ธ๋ถ์ ๋ณด์ฌ์ฃผ๋ฉด ์ํ"ํ๋๊น, ํฌ์ฅ ์์๋ฅผ ๋ฐ๋ก ๋ง๋ ๋ค๊ณ ์๊ฐํ๋ฉด ๋ฉ๋๋ค.
- PostRequestDto / PostResponseDto
- ์์ฒญ DTO์๋ ์ ๋ชฉ, ๋ด์ฉ, ์์ฑ์ ์ ๋ณด๋ง.
- ์๋ต DTO์๋ ์์ฑ์ ์ ๋ณด, ๋๊ธ ๋ชฉ๋ก๊น์ง ํฌํจ.
- CommentRequestDto / CommentResponseDto
- ๋๊ธ ์์ฒญ ์ ๋น๋ฐ๋ฒํธ ํ์ธ ๊ฐ๋ฅํ๋๋ก username + password ํฌํจ.
- ์๋ต ์์๋ ์์ฑ์ ์ ๋ณด์ ๋๊ธ ๋ด์ฉ ํฌํจ.
- UserRequestDto / UserResponseDto
- ์์ฒญ ์: username, password.
- ์๋ต ์: ๋น๋ฐ๋ฒํธ๋ ์ ๋ ํฌํจ ์ ํจ.
๐๏ธ Repository
Spring Data JPA์์ ์ธํฐํ์ด์ค๋ง ๋ง๋ค์ด๋ CRUD ๊ธฐ๋ฅ์ ์๋ ์ ๊ณตํฉ๋๋ค.
- ๋น์ : ์ฐฝ๊ณ ๊ด๋ฆฌ์(Repository)๋ "๋ฌผ๊ฑด ์ฐพ๊ธฐ/์ ์ฅํ๊ธฐ"๋ง ํจ. ๋ ์ํผ(๋ก์ง)๋ ์ ํ์ ์์.
- UserRepository โ ์ฌ์ฉ์ ์กฐํ ๋ฐ ์ ์ฅ.
- PostRepository โ ๊ฒ์๊ธ ์กฐํ, ํ์ด์ง๋ค์ด์
์ง์.
- CommentRepository โ ๋๊ธ ์กฐํ, ๊ฒ์๊ธ ID๋ก ๋๊ธ ๊ฒ์ ๊ฐ๋ฅ.
๐งฉ Service
"๊ท์น๊ณผ ์ ์ฐจ"๋ฅผ ๋ด๋ ๊ณณ.
์จ์ดํฐ๊ฐ ์ฃผ๋ฌธ์ ๊ฐ์ ธ์ค๋ฉด, ์
ฐํ(Service)๊ฐ ์ฌ๋ฃ๋ฅผ ์กฐํฉํด ๊ฒฐ๊ณผ๋ฅผ ๋ง๋ฆ.
- UserService
- ํ์๊ฐ์
์ ๋น๋ฐ๋ฒํธ๋ฅผ BCrypt๋ก ํด์.
- ๋ก๊ทธ์ธ ์ ํด์๊ฐ ๋น๊ต.
- PostService
- ๊ฒ์๊ธ ์์ฑ/์์ /์ญ์ ์, ์์ฑ์ ๋ณธ์ธ์ธ์ง ๊ฒ์ฌ.
- ํ์ด์ง๋ค์ด์
(Pageable)์ผ๋ก ๋ชฉ๋ก ์กฐํ.
- CommentService
- ๋๊ธ ์์ฑ/์์ /์ญ์ ์, ๋น๋ฐ๋ฒํธ ์ธ์ฆ.
- ๋ณธ์ธ ๋๊ธ๋ง ์์ /์ญ์ ๊ฐ๋ฅ.
๐ก Controller
HTTP ์์ฒญ๊ณผ ์๋ต์ ์ฒ๋ฆฌํ๋ ๊ณณ.
์จ์ดํฐ์ฒ๋ผ ์๋๊ณผ ์ฃผ๋ฐฉ์ ์ฐ๊ฒฐ.
- UserController
/api/users/register โ ํ์๊ฐ์
.
- PostController
/api/posts GET โ ๊ฒ์๊ธ ๋ชฉ๋ก ์กฐํ(ํ์ด์ง๋ค์ด์
์ง์).
/api/posts POST โ ๊ฒ์๊ธ ์์ฑ.
/api/posts/{id} GET โ ๊ฒ์๊ธ ์์ธ ์กฐํ.
/api/posts/{id} PUT โ ๊ฒ์๊ธ ์์ .
/api/posts/{id} DELETE โ ๊ฒ์๊ธ ์ญ์ .
- CommentController
/api/posts/{postId}/comments POST โ ๋๊ธ ์์ฑ.
/api/comments/{id} PUT โ ๋๊ธ ์์ .
/api/comments/{id} DELETE โ ๋๊ธ ์ญ์ .
โณ๏ธ 3. ๋ชจ๋ & ๊ฐ๋
๐ BCrypt
- ์ญํ : ๋น๋ฐ๋ฒํธ๋ฅผ ํด์(๋จ๋ฐฉํฅ ์ํธํ)ํ๋ ์๊ณ ๋ฆฌ์ฆ.
- ์ด์ :
- ์๋ฌธ ์ ์ฅ ์ ํดํน ์ํ.
- BCrypt๋ "๊ฐ์ ๋น๋ฐ๋ฒํธ๋ ๋งค๋ฒ ๋ค๋ฅธ ํด์"๋ฅผ ์์ฑํด์ ๋ณด์ ๊ฐํ.
- ๋น์ : ๋น๋ฐ๋ฒํธ๋ฅผ ์ฆ์ผ๋ก ์ง์ ๋ ์ํผ๋ฅผ ๋ฒ๋ฆฐ ์๋ฆฌ์ฒ๋ผ, ์๋ ์ฌ๋ฃ(์๋ฌธ)๋ฅผ ๋ณต์ํ ์ ์์.
๐ Pageable
- ์ญํ : ๋๋ ๋ฐ์ดํฐ ์ค ์ผ๋ถ๋ง ๋์ด์ ๊ฐ์ ธ์ค๊ธฐ(ํ์ด์ง๋ค์ด์
).
- ์ฌ์ฉ ์์:
Pageable pageable = PageRequest.of(0, 10, Sort.by("id").descending());
postRepository.findAll(pageable);
- ๋น์ : ๋์๊ด์์ ์ฑ
1000๊ถ์ด ์์ด๋ ํ ๋ฒ์ ์ ๋ถ ๊บผ๋ด์ง ์๊ณ , ํ ์ฅ๋ฐ๊ตฌ๋(ํ์ด์ง)์ 10๊ถ์ฉ ๊ฐ์ ธ์ค๋ ๊ฒ.
๐ JPA
- ์ญํ : Java ๊ฐ์ฒด์ DB ํ
์ด๋ธ ๋งคํ, SQL ๋์ ๋ฉ์๋๋ก DB ์กฐ์ ๊ฐ๋ฅ.
- ๋น์ : ์ธ์ด๊ฐ ๋ค๋ฅธ ์ฌ๋๋ผ๋ฆฌ ๋ฒ์ญ๊ธฐ๋ฅผ ๋๊ณ ๋ํํ๋ ๊ฒ.
- Java โ SQL ๋ณํ์ ์๋์ผ๋ก ํด์ฃผ๋ ๋ฒ์ญ๊ธฐ.
โณ๏ธ 4. ์ ์ฒด ํ๋ฆ
- ํ์๊ฐ์
โ UserController.register() โ UserService.register() โ UserRepository.save().
- ๋น๋ฐ๋ฒํธ๋ BCrypt๋ก ํด์ ํ ์ ์ฅ.
- ๋ก๊ทธ์ธ โ DB์์ ์ฌ์ฉ์ ์กฐํ ํ BCrypt๋ก ๋น๋ฐ๋ฒํธ ๋น๊ต.
- ๊ฒ์๊ธ ์์ฑ โ ๋ก๊ทธ์ธ ์ธ์ฆ โ ๊ฒ์๊ธ ์์ฑ โ ์ ์ฅ.
- ๋๊ธ ์์ฑ โ ๋ก๊ทธ์ธ ์ธ์ฆ โ ๋๊ธ ์์ฑ โ ์ ์ฅ.
- ๋ชฉ๋ก ์กฐํ โ Pageable๋ก ํ์ด์ง ๋จ์๋ก ๊ฒ์๊ธ ๊ฐ์ ธ์ค๊ธฐ.

โณ๏ธ 5. ์ ๊ทผ๋ฒ & ๋น์
- Model & ๊ด๊ณ โ "๊ฑด๋ฌผ ์ค๊ณ๋"๋ก ์๊ฐ.
- DTO โ "ํฌ์ฅ ์์". ๋ด๋ถ ๋ด์ฉ์ ๊ฐ์๋ ํฌ์ฅ ๋ฐฉ์์ API ๋ชฉ์ ์ ๋ง๊ฒ ๋ฐ๋.
- Repository โ "์ฐฝ๊ณ ๊ด๋ฆฌ์". ๋ก์ง ์์ด ๋จ์ CRUD๋ง ์ํ.
- Service โ "์
ฐํ". ๊ท์น๊ณผ ์ ์ฐจ(๋ก์ง) ๋ด๋น.
- Controller โ "์จ์ดํฐ". ์๋ ์์ฒญ์ ์ฃผ๋ฐฉ์ ์ ๋ฌํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ.
- BCrypt โ "์ฆ์ผ๋ก ๋ง๋ค์ด ์ฌ๋ฃ๊ฐ ๋ณต์ ๋ถ๊ฐ๋ฅํ ์๋ฆฌ".
- Pageable โ "์ฑ
์ 10๊ถ์ฉ๋ง ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ ๊ฐ์ ธ์ค๊ธฐ".
๐ 6. ์์ฝ
| ๊ตฌ๋ถ | ํต์ฌ ํค์๋ | ์ค๋ช
|
|---|
| Model | Entity, ๊ด๊ณ ๋งคํ | DB ํ
์ด๋ธ ๊ตฌ์กฐ์ ๊ด๊ณ๋ฅผ Java ๊ฐ์ฒด๋ก ํํ |
| DTO | ์์ฒญ/์๋ต ํฌ๋งท | API ๋ฐ์ดํฐ ํฌ์ฅ |
| Repository | JpaRepository | DB CRUD ์๋ ์์ฑ |
| Service | ๋น์ฆ๋์ค ๋ก์ง | ๊ท์น๊ณผ ์ ์ฐจ ๊ตฌํ |
| Controller | REST API | ์์ฒญ-์๋ต ์ฒ๋ฆฌ |
| BCrypt | ๋น๋ฐ๋ฒํธ ํด์ | ๋ณด์ ๊ฐํ |
| Pageable | ํ์ด์ง๋ค์ด์
| ๋๋ ๋ฐ์ดํฐ ํจ์จ ์กฐํ |