Kim DongKyun
@laancer4
Reviews Written
-
Average Rating
-
Posts
Q&A
์คํ๋ง ํตํฉ ํ ์คํธ ์ @Transactional๋ก DB๋ฅผ ๋กค๋ฐฑ ์ํค๋๋ฐ id๋ ์ฌ์ ํ ๊ฑด๋๋ฐ์ด์ง๋ ์ด์
์๋ ํ์ธ์! id ์๋ ์์ฑ ์ ๋ต์ ์ฌ์ฉ ํ ์, ์ํฐํฐ์ ID๋ DB์ ๊ฐ์ ๋ฐํ์ผ๋ก ์ฃผ์ ๋๊ฒ ๋ฉ๋๋ค. [๋กค๋ฐฑ ์ค์ ์ด ๋ ํ ์คํธ์์ ์ธ์ํธ ์ฟผ๋ฆฌ๊ฐ ๋๊ฐ๋ ์ด์ ] "id ๊ฐ์ ๋ถ์ฌํ๋ ๊ฑด ๊ฒฐ๊ตญ DB๋ผ๊ณ ์๊ฐํ๋๋ฐ" ์์ ์ด๋ฏธ ๋ต์ ๋ง์ํ์ จ๋๋ฐ์! ๋กค๋ฐฑ ์ค์ ์ ํตํด ์ํฐํฐ๋ฅผ DB์ ์ปค๋ฐํ์ง๋ ์์์ง๋ง, DB ์์ ํด๋น ์ํฐํฐ์ ์์ด๋๋ฅผ ์๋์ผ๋ก ์์ฑํด์ฃผ๋(๋ถ์ฌํด์ฃผ๋) ๊ณผ์ ์์ ํธ์ถ๋ DB์ ์ค์ ๋ฐ ํจ์(AUTO_INCREMENT, nextval ๋ฑ) ๋ ๋กค๋ฐฑ๋์ง ์์์ id์ ๊ฐ์ ์ฌ๋ผ๊ฐ๋๋ค.
- 0
- 2
- 623
Q&A
๋คํ์ ์ฐธ์กฐ์ ์ค๋ฒ๋ผ์ด๋ฉ
์๋ ํ์ธ์! ํด๋น ๋ถ๋ถ์์ ์ ๋ ๋น์ทํ ์๋ฌธ์ด ์์ด์ ์์๋ณธ ๊ฒฐ๊ณผ๋ฅผ ๊ณต์ ๋๋ฆฝ๋๋ค! ๋จผ์ ,๋งค์๋๋ฅผ ์ฌ์ฉํ๋ ๋ณ์์ ์ฐธ์กฐ๊ฐ์ ๋ฐ๋ผ ์ธ์คํด์ค๋ฅผ ์ฐพ๊ณ (Child) ์ธ์คํด์ค ๋ด์ ๋ณ์ ํ์ ๊ณผ ๋์ผํ ํด๋์ค ํ์ ๋ถํฐ ์์ํ์ฌ(Parent?) ๋ฉ์๋๋ฅผ ์ฐพ๋๋ค์ด ๋ถ๋ถ์์ "๋ณ์ ํ์ ๊ณผ ๋์ผํ ํด๋์ค ํ์ " ์ Parent ๋ผ๊ณ ์๊ฐ ํ ์ ์์ง๋ง, ์ฌ์ค ๊ทธ๋ ์ง ์์ต๋๋ค. ํ ๋ฒ ๊ฐ๋จํ ํ ์คํธ๋ฅผ ๋๋ ค๋ดค๋๋ฐ์! @Test void foo_instance_info_wildcard(){ Parent foo = new Child(); Class aClass = foo.getClass(); // ์ธ์คํด์ค์ ํด๋์ค ์ ๋ณด String simpleName = aClass.getSimpleName(); // ํด๋น ํด๋์ค์ ์ด๋ฆ(ํจํค์ง ๋ฏธํฌํจ) System.out.println(simpleName); assertEquals("Child", simpleName); } ํด๋น ํ ์คํธ๋ ํต๊ณผํ๋ฉฐ, ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ Child ๋ก ๋์ต๋๋ค. ์ด ๋ถ๋ถ์์ ์ค์ ๋ฐํ์์์ ๋์ํ๋ ํ์ ๊ณผ (์ฐ๋ฆฌ๊ฐ getSimpleName() ์ผ๋ก ๊ฐ์ ธ์จ ํ์ ) ์ปดํ์ผ ์์ ์ ํ์ ์ด(๋ช ์๋ Parentํ์ ) ๋ค๋ฅด๋ค๋ ๊ฒ์ ํ์ธ ๊ฐ๋ฅํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ด ๋ถ๋ถ์ ๋ํ ๊ธ์ด ์์ด, ๊ณต์ ๋๋ฆฝ๋๋น[Compile-Time Type VS Run-Time Type] ๊ฒฐ๊ณผ์ ์ผ๋ก "๋ณ์์ ํ์ ๊ณผ ๊ฐ์ Parent์์ ํ์ํ๋ ๊ฒ" ์ด ์๋, ์ธ์คํด์ค๊ฐ ๊ฐ์ง ํ์ ์ ๋ณด์ธ Child๋ถํฐ ์์ํ์ฌ Parent ์ธก์ผ๋ก ์ฌ๋ผ๊ฐ๋ ์์ผ๋ก ๋งค์๋๋ฅผ ์ฐพ๊ฒ ๋ฉ๋๋ค.
- 0
- 2
- 541
Q&A
public String / Long๊ณผ public void์ ์ฐจ์ด๋ ๋ฌด์์ธ๊ฐ์?
์๋ ํ์ธ์! ์๋ฐ ๋งค์๋๋ ์ ๊ทผ์ ์ด์ ๋ฆฌํดํ์ ๋งค์๋์ด๋ฆ ์์๋ก ์ ์ธ๋ฉ๋๋ค public(์ ๊ทผ์ ์ด์) Long(๋ฆฌํดํ์ , ์ด ๋งค์๋๋ Long ํ์ ์ ๋ฆฌํดํด์ผ ํ๋ค๋ ๋ป) ๋งค์๋์ด๋ฆ ์ด๋ผ๊ณ ์๊ฐํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค! [๋ ์์ธํ ๋ด์ฉ์ ๋ํ ๋ธ๋ก๊ทธ] ์ด ๋ถ๋ถ์ ๋ํด์ ์ ๋ธ๋ก๊ทธ ํ๋ฒ ์ฐธ๊ณ ํด ๋ณด์ ๋ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 545
Q&A
์ฐ๊ด๊ด๊ณ ๋ฉ์๋ ๊ด๋ จ ์ง๋ฌธ
์๋ ํ์ธ์! public void addchildCategory(Category child){ // ์ธ์๋ก ๋ค์ด์ค๋ child ๋ฅผ set this.child.add(child); child.setParent(this); } public void addchildCategory(Category child){ this.child.add(child); this.parent = child; // ์ด ํด๋์ค์ ์ธ์คํด์ค๋ฅผ set } ์ ์ฝ๋๋ ์ธ์๋ก ๋ค์ด์ค๋ Category ๋ฅผ set ํ๋๋, ์๋๋ฉด ํด๋น ๋งค์๋์ ์ฃผ์ฒด๊ฐ ๋๋ ํด๋์ค์ ๊ฐ์ฒด๋ฅผ(์ธ์คํด์ค๋ฅผ) set ํ๋๋๊ณ ํ๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ฆ ์๊ณ๋ฅผ ์ด๋ ์ชฝ์ผ๋ก ํ๋์ ์ฐจ์ด๊ฐ ์์ต๋๋ค. ์ธ์๋ก ๋ค์ด์ค๋ ๋ถ๋ถ์ด ๊ฒฝ์ฐ ๋ถ๋ชจ๋ ํด๋น addChildCategory ๋ฅผ ํธ์ถํ๋ ์ชฝ์ด ๋ฉ๋๋ค. ์ด์ชฝ์์ set ํ๋ ๊ฒฝ์ฐ์ด ๊ฒฝ์ฐ ๋ถ๋ชจ๋ ๋ค์ด์ค๋ ์ธ์์ชฝ์ด ๋ฉ๋๋ค. (์ด์ ๋ฐ๋ผ ๋งค์๋ ์ด๋ฆ๋ addParent ์ ๋๊ฐ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค) ์ ๋ฆฌํ์๋ฉด ํด๋น ๋ณ๊ฒฝ์ ๊ธฐ๋ฅ์์ผ๋ก๋ ๋น์ทํ์ง๋ง, parent ํ๋๋ฅผ ๋ฐ๊พธ๋ ์ชฝ์ด ๋ฌ๋ผ์ง๋ ์ฐจ์ด๊ฐ ์์ต๋๋ค. (์ด ๋งค์๋๋ฅผ ํธ์ถํ๋ ์ชฝ vs ์ธ์๋ก ์ฌ์ฉ๋๋ ์ชฝ) ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 328
Q&A
๊ฒ์ํ์์ ์ญ์ ๋ ๋๊ธ์ ๋ณด์ฌ์ฃผ๊ธฐ ์ํด Spring Data JPA์์๋ ์ด๋ป๊ฒ ์ ๊ทผํด์ผ ํ ๊น์?
์๋ ํ์ธ์! ํ์ฌ delete ํ๋์ ์ฒ๋ฆฌ ๋๋ฌธ์ ๋ค๋ฅธ ๋ก์ง๋ค (์กฐํ ๋ก์ง์ด๋ผ๋์ง) ๋ ์ํฅ์ ๋ฐ๋ ์ ์ด ๋ง์์ ๋ค์ง ์์์ ์ง๋ฌธ ํด ์ฃผ์ ๋ฏ ํฉ๋๋ค! ๊ทธ๋์ ํ๋ฒ delete ํ๋๊ฐ ์ฐ์ด๋ ์ํฉ ๋ ๊ฐ์ง๋ฅผ ๋ณด๊ณ , ์ด๋ป๊ฒ ์ฌ์ฉํด์ผ ํ ์ง ํ ๋ฒ ๊ณ ๋ฏผํด๋ดค์ด์. delete ๊ฐ false ์ฌ์ผ ํ๋ ์์ฑ ์ํฉ (์ฌ์ง)์ํฉ์ ๋น์ทํ๊ฒ ๋ง๋ค๊ธฐ ์ํด ์์๋ก ์ํฐํฐ๋ฅผ ํ๋ ์ ์ธํ์ต๋๋ค. ์๋ง๋ ์ด ์ํฐํฐ๋ ์์ฑ ํ ๋๋ isDeleted ๋ผ๋ ํ๋๊ฐ false ์ฌ์ผ ํ๊ณ , ์ญ์ ํ ๋ (์ค์ ๋ก ์์ ์ด ๋๊ฒ ์ฃ ) true ๋ก ๋ณ๊ฒฝ๋์ด์ผ ํ ๊ฒ ๊ฐ์์! ๊ทธ๋ ๋ค๋ฉด ํ๋ฒ ์ด ์ํฐํฐ๋ฅผ save ํด๋ณด๊ณ ํด๋น isDeleted ํ๋๊ฐ ์ด๋ป๊ฒ DB์ ๋ค์ด๊ฐ๋์ง ํ์ธ ํด ๋ดค์ต๋๋ค. (์ฌ์ง)์์ ๊ฐ์ด ์ฐ๋ฆฌ๊ฐ ๋ช ์ ์ ์ธํ์ง ์์ IS_DELETE ๋ FALSE ๋ก ๋ค์ด๊ฐ๋๋ค. ์ด ์ด์ ๋ ์๋ฐ ๊ธฐ๋ณธ ํ์ boolean ์ ๊ธฐ๋ณธ ๊ฐ์ด false ๋ก ์ค์ ๋์ด์๊ธฐ ๋๋ฌธ์ ๋๋ค. (๊ทธ๋ฌ๋ ์์ฑ์ ๋งค์๋์์ ์ด boolean ์ด false ์์ ๋ช ์ ์ ์ธํ์ ๋ ๊ด์ฐฎ์ง ์์๊น ์๊ฐ์ด ๋ฉ๋๋ค.) (์ฌ์ง) ์ด๊ฒ์ผ๋ก ์์ฑ ์ ํด๋น ํ๋์ ๊ธฐ๋ณธ๊ฐ์ด false ๊ฐ ๋๋๋ก ๋ง๋๋ ์์ ์ ์ฌํ DB ๊ด๋ จ๋ ํ๋ก์ธ์ค๋ค๊ณผ(@Where ์ด๋ ธํ ์ด์ ์ด๋ผ๋์ง) ๋ผ์ด๋ด๊ณ , ์๋ฐ ์ฝ๋๋ก ๊ด๋ฆฌ ๊ฐ๋ฅํ๊ฒ ํ์ต๋๋ค. ์ ๋ฐ์ดํธ ์ (์ฆ true ๊ฐ ๋์ด์ผ ํ ์)ํด๋น ์์ ์ดํ๋ JPA ์ ๋ณ๊ฒฝ ๊ฐ์ง(๋ํฐ์ฒดํน) ์ ์ฌ์ฉํ์๊ฑฐ๋, ์๋๋ฉด JPQL๋ฑ ํธํ์ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ์์ด ํด๋น ํ๋๋ฅผ TRUE ๋ก ์ ๋ฐ์ดํธ ํ์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค! ๊ฐ์ฌํฉ๋๋ค.
- 1
- 2
- 691
Q&A
enum
์๋ ํ์ธ์! ์ํฐํฐ์ ํ๋๋ก ์๋ฐ์ Enum ์ ์ฌ์ฉํด์ผ ํ๋ ๋ถ๋ช ํ ์ด์ ๊ฐ ์๋ค๋ฉด (์๋ฅผ ๋ค์ด ํด๋น ํ๋๊ฐ RED, BLUE ...์ ๊ฐ์ด ๋ช ๊ฐ์ง ๊ฒฝ์ฐ์ ์๋ก ์ ํด์ ธ์๊ณ , ์์ผ๋ก ์ถ๊ฐ๋๋ ํ๋๋ค๋ ์ด ์น๊ตฌ๋ค๊ณผ ๋งค์ฐ ๋น์ทํ ๊ฒ์ด๋ผ๊ณ ์์๋๋ค๋ฉด) ์ฌ์ฉํด๋ ์ ํ ์๊ด ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ์ด ๊ฑฑ์ ํ์๋ ๋ถ๋ถ์ ์๋ง๋ "๊ทธ๋ ๋ค๋ฉด ํด๋น ์๋ฐ Enum ํ์ ์ ํ๋๊ฐ ์ด๋ป๊ฒ DB์ ๋ค์ด๊ฐ๊น?" ์ ๋ํด์ ๊ฑฑ์ ํ๊ณ ๊ณ์ ๊ฒ ๊ฐ์ต๋๋ค! @Enumerated private FooEnum fooEnum; // ํด๋น ๋ฐฉ์์ ๊ฒฝ์ฐ ์ด๋ ํ๋์ "์์" ๋๋ก ์ฝ์ ๋ฉ๋๋ค. @Enumerated(EnumType.STRING) private FooEnum fooEnum; // ํด๋น ๋ฐฉ์์ ๊ฒฝ์ฐ ์ด๋ ํ๋์ "์ด๋ฆ" ์ผ๋ก ์ฝ์ ๋ฉ๋๋ค.๊ธฐ๋ณธ์ ์ผ๋ก๋ ์ ์ฃผ์์ผ๋ก ์ค๋ช ๋๋ฆฐ ๋ฐ์ ๊ฐ์ด DB์ ์ ์ฅ์ด ๋๋๋ฐ์! ์ ์ฅ๋๋ ํ์์ @Convert ์ด๋ ธํ ์ด์ ์ ์ฌ์ฉํด์ ๋ณํ์ํค๋ ๋ฐฉ๋ฒ๋ ์กด์ฌํฉ๋๋ค. [@Convert ๋ฐ @Converter ์ฌ์ฉ ์์] ๊ฒฐ๋ก ์ ์ผ๋ก ์ง๋ฌธ ์ฃผ์ "์ํฐํฐ์์ ์ธ์ enumํ์ ์ ์ฌ์ฉํ ์ง Stringํ์ ์ ์ฌ์ฉํ ์ง ๊ธฐ์ค" ์ ๋ํด์ ๋ต๋ณํด๋๋ฆฌ์๋ฉด Enum ํด๋์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํด๋น ํ๋์ ์กด์ฌ ํ ์ ์๋ ๊ฐ๋ค์ด ์ ํ๋ฉ๋๋ค (Enum์ ์ ์ธ๋ ๊ฐ๋ค๋ง ์กด์ฌ ํ ์ ์๊ฒ ์ฃ ) ์ฆ, Enum ํด๋์ค๋ ์ฐ๋ฆฌ๊ฐ ๋ฏธ๋ฆฌ ์ ์ธํ ๋ช ๊ฐ์ ๊ฐ๋ค(์ ์์๋ก ๋ค์๋ RED, BLUE...) ๊ณผ ํด๋น ๊ฐ๊ณผ ๋งค์ฐ ๋น์ทํ ์ฑ์ง์ (YELLOW...) ๊ฐ๋ค๋ง์ ์ฌ์ฉ ํ ๊ฒ์์ด ํ์ค ํ ๋ ์ฌ์ฉํฉ๋๋ค. (์ฆ, ํด๋น ๋น์ทํ ์ฑ์ง์ ๊ฐ๋ค์ ๋ชจ์๋๋ ์ญํ ์ด๋ฉฐ ๋ค๋ฅธ ๊ฐ๋ค์ ํ์ฉํ์ง ์์์ด ๋ณด์ฅ๋ฉ๋๋ค - JAVA ๊ด์ ์์์) ๋ฐ๋ฉด String ์ ์ด๋ค ๊ฐ์ด๋ ํด๋น ํ๋์ ๋ค์ด ๊ฐ ์ ์๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ํด๋น ํ๋์ ๋ณ๋ค๋ฅธ ์ ํ์ ๊ฑธ์ง ์๊ฒ ๋ค๋ ๋ป์ด์ฃ . ํ์ํ์ ์ํฉ์ ๋ฐ๋ผ ๋ฌ๋ฆฌ ์ฌ์ฉํ์๋ฉด ๋ ๋ฏ ํฉ๋๋ค! ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 449
Q&A
์๋์์ฑ ๊ธฐ๋ฅ์ค์ ์ด ๊ถ๊ธํฉ๋๋ค.
์๋ ํ์ธ์! ์ธํ ๋ฆฌ์ ์ด keymap ์ค์ ์ ํ์ธ ํด ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์ต๋๋ค! (์ฌ์ง)์์ฒ๋ผ Code Completion - Basic ์ด Ctrl + space ๋ก ์ ๋์ด์๋์ง ํ์ธํด์ฃผ์ธ์. [ํด๋น ์ด์์ ๋ํ ๋ธ๋ก๊ทธ ๋งํฌ] ์์ธํ ๋ฐฉ๋ฒ์ ์ ๋งํฌ๋ก ๋จ๊ฒจ๋์์ต๋๋ค. ๊ฐ์ฌํฉ๋๋ค
- 0
- 2
- 327
Q&A
ํน์ ํ์ ์ผ๋ก ์กฐํ ์ ๋น ์ด๋ฆ์ ์ง์ ํ๋ ํ ์คํธ ์ฝ๋ ๊ด๋ จ ์ง๋ฌธ
์๋ ํ์ธ์! ๋ ๋ฒ์งธ ํ ์คํธ์ @DisplayName("๋ถ๋ชจ ํ์ ์ผ๋ก ์กฐํ ์ ์์์ด ๋ ์ด์ ์์ผ๋ฉด, ๋น ์ด๋ฆ์ ์ง์ ํ๋ฉด ๋๋ค.") ์ ํํธ๊ฐ ์กด์ฌํฉ๋๋ค. ๋ถ๋ชจ ํ์ ์ ์์ํ๋ ์์์ด ํ๋๋ผ๋ฉด ์คํ๋ง์ ํ๋์ ์์์ ์ ๋งตํํ์ง๋ง, ์์ํ๋ ์์์ด ๋ ๊ฐ ์ด์์ด๋ผ๋ฉด ์ค์ ๊ตฌํ์ฒด ํ์ ์ด ์ด๋ค ๊ฒ์ธ์ง ์ง์ ํด ์ค์ผ ํฉ๋๋ค. DiscountPolicy rateDiscountPolicy = ac.getBean("rateDiscountPolicy", DiscountPolicy.class); ์ ๋ผ์ธ์์ ๋ณผ ์ ์๋ฏ์ด, DiscountPolicy ๋ผ๋ ์์ ์ถ์์ ํ์ ์ผ๋ก ํด๋น rateDiscountPolicy ๋ฅผ ์ฌ์ฉํ๋ ค๊ณ ํ๋ ์ํฉ์ด๊ณ , assertThat(rateDiscountPolicy).isInstanceOf(RateDiscountPolicy.class)์๋ฐ์ instanceOf ํค์๋๋ฅผ ํตํด ํด๋น DiscountPolicy ํ์ ์ ๊ฐ์ฒด๊ฐ ์ค์ ์ด๋ค ์ธ์คํด์ค์ธ์ง ๊ฒ์ฆํ๋ ค๋ ํ ์คํธ์ ๋๋ค. ์ ๋ฆฌํ์๋ฉด ๊ตฌ์ฒดํ ํ์ ์ธ RateDiscountPolicy.class๋ก ์ธ์คํด์ค๋ฅผ ํ์ธํ ์ด์ ๋ ํด๋น ํ์ (DiscountPolicy ๋ผ๋ ์ธํฐํ์ด์ค ํ์ )์ ๋ ๊ฐ ์ด์์ ์์์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ, ์ค์ ์ฌ์ฉํ ์ธ์คํด์ค๊ฐ ์ด๋ค ๊ตฌํ์ฒด(์์)์ ์ํด ์์ฑ๋์ด์ผ ํ๋์ง ์ค์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค. ๊ฐ์ฌํฉ๋๋ค.
- 0
- 2
- 377
Q&A
Controller ๋น์ฆ๋์ค ๋ก์ง
์๋ ํ์ธ์! service ์ชฝ์์ ๋น์ฆ๋์ค ๋ก์ง์ ๋ํ ์์ธํ ๋ด์ฉ์ ์ง์ ์ฒ๋ฆฌํ๊ณ , Controller ๋ ์ด ์๋น์ค๋ฅผ ๊ฐ์ ธ๋ค ์ด๋ค๊ณ ๋ณด๋ฉด ์ข์ ๊ฒ ๊ฐ์ต๋๋ค. (์ฆ ๋น์ฆ๋์ค ๋ก์ง์ ์ํ์๋ ์๋น์ค์ ์กด์ฌํ๋ ๋งค์๋์ ๋๋ค. ์ปจํธ๋กค๋ฌ๋ ์ด ๋งค์๋๋ฅผ ๋ถ๋ฅด๊ณ ์์ต๋๋ค) ๊ฐ์ฌํฉ๋๋ค.
- 0
- 1
- 376
Q&A
If else
(์ฌ์ง)์ด๋ ๊ฒ if ๋ฌธ ๋ค์ ์ค๊ดํธ๋ฅผ ์ฌ๋ซ์ ์ฃผ์๊ฑฐ๋ ({})(์ฌ์ง)์์ ์ค๊ดํธ๋ฅผ ์ฌ์ฉํ์ง ์์ผ์๋ฉด ํด๊ฒฐ ๋ฉ๋๋ค! ํ์ฌ ์ค๋ฅ๊ฐ ๋๋ ์ด์ ๋ else ์ ์ ์๋ ์ค๊ดํธ '}' ๊ฐ ๋งค์๋์ ๋์ง์ ์ผ๋ก ํ๋ณ๋์ด์ ์ธ ๊ฒ ๊ฐ์์!(์ฌ์ง)๊ฐ์ฌํฉ๋๋ค.
- 0
- 3
- 258




