λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
μΉ΄ν…Œκ³ λ¦¬ μ—†μŒ

μŠ€ν”„λ§ λΆ€νŠΈ κ²Œμ‹œνŒ λ§Œλ“€κΈ°-3 κΈ€ 상세보기 νŽ˜μ΄μ§€ λ§Œλ“€κΈ°

by 5566 2023. 10. 6.

1. κ°œμš”

이번 ν•­λͺ©μ—μ„œλŠ” μŠ€ν”„λ§ λΆ€νŠΈ κ²Œμ‹œνŒμ˜ κΈ€ 상세보기 νŽ˜μ΄μ§€λ₯Ό λ§Œλ“œλŠ” 방법에 λŒ€ν•΄ μ„€λͺ…ν•˜κ² μŠ΅λ‹ˆλ‹€. κΈ€ 상세보기 νŽ˜μ΄μ§€λŠ” μ‚¬μš©μžκ°€ κ²Œμ‹œνŒμ—μ„œ ν΄λ¦­ν•œ κΈ€μ˜ λ‚΄μš©κ³Ό κ΄€λ ¨λœ 정보λ₯Ό μžμ„Ένžˆ λ³΄μ—¬μ£ΌλŠ” 역할을 ν•©λ‹ˆλ‹€. 이 νŽ˜μ΄μ§€λŠ” μ‚¬μš©μžμ—κ²Œ μ’€ 더 ν’λΆ€ν•œ κ²½ν—˜μ„ μ œκ³΅ν•˜κ³ , 더 λ§Žμ€ 정보λ₯Ό μ œκ³΅ν•˜μ—¬ μ‚¬μš©μžκ°€ 글을 더 잘 μ΄ν•΄ν•˜κ³  μƒν˜Έμž‘μš©ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

λ‹€μŒ ν•­λͺ©μ—μ„œλŠ” ν™”λ©΄ ꡬ성 μš”μ†Œ, κΈ€ 상세 정보 ν‘œμ‹œ, λŒ“κΈ€ λͺ©λ‘ ν‘œμ‹œ, λŒ“κΈ€ μž‘μ„± κΈ°λŠ₯에 λŒ€ν•΄ μžμ„Ένžˆ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€. 이 과정을 톡해 μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•˜κ³  μ‹€μš©μ μΈ κ²Œμ‹œνŒμ„ λ§Œλ“€ 수 μžˆλŠ” 방법을 읡힐 수 μžˆμŠ΅λ‹ˆλ‹€.

2. ν™”λ©΄ ꡬ성 μš”μ†Œ

κΈ€ 상세보기 νŽ˜μ΄μ§€λŠ” 기본적으둜 λ‹€μŒκ³Ό 같은 ꡬ성 μš”μ†Œλ‘œ μ΄λ£¨μ–΄μ§‘λ‹ˆλ‹€:

  • 제λͺ©: κΈ€μ˜ 제λͺ©μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. 주둜 h1 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 큰 κΈ€μ”¨λ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.
  • μž‘μ„±μž: 글을 μž‘μ„±ν•œ μ‚¬μš©μžμ˜ 정보λ₯Ό ν‘œμ‹œν•©λ‹ˆλ‹€. μž‘μ„±μžμ˜ λ‹‰λ„€μž„μ΄λ‚˜ 아이디λ₯Ό 보여쀄 수 μžˆμŠ΅λ‹ˆλ‹€.
  • μž‘μ„±μΌ: 글이 μž‘μ„±λœ λ‚ μ§œμ™€ μ‹œκ°„μ„ ν‘œμ‹œν•©λ‹ˆλ‹€.
  • λ‚΄μš©: κΈ€μ˜ λ‚΄μš©μ„ μžμ„Ένžˆ λ³΄μ—¬μ€λ‹ˆλ‹€. κΈ΄ λ‚΄μš©μΌ 경우 μŠ€ν¬λ‘€μ„ 톡해 λ‚΄μš©μ„ λ³Ό 수 μžˆλ„λ‘ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • 이미지: 글에 μ²¨λΆ€λœ 이미지λ₯Ό ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 일반적으둜 이미지 ν˜•μ‹μΈ jpg, png 등을 μ§€μ›ν•©λ‹ˆλ‹€.
  • λŒ“κΈ€ λͺ©λ‘: ν•΄λ‹Ή 글에 μž‘μ„±λœ λŒ“κΈ€λ“€μ„ λ³΄μ—¬μ€λ‹ˆλ‹€. λŒ“κΈ€μ€ μž‘μ„±μž, μž‘μ„±μΌ, λ‚΄μš© λ“±μ˜ 정보λ₯Ό ν¬ν•¨ν•˜μ—¬ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.
  • λŒ“κΈ€ μž‘μ„± 폼: μ‚¬μš©μžκ°€ λŒ“κΈ€μ„ μž‘μ„±ν•  수 μžˆλŠ” 폼을 μ œκ³΅ν•©λ‹ˆλ‹€. μž‘μ„±μž 이름, λ‚΄μš© μž…λ ₯λž€, μž‘μ„± λ²„νŠΌ λ“±μ˜ μš”μ†Œλ‘œ ꡬ성될 수 μžˆμŠ΅λ‹ˆλ‹€.

