๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๋…ธ๋ ฅ์„ ์ด๊ธฐ๋Š” ์žฌ๋Šฅ์€ ์—†๊ณ 
๋…ธ๋ ฅ์„ ์™ธ๋ฉดํ•˜๋Š” ๊ฒฐ๊ณผ๋„ ์—†๋‹ค.
- ์ด์ฐฝํ˜ธ 9๋‹จ

D E V E L O P M E N T/SPRING

[SPRING] CKEditor4๋ฅผ ์ด์šฉํ•ด์„œ ์ด๋ฏธ์ง€ ์—…๋กœ๋“œํ•˜๊ธฐ

  Junesker   2020. 3. 2.
๋ฐ˜์‘ํ˜•

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค๊ป˜์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ํŽธ์ง‘๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ญ๋‹ˆ๋‹ค.

์ €์˜ ์ฃผ๋ณ€ ์นœ๊ตฌ, ์ง€์ธ, ์„ ๋ฐฐ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค๋„ ์ •๋ง ๋งŽ์€ ํŽธ์ง‘๋„๊ตฌ๋“ค์„ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์…จ์Šต๋‹ˆ๋‹ค.

("Naver Smart Editor", "Summernote", "CKEditor", "Daum open Editor", "TicyMCE" ๋“ฑ๋“ฑ)

 

์ €๋Š” ๋งŽ์€ ํŽธ์ง‘ ๋„๊ตฌ๋“ค ์ค‘์—์„œ CKEditor4๋ฅผ ์†Œ๊ฐœํ•˜๊ณ  ์—๋””ํ„ฐ๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด์„œ ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค.

 

 

   CKEDITOR4๋ž€?   

"์ˆ˜๋ฐฑ๋งŒ์˜ ์Šน์ธ์„ ๋ฐ›์•˜์Šต๋‹ˆ๋‹ค. ์™„๋ฒฝํ•˜๊ฒŒ ์‚ฌ์šฉ์ž ์ •์˜๋ฅผ ํ•  ์ˆ˜ ์žˆ๊ณ , ๊ฐ€์žฅ ๋งŽ์€ ๊ธฐ๋Šฅ์„ ๊ฐ–์ถ˜ ์ตœ๊ณ ์˜ ํ…์ŠคํŠธ ํŽธ์ง‘๊ธฐ์ž…๋‹ˆ๋‹ค. ์›Œ๋“œ/์—‘์…€/๊ตฌ๊ธ€๋ฌธ์„œ ๋„๊ตฌ์—์„œ ๋ถ™์—ฌ๋„ฃ๊ธฐ, ์—ด ํฌ๊ธฐ ์กฐ์ •/ํ–‰ ๋ฐ ์—ด ์„ ํƒ์— ๋Œ€ํ•œ ์šฐ์ˆ˜ํ•œ ํ…Œ๋ฆฌ๋ธ” ์ง€์›, ๋ฏธ๋””์–ด ์ž„๋ฒ ๋“œ/์œ„์ ฏ/์ฝ”๋“œ ์Šค๋‹ˆํŽซ/์ˆ˜ํ•™๊ณต์‹ ํŽธ์ง‘, ์ž๋™์™„์„ฑ/@๋ฉ˜์…˜/์ด๋ชจํ‹ฐ์ฝ˜ ํ”Œ๋Ÿฌ๊ทธ์ธ, ์ธ๋ผ์ธ ๋ฐ ifram UI, ๋ฐฉํ•ด์—†๋Š” ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ ์ตœ๋Œ€ ๋ชจ๋“œ/์ฝ๊ธฐ ์ „์šฉ๋ชจ๋“œ ๋“ฑ์„ ์ œ๊ณตํ•˜๋Š” ์Šค๋งˆํŠธ WYSIWYG ํŽธ์ง‘ ์†”๋ฃจ์…˜์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. "


 

 

 

  ์‚ฌ์šฉ ๋ฒ„์ „  

๊ธฐ์กด : 4.8.0

์ ์šฉ : 4.10.1


