SpringBoot32 [SpringBoot] ์คํ๋ง ๋ฉ์ผ ์ ์ก ๋ฐฉ๋ฒ ( + google Gmail SMTP ์ค์ ) ์คํ๋ง ๋ถํธ๋ก ์ฌ์ฉ์์๊ฒ ๋ฉ์ผ ์ ์ก ๊ธฐ๋ฅ ๊ตฌํ1. ๊ตฌ๊ธ Gmail SMTP ์ฌ์ฉ ์ํ ์ค์ ๊ตฌ๊ธ ์ฌ์ดํธ > ํ๋กํ ํด๋ฆญ > Google ๊ณ์ ๊ด๋ฆฌ ๊ฒ์์ฐฝ์ > "์ฑ ๋น๋ฐ๋ฒํธ" ๊ฒ์ ์ฑ ์ด๋ฆ ์ค์ > ๋ง๋ค๊ธฐ 16์๋ฆฌ์ ์ฑ ๋น๋ฐ๋ฒํธ๊ฐ ์์ฑ๋จ 2. build.gradledependencies { // ๋ฉ์ผ ์ ์ก ์ํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ถ๊ฐ implementation 'org.springframework.boot:spring-boot-starter-mail' } 3. application-mail.propertiesโป ์ฑ ๋น๋ฐ๋ฒํธ๋ ์ ์ถ๋๋ฉด ์ํํ๋ฏ๋ก ๊ผญ .gitignore์ application-mail.properties ํ์ผ ์ถ๊ฐํ๊ธฐ.(๋ณธ์ธ์ ๋ณด์ ๊ด๋ จ ์ค์ ํ์ผ application-oauth... 2026. 3. 16. [SpringBoot] ์คํ๋ง๋ถํธ ํ ์คํธ ์ฝ๋ ์์ฑ JUnit ์ด๋? ์๋ฐ ๋จ์ ํ ์คํธ ํ๋ ์์ํฌ๋ฅผ ์๋ฏธ.@BeforeAll - ์ ์ฒด ํ ์คํธ ๋ฉ์๋ ์คํ ์ ์ ๋ฑ ํ๋ฒ๋ง ์คํ, static public/default๋ก ์ ์@AfterAll - ์ ์ฒด ํ ์คํธ ๋ฉ์๋ ์ข ๋ฃ ํ ๋ฑ ํ๋ฒ๋ง ์คํ, static public/default๋ก ์ ์@BeforeEach - ๊ฐ ํ ์คํธ ๋ฉ์๋ ์์ ์ ์ ์คํ, public๋ก ์ ์@AfterEach - ๊ฐ ํ ์คํธ ๋ฉ์๋ ์ข ๋ฃ ํ์ ์คํ, public๋ก ์ ์@BeforeAll -> @BeforeEach -> @Test -> @AfterEach ->@AfterAll AssertJ๋ JUnit๊ณผ ํจ๊ป ์ฌ์ฉํด ๊ฒ์ฆ๋ฌธ์ ๊ฐ๋ ์ฑ์ ๋์ฌ์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ค.์์: assertThat(a+b).isEqualTo(sum); ๋ฉ์๋ ์ข ๋ฅ:isE.. 2026. 2. 20. [SpringBoot] ๋ก๊ทธ(Log) @Slf4j ๋ก๊ทธ (Log) ๋ก๊ทธ(Log)๋ ์์คํ ์ด ๋์ํ ๋ ์์คํ ์ ์ํ ๋ฐ ๋์ ์ ๋ณด๋ฅผ ์๊ฐ ๊ฒฝ๊ณผ์ ๋ฐ๋ผ ๊ธฐ๋กํ๋ ๊ฒ ๋ก๊ทธ ๋ ๋ฒจ (Log Level)๋ก๊ทธ๋ ๋ก๊ทธ ๋ ๋ฒจ์ ๋ฐ๋ผ ์ถ๋ ฅ๋ ์ง ๋์ด๊ฐ์ง ๊ฒฐ์ ํ๋ค. ๋ก๊ทธ ๋ ๋ฒจ์ ๋ฐ๋ฅธ ์ฌ๊ฐ๋ ์์ค์ ์๋์ ๊ฐ๋ค.Trace > Debug > Info > Warn > Error > Fatal๋ก๊ทธ ๋ ๋ฒจ์ค๋ช ์์TRACE๊ฐ์ฅ ์์ธํ ์ ๋ณด(๋ฉ์๋ ํธ์ถ ๋จ์)๋ฉ์๋ ์ง์ /๋ฐํ ์์ ๋ฑDEBUG๋๋ฒ๊น ์ฉ ์์ธ ์ ๋ณด๋ณ์ ๊ฐ, ๋ก์ง ํ๋ฆ ์ถ์ INFO์ผ๋ฐ์ ์ธ ์ ๋ณด์๋น์ค ์์, ์์ฒญ ์ฒ๋ฆฌ ์๋ฃWARN๊ฒฝ๊ณ ์ํฉ(์๋ฌ๋ ์๋์ง๋ง ์ฃผ์ ํ์)์ฑ๋ฅ ์ ํ, ์์์น ๋ชปํ ์ ๋ ฅERROR์ค๋ฅ ๋ฐ์์์ธ, ์์คํ ์ฅ์ ๐ก API๋ฅผ ๊ฐ๋ฐํ ๋๋ ๋ก๊ทธ ๋ ๋ฒจ์ DEBUG๋ก ์ค์ , ๋ฐฐํฌ์์๋ INFO๋ Warn ๋ ๋ฒจ๋ก.. 2025. 11. 9. [SpringBoot] ์คํ๋ง ์ค์ผ์ค๋ฌ ์คํ๋ง ์ค์ผ์ค๋ฌ๋?์คํ๋ง ์ค์ผ์ค๋ฌ(Scheduler)๋ ํน์ ์์ ์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋๋ ์์ฝ๋ ์๊ฐ์ ์๋์ผ๋ก ์คํํ๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ค.์: ๋งค์ผ ์์ ์ DB ๋ฐฑ์ , 1์๊ฐ๋ง๋ค ํต๊ณ ์ ๋ฐ์ดํธ, 1๋ถ๋ง๋ค ์ํ ๊ฐฑ์ ๋ฑ@Scheduled ์ด๋ ธํ ์ด์ ๊ณผ @EnableScheduling์ด ํจ๊ป ์ฌ์ฉ๋๋ค.์ฆ, ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์๋์ผ๋ก ํน์ ๋ฉ์๋๋ฅผ ์คํํ๋๋ก ๋์์ฃผ๋ ๊ธฐ๋ฅ โ ์คํ๋ง์ค์ผ์ค๋ฌ ์ฌ์ฉ๋ฒ1. ๋ฉ์ธ Application์ @EnableScheduling ์ด๋ ธํ ์ด์ ๋ถ์ด๊ธฐ์คํ๋ง ๋ถํธ ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ค์ผ์ค๋ฌ ๊ธฐ๋ฅ์ ํ์ฑํํ๋ ์ด๋ ธํ ์ด์ ์ ๋ถ์ด๋ฉด @Scheduled๊ฐ ๋ถ์ ๋ฉ์๋๋ ์ ํ ์คํ๋์ง ์์๋ณดํต ๋ฉ์ธ ํด๋์ค๋ ์ค์ ํด๋์ค์ ๋ถ์ธ๋ค.@SpringBootApplication@EnableScheduling //.. 2025. 11. 8. [SpringBoot] AOP(Aspect Oriented programing, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) AOP(Aspect Oriented programing, ๊ด์ ์งํฅ ํ๋ก๊ทธ๋๋ฐ) ์ด๋?๊ณตํต ๊ด์ฌ์ฌ(Cross-Cutting Concern) ๋ฅผ ๋ชจ๋ํํ์ฌ ์ฝ๋์ ์ค๋ณต์ ์ค์ด๊ณ , ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง๊ณผ ๋ถ๋ฆฌํ๋ ๊ธฐ์ ๋ก๊ทธ ์ถ๋ ฅํธ๋์ญ์ ๊ด๋ฆฌ์ฑ๋ฅ ์ธก์ (๋ฉ์๋ ์คํ ์๊ฐ)์์ธ ์ฒ๋ฆฌ๊ถํ ๊ฒ์ฌ์ด๋ฐ ๊ฒ๋ค์ ๊ฐ ๋ฉ์๋๋ง๋ค ์์ฑํ๋ฉด ์ค๋ณต ์ฝ๋๊ฐ ์๊ธฐ๊ธฐ ๋๋ฌธ์,AOP๋ฅผ ์ฌ์ฉํ๋ฉด ๊ณตํต ๋ก์ง์ ํ ๊ณณ์ ๋ชจ์๋๊ณ ์๋์ผ๋ก ์ ์ฉํ ์ ์๋ค. AOP ํต์ฌ ๊ฐ๋ ๊ฐ๋ ์ค๋ช Aspect (๊ด์ )๊ณตํต ๊ด์ฌ์ฌ๋ฅผ ๋ชจ๋ํํ ๊ฒ (์: ๋ก๊น , ํธ๋์ญ์ ๋ฑ)Join Point (์กฐ์ธ ํฌ์ธํธ)AOP๊ฐ ์ ์ฉ๋ ์ ์๋ ์ง์ (๋ฉ์๋ ํธ์ถ ๋ฑ)Advice (์ด๋๋ฐ์ด์ค)์ค์ ๋ก ์คํ๋ ๊ณตํต ๋ก์ง (Aspect ์์ ๋ฉ์๋)Pointcut (ํฌ์ธํธ์ปท)์ด๋ค Joi.. 2025. 11. 8. [SpringBoot] HTML form ์ ์ก vs JavaScript๋ก JSON ์ ์ก ๐งฉ 1. HTML ์ ์ก ๋ฐฉ์๐น ๊ฐ์๋ธ๋ผ์ฐ์ ๊ฐ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ํผ ์ ์ก ๊ธฐ๋ฅ ์ฌ์ฉ ํ๊ทธ์ action๊ณผ method ์์ฑ์ ์ด์ฉํด ์๋ฒ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ก์ ์ก ํ์์ ๊ธฐ๋ณธ์ ์ผ๋ก application/x-www-form-urlencoded ๋๋ multipart/form-data (ํ์ผ ์ ๋ก๋ ์)๐น ์์ ์ฝ๋ ์์ด๋: ๋น๋ฐ๋ฒํธ: ํ์๊ฐ์ ๐น ์๋ฒ (Spring Boot Controller)@ReauireArgsConstructor@Controllerpublic class UserController { private final UserService userservice; @PostMapping("/user") public String signup(AddUserReq.. 2025. 11. 2. [SpringBoot] STS ํ๋ก์ ํธ Context root ๋ณ๊ฒฝํ๊ธฐ(/controller -> /) STS ํฐ์บฃ์ ์คํํ๋ฉด ๊ฐ๋ Context Path๊ฐ /controller๋ก ์๋์ค์ ๋์ด์๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.๊ทธ๋์ /controller๊ฐ ์๋ /๋ก ์ ์ํ๊ธฐ ์ํด ์๋์ ๊ฐ์ด ์ค์ ์ ๋ณ๊ฒฝํด ์ฃผ์ด์ผ ํ๋ค. 1. ํ๋ก์ ํธ ์ฐํด๋ฆญ-> properties 2. Validation -> Web Project Settings -> Context root ๋ณ๊ฒฝํ๊ธฐ๋ค์ด๊ฐ๋ณด๋ฉด Context root๊ฐ /controller๋ก ๋์ด ์์ ๊ฒ์ด๋ค. ์ด๊ฒ์ / ๋ก ๋ณ๊ฒฝํด์ค์ผ/๋ก ์ ์ํ์ ๋ ๊ฐ๋ฐํ๋ ํ์ด์ง๊ฐ ๋์จ๋ค. 3. ํฐ์บฃ ์ฐํด๋ฆญ-> Clean๊ณผ Project->Clean.. (์ด ๋ถ๋ถ์ ์๋ต ๊ฐ๋ฅ)ํน์๋ ์ ์ฉ์ด ์ ๋์์ ์ ์๊ธฐ ๋๋ฌธ์ Project Clean๊ณผ ํฐ์บฃ clean์ ํ๊ณ ํฐ์บฃ์ ์คํํ๋ค. 2025. 1. 18. [SpringBoot] STS ํ๋ก์ ํธ ๋นจ๊ฐ์์ค ๋ฐ ๋(pom.xml ์ฒซ์งธ์ค ์๋ฌ) STS๋ก Spring ํ๋ก์ ํธ๋ฅผ ํ๋ค ๋ณด๋ฉด ๊ฐ์๊ธฐ ํ๋ก์ ํธ์ ๋นจ๊ฐ ์์ค๊ฐ ๋จ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.์๋ ์์๋๋ก ํด๋ณด๋ฉด ํด๊ฒฐ ๋๋ค.1) Clean projectProject > Clean... ์ ๋๋ฌ์ฃผ๋ฉด ๋๋ค. ์ด ๊ธฐ๋ฅ์ ํ์ผ์ ์ง์ฐ๋ ๊ธฐ๋ฅ์ ์๋๊ณ , ์ดํด๋ฆฝ์ค๊ฐ ์ฌ์ฉํ๊ณ ์บ์๋ฅผ ์ญ์ ํ๋ ๊ฒ์ด๋ค.์ด๊ฒ๋ง ํด์๋ ํ๋ก์ ํธ ๋นจ๊ฐ ์์ค๋ฅผ ์ง์ธ ์ ์๋ค. ์๋ ๊ณผ์ ์ ๋ ํด์ผ ํ๋ค. 2) STS ๋๊ณ ์ฌ์ฉ์/.m2 ์์ ์๋ repository ํ์ผ ์ญ์ ์ .m2 ํ์ผ ๊ฒฝ๋ก๋ก ๋ค์ด๊ฐ repository ํด๋๋ฅผ ์ญ์ ํ๋ค.์ด๊ฒ์ pom.xml์ dependensy ๊ณผ์ ์์ ์ค๋ฅ๊ฐ ๋ฌ๋ ๋ถ๋ถ์ด ์์ ์ ์๊ธฐ ๋๋ฌธ์๋ค์ด๋ฐ์๋ ๋ด์ฉ๋ค์ ๋ค์ ์ญ์ ํ๊ณ ์๋ 3๋ฒ์งธ ๊ณผ์ ์ผ๋ก ๋ค์ ๋ค์ด๋ฐ๋๋ค. 3) pom.xml ํ์ผ์ plugin.. 2025. 1. 18. [SpringBoot] AJAX ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ๋๊ธฐ(Synchronous), ๋น๋๊ธฐ(Asynchronous) ์ฐจ์ด AJAX๋?AJAX(Asynchronous JavaScript and XML)๋ ์น ํ์ด์ง์์ ์ ์ฒด๋ฅผ ์๋ก๊ณ ์นจํ์ง ์๊ณ ๋ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ์ ์๋ ๊ธฐ์ ์ ๋๋ค. ์ด๋ฅผ ํตํด ์ฌ์ฉ์ ๊ฒฝํ์ด ๊ฐ์ ๋๊ณ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ด ๋์ฑ ๋์ ์ผ๋ก ์๋ํ ์ ์์ต๋๋ค."Asynchronous": ๋น๋๊ธฐ์ ์ผ๋ก ๋์ํ์ฌ, ์์ฒญ๊ณผ ์๋ต์ด ์ด๋ฃจ์ด์ง๋ ๋์ ๋ค๋ฅธ ์์ ์ ๊ณ์ ์ํํ ์ ์์ต๋๋ค."JavaScript": ํด๋ผ์ด์ธํธ ์ธก์์ ๋์ํ๋ฉฐ, ์ฃผ๋ก XMLHttpRequest ๊ฐ์ฒด๋ Fetch API๋ฅผ ์ฌ์ฉํด ์๋ฒ์ ํต์ ํฉ๋๋ค."XML": ์ด๊ธฐ์๋ XML ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์์ง๋ง, ํ์ฌ๋ JSON์ด ์ฃผ๋ก ์ฌ์ฉ๋ฉ๋๋ค.AJAX์ ์ฃผ์ ํน์ง๋น๋๊ธฐ ํต์ : ์ ์ฒด ํ์ด์ง๋ฅผ ๋ค์ ๋ก๋ํ์ง ์๊ณ ๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐฑ์ ํ ์ ์์.์ฌ์ฉ์ ๊ฒฝํ.. 2025. 1. 14. ์ด์ 1 2 3 4 ๋ค์