μ΄λŸ¬ν•œ ν™”λ©΄ ꡬ성 μš”μ†Œλ“€μ„ μ‘°ν•©ν•˜μ—¬ κΈ€ 상세보기 νŽ˜μ΄μ§€λ₯Ό μ™„μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄μ–΄μ§€λŠ” ν•­λͺ©λ“€μ—μ„œλŠ” 각각의 ꡬ성 μš”μ†Œμ— λŒ€ν•΄ μžμ„Ένžˆ μ„€λͺ…ν•˜κ³ , μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ μ–΄λ–»κ²Œ κ΅¬ν˜„ν•  수 μžˆλŠ”μ§€ μ•Œμ•„λ³΄κ² μŠ΅λ‹ˆλ‹€.

3. κΈ€ 상세 정보 ν‘œμ‹œ

κΈ€ 상세보기 νŽ˜μ΄μ§€μ—μ„œλŠ” κΈ€μ˜ 제λͺ©, μž‘μ„±μž, μž‘μ„±μΌ, λ‚΄μš© λ“±μ˜ 정보λ₯Ό ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. μ΄λŸ¬ν•œ 정보듀은 λ°μ΄ν„°λ² μ΄μŠ€λ‘œλΆ€ν„° 가져와야 ν•˜λ©°, μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ κ°„λ‹¨ν•˜κ²Œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ¨Όμ €, κΈ€μ˜ 제λͺ©μ€ h1 νƒœκ·Έλ₯Ό μ‚¬μš©ν•˜μ—¬ 큰 κΈ€μ”¨λ‘œ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈλŠ” Thymeleaf ν…œν”Œλ¦Ώ 엔진을 기본으둜 μ œκ³΅ν•˜λ―€λ‘œ, ν…œν”Œλ¦Ώ νŒŒμΌμ—μ„œ λ‹€μŒκ³Ό 같이 제λͺ©μ„ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€:

<h1 th:text="${post.title}"></h1>

μœ„ μ½”λ“œμ—μ„œ post.title은 μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ „λ‹¬λœ κΈ€μ˜ 제λͺ©μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ 제λͺ©μ΄ λ™μ μœΌλ‘œ ν‘œμ‹œλ˜λ©°, μ‚¬μš©μžκ°€ ν΄λ¦­ν•œ κΈ€μ˜ 제λͺ©μ΄ h1 νƒœκ·Έ 내에 ν‘œμ‹œλ©λ‹ˆλ‹€.

λ‹€μŒμœΌλ‘œ, μž‘μ„±μžμ™€ μž‘μ„±μΌμ€ κΈ€μ˜ 정보λ₯Ό κ°€μ Έμ™€μ„œ ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. λ§ˆμ°¬κ°€μ§€λ‘œ Thymeleafλ₯Ό μ΄μš©ν•˜μ—¬ 정보λ₯Ό ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, μž‘μ„±μžμ˜ 아이디λ₯Ό ν‘œμ‹œν•˜λ €λ©΄ λ‹€μŒκ³Ό 같이 μ½”λ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

<p>μž‘μ„±μž: <span th:text="${post.author}"></span></p>

μœ„ μ½”λ“œμ—μ„œ post.authorλŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ „λ‹¬λœ κΈ€μ˜ μž‘μ„±μžλ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ μž‘μ„±μž 정보가 λ™μ μœΌλ‘œ ν‘œμ‹œλ˜λ©°, μ‚¬μš©μžκ°€ ν΄λ¦­ν•œ κΈ€μ˜ μž‘μ„±μžκ°€ span νƒœκ·Έ 내에 ν‘œμ‹œλ©λ‹ˆλ‹€. μž‘μ„±μΌ μ—­μ‹œ λ™μΌν•œ λ°©μ‹μœΌλ‘œ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ§ˆμ§€λ§‰μœΌλ‘œ, κΈ€μ˜ λ‚΄μš©μ„ ν‘œμ‹œν•˜κΈ° μœ„ν•΄μ„œλŠ” div νƒœκ·Έλ‚˜ p νƒœκ·Έ 등을 μ‚¬μš©ν•˜μ—¬ λ‚΄μš©μ„ 묢어쀄 수 μžˆμŠ΅λ‹ˆλ‹€. μŠ€ν¬λ‘€μ„ 톡해 κΈ΄ λ‚΄μš©μ„ λ³Ό 수 μžˆλ„λ‘ μŠ€νƒ€μΌμ„ μ μš©ν•  μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

