๋กœ์ผ“๐Ÿพ
article thumbnail

๋กœ์ปฌ ์„œ๋ฒ„๊ฐ€ ์•„๋‹Œ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„์—์„œ ์  ํ‚จ์Šค๋ฅผ ์ด์šฉํ•˜์—ฌ CI/CD๋ฅผ ํ•ด๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

 

์„œ๋ฒ„๋Š” CentOS7 ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค.

 

๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ˆœ์„œ๋กœ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

  1. KTCloud๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋ฒ„ ๊ตฌ์ถ•(์ƒ๋žต)
  2. ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ๋‚ด ํ†ฐ์บฃ(port80), JDK(1.8.x) ์„ค์น˜
  3. ํ…Œ์ŠคํŠธ ์  ํ‚จ์Šค ์„œ๋ฒ„ ๊ตฌ์ถ•
  4. ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ๋‚ด ์  ํ‚จ์Šค๋ฅผ ํ†ตํ•ด ๋นŒ๋“œ์—…๊ณผ ์ž๋™๋ฐฐํฌ ์ง„ํ–‰
 

[Jenkins] CI/CD์™€ ์šฐ๋ฆฌ์˜ ์นœ์ ˆํ•œ ๋น„์„œ Jenkins

์  ํ‚จ์Šค๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ์‹œ ์ง€์†์ ์œผ๋กœ ํ†ตํ•ฉ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•˜๋Š” ํˆด์ž…๋‹ˆ๋‹ค. CI(Continuous Integration) ํˆด ์ด๋ผ๊ณ  ํ‘œํ˜„ํ•ฉ๋‹ˆ๋‹ค. ์  ํ‚จ์Šค์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ธฐ ์ „์— ์šฐ์„  CI/CD์— ๋Œ€ํ•ด ๋จผ์ € ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. CI

kingofbackend.tistory.com

 

[STEP1] ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ๋‚ด ํ†ฐ์บฃ(port80), JDK(1.8.x) ์„ค์น˜

war ํŒŒ์ผ์„ ์ž๋™ ๋ฐฐํฌํ•˜๊ธฐ ์œ„ํ•ด์„  ํ†ฐ์บฃ ์„œ๋ฒ„๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์  ํ‚จ์Šค๋ฅผ ์„ค์น˜ํ•˜๊ธฐ ์•ž์„œ ํ†ฐ์บฃ๊ณผ JDK๋ฅผ ์„ค์น˜ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. KT Cloud๋กœ CentOS7 ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๋ฅผ ๊ตฌ์ถ•ํ–ˆ๊ณ , ์„œ๋ฒ„ ๋‚ด์— ์šฐ์„  ์ž๋ฐ”(port80)์™€ JDK๋ฅผ ์„ค์น˜ํ•ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. ํ†ฐ์บฃ๊ณผ JDK ์„ค์น˜ ๋ฐฉ๋ฒ•์€ ์ด ๊ธ€์—์„  ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค. ๊ตฌ๊ธ€๋ง ํ•˜์‹œ๋ฉด ์‰ฝ๊ฒŒ ์ฐพ์œผ์‹ค ์ˆ˜ ์žˆ์œผ์‹ค ๊ฒ๋‹ˆ๋‹ค.

 

 

[Linux] CentOS 7์— OpenJDK 1.8 ์„ค์น˜ํ•˜๊ธฐ

[STEP1] open-jdk 1.8 ์„ค์น˜ # yum install java-1.8.0-openjdk # yum install java-1.8.0-openjdk-devel ์„ค์น˜๊ฐ€ ์™„๋ฃŒ๋˜๋ฉด /usr/bin/๊ฒฝ๋กœ์— java๊ฐ€ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค. * ์ฐธ๊ณ  : ๋ฆฌ๋ˆ…์Šค์—์„œ๋„ JDK์™€ JRE๋Š” ๋ณ„๋„์˜ ํŒจํ‚ค์ง€..

kingofbackend.tistory.com

 

[Tomcat] ์„œ๋ฒ„ ๋‚ด tomcat ์„ค์น˜ํ•˜๊ธฐ

๋กœ์ปฌ์ด ์•„๋‹Œ ํ…Œ์ŠคํŠธ ์„œ๋ฒ„๋‚ด tomcat8 ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” CentOS ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. ์•„์ฃผ ๊ธฐ์ดˆ์ ์ธ ๋ฆฌ๋ˆ…์Šค ๋ช…๋ น์–ด๋Š” ์•ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜์—ฌ ์ง„ํ–‰ํ•ฉ๋‹ˆ๋‹ค. [STEP1] Apach Tomcat ์‚ฌ์ดํŠธ ์ ‘์† Apa

kingofbackend.tistory.com

 

