์คํ๋ง ๋ถํธ(13)
-
[Spring Boot] Spring Security, JWT ํ ํฐ ์ธ์ฆ
์กฐ๊ธ์ ์๊ฐ์ด ๋จ์ ํญ์ ๋ฏธ๋ค์๋์คํ๋ง ๋ถํธ์์ JWT ํ ํฐ์ ์ฌ์ฉํด ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ณ , Spring Security๋ก ์ธ์ฆ์ ๊ด๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ํ ์คํธ ํ๋ก์ ํธ ๋ง๋ค์ด๋ณด๊ณ , ํฐ์คํ ๋ฆฌ์ ์ ๋ฆฌํด๋ณธ๋ค.!! ์ด๋ฒ์ REST API ํ๋ก์ ํธ์ ์ธ์ฆ๋ฐฉ์์ผ๋ก JWT ํ ํฐ์ ์ฌ์ฉํ๊ณ , ์ด ๋ถ๋ถ์ ๋ด๊ฐ ์ ๋๋ก ์๊ณ ์๊ฒ ๋ ์ํฉ์ด ๋์ด์,,, ๋ฏธ๋ฆฌ ๋ฏธ๋ฆฌ ๊ณต๋ถํ๋ฉฐ ์ ๋ฆฌ ํด๋๋ค ใ ใ ๐๐ 0๏ธโฃ Spring Security, JWT ๊ด๋ จ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ build.gardle implementation 'org.springframework.boot:spring-boot-starter-security' implementation 'io.jsonwebtoken:jjwt-impl:0.11.5' implementati..
2024.11.04 -
๊ฐ๋จํ Spring Boot Restful API Sample Project ๋ง๋ค์ด๋ณด๊ธฐ #1. Spring Security ์ค์ + CustomFilter ๋ง๋ค๊ธฐ
โ ์ํ ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๊ธฐ๋ก ๊ฒฐ์ ํ ์ด์ -> ์๊ฐ์ด ์กฐ๊ธ ์ฌ์ ๋ก์ด ์์ฆ, ๊ณง ๊ฐ๋ฐ ๋ค์ด๊ฐ๊ธฐ ์ ์ ๊ฐ๋จํ๊ฒ ์ํ ํ๋ก์ ํธ ๋ง๋ค๋ฉด์ ๊ฐ ์ก๊ณ ? ์๊ณ ์ถ์ด์! ๊ทธ๋ฆฌ๊ณ ๋ง๋ ๊น์ ์ค๋๋ง์ ํฐ์คํ ๋ฆฌ์ ๊ธ๋ ๋ง์ด ์ฌ๋ฆฌ๋ฉด์ ์งํํ ์์ ์ด๋ค. โ ๊ฐ๋ฐ ํ๊ฒฝ - Jdk 17 - SpringBoot 3.2.3 - Spring Security - JPA + H2 (์ํ ํ๋ก์ ํธ๋ผ ๊ทธ๋ฅ ๊ฐ๋จํ ๊ตฌํํ ์ ์๋ h2 ์ฌ์ฉํ ์์ ์ด๋ค.) - Spring REST Docs + mockMvc (REST Docs ๋ฅผ ์ด์ฉํด์ api ๋ฌธ์ ์๋ํํ ์์ ์ด๋ค.) โ ์ง๊ธ ์๊ฐํ๋ ๊ธฐ๋ฅ - ๋ก๊ทธ์ธ ๋ฐ ํ์๊ฐ์ - ๊ฒ์๊ธ ์์ฑ, ์กฐํ, ์์ , ์ญ์ - ๋๊ธ ์์ฑ, ์กฐํ, ์์ , ์ญ์ ( + ์ฌ์ฉ์ ๊ด๋ฆฌ? ) ์ด๋ ๊ฒ ์๊ฐํ๊ณ ์๋ค. ์ฐ์ ๊ธฐ..
2024.03.07 -
์นด์ดํฐ ๋ฉํธ๋ฆญ ๋ฑ๋ก ๋ฐ ๋ชจ๋ํฐ๋ง (์คํ๋ง, ํ๋ก๋ฉํ ์ฐ์ค, ๊ทธ๋ผํ๋)
์คํ๋ง & ํ๋ก๋ฉํ ์ฐ์ค & ๊ทธ๋ผํ๋ (๊ทธ๋ผํ๋ ์ค์น, ์ฐ๋, ์ฌ์ฉ ๋ฐฉ๋ฒ) (tistory.com) ์คํ๋ง & ํ๋ก๋ฉํ ์ฐ์ค & ๊ทธ๋ผํ๋ (๊ทธ๋ผํ๋ ์ค์น, ์ฐ๋, ์ฌ์ฉ ๋ฐฉ๋ฒ) ์คํ๋ง & ํ๋ก๋ฉํ ์ฐ์ค (์ค์น, ์ค์ , ๊ธฐ๋ณธ ๊ธฐ๋ฅ) (tistory.com) ์คํ๋ง & ํ๋ก๋ฉํ ์ฐ์ค (์ค์น, ์ค์ , ๊ธฐ๋ณธ ๊ธฐ๋ฅ) ์คํ๋ง ๋ชจ๋ํฐ๋ง (์ก์ธ์์ดํฐ, ๋ง์ดํฌ๋ก๋ฏธํฐ, ๋ฉํธ๋ฆญ, ํ๋ก๋ฉํ ์ฐ์ค, ๊ทธ๋ผํ๋) (tistory.c hyejin.tistory.com ์ด์ ๊ธ์ ๋ณด๋ฉด cpu ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋, db ์ปค๋ฅ์ ํ ๋ฑ ๊ฐ์ ๊ณตํต์ผ๋ก ์ฌ์ฉ๋๋ ๊ธฐ์ ๋ฉํธ๋ฆญ๋ค์ ์ด๋ฏธ ๋ฑ๋ก๋์ด ์์ด์ ์ด ๋ฉํธ๋ฆญ์ ์ฌ์ฉํด์ ๋์๋ณด๋๋ฅผ ๊ตฌ์ฑํ๊ณ ๋ชจ๋ํฐ๋งํ ์ ์์๋ค. ๊ทธ๋ฐ๋ฐ cpu ์ฌ์ฉ๋, ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ ๋ฑ์ ๋์ด์ ๋น์ง๋์ค์ ํนํ๋ ๋ถ๋ถ(์ฃผ๋ฌธ ์, ์ทจ..
2023.05.22 -
์คํ๋ง ์ธ๋ถ ์ค์ ๋ฐฉ๋ฒ (OS ํ๊ฒฝ ๋ณ์, ์๋ฐ ์์คํ ์์ฑ)
0๏ธโฃ ์ธ๋ถ ์ค์ ์ด๋ ? ๋ณดํต ์ค๋ฌด์์ ๊ฐ๋ฐ์ ํ๋ค๋ณด๋ฉด ๋๋ถ๋ถ ํ์ฌ์์ ์ด์ ์๋ฒ์ ๊ฐ๋ฐ ์๋ฒ๋ฅผ ๋๋ ์ ๊ฐ๋ฐ์ ์งํํ๋ค. ๋จผ์ ๊ฐ๋ฐ ์๋ฒ์์ ๊ฐ๋ฐํ๊ณ , ํ ์คํธ๋ฅผ ์งํ ํ ์ ์์ ์ผ๋ก ๋์ํ๋ค๋ ๊ฒ์ ํ์ธํ ํ์ ์ค์ ๊ณ ๊ฐ์๊ฒ ์๋น์ค ํ๋ ์ด์ ํ๊ฒฝ์ ๋ฐฐํฌ๋ฅผ ํ๋ ๋ฐฉ์์ผ๋ก ์งํํ๋ค. ๊ฐ๋ฐ ํ๊ฒฝ : ๊ฐ๋ฐ ์๋ฒ, ๊ฐ๋ฐ DB ์ด์ ํ๊ฒฝ: ์ด์ ์๋ฒ, ์ด์ DB ์ด๋ฐ์์ผ๋ก DB๋ ๋ค๋ฅธ ๊ฐ๊ฐ ๋ค๋ฅธ ๊ฒ์ ์ฌ์ฉํด์ ์งํํด์ฃผ๋๋ฐ ๊ทธ๋ฌ๋ฉด ๊ฐ๊ฐ ํ๊ฒฝ์ ๋ฐ๋ผ์ DB URL , username ๋ฑ๋ฑ์ ์ค์ ์ด ์กฐ๊ธ์ฉ ๋ค๋ฅด๊ฒ ๋๋ค. ํ๊ฒฝ์ ๋ฐ๋ผ ๋ค๋ฅธ ์ค์ ๊ฐ์ ์ฌ์ฉํ๊ธฐ ์ํด์ ๋น๋ ํ ๊ฐ ํ๊ฒฝ์ ๋ง์ถฐ ์คํ ์์ ์ ์ธ๋ถ ์ค์ ๊ฐ์ ์ฃผ์ ํด์ฃผ๋ฉด ๋๋ค. ๋ฐฐํฌ ํ๊ฒฝ๊ณผ๋ ์๊ด์์ด ๋น๋๋ ํ๋ฒ๋ง ์งํํ๊ณ , ๊ทธ ๋ค์ ์คํ ์์ ์ ํ๊ฒฝ์ ๋ฐ๋ผ ์ค์ ๊ฐ..
2023.05.04 -
์คํ๋ง ๋ถํธ Auto Configuration
0๏ธโฃ ์์ ํ๋ก์ ํธ ์์ฑ dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' implementation 'org.springframework.boot:spring-boot-starter-web' compileOnly 'org.projectlombok:lombok' runtimeOnly 'com.h2database:h2' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' //ํ ์คํธ์์ lombok ์ฌ์ฉ testCompileOnly 'org.project..
2023.04.25 -
์คํ๋ง ๋ถํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ์ ์คํ๋ง ๋ถํธ ์คํํฐ
์์ฆ์ ์คํ๋ง์ ์ฌ์ฉํ๋คํ๋ฉด ์คํ๋ง ๋ถํธ๋ ๊ฑฐ์ ๊ธฐ๋ณธ์ผ๋ก ์ฌ์ฉํ๋ค ๋ณด๋๊น.. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ด ๊ฑฐ์๋์ง๋ ๋ชฐ๋๋๋ฐ ์ฌ์ค ์คํ๋ง ๋ถํธ๊ฐ ์์ ๋๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ด๋ฆฌ๊ฐ ์ด๋ ค์ ๋ค. ํ๋ก์ ํธ๋ฅผ ์ฒ์ ์์ํ๋ค๊ณ ํ๋ฉด ์ด์ ์ด๋ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ ์ง ํ๋ํ๋ ๊ณ ๋ฏผํ๊ณ ์ ํํด์ผ ํ๋๋ฐ ์ฌ๊ธฐ์ ์ด์ ๋ํด์ ์ด ๊ฐ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ์ ๊น์ง ๊ณ ๋ฏผํด์ผ ํ๋ค. ๊ทผ๋ฐ ์ฌ๊ธฐ์ ๊ฐ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๋ง ๊ณ ๋ฏผํ๋๊ฒ ์๋๋ผ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค๋ผ๋ฆฌ ํธํ์ด ์ ๋๋ ๋ฒ์ ์ด ์๊ณ ์๋๋ ๋ฒ์ ์ด ์์ด์ ์ด๊ฒ๊น์ง ๊ณ ๋ฏผํด์ผ ํ๋ค... ๊ทธ๋๊น ํ๋ก์ ํธ ์ค์ ํ๋๋ฐ์ ๊ฝค๋ ๋ง์ ์๊ฐ์ด ๋ค์ด๊ฐ๋ค.. . ์ด๋ฌํ ๋ฌธ์ ๋ค์ ์คํ๋ง ๋ถํธ๊ฐ ํด๊ฒฐํด์ฃผ๋๋ฐ ์คํ๋ง ๋ถํธ๋ ๊ฐ๋ฐ์๋ค์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค์ ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํ ์ ์๋๋ก ์ธ๋ถ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฒ์ ๊ด๋ฆฌ ์คํ๋ง ๋ถํธ..
2023.04.24 -
๋ถํธ ํด๋์ค ๋ง๋๋ ๋ฒ
๋ถํธ ํด๋์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ์ ์ฆ, ์ง๊ธ๊น์ง ์งํํ๋ ๋ด์ฅ ํฐ์บฃ ์คํ, ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ, ๋์คํจ์ฒ ์๋ธ๋ฆฟ ๋ฑ๋ก์ ๋ชจ๋ ๊ณผ์ ์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํด์ฃผ๋ ํด๋์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฒ์ด๋ค. (๋ถํธ ๋ง๊ทธ๋๋ก ์์์ ํธ๋ฆฌํ๊ฒ ์ฒ๋ฆฌํด์ฃผ๋ ๊ฒ์ด๋ค.) MySpringApplication public class MySpringApplication { public static void run(Class configClass, String[] args) { System.out.println("MySpringApplication.run args = " + List.of(args)); // ํฐ์บฃ ์ค์ Tomcat tomcat = new Tomcat(); Connector connector = new Connector(); connect..
2023.04.18 -
๋ด์ฅ ํฐ์บฃ ๋น๋, ๋ฐฐํฌ (Fat Jar)
WAR ๋ฐฐํฌ ๋ฐฉ์ ๋จ์ ๊ณผ ๋ด์ฅ ํฐ์บฃ (tistory.com) WAR ๋ฐฐํฌ ๋ฐฉ์ ๋จ์ ๊ณผ ๋ด์ฅ ํฐ์บฃ 0๏ธโฃ WAR ๋ฐฐํฌ ๋ฐฉ์์ ๋จ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋ ค๋ฉด ์ฐ์ ํฐ์บฃ ๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ ๋ค์, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ WAR๋ก ๋น๋ํ ๋ค์ ๋ค์ ์ด ๋น๋ํ WAR ํ hyejin.tistory.com ์ ๋ฒ ๊ธ์์ ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ด์ฅ ํฐ์บฃ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํฌํจํ๋ค. ํฐ์บฃ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ก ํฌํจํ๊ณ ์๋ฐ ์ฝ๋๋ก ์ด์ ์ง์ ์คํํ๋ ๊ฒ์ธ๋ฐ ์๋ฐ์ main ๋ฉ์๋๋ฅผ ์คํํ๊ธฐ ์ํด์๋ jar ํ์์ผ๋ก ๋น๋ํด์ผ ํ๋ค. ์๋๋ ์ง์ META-INF/MANIFEST.MF ํ์ผ์ Manifest-Version: 1.0 Main-Class: hello.embed.EmbedTomcatSpringMain..
2023.04.18 -
WAR ๋ฐฐํฌ ๋ฐฉ์ ๋จ์ ๊ณผ ๋ด์ฅ ํฐ์บฃ
0๏ธโฃ WAR ๋ฐฐํฌ ๋ฐฉ์์ ๋จ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ฐ๋ฐํ๊ณ ๋ฐฐํฌํ๋ ค๋ฉด ์ฐ์ ํฐ์บฃ ๊ฐ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ ๋ค์, ์ ํ๋ฆฌ์ผ์ด์ ์ฝ๋๋ฅผ WAR๋ก ๋น๋ํ ๋ค์ ๋ค์ ์ด ๋น๋ํ WAR ํ์ผ์ WAS์ ๋ฐฐํฌํด์ผ ํ๋ค. ์ฆ, ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ๋ํ๊ณ ์ถ๋ค๋ฉด ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํด์ผ ํ๋ ๊ตฌ์กฐ์ด๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ์๋ฒ๋ฅผ ๋ณ๋๋ก ์ค์นํ๋ ์ด ๋ฐฉ๋ฒ์ ๋จ์ ์ผ๋ก๋ - ํฐ์บฃ ๊ฐ์ WAS๋ฅผ ๋ณ๋๋ก ์ค์นํด์ผ ํ๋ค. - ๊ฐ๋ฐ ํ๊ฒฝ ์ค์ ์ด ๋ณต์กํ๋ค. ( ์น ์ ํ๋ฆฌ์ผ์ด์ ์ WAS๋ฅผ ์คํํ๊ณ WAR์ ์ฐ๋ํ๊ธฐ ์ํ ๋ณต์กํ ์ค์ ์ด ํ์ํ๋ค.) - ๋ฐฐํฌ ๊ณผ์ ์ด ๋ณต์กํ๋ค. (WAR ํ์ผ์ ๋ง๋ค๊ณ ์ด๋ฅผ ๋ WAS์ ์ ๋ฌํด์ ๋ฐฐํฌํด์ผํ๋ค.) - ํฐ์บฃ์ ๋ฒ์ ์ ๋ณ๊ฒฝํ๋ ค๋ฉด ํฐ์บฃ์ ๋ค์ ์ค์นํด์ผ ํ๋ค. ๊ณผ๊ฑฐ์๋ ์ด..
2023.04.17 -
Spring boot + h2 database ์ฌ์ฉ, h2 ์ค์น
https://start.spring.io/ ์ด ํ์ด์ง์ ๋ค์ด๊ฐ๋ฉด ๊ฐํธํ๊ฒ ์คํ๋ง ํ๋ก์ ํธ๋ฅผ ์์ฑํ ์ ์๋ค! db ์ ๊ทผ ๊ธฐ์ ์ ๊ณต๋ถํ๊ธฐ ์ํด ํ ์คํธ์ฉ์ผ๋ก ๋ง์ด ์ฐ์ด๋ db์ธ h2 Database๋ฅผ ์ฌ์ฉํ ๊ฒ์ด๋ค. Java : 11 Packaging : Jar Project: Gradle Project Spring boot : 2.6.6 ์์กด์ฑ์ lombok, jdbc api, h2 database ๋ฅผ ์ถ๊ฐํ๊ณ ํ๋ก์ ํธ๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฆฌ๊ณ ํ ์คํธ์์๋ lombok์ ์ฌ์ฉํ๊ธฐ ์ํด์ ์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค. h2 ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ค์น https://www.h2database.com/html/main.html H2 Database Engine H2 Database Engine Welcome to H2, the Ja..
2022.04.13 -
Spring boot, IntelliJ์์ ๋กฌ๋ณตLombok ์ค์นํ๊ธฐ
1๏ธโฃ ์ฐ์ Gradle์ ์์กด์ฑ์ ์ถ๊ฐํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ๋ณ๊ฒฝ ๋ด์ฉ์ด ์๋ค๋ฉด ์ ์ฌ์ง์๋ ์๋ณด์ด์ง๋ง ์ฝ๋ผ๋ฆฌ ๋ชจ์์ด ์ค๋ฅธ์ชฝ ์๋จ์ ๋ํ๋ ํ ๋ฐ ๊ทธ ๋ฒํผ ๋๋ฌ์ฃผ๋ฉด ๋๋ค. 2๏ธโฃ Plugins ์ค์นํ๊ธฐ ์๋์ฐ ๊ธฐ์ค Files -> settings - > plugins ๊ฒ์ marktetplace์ lombok ๊ฒ์ํ๊ณ ์ค์นํด์ฃผ๋ฉด ๋๋ค. โ ๊ทผ๋ฐ ๋๋ ๊ฒ์ํ๋ ค๋๊น ์๋์์ ์์ธ๊ฐ ์ฐพ์๋ณด๋ ๊ธฐ๋ณธ์ผ๋ก ์ค์น๋์ด ์์ด์ ๊ฒ์๋์ง ์๋๋ค๊ณ ํ๋ค! ๊ทธ๋์ installed๋ฅผ ํด๋ฆญํด๋ณด๋ Lombok์ด ์ด๋ฏธ ์ค์น๋์ด ์์๋ค. 3๏ธโฃ Enable annotation prcessing ์ฒดํฌ ์๋์ฐ ๊ธฐ์ค File -> settings -> annotation processor ๊ฒ์ ์ ์์ Enable annotation proces..
2021.12.13 -
[Spring boot #2] ์คํ๋ง ๋ถํธ ์คํํฐ ์ฌ์ดํธ์์ ์คํ๋ง ํ๋ก์ ํธ ์์ฑํ๊ธฐ
1๏ธโฃ ์คํ๋ง ๋ถํธ ์คํํฐ ์ฌ์ดํธ ๊ฒฝ๋ก https://start.spring.io/ 2๏ธโฃ ํ๋ก์ ํธ ์์ฑํ๊ธฐ ์์ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ๋ฉด ์ด๋ฐ ํ์ด์ง๋ฅผ ๋ณผ ์ ์๋ค. Project : ์ฐ์ Maven Project์ Gradle Project๊ฐ ์๋๋ฐ ์์ฆ์ maven ๋ณด๋ค gradle๋ก ํ๋ก์ ํธ๋ฅผ ๋ง์ด ๋ง๋๋ ์ถ์ธ๋ผ๊ณ ํ๋ค. ๊ทธ๋ผ ๊ทธ๋๋ก ๋ฐ๋ผ๊ฐ๋๊ฒ ์ข์ผ๋๊น gradle project๋ฅผ ์ ํํ๋ค. Spring Boot : 2.6.2 2.6.1 ๋ญ ์ด๋ ๊ฒ ์๋๋ฐ 2021-12 ๊ธฐ์ค์ผ๋ก ๊ฐ์ฅ ์ต์ ๋ฒ์ ์ธ 2.6.1์ ์ ํํ๋ค. SNAPSHOT์ ์์ง ๋ง๋ค๊ณ ์๋ ๋ฒ์ ์ด๊ธฐ ๋๋ฌธ์ ์์ ํ 2.6.1์ ์ ํํ์. Project Metadata : Group์๋ ํจ์งํค๋ช ์ ์ ๋๋ฐ ๋ณดํต ํ์ฌ ๋๋ฉ์ธ๋ช ์ ๊ธฐ๋ ํ๋๋ฐ ์ด๊ฑด ์ฌ..
2021.12.07