MapleStory Cookie With Halo

๐Ÿƒ Spring 46

[SpringBoot][Gradle]DB์ ‘๊ทผ๊ธฐ์ˆ -์ˆœ์ˆ˜JDBC

๊ฐ•์˜์— ์‚ฌ์šฉ๋œ H2 Database ์„ค์น˜์™€ ์‚ฌ์šฉ๋ฒ•์€ ํฌ์ŠคํŠธ๋ฅผ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š”.2025.01.08 - [๐Ÿ’พ Data Base] - H2 Databas ์„ค์น˜๋ถ€ํ„ฐ ์‚ฌ์šฉ๊นŒ์ง€  ํ™˜๊ฒฝ์„ค์ • build.gradle ํŒŒ์ผ์— jdbc, h2 Database ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€.implementation 'org.springframework.boot:spring-boot-starter-jdbc'โ†’ java๋Š” DB๋ž‘ ์—ฐ๊ฒฐํ•˜๋ ค๋ฉด ๊ธฐ๋ณธ์ ์œผ๋กœ  jdbc๊ฐ€ ํ•„์š”ํ•˜๋‹ค.runtimeOnly 'com.h2database:h2'โ†’ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๊ฐ€ ์ œ๊ณตํ•˜๋Š” ํด๋ผ์ด์–ธํŠธ.testImplementation('org.springframework.boot:spring-boot-starter-test') {    exclude group: 'org.ju..

[SpringBoot][Thymeleaf]ํšŒ์›๊ด€๋ฆฌ-์›น MVC๊ฐœ๋ฐœ

MemberController ์ฝ”๋“œ๋”๋ณด๊ธฐpackage hello.hellospring.controller;import java.util.List;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import hello.hellospring.domain.Member;import hello.h..

[SpringBoot]์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก:2.์ž๋ฐ”์ฝ”๋“œ

โ€ป ์ด์ „ ํŽธ : 2025.01.06 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot]์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก:1.์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •  ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ์ ์–ด ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•ด๋ณด์ž. ์„œ๋น„์Šค์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ @Service @Repository @Autowired ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ชจ๋‘ ์ง€์›Œ์ค€๋‹ค.main์— SpringConfigํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.SpringConfig ์ฝ”๋“œ@Configuration ์–ด๋…ธํ…Œ์ด์…˜์„ ํด๋ž˜์Šค ์œ„์— ์ ๋Š”๋‹ค.@Bean ์–ด๋…ธํ…Œ์ด์…˜์„ ์„œ๋น„์Šค์™€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”์„œ๋“œ์— ์ ์–ด์ค€๋‹ค.์ปจํŠธ๋กค๋Ÿฌ๋Š” ๊ทธ๋Œ€๋กœ ์–ด๋…ธํ…Œ์ด์…˜ @Controller์™€ @Autowired๊ฐ€ ํ•„์š”ํ•˜๋‹ค. config ์ „์ฒด์ฝ”๋“œ๋”๋ณด๊ธฐpackage hello.hellospring;import org.springframewor..

[SpringBoot]์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก:1.์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •

Spring Cotainer ๐Ÿญ  ์Šคํ”„๋ง์ด ์‹œ์ž‘๋  ๋•Œ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ๐Ÿญ ๋ผ๋Š” ํ†ต์ด ์ƒ๊ธด๋‹ค. ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•ด์•ผ ํ•˜๋Š”๋ฐ, ์ด ๋•Œ ์‚ฌ์šฉ๋˜๋Š” ๊ฒŒ ์Šคํ”„๋ง ๋นˆ๐Ÿฅ” ์ด๋‹ค.๐Ÿ’ก ์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๋Š” ๋‘๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ปดํฌ๋„ŒํŠธ ์Šค์บ”๊ณผ ์ž๋™ ์˜์กด๊ด€๊ณ„ ์„ค์ •.์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ง์ ‘ ์Šคํ”„๋ง ๋“ฑ๋กํ•˜๊ธฐ.๋จผ์ € 1๋ฒˆ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด์ž.   @Component   ์ด๋•Œ @Controller @ Service @Repository ๊ฐ€ ๋ถ™์€ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์Šคํ”„๋ง์— ๋‹ด์•„ ๊ด€๋ฆฌํ•œ๋‹ค.์ด๊ฒƒ์„ ์Šคํ”„๋ง ๋นˆ์ด ๊ด€๋ฆฌํ•œ๋‹ค ๊ณ  ํ•œ๋‹ค.์‚ฌ์‹ค ์ด ์–ด๋…ธํ…Œ์ดํ…Œ์ด์…˜๋“ค์€ ์ปดํฌ๋„ŒํŠธ @Component ๋ฅผ ์ด์šฉํ•ด ๋งŒ๋“ค์–ด์กŒ๋‹ค. ์Šคํ”„๋ง์ด ์ด ์ปดํฌ๋„ŒํŠธ๋“ค์„ ๊ฐ์ฒด๋กœ ํ•˜๋‚˜์”ฉ ๋งŒ๋“ค์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋“ฑ๋กํ•œ๋‹ค.์ปดํฌ๋„ŒํŠธ ์Šค์บ”์ด ์™„๋ฃŒ๋˜์—ˆ๋‹ค.  @Autowired: Controll..