ํ†ฐ์บฃ๊ณผ JDK๊ฐ€ ๋ฌธ์ œ์—†์ด ์ž˜ ์„ค์น˜๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ์ด์ œ ์  ํ‚จ์Šค๋ฅผ ์„ค์น˜ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.


[STEP2] ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ๋‚ด ์  ํ‚จ์Šค ์„ค์น˜

 

์„œ๋ฒ„ ๋‚ด์— ์  ํ‚จ์Šค ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

[Jenkins] ์„œ๋ฒ„ ๋‚ด Jenkins(์  ํ‚จ์Šค) ์„ค์น˜ํ•˜๊ธฐ

ํ…Œ์ŠคํŠธ ์„œ๋ฒ„ ๋‚ด ์  ํ‚จ์Šค ์„ค์น˜ํ•˜๋Š” ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์„œ๋ฒ„๋Š” CentOS7 ๊ธฐ์ค€์ž…๋‹ˆ๋‹ค. [STEP1] ์  ํ‚จ์Šค๊ฐ€ ์„ค์น˜๋˜์–ด์žˆ๋Š” ํ™•์ธํ•˜๊ธฐ $ yum list installed | grep jenkins [STEP2] ์  ํ‚จ์Šค ์„ค์น˜ํ•˜๊ธฐ [STEP2-1] url์— ํ•ด๋‹นํ•˜๋Š” ํŒŒ..

kingofbackend.tistory.com


[STEP3] ์  ํ‚จ์Šค ์„ค์ •ํ•˜๊ธฐ

 

์  ํ‚จ์Šค๊ฐ€ ์ž˜ ์„ค์น˜๋˜์—ˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

 

http://์„œ๋ฒ„ip:9100 ๋กœ ์ ‘์†ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿผ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋‚˜์˜ต๋‹ˆ๋‹ค.

 

๋‚˜์ค‘์— ์ถ”๊ฐ€์ ์œผ๋กœ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์šฐ์„  ์—ฌ๊ธฐ์„  Install suggested plugins๋ฅผ ์„ ํƒํ•ด์ค๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๊ธฐ๋ณธ ํ”Œ๋Ÿฌ๊ทธ์ธ๋“ค์ด ์„ค์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.

 

๊ณ„์ •์„ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค. ์ด ๊ณ„์ •์ด ๊ณง Root ๊ณ„์ •์ด๋ฏ€๋กœ ์‹ ์ค‘ํ•˜๊ฒŒ ์ž‘์„ฑํ•˜์‹œ๊ธธ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

์ด๋ฏธ์ง€๋Š” 8080์œผ๋กœ ๋˜์–ด์žˆ๋Š”๋ฐ ์ €๋Š” 9100์ž…๋‹ˆ๋‹ค.

์  ํ‚จ์Šค URL์„ ์ ์–ด์ค๋‹ˆ๋‹ค. ์ €๋Š” http://์„œ๋ฒ„IP:9100์œผ๋กœ ๋„ฃ์–ด์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

Global Tool Configuration์— ๋“ค์–ด๊ฐ€์„œ ์•„๋ž˜์™€ ๊ฐ™์ด ํ•ด์ค๋‹ˆ๋‹ค.

install automatically๋กœ ์ธํ•ด ๋ฉ”์ด๋ธ์ด ์•Œ์•„์„œ ์„ค์น˜๊ฐ€ ๋ฉ๋‹ˆ๋‹ค. ์ž๋™์œผ๋กœ ํ•ด๋†“์œผ๋ฉด ์ถ”ํ›„ ๋นŒ๋“œ ๊ตฌ์„ฑ์„ ํ• ๋•Œ maven์„ ์ž๋™์œผ๋กœ ์„ค์น˜ํ•ด์ค๋‹ˆ๋‹ค.

 

ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

Maven Intergation ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ํด๋ฆญํ•˜์—ฌ ์„ค์น˜ ํ›„ ์žฌ์‹œ์ž‘์„ ํ•ด์ค๋‹ˆ๋‹ค.

 

ํ†ฐ์บฃ ์„œ๋ฒ„ ๋ฐฐํฌ๋ฅผ ์œ„ํ•œ ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.

 

์  ํ‚จ์Šค๊ฐ€ ๋นŒ๋“œํ•œ ๊ฒฐ๊ณผ๋ฌผ(warํŒŒ์ผ)์„ ํ†ฐ์บฃ์—๊ฒŒ ๋ฐฐํฌํ•˜๋ ค๋ฉด Deploy to container Plugin ํ”Œ๋Ÿฌ๊ทธ์ธ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

jenkins ๊ด€๋ฆฌ - ํ”Œ๋Ÿฌ๊ทธ์ธ ๊ด€๋ฆฌ ์—์„œ ์„ค์น˜ ๊ฐ€๋Šฅ ํƒญ์—์„œ deploy to ontainer๋ฅผ ๊ฒ€์ƒ‰ํ•ด์„œ ์„ค์น˜ํ•ฉ๋‹ˆ๋‹ค.