์ง€๊ธˆ๋ถ€ํ„ฐ ์ž‘์„ฑํ•˜๊ณ  ์†Œ๊ฐœํ•ด๋“œ๋ฆฌ๋Š” "CKEditor4๋ฅผ ์ด์šฉํ•ด ์ด๋ฏธ์ง€ ์—…๋กœ๋“œํ•˜๊ธฐ"๋ฅผ ํ†ตํ•ด์„œ ์กฐ๊ธˆ์ด๋‚˜๋งˆ CKEditor๋ฅผ ์‚ฌ์šฉํ•˜์‹œ๋Š”๋ฐ ๋„์›€์ด ๋˜์…จ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค! ๋น„๋ก ๋ถ€์กฑํ•œ ์‹ค๋ ฅ์ด์ง€๋งŒ ์ œ๊ฐ€ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ๊ฒฝํ—˜ํ•œ ๋‚ด์šฉ๋“ค๋กœ ๊ตฌ์„ฑํ•˜์˜€์Šต๋‹ˆ๋‹ค.

 

 

 

CKEditor ์ ์šฉํ•˜๊ธฐ


 

1. CKEditor ์ ์šฉํ•˜๊ธฐ

 

CKEditor๋ฅผ ๊ตฌ์„ฑํ•˜๊ธฐ ์œ„ํ•œ ํ™ˆํŽ˜์ด์ง€ URL(https://ckeditor.com/cke4/builder ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค.)

 

 

Builder

Star CKEditor 4 on GitHub

ckeditor.com

2. ํŒจํ‚ค์ง€ ์„ ํƒํ•˜๊ธฐ

 

์›ํ•˜์‹œ๋Š” ํŒจํ‚ค์ง€๋ฅผ ์„ ํƒํ•ด์ฃผ์„ธ์š”. ์ €๋Š” Full ํŒจํ‚ค์ง€๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

 

ํŒจํ‚ค์ง€ ์„ ํƒ

 

3. Plugins ์„ ํƒํ•˜๊ธฐ

 

ํ•„์š”ํ•˜์‹  Plugins๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ €๋„ ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ค‘์—์„œ Youtube Plugins๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

ํ•„์š”ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ์žˆ์œผ์‹œ๋ฉด ์„ ํƒํ•˜์…”์„œ ์ถ”๊ฐ€ํ•ด์ฃผ์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

Plugins ์„ ํƒ

 

4. Skin ์„ ํƒํ•˜๊ธฐ

 

์›ํ•˜์‹œ๋Š” Skin์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ €๋Š” Moono-Lisa Skin์„ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค. 

์›ํ•˜์‹œ๋Š” ๋ชจ์–‘์ด๋‚˜ ๋””์ž์ธ์ด ์žˆ์œผ์‹œ๋‹ค๋ฉด ์›ํ•˜์‹œ๋Š” Skin์œผ๋กœ ์„ ํƒํ•ด์ฃผ์„ธ์š”.

 

Skin ์„ ํƒ

 

5. ์–ธ์–ด ์„ ํƒํ•˜๊ธฐ

 

์‚ฌ์šฉํ•˜์‹ค ์–ธ์–ด๊ฐ€ ์žˆ์œผ์‹ค ๊ฒฝ์šฐ ์„ ํƒ์ ์œผ๋กœ ๊ณจ๋ผ์„œ ์ถ”๊ฐ€ํ•˜์…”๋„ ๋˜๊ณ , ์ „์ฒด์„ ํƒ์„ ์„ ํƒํ•˜์…”์„œ ์ „์ฒด๋ฅผ ์ถ”๊ฐ€ํ•˜์…”๋„ ๋ฉ๋‹ˆ๋‹ค.

 

์–ธ์–ด ์„ ํƒ

 

6. ๋™์˜ ํ›„ ๋‹ค์šด๋กœ๋“œ

 

๋™์˜ ํ™•์ธ์— ๋™์˜ ์ฒดํฌ๋ฅผ ํ•ด์ฃผ์„ธ์š”. ๋™์˜์ฒดํฌ๋ฅผ ๊ผญ ํ•ด์ฃผ์…”์•ผ ๋‹ค์šด๋กœ๋“œ๊ฐ€ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

 

๋™์˜ ํ›„ ๋‹ค์šด๋กœ๋“œ

 

 

 

์—ฌ๊ธฐ๊นŒ์ง€ ์ง„ํ–‰ํ•˜์…จ์œผ๋ฉด CKEditor4๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ํŒŒ์ผ์ค€๋น„๋Š” ๋‹ค ๋๋‚˜์…จ์Šต๋‹ˆ๋‹ค.

์ €๋Š” ์ „์ž์ •๋ถ€ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์ด์šฉํ•ด CKEditor4๋ฅผ ์ ์šฉํ•œ ๊ฒŒ์‹œํŒ์„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค.

 

7. ํด๋”&ํŒŒ์ผ ๊ตฌ์„ฑํ•˜๊ธฐ

 

๋‹ค์šด๋กœ๋“œ ๋ฐ›์œผ์‹  CKEditor4.10.1๋ฒ„์ „์˜ ์••์ถ•ํŒŒ์ผ์„ ํ•ด์ œํ•˜์‹œ๊ณ , CKEditorํด๋”๋ฅผ webappํด๋” ๋ฐ”๋กœ ์•„๋ž˜์— ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ ํ•ด์ฃผ์„ธ์š”.

 

๋”๋ณด๊ธฐ

webapp

 - ckeditor

์œ„์™€ ๊ฐ™์€ ํด๋”&ํŒŒ์ผ ๊ตฌ์กฐ๊ฐ€ ๋ ๊ฒ๋‹ˆ๋‹ค.

 

8. JS&SCRIPT ๊ตฌ์„ฑํ•˜๊ธฐ

 

<head>ํƒœ๊ทธ ๋˜๋Š” <body>ํƒœ๊ทธ์•ˆ์— ckditor.js๋ฅผ ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค.

 

<script type="text/javascript" src="${pageContext.request.contextPath }/ckeditor/ckeditor.js"></script>

 

textarea๊ฐ€ ์“ฐ์ด๋Š” .jspํŒŒ์ผ์— CKEditor ๋“ฑ๋ก ์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๋ฅผ ์ด์šฉํ•ด์„œ textarea๊ฐ€ CKEditor๋กœ ์‚ฌ์šฉ๋˜์–ด์งˆ ์ˆ˜ ์žˆ๋„๋ก ๋“ฑ๋กํ•ด์ค๋‹ˆ๋‹ค. ์ด๋•Œ, ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ์ปจํŠธ๋กค๋Ÿฌ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋„๋ก filebrowserUploadUrl๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ด์ค๋‹ˆ๋‹ค.

 

<script type="text/javascript">
$(function(){
	CKEDITOR.replace('bo_content',{
		filebrowserUploadUrl: '${pageContext.request.contextPath }/adm/fileupload.do'
	});
});
</script>

 

JS&SCRIPT๋ฅผ ๋“ฑ๋กํ–ˆ๋‹ค๋ฉด textarea๊ฐ€ CKEditor ํŽธ์ง‘๊ธฐ๋กœ ๋ณ€ํ•ด์žˆ๋Š”๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

CKEditor ํŽธ์ง‘๊ธฐ

FullํŒจํ‚ค์ง€์—์„œ ์ œ๊ณตํ•ด์ฃผ๋Š” Plugins๋“ค์ด ์ „๋ถ€ ๋“ค์–ด์žˆ๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ €๋Š” Youtube Plugins์„ ์ถ”๊ฐ€๋กœ ์ ์šฉํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— Youtube plugins์ด ์ถ”๊ฐ€๋กœ ์ ์šฉ๋œ ํ™”๋ฉด์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

9. ์ด๋ฏธ์ง€ ์—…๋กœ๋“œํ•˜๊ธฐ

 

์Šคํƒ€์ผ Plugin์œ„์— ๋ณด์ด๋Š” ์ด๋ฏธ์ง€ ์•„์ด์ฝ˜์„ ํด๋ฆญ ํ›„, ์ด๋ฏธ์ง€ ์†์„ฑ ๋‹ค์ด์–ด๋กœ๊ทธ๊ฐ€ ํƒ€๋‚˜๋‚ฉ๋‹ˆ๋‹ค. 

"ํŒŒ์ผ์„ ํƒ"๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด open file ๋‹ค์ด์–ด๋กœ๊ทธ์—์„œ ์—…๋กœ๋“œ ํ•  ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.

์ €๋Š” ํ…Œ์ŠคํŠธ๋กœ Lighthouse.jpg ์ด๋ฏธ์ง€๋ฅผ ์„ ํƒํ–ˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์„ ํƒ ํ›„, "์„œ๋ฒ„๋กœ ์ „์†ก"๋ฒ„ํŠผ์„ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€ ์†์„ฑ - ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ
์ด๋ฏธ์ง€ ์†์„ฑ - ์ด๋ฏธ์ง€ ์„ ํƒ
์ด๋ฏธ์ง€ ์†์„ฑ - ์„œ๋ฒ„๋กœ ์ „์†ก ํ›„ ์ด๋ฏธ์ง€ ๊ตฌ์„ฑ

 

10. CKEditorํŽธ์ง‘ ๋„๊ตฌ๋กœ ์ด๋ฏธ์ง€ ๊ฐ€์ ธ์˜ค๊ธฐ

 

์„œ๋ฒ„๋กœ ์ „์†ก๋œ ์ด๋ฏธ์ง€๋กœ ๋งŒ๋“ค์–ด์ง„ URL๊ณผ ์„œ๋ฒ„์—์„œ ๊ฐ€์ ธ์˜จ ์ด๋ฏธ์ง€๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋„ˆ๋น„, ๋†’์ด, ํ…Œ๋‘๋ฆฌ, ๊ฐ€๋กœ์—ฌ๋ฐฑ, ์„ธ๋กœ์—ฌ๋ฐฑ, ์ •๋ ฌ ๋“ฑ ์Šคํƒ€์ผ ์š”์†Œ๋“ค์˜ ์†์„ฑ๊ฐ’์„ ์„ค์ • ํ›„ "ํ™•์ธ" ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ CKEditorํŽธ์ง‘ ๋„๊ตฌ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

CKEditor ์ด๋ฏธ์ง€ ์—…๋กœ๋“œ

์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ CKEditor ํŽธ์ง‘ ๋„๊ตฌ์—์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

 

CKEditor4๋ฅผ ํ†ตํ•ด์„œ ์ด๋ฏธ์ง€ ์†์„ฑ์„ ํ†ตํ•ด ์ด๋ฏธ์ง€๋ฅผ ์—…๋กœ๋“œํ•˜๊ณ  ์—…๋กœ๋“œํ•œ ์ด๋ฏธ์ง€๋ฅผ ์„œ๋ฒ„๋กœ ์ „์†กํ•œ ํ›„, CKEditorํŽธ์ง‘๊ธฐ๋กœ ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์˜ค๋Š”๊ฒƒ๊นŒ์ง€ ํ•ด๋ณด์•˜์Šต๋‹ˆ๋‹ค. ํ๋ฆ„์œผ๋กœ ๋ณด๋ฉด ์–ด๋ ต์ง€ ์•Š์€ ๊ณผ์ •์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๋ฏธ์ง€ ์—…๋กœ๋“œ๋ฅผ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•œ ์†Œ์Šค ๋ถ€๋ถ„์„ ์‚ดํŽด๋ณด๋„๋ก ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

์ด๋ฏธ์ง€ ์—…๋กœ๋“œ ๊ตฌํ˜„ํ•˜๊ธฐ

 

1. POM.xml ๊ตฌ์„ฑํ•˜๊ธฐ

 

JSON์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด JSON Dependency๋ฅผ ๋“ฑ๋กํ•ฉ๋‹ˆ๋‹ค.

 

<dependency>
	<groupId>com.google.code.gson</groupId>
	<artifactId>gson</artifactId>
	<version>2.8.2</version>
</dependency>

 

 

2. Controller ์ž‘์„ฑํ•˜๊ธฐ

 

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import com.google.gson.JsonObject;

@Controller
@RequestMapping("/adm")
public class CkeditorFileUploadController {

	@RequestMapping(value="fileupload.do", method=RequestMethod.POST)
	@ResponseBody
	public String fileUpload(HttpServletRequest req, HttpServletResponse resp, 
                 MultipartHttpServletRequest multiFile) throws Exception {
		JsonObject json = new JsonObject();
		PrintWriter printWriter = null;
		OutputStream out = null;
		MultipartFile file = multiFile.getFile("upload");
		if(file != null){
			if(file.getSize() > 0 && StringUtils.isNotBlank(file.getName())){
				if(file.getContentType().toLowerCase().startsWith("image/")){
					try{
						String fileName = file.getName();
						byte[] bytes = file.getBytes();
						String uploadPath = req.getServletContext().getRealPath("/img");
						File uploadFile = new File(uploadPath);
						if(!uploadFile.exists()){
							uploadFile.mkdirs();
						}
						fileName = UUID.randomUUID().toString();
						uploadPath = uploadPath + "/" + fileName;
						out = new FileOutputStream(new File(uploadPath));
                        out.write(bytes);
                        
                        printWriter = resp.getWriter();
                        resp.setContentType("text/html");
                        String fileUrl = req.getContextPath() + "/img/" + fileName;
                        
                        // json ๋ฐ์ดํ„ฐ๋กœ ๋“ฑ๋ก
                        // {"uploaded" : 1, "fileName" : "test.jpg", "url" : "/img/test.jpg"}
                        // ์ด๋Ÿฐ ํ˜•ํƒœ๋กœ ๋ฆฌํ„ด์ด ๋‚˜๊ฐ€์•ผํ•จ.
                        json.addProperty("uploaded", 1);
                        json.addProperty("fileName", fileName);
                        json.addProperty("url", fileUrl);
                        
                        printWriter.println(json);
                    }catch(IOException e){
                        e.printStackTrace();
                    }finally{
                        if(out != null){
                            out.close();
                        }
                        if(printWriter != null){
                            printWriter.close();
                        }		
					}
				}
			}
		}
		return null;
	}	
	
}

 

 

๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๋˜ ์†Œ์Šค์—์„œ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ด์šฉํ•ด ๋‚ด๋ณด๋‚ด๋Š” ์†Œ์Šค์˜€๋‹ค๋ฉด, 4.9.0์ด์ƒ์˜ ๋ฒ„์ „๋“ค์—์„œ๋Š” JSON๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋กœ ๋ฆฌํ„ดํ•˜๋ผ๊ณ  CKEditor document์— ์ •์˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ, JSON๋ฐ์ดํ„ฐ ํ˜•์‹์˜ ์†Œ์Šค๋กœ ๋ณ€๊ฒฝ ํ›„ ์‹ค์ œ๋กœ ์ด๋ฏธ์ง€๊ฐ€ ๋ธŒ๋ผ์šฐ์ €๋ฅผ ํ†ตํ•ด ์ถœ๋ ฅ๋˜๋Š”๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค.

 

JsonObject json = new JsonObject();
json.addProperty("uploaded", 1);
json.addProperty("fileName", fileName);
json.addProperty("url", fileUrl);

 

 

 

 


๋งˆ๋ฌด๋ฆฌ

 

๋งŽ์€ ๊ฐœ๋ฐœ์ž๋ถ„๋“ค๊ป˜์„œ ์ด๋ฏธ ์•Œ๊ณ  ๊ณ„์‹œ๊ณ  ์ด๋ฏธ ์‚ฌ์šฉํ•˜๊ณ  ๊ณ„์‹ ๋ถ„๋“ค์ด ์ •๋ง ๋งŽ์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

๊ทธ๋ฆฌ๊ณ , ์ œ๊ฐ€ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” ์†Œ์Šค๋ณด๋‹ค ๋” ์ข‹์€ ๋ฐฉ๋ฒ•์œผ๋กœ, ๋” ์ข‹์€ ์†Œ์Šค๋กœ ๊ตฌํ˜„ํ•˜๊ณ  ๊ณ„์‹ ๋ถ„๋“ค๋„ ๋งŽ์„๊ฑฐ๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์ €๊ฒƒ ๊ณต๋ถ€ํ•˜๊ณ  ๊ฒฝํ—˜ํ•˜๊ณ  ๋งŒ๋“ค์–ด๋ณด๊ณ  ์‹ถ์€ ์—ด์ • ๋งŽ์€ ํ•œ๋ช…์˜ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ถ€์กฑํ•œ ์‹ค๋ ฅ์ด์ง€๋งŒ ์ง์ ‘ ๊ตฌํ˜„ํ•œ ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•˜๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค. ๋งŽ์€ ์กฐ์–ธ๊ณผ ๊ฐ€๋ฅด์นจ ์ฃผ์‹ค๋ถ„์€ ๋Œ“๊ธ€๋กœ ์ž์œ ๋กญ๊ฒŒ ๋‚จ๊ฒจ์ฃผ์…”๋„ ์ข‹์Šต๋‹ˆ๋‹ค! ์ €๋„ ๋งŽ์€๊ฒƒ๋“ค ๋ฐฐ์šฐ๊ณ  ๊ณต๋ถ€ํ•œ๋‹ค๋ฉด ๋” ์ข‹์„๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค! ๊ธด๊ธ€์ด์ง€๋งŒ ์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•˜๊ณ , ์ž‘๊ฒŒ๋‚˜๋งˆ ๊ผญ ๋„์›€์ด ๋˜์—ˆ์œผ๋ฉด ์ข‹๊ฒ ์Šต๋‹ˆ๋‹ค.

 

 

 

 

 

@Junesker


 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€