[SpringBoot][JUnit]ํšŒ์›๊ด€๋ฆฌ-์„œ๋น„์Šค์™€ ํ…Œ์ŠคํŠธ

์ด์ „ ํŽธ : 2025.01.04 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot]ํšŒ์›๊ด€๋ฆฌ-๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ  @Service ํด๋” src-main-java-hello-hellspring์—์„œ serviceํŒจํ‚ค์ง€์˜ MemberService ํด๋ž˜์Šค.ํด๋ž˜์Šค ์œ„์— @Service๋ฅผ ์ ์–ด์ค€๋‹ค.์„œ๋น„์Šค ์ฝ”๋”ฉ์ฝ”๋“œ์ „์ฒด์ฝ”๋“œ๋”๋ณด๊ธฐpackage hello.hellospring.service;import java.util.List;import java.util.Optional;import org.springframework.stereotype.Service;import hello.hellospring.domain.Member;import hello.hellospring.reposito..

[SpringBoot][JUnit]ํšŒ์›๊ด€๋ฆฌ-๋„๋ฉ”์ธ๊ณผ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ

Domain & @Repository @Repository ๋ฅผ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํด๋ž˜์Šค ์œ„์— ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค.private static Map store : save()์‹œ ์ €์žฅํ•  ๋ฐ์ดํ„ฐ์šฉ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.private static long sequence : 0, 1, 2...์‹์œผ๋กœ ์นด์šดํŠธ๋ฅผ ์„ธ๋Š” ์‹œํ€€์Šค ๊ทธ ์ž์ฒด.save() : ๋ฉค๋ฒ„ ์ €์žฅ์šฉ.findId() : id๋กœ ๋ฉค๋ฒ„๊ฐ€ ์žˆ๋Š” ์ง€ ํ™•์ธํ•˜๋Š”๋ฐ, null์ด๋ฉด Optional์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.findByName()store.values().stream() : store ๋งต์˜ ๊ฐ’๋“ค๋งŒ ๋ถˆ๋Ÿฌ์™€ Stream์„ ๋งŒ๋“  ๋’ค.filter(member -> member.getName().equals(name)) : ์ผ์น˜ํ•˜๋Š” ์ด๋ฆ„์ด ์ผ์น˜ํ•˜๋Š” ๊ฒƒ๋“ค์„ ์ฐพ์Šต๋‹ˆ๋‹ค..findAny(); : ์ผ์น˜ํ•˜๋Š” ..

[SpringBoot]ํšŒ์›๊ด€๋ฆฌ-๋น„์ง€๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ

๋น„์ง€๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ ์ •๋ฆฌ ๋ฐ์ดํ„ฐ : ํšŒ์›ID, ์ด๋ฆ„๊ธฐ๋Šฅ : ํšŒ์› ๋“ฑ๋ก, ์กฐํšŒ์•„์ง ๋ฐ์ดํ„ฐ ์ €์žฅ์†Œ๊ฐ€ ์„ ์ •๋˜์ง€ ์•Š์Œ(๊ฐ€์ƒ์˜ ์‹œ๋‚˜๋ฆฌ์˜ค)โ†’ ์ €์žฅ์†Œ๊ฐ€ ์ง€์ •๋˜์ง€ ์•Š์•˜๊ธฐ ๋•Œ๋ฌธ์— Repository๋ฅผ interface๋กœ ๋งŒ๋“ค์–ด ์ง„ํ•ธํ•œ๋‹ค.  ์ผ๋ฐ˜์ ์ธ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ณ„์ธต ๊ตฌ์กฐ  ์ปจํŠธ๋กค๋Ÿฌ์›น MVC์˜ ์ปจํŠธ๋กค๋Ÿฌ ์—ญํ• .java๋‹จ์˜ ์ง„์ž…๋‹จ๊ณ„.์„œ๋น„์Šคํ•ต์‹ฌ ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง ๊ตฌํ˜„.ex) ์ค‘๋ณต๊ฐ€์ž… ๋ถˆ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๋‹ค๋“ ์ง€.๋ฆฌํฌ์ง€ํ† ๋ฆฌDB์— ์ ‘๊ทผ.๋„๋ฉ”์ธ ๊ฐ์ฒด๋ฅผ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ.๋„๋ฉ”์ธ๋น„์ง€๋‹ˆ์Šค ๋„๋ฉ”์ธ ๊ฐ์ฒด.โ€ป DTO๋ž‘ ๋น„์Šทํ•˜์ง€๋งŒ ๋„๋ฉ”์ธ์€ ๋น„์ง€๋‹ˆ์Šค ๋กœ์ง์„ ๊ฐ€์ง„๋‹ค๋Š” ์ ์ด ๋‹ค๋ฅด๋‹ค.ex) ํšŒ์›, ์ฃผ๋ฌธ, ์ฟ ํฐ ๋“ฑ์„ DB์— ์ €์žฅํ•˜๊ณ  ๊ด€๋ฆฌ.โ€ป ์ฐธ์กฐ : https://www.inflearn.com/roadmaps/373