[STEP4] ํ†ฐ์บฃ ๋งค๋‹ˆ์ €์— ์ ‘๊ทผ

์  ํ‚จ์Šค์—์„œ ์ž๋™๋ฐฐํฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•ด์„  ํ†ฐ์บฃ์„œ๋ฒ„ ๋งค๋‹ˆ์ €์— ์ ‘๊ทผํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ๋ช‡๊ฐ€์ง€ ์ˆ˜์ •์„ ํ•ด์ฃผ๊ฒ ์Šต๋‹ˆ๋‹ค.

 

ํ†ฐ์บฃ์„œ๋ฒ„ tomcat-users.xml์„ ์•„๋ž˜์™€ ๊ฐ™์ด ์ˆ˜์ •ํ•ด์ค๋‹ˆ๋‹ค. <user> ๋ถ€๋ถ„์˜ username๊ณผ password๋Š” ๋’ค์— ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

<!-- ์  ํ‚จ์Šค ํ†ฐ์บฃ์„œ๋ฒ„ ๋นŒ๋“œ๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉ์ž๊ณ„์ • ์ถ”๊ฐ€-->
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status,admin-gui,admin-script"/>

 

/var/lib/tomcat-feadmin/apache-tomcat-8.5.69/webapps/host-manager/META-INF ์œผ๋กœ ์ด๋™ํ›„ context.xml์—ฝ๋‹ˆ๋‹ค.

 

CookieProcessor์™€ Valve ๋ถ€๋ถ„์„ ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด์ค๋‹ˆ๋‹ค.

 

/var/lib/tomcat-feadmin/apache-tomcat-8.5.69/webapps/manager/META-INF ์œผ๋กœ ์ด๋™ํ›„ context.xml์—ฝ๋‹ˆ๋‹ค.

 

 

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ์ฃผ์„์ฒ˜๋ฆฌ ํ•ด์ค๋‹ˆ๋‹ค.

 

ip์ฃผ์†Œ:ํ†ฐ์บฃํฌํŠธ/manager/html ๋กœ ์ด๋™ํ–ˆ์„ ๋•Œ ์•„๋ž˜์™€ ๊ฐ™์€ ํ™”๋ฉด์ด ๋œจ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

ํ†ฐ์บฃ์„œ๋ฒ„๋ฅผ ์žฌ์‹œ์ž‘ํ•ด์ค๋‹ˆ๋‹ค.


[STEP5] Item ๋งŒ๋“ค๊ธฐ

 

์ƒˆ๋กœ์šด Item์„ ๋งŒ๋“ค์–ด์ค๋‹ˆ๋‹ค.

๋ฉ”์ด๋ธ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•ด์ค๋‹ˆ๋‹ค.

Git์ด ์•„๋‹Œ ์„œ๋ธŒ๋ฒ„์ „์œผ๋กœ ํ•  ๊ฒƒ์ด๊ธฐ์— Subversion์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

Username์— SVN ๊ณ„์ • ์•„์ด๋””๋ฅผ ๋„ฃ์–ด์ฃผ๊ณ  Password์— SVN ๊ณ„์ •์˜ ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

Root POM์„ ์ž‘์„ฑํ•˜์—ฌ clean install์„ ์ž‘์„ฑํ•ด์ค๋‹ˆ๋‹ค.

 

ํ˜น์‹œ, pom.xml์ด SVN ๊ฒฝ๋กœ(root ๊ฒฝ๋กœ) ๋ฐ”๋กœ ์•„๋ž˜์— ์žˆ์ง€ ์•Š๊ณ  ํ”„๋กœ์ ํŠธ ํด๋” ์•ˆ์— ์œ„์น˜ํ•œ ๊ฒฝ์šฐ๋Š” ํด๋” ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ํ•ฉ๋‹ˆ๋‹ค. 

 

๋นŒ๋“œ ํ›„ ์กฐ์น˜ ์—์„œ Deploy war/ear to a container๋ฅผ ํด๋ฆญํ•ฉ๋‹ˆ๋‹ค.

 

๋นŒ๋“œ success ํ›„ ์ƒ์„ฑ๋˜๋Š” war ํŒŒ์ผ์˜ ์œ„์น˜๋ฅผ WAR/EAR files์— ๋„ฃ์–ด์ฃผ๊ณ  Tomcat 7.x ๊ด€๋ จ ๋ถ€๋ถ„์˜ Credentials์—๋Š” tomcat-users.xml์—์„œ ์ž‘์„ฑํ•œ username ์ •๋ณด๋ฅผ ๋„ฃ์–ด์ค๋‹ˆ๋‹ค.

 