<div th:text="${post.content}"></div>

μœ„ μ½”λ“œμ—μ„œ post.contentλŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ „λ‹¬λœ κΈ€μ˜ λ‚΄μš©μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. μ΄λ ‡κ²Œ ν•˜λ©΄ κΈ€μ˜ λ‚΄μš©μ΄ λ™μ μœΌλ‘œ ν‘œμ‹œλ˜λ©°, μ‚¬μš©μžκ°€ ν΄λ¦­ν•œ κΈ€μ˜ λ‚΄μš©μ΄ div νƒœκ·Έ 내에 ν‘œμ‹œλ©λ‹ˆλ‹€.

μœ„μ™€ 같은 λ°©λ²•μœΌλ‘œ κΈ€μ˜ 제λͺ©, μž‘μ„±μž, μž‘μ„±μΌ, λ‚΄μš© λ“±μ˜ 정보λ₯Ό λ™μ μœΌλ‘œ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λŸ¬ν•œ 정보듀은 λ°μ΄ν„°λ² μ΄μŠ€μ—μ„œ κ°€μ Έμ™€μ„œ μ‚¬μš©μžμ—κ²Œ μ œκ³΅ν•΄μ•Ό ν•˜λ―€λ‘œ, μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œλŠ” 컨트둀러λ₯Ό 톡해 데이터λ₯Ό μ „λ‹¬ν•˜λŠ” λ°©μ‹μœΌλ‘œ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

4. λŒ“κΈ€ λͺ©λ‘ ν‘œμ‹œ

κΈ€ 상세보기 νŽ˜μ΄μ§€μ—μ„œλŠ” ν•΄λ‹Ή 글에 μž‘μ„±λœ λŒ“κΈ€ λͺ©λ‘μ„ ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€λ‘œλΆ€ν„° λŒ“κΈ€ 데이터λ₯Ό 가져와야 ν•˜λ©°, μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€ λͺ©λ‘μ„ ν‘œμ‹œν•˜κΈ° μœ„ν•΄μ„œλŠ” 리슀트 ν˜•νƒœλ‘œ 각각의 λŒ“κΈ€μ„ ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈμ˜ Thymeleaf ν…œν”Œλ¦Ώ 엔진을 μ‚¬μš©ν•˜μ—¬ λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ λŒ“κΈ€ λͺ©λ‘μ„ ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€:

<h2>λŒ“κΈ€ λͺ©λ‘</h2>
<div th:each="comment : ${comments}">
    <p>μž‘μ„±μž: <span th:text="${comment.author}"></span></p>
    <p>μž‘μ„±μΌ: <span th:text="${comment.date}"></span></p>
    <p><span th:text="${comment.content}"></span></p>
</div>

μœ„ μ½”λ“œμ—μ„œ commentsλŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ μ „λ‹¬λœ λŒ“κΈ€ λͺ©λ‘ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€. th:each λ””λ ‰ν‹°λΈŒλ₯Ό μ‚¬μš©ν•˜μ—¬ comments 리슀트 λ‚΄μ˜ 각각의 λŒ“κΈ€μ— λŒ€ν•΄ 반볡적으둜 ν‘œμ‹œν•  수 μžˆμŠ΅λ‹ˆλ‹€. 각각의 λŒ“κΈ€μ€ μž‘μ„±μž, μž‘μ„±μΌ, λ‚΄μš© λ“±μ˜ 정보λ₯Ό ν¬ν•¨ν•˜λ©°, Thymeleafλ₯Ό μ‚¬μš©ν•˜μ—¬ λ™μ μœΌλ‘œ ν‘œμ‹œλ©λ‹ˆλ‹€.