[SpringBoot]์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ-API @ResponseBody

โ€ป ์ด์ „ ํŽธ : 2025.01.03 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot]์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ-MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„  @ResponseBody: html์˜ Body๋ž€์— ๊ทธ๋Œ€๋กœ data๋ฅผ ๋ฐ˜ํ™˜ํ•œ๋‹ค.    ์ฃผ๋กœ ๊ฐ์ฒด๋ฅผ returnํ•ด json๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ์œ„ํ•ด ๋งŽ์ด ์‚ฌ์šฉ๋œ๋‹ค. Controller๋‹จ์— ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.code๋”๋ณด๊ธฐpackage hello.hellospring.Controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.sprin..

[SpringBoot][Thymeleaf]์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ-MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„

๐Ÿ’ก MVC patternModel, View, Controller๋ฐ์ดํ„ฐ, ํ™”๋ฉด, ์ž๋ฐ”์ฝ”๋“œ๋ฅผ ๋ถ„๋ฆฌํ•œ ๊ฒƒ์ด๋‹ค.  ์ฝ”๋“œ templatesํด๋”์— htmlํŒŒ์ผ ํ•˜๋‚˜๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.๋”๋ณด๊ธฐ hello! templateControllerํด๋”์— HelloController๋ผ๋Š” ์ž๋ฐ”ํŒŒ์ผ์— helloMvc๋ผ๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.๋”๋ณด๊ธฐpackage hello.hellospring.Controller;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.an..

[SpringBoot]์›น ๊ฐœ๋ฐœ ๊ธฐ์ดˆ-์ •์  ์ปจํ…์ธ 

์›น ๊ฐœ๋ฐœ์—๋Š” ์„ธ๊ฐ€์ง€ ์ข…๋ฅ˜๊ฐ€ ์žˆ๋‹ค.์ •์  ์ปจํ…์ธ MVC์™€ ํ…œํ”Œ๋ฆฟ ์—”์ง„API  ์ •์  ์ปจํ…์ธ Static Content  staticํด๋”์— hello-static.html์ด๋ž€ ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.์ด๋Ÿฐ ํ™”๋ฉด์ž…๋‹ˆ๋‹ค.๋”๋ณด๊ธฐ ์ •์  ์ปจํ…์ธ ์ž…๋‹ˆ๋‹ค.์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์ž๋ฐ” ์ฝ”๋“œ๊ฐ€ ๋“ค์–ด๊ฐ€์ง€ ์•Š์€ ์ด ์ •์ ์ปจํ…์ธ ๋ฅผ ์ด๋ ‡๊ฒŒ ์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฃผ์†Œ http://localhost:8080/hello-static.html ์ ์œผ๋ฉด request๊ฐ€ ๋‚ด์žฅ๋œ ํ†ฐ์บฃ์„œ๋ฒ„๋กœ ๊ฐ‘๋‹ˆ๋‹ค.ํ†ฐ์บฃ์€ ์Šคํ”„๋ง๋ถ€ํŠธ ์•ˆ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์—์„œ hello-static๊ด€๋ จ ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์žˆ๋Š” ์ง€ ๊ฒ€์ƒ‰ํ•ฉ๋‹ˆ๋‹ค.๊ด€๋ จ ์ปจํ…์ธ ๊ฐ€ ์—†๊ธฐ์—, resouces-staticํด๋”์—์„œ ์ฐพ์Šต๋‹ˆ๋‹ค.๋ฐœ๊ฒฌ๋œ ์ •์  ์ปจํ…์ธ ์ธ hello-static.html์„ ์›น๋ธŒ๋ผ์šฐ์ €๋กœ responseํ•ฉ๋‹ˆ๋‹ค.๐ŸŒŸ ๊ด€๋ จ ..

๋ฐ˜์‘ํ˜•