πΉ 1. μλν° μ»€μ€ν°λ§μ΄μ§ λͺ©μ
1οΈβ£ κ²μκΈ μμ± μ€ μ΄λ―Έμ§ μ§μ μ
λ‘λ κΈ°λ₯ μ 곡
2οΈβ£ μλν°μμ <img> νκ·Έ μ½μ
κΉμ§ μ€μκ° μλ μ²λ¦¬
3οΈβ£ μ¬μ©μ UX μ€μ¬ μμ± νκ²½ ꡬν
πΉ 2. μ λ‘λ μλ² κ΅¬μ‘° (Java/Spring)
π 컨νΈλ‘€λ¬ κ²½λ‘
• POST /boardCombo/CKEditor5/uploadImage
• GET /boardCombo/CKEditor5/loadImage
π μ
λ‘λ μ²λ¦¬ νλ¦
β
MultipartFile μμ
β
UUID κΈ°λ° κ³ μ νμΌλͺ
μμ±
β
upload.path κ²½λ‘μ μ μ₯
β
μ΄λ―Έμ§ URL λ°ν (/loadImage?name=...)
π μ΄λ―Έμ§ λΆλ¬μ€κΈ° μ²λ¦¬
β
μ μ₯λ κ²½λ‘μμ νμΌ μ‘°ν
β
Files.probeContentType() → MIME νμ
μ€μ
β
byte[] λ‘ μλ΅
πΉ 3. μλ² κ²½λ‘ μ€μ λΆλ¦¬
π @ConfigurationProperties μ¬μ©
@ConfigurationProperties(prefix = "upload")
public class CKEditor5ImgUploadConfig {
private String path;
}
π application.properties μμ
upload.path=/usr/local/ckeditor/upload/
πΉ 4. JS 컀μ€ν°λ§μ΄μ§ – μλν° μ°λ
1οΈβ£ FileRepository.createUploadAdapter μ¬μ μ
2οΈβ£ fetch()λ‘ μ΄λ―Έμ§ POST μ μ‘
3οΈβ£ μλ΅λ urlμ { default: url } ννλ‘ CKEditorμ μλ μ½μ
π μλ¬ μ²λ¦¬ νλ¦
β
413 (Payload too large) → SweetAlert μλ¦Ό
β
μλ² μ€λ₯ λ°μ μ → μλ¬ λ©μμ§ + μ¬μ©μ κ²½κ³
πΉ 5. μλν° μ¬μ© λ°©μ (updateBoard.js)
1οΈβ£ editor.getData()λ‘ HTML μ½ν
μΈ μΆμΆ
2οΈβ£ Ajax μ μ‘ μ updateBoardTitle, updateBoardContent ν¨κ» μ μ‘
3οΈβ£ λ±λ‘ μ±κ³΅ μ → κ²μνμΌλ‘ 리λ€μ΄λ μ
πΉ 6. JSP νλ©΄ μ μ©
1οΈβ£ textareaλ₯Ό ClassicEditorλ‘ λ³ν
2οΈβ£ .ck-editor__editable CSS μ€μ (λμ΄ μ§μ )
3οΈβ£ λ±λ‘ λ²νΌ ν΄λ¦ μ updateBoard() μ€ν
π‘ μ΅μ’ μμ½
β
μ΄λ―Έμ§ μ
λ‘λ μμ² μμ → UUID μ μ₯ → URL μλ΅
β
CKEditor λ΄ μ»€μ€ν°λ§μ΄μ§ μ΄λν°λ‘ μ΄λ―Έμ§ μ½μ
μλν
β
SweetAlertλ‘ μ¬μ©μ μ€μ¬ μλ¬ λμ
β
HTML/CSS/JS μμ±λ λμ μ°λ