μœ„ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜λ©΄, ν•΄λ‹Ή 글에 μž‘μ„±λœ λŒ“κΈ€λ“€μ΄ μˆœμ„œλŒ€λ‘œ λ‚˜μ—΄λ˜μ–΄ 화면에 λ³΄μ—¬μ§€κ²Œ λ©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” λŒ“κΈ€ μž‘μ„±μž, μž‘μ„±μΌ, λ‚΄μš© λ“±μ˜ 정보λ₯Ό 확인할 수 있으며, ν•„μš”ν•œ 경우 μŠ€ν¬λ‘€μ„ 톡해 더 λ§Žμ€ λŒ“κΈ€μ„ λ³Ό 수 μžˆλ„λ‘ κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‹€μŒμœΌλ‘œ, μ‚¬μš©μžκ°€ λŒ“κΈ€μ„ μž‘μ„±ν•  수 μžˆλŠ” 폼을 ν‘œμ‹œν•΄μ•Ό ν•©λ‹ˆλ‹€. 폼은 λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ λ§Œλ“€ 수 μžˆμŠ΅λ‹ˆλ‹€:

<h3>λŒ“κΈ€ μž‘μ„±</h3>
<form action="/comment" method="POST">
    <input type="text" name="author" placeholder="μž‘μ„±μž" required>
    <textarea name="content" placeholder="λŒ“κΈ€ λ‚΄μš©" required></textarea>
    <button type="submit">μž‘μ„±ν•˜κΈ°</button>
</form>

μœ„ μ½”λ“œμ—μ„œ /comment 경둜둜 POST μš”μ²­μ„ λ³΄λ‚΄λ©΄μ„œ λŒ“κΈ€μ„ μž‘μ„±ν•˜λŠ” 폼이 κ΅¬ν˜„λ©λ‹ˆλ‹€. μž‘μ„±μžμ™€ λ‚΄μš©μ„ μž…λ ₯ν•  수 μžˆλŠ” μž…λ ₯λž€μ΄ 제곡되며, μž‘μ„±ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ 폼 데이터가 μ„œλ²„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

μœ„μ™€ 같은 λ°©μ‹μœΌλ‘œ λŒ“κΈ€ λͺ©λ‘μ„ ν‘œμ‹œν•˜κ³ , λŒ“κΈ€ μž‘μ„± 폼을 μ œκ³΅ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ΄λ ‡κ²Œ κ΅¬ν˜„λœ λŒ“κΈ€ λͺ©λ‘ νŽ˜μ΄μ§€λŠ” μ‚¬μš©μžκ°€ κΈ€μ˜ λŒ“κΈ€μ„ ν™•μΈν•˜κ³  μž‘μ„±ν•  수 μžˆλ„λ‘ λ„μ™€μ€λ‹ˆλ‹€.

5. λŒ“κΈ€ μž‘μ„± κΈ°λŠ₯

κΈ€ 상세보기 νŽ˜μ΄μ§€μ—μ„œλŠ” μ‚¬μš©μžκ°€ λŒ“κΈ€μ„ μž‘μ„±ν•  수 μžˆλŠ” κΈ°λŠ₯을 μ œκ³΅ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ μŠ€ν”„λ§ λΆ€νŠΈλ₯Ό μ‚¬μš©ν•˜μ—¬ λŒ“κΈ€ μž‘μ„± κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€μ„ μž‘μ„±ν•˜κΈ° μœ„ν•΄ μ‚¬μš©μžλŠ” μž‘μ„±μž 이름과 λŒ“κΈ€ λ‚΄μš©μ„ μž…λ ₯ν•΄μ•Ό ν•©λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄ 폼을 μ œκ³΅ν•˜μ—¬ μ‚¬μš©μžκ°€ μž…λ ₯λž€μ— μ›ν•˜λŠ” 정보λ₯Ό μž‘μ„±ν•  수 μžˆλ„λ‘ ν•΄μ•Ό ν•©λ‹ˆλ‹€. μŠ€ν”„λ§ λΆ€νŠΈμ—μ„œλŠ” λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ λŒ“κΈ€ μž‘μ„± 폼을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

<h3>λŒ“κΈ€ μž‘μ„±</h3>
<form action="/post/{{postId}}/comments" method="POST">
    <input type="text" name="author" placeholder="μž‘μ„±μž" required>
    <textarea name="content" placeholder="λŒ“κΈ€ λ‚΄μš©" required></textarea>
    <button type="submit">μž‘μ„±ν•˜κΈ°</button>
</form>