์ด๋กœ์จ ์  ํ‚จ์Šค ์„ค์ •์€ ๋์ž…๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ ๋‹ค์‹œ ์  ํ‚จ์Šค ํ™”๋ฉด์œผ๋กœ ๋Œ์•„์˜ต๋‹ˆ๋‹ค.


[FINAL STEP] CI/CD 

 

 

item์ค‘ ํ•˜๋‚˜๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

 

๋นŒ๋“œ ๊ตฌ์„ฑ์„ ํ•˜๋ฉด ์  ํ‚จ์Šค์ด ์•Œ์•„์„œ CI/CD๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

 

๊ทธ๋Ÿผ Build History์—์„œ ๋นŒ๋“œ ๋‚ด์šฉ์„ ํ™•์ธํ•˜์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ฒดํฌ๋ฅผ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

Console Output์„ ๋ˆŒ๋Ÿฌ์ค๋‹ˆ๋‹ค.

 

BUILD SUCCESS๋Š” ์ด๋ฆ„๋Œ€๋กœ ๋นŒ๋“œ ๊ฒฐ๊ณผ์ด๊ณ  Finished : SUCCESS๋Š” ๋ฐฐํฌ ๊ด€๋ จํ•œ ๊ฒฐ๊ณผ์ž…๋‹ˆ๋‹ค. ๋‘˜ ๋‹ค SUCCESS์ด๋ฉด ์„ฑ๊ณต์ ์œผ๋กœ ๋นŒ๋“œ ๋ฐ ๋ฐฐํฌ๋ฅผ ํ•˜์‹  ๊ฒ๋‹ˆ๋‹ค.


 

* ์ฐธ๊ณ  : ์  ํ‚จ์Šค๋Š” ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ๋‚ด main/src/java ํŒจํ‚ค์ง€ ์•ˆ์— ์žˆ๋Š” ํŒŒ์ผ๋“ค๋งŒ ๋นŒ๋“œ๋ฅผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— main/src/test ํŒจํ‚ค์ง€๋Š” ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ test๋‚ด java ํŒŒ์ผ์€ import ํ•  ์ˆ˜ ์—†๋‹ค๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. ์ €์ฒ˜๋Ÿผ ์‚ฝ์งˆ ํ•˜์‹œ์ง€ ๋งˆ์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค!!

 

* ์ฐธ๊ณ  : ๋งŒ์•ฝ ๋นŒ๋“œ๋Š” ๋˜๋Š”๋ฐ ๋ฐฐํฌ๊ฐ€ ์•ˆ๋œ๋‹ค๋ฉด, ์œ„์—์„œ ์–ธ๊ธ‰ํ•œ ๊ฒƒ์ฒ˜๋Ÿผ ํ†ฐ์บฃ ๋งค๋‹ˆ์ €๊ฐ€ ๋“ค์–ด๊ฐ€์ง€๋Š”์ง€ ํ˜น์€ ํ†ฐ์บฃ ๋ฐฐํฌํ•œ ์„œ๋ฒ„๊ฐ€ ์ž˜ ์‹คํ–‰๋˜๋Š”์ง€ ํ™•์ธ ํ•˜์‹œ๊ธฐ ๋ฐ”๋ž๋‹ˆ๋‹ค.

 

* ์ฐธ๊ณ  : ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ๋Š” ๋นŒ๋“œ๋˜๋ฉด ๋’ค์— 1.0.0-BUILD-SNAPSHOT๊ฐ€ ๋ถ™์Šต๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ธ€์„ ์ฐธ๊ณ ํ•˜์‹œ๋ฉด ์•ˆ๋ถ™๊ฒŒ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

[Jenkins] warํŒŒ์ผ์— 1.0.0-BUILD-SNAPSHOT ์•ˆ๋ถ™๊ฒŒ ํ•˜๊ธฐ

/var/lib/jenkins/workspace/ ๋กœ ์ด๋™ ํ›„ ๋ถ™์ง€ ์•Š๊ฒŒ ํ•˜๋ ค๋Š” ํ”„๋กœ์ ํŠธ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ํ†ฐ์บฃ์ด ์•„๋‹Œ ์  ํ‚จ์Šค ๋‚ด workplace์ž…๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ์˜ pom.xml์— ์•„๋ž˜์™€ ๊ฐ™์ด ์ถ”๊ฐ€ํ•ด์ค๋‹ˆ๋‹ค. ..... ${project.name} .... ๊ทธ ํ›„..

kingofbackend.tistory.com

 

ํ•˜์‹œ๋‹ค๊ฐ€ ์•ˆ๋˜๋Š” ๋ถ€๋ถ„์ด๋‚˜ ๋ง‰ํ•˜์‹œ๋Š” ๋ถ€๋ถ„์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š” :)

profile on loading

Loading...