μœ„ μ½”λ“œμ—μ„œ /post/{{postId}}/comments 경둜둜 POST μš”μ²­μ„ λ³΄λ‚΄λ©΄μ„œ λŒ“κΈ€μ„ μž‘μ„±ν•˜λŠ” 폼이 κ΅¬ν˜„λ©λ‹ˆλ‹€. {{postId}}λŠ” μ‹€μ œ κΈ€μ˜ ID κ°’μœΌλ‘œ λŒ€μ²΄λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μœ„ νΌμ—μ„œ μž‘μ„±μžμ™€ λŒ“κΈ€ λ‚΄μš©μ„ μž…λ ₯ν•  수 μžˆλŠ” μž…λ ₯λž€μ΄ μ œκ³΅λ©λ‹ˆλ‹€. μ‚¬μš©μžλŠ” 이름과 λ‚΄μš©μ„ μž…λ ₯ν•œ ν›„ μž‘μ„±ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ λŒ“κΈ€μ„ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ„±ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜λ©΄ 폼 데이터가 μ„œλ²„λ‘œ μ „μ†‘λ©λ‹ˆλ‹€.

λŒ“κΈ€ μž‘μ„± κΈ°λŠ₯을 κ΅¬ν˜„ν•˜κΈ° μœ„ν•΄μ„œλŠ” μ»¨νŠΈλ‘€λŸ¬μ—μ„œ ν•΄λ‹Ή κ²½λ‘œμ— λŒ€ν•œ POST μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ν•Έλ“€λŸ¬ λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ‹€μŒκ³Ό 같은 ν˜•νƒœλ‘œ ν•Έλ“€λŸ¬ λ©”μ„œλ“œλ₯Ό μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€:

@PostMapping("/post/{postId}/comments")
public String addComment(@PathVariable Long postId, Comment comment) {
    // λŒ“κΈ€ 데이터 처리 둜직
    // ...
    return "redirect:/post/" + postId; // μž‘μ„±ν•œ κΈ€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈ
}

μœ„ μ½”λ“œμ—μ„œ @PostMapping("/post/{postId}/comments") μ–΄λ…Έν…Œμ΄μ…˜μ€ ν•΄λ‹Ή 경둜둜 λ“€μ–΄μ˜€λŠ” POST μš”μ²­μ„ μ²˜λ¦¬ν•˜λŠ” ν•Έλ“€λŸ¬ λ©”μ„œλ“œμž„μ„ λ‚˜νƒ€λƒ…λ‹ˆλ‹€. @PathVariable μ–΄λ…Έν…Œμ΄μ…˜μ„ μ‚¬μš©ν•˜μ—¬ postId 값을 κ°€μ Έμ™€μ„œ μ‚¬μš©ν•  수 있으며, Comment κ°μ²΄λŠ” μ‚¬μš©μžκ°€ μž‘μ„±ν•œ λŒ“κΈ€ 데이터λ₯Ό λ‚˜νƒ€λƒ…λ‹ˆλ‹€.

ν•Έλ“€λŸ¬ λ©”μ„œλ“œμ—μ„œλŠ” λŒ“κΈ€ 데이터λ₯Ό μ²˜λ¦¬ν•  수 μžˆλŠ” λ‘œμ§μ„ κ΅¬ν˜„ν•΄μ•Ό ν•©λ‹ˆλ‹€. 예λ₯Ό λ“€μ–΄, λ°μ΄ν„°λ² μ΄μŠ€μ— λŒ“κΈ€μ„ μ €μž₯ν•˜κ±°λ‚˜, κΈ€ 상세보기 νŽ˜μ΄μ§€λ‘œ λ¦¬λ‹€μ΄λ ‰νŠΈν•˜λŠ” λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 이λ₯Ό μœ„ν•΄μ„œλŠ” λ°μ΄ν„°λ² μ΄μŠ€ μ²˜λ¦¬λ‚˜ ν•„μš”ν•œ μ„œλΉ„μŠ€ 클래슀λ₯Ό μ£Όμž…ν•˜μ—¬ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

μœ„μ™€ 같은 λ°©μ‹μœΌλ‘œ λŒ“κΈ€ μž‘μ„± κΈ°λŠ₯을 κ΅¬ν˜„ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μ‚¬μš©μžλŠ” λŒ“κΈ€ μž‘μ„± 폼을 톡해 μ›ν•˜λŠ” 정보λ₯Ό μž…λ ₯ν•œ ν›„ μž‘μ„±ν•˜κΈ° λ²„νŠΌμ„ ν΄λ¦­ν•˜μ—¬ λŒ“κΈ€μ„ μž‘μ„±ν•  수 μžˆμŠ΅λ‹ˆλ‹€. μž‘μ„±ν•œ λŒ“κΈ€μ€ μ„œλ²„μ—μ„œ 처리되며, μ‚¬μš©μžλŠ” μž‘μ„±λœ λŒ“κΈ€μ„ 확인할 수 μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€