MapleStory Cookie With Halo

๐Ÿƒ Spring/๐Ÿƒ Spring Boot 34

[SpringBoot][RestAPI]Get/PostMapping(+json)

โ€ป ์ด์ „ ํŽธ2025.01.26 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot][RestAPI]ํ™˜๊ฒฝ์„ค์ •(์˜์กด์„ฑ ์ถ”๊ฐ€-web, swagger, lombok)   @GetMapping  QuickController์— get๋ฉ”์„œ๋“œ๋ฅผ ๋‘๊ฐœ ์ถ”๊ฐ€ํ–ˆ๋‹ค. @RequestParam  : ์ผ๋ฐ˜์ ์ธ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ๋•Œ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. @PathVariable : Path๋กœ ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค.  @PostMapping   Post ๋ฉ”์„œ๋“œ๋Š” Body๋ฅผ ๋ฐ˜ํ™˜ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๋ฐ›์„ ๋•Œ  @RequestBody ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.์Šค์›จ๊ฑฐ์—์„œ ์‹คํ–‰.URL ์— ์ฟผ๋ฆฌ์ŠคํŠธ๋ง์ด ๋Œ€์‹  mapping๋ช…์ด ์ ํ˜€ ์žˆ๋‹ค.  -d : body๋ž€์ด๋‹ค. ์ด๊ณณ์— ์ž…๋ ฅํ•œ ๊ฐ’์ด ๋‹ด๊ธด ๊ฑธ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.  jsonํƒ€์ž… ์‚ฌ์šฉํ•˜๊ธฐโ†’ Dt..

[SpringBoot][Maven][RestAPI]ํ™˜๊ฒฝ์„ค์ •(์˜์กด์„ฑ ์ถ”๊ฐ€-web, swagger, lombok)

SpringBoot ๋‹ค์šด๋กœ๋“œ https://start.spring.io/์—์„œ ์•„๋ž˜ ์บก์ฒ˜๋Œ€๋กœ ์ž…๋ ฅ ํ›„ GENERATE ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅธ๋‹ค.๋‹ค์šด๋กœ๋“œ ๋ฐ›์€ ํŒŒ์ผ ์••์ถ•์„ ํ’€๊ณ  VScode์— ๋ถˆ๋Ÿฌ์˜ต๋‹ˆ๋‹ค.git์— ์˜ฌ๋ฆฌ๊ณ  ์‹œ์ž‘ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.2025.01.02 - [๐Ÿ˜ผ Git] - [Git]์ดˆ๊ฐ„๋‹จ ๋กœ์ปฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค repository์— ์˜ฌ๋ฆฌ๊ธฐ ํ”„๋กœ์ ํŠธ๋ฅผ Run์„ ๋ˆŒ๋Ÿฌ ์‹คํ–‰ํ–ˆ์„ ๋•Œ ์•„๋ž˜์ฒ˜๋Ÿผ ๋œจ๋ฉด ์ž˜ ์ง„ํ–‰๋œ ๊ฒ๋‹ˆ๋‹ค.pom.xml์˜์กด์„ฑ spring-boot-starter๋ฅผ ์ฐพ์•„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค.์•„๋ž˜ ๋ถ™์—ฌ๋„ฃ๊ธฐํ•ด์„œ -web์„ ๋์— ๋ถ™์—ฌ์ค๋‹ˆ๋‹ค.๋‹ค์‹œ ํ”„๋กœ์ ํŠธ๋ฅผ ์‹คํ–‰ํ•ด๋ณด๋ฉด Tomcat ๋“ฑ์ด ์„ค์น˜ ๋˜๊ณ  http://127.0.0.1:8080/ ๋กœ ๋“ค์–ด๊ฐ€๋ณด๋ฉด ๊ธฐ๋ณธํŽ˜์ด์ง€๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค. Swagger ์ถ”๊ฐ€: ์ธํ„ฐ๋„ท์ฐฝ์œผ๋กœ ๋ฉ”์„œ๋“œ ํ…Œ์ŠคํŠธํ•˜๊ธฐ controll..

[Spring]์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐœ๋ฐœ-ํšŒ์› ๋„๋ฉ”์ธ ๊ฐœ๋ฐœ๊ณผ ํ…Œ์ŠคํŠธ

์ด์ „ ํŽธ : 2025.01.12 - [๐Ÿƒ Spring] - [Spring]์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ-๊ธฐ๋ณธํŽธ. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊ณผ ๋น„์ง€๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ. member ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์„œ ๋ชฐ์•„๋„ฃ์—ˆ์Šต๋‹ˆ๋‹ค.๋“ฑ๊ธ‰ enum grade๋”๋ณด๊ธฐpackage hello.core.member;public enum Grade { BASIC, VIP}ํšŒ์› ๋“ฑ๊ธ‰ ๋‘๊ฐ€์ง€๋ฅผ ์ƒ์ˆ˜ ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค์–ด ๋ฌถ์—ˆ์Šต๋‹ˆ๋‹ค.2024.11.28 - [โ˜• JAVA/โ˜• Variables & Data Type] - [JAVA]enum๋„๋ฉ”์ธ Member๋”๋ณด๊ธฐpackage hello.core.member;public class Member { private Long id; private String name; private Grade grade; ..

[SpringBoot]AOP ์ž…๋ฌธ-์„ค๋ช…๊ณผ ์‚ฌ์šฉ๋ฒ•

AOP๊ฐ€ ํ•„์š”ํ•œ ์ƒํ™ฉ ๋ชจ๋“  ๋ฉ”์†Œ๋“œ์˜ ํ˜ธ์ถœ์‹œ๊ฐ„ ์ธก์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด?์ด ํšŒ์›๊ฐ€์ž… ์ฝ”๋“œ๋ฅผ์ด๋ ‡๊ฒŒ ๊ณ ์ณ์„œ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค.์ด๋Ÿฐ ์‹์œผ๋กœ 999๊ฐœ์˜ ๋ฉ”์„œ๋“œ๋ฅผ๋ฅผ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์‹œ๊ฐ„์ด ๋„ˆ๋ฌด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ  ์ฝ”๋“œ๊ฐ€ ๋ณต์žกํ•ด์ง„๋‹ค.๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ(cross-cutting concern)  vs  ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ(core concern)์‹œ๊ฐ„์„ ์ธก์ •ํ•˜๋Š” ๋กœ์ง์€ ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ์ด๋‹ค.   AOPAspect Oriented Programming ๊ณตํ†ต ๊ด€์‹ฌ ์‚ฌํ•ญ/ํ•ต์‹ฌ ๊ด€์‹ฌ ์‚ฌํ•ญ์„ ๋ถ„๋ฆฌ   src-main-hello-hellospring์— aop ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค๊ณ  TimeTraceAop ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.TimeTraceAop ํด๋ž˜์Šค@Aspect โ†’ AOP ํด๋ž˜์Šค๋กœ ๋งŒ๋“ ๋‹ค.@Around โ†’ ์ ์šฉ๋ฒ”์œ„๋ฅผ ์ง€์ •ํ•œ๋‹ค.return  joinPoint.proc..

[SpringBoot][Gradle]์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA. ์„ค์ •๋ถ€ํ„ฐ ์‚ฌ์šฉ๊นŒ์ง€ ์ž…๋ฌธํŽธ.

Spring Data JPA  JPA๋ฅผ ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ ์ž…๋‹ˆ๋‹ค.๋ณดํ†ต ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•˜๋Š” CRUD ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ํŽ˜์ด์ง•๊นŒ์ง€ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.โ— JPA๋ฅผ ๊ณต๋ถ€ํ•œ ๋‹ค์Œ Spring Data JPA๋ฅผ ๊ณต๋ถ€ํ•ด์•ผ ํ•œ๋‹ค.   ์‚ฌ์šฉ๋ฒ• Repositorysrc-main-java-hello-hellospring-repositoryํŒจํ‚ค์ง€์— ์ธํ„ฐํŽ˜์ด์Šค SpringDataJpaMemberRepository๋ฅผ ๋งŒ๋“ ๋‹ค.SpringDataJpaMemberRepository  JpaRepository ๋ฅผ ํ™•์žฅextendsํ•œ๋‹ค.โ†’ JpaRepository๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ž๋™์œผ๋กœ ๋นˆ์œผ๋กœ ๋งŒ๋“ค์–ด ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ์˜ฌ๋ฆฐ๋‹ค.์ œ๋„ค๋ฆญ ํƒ€์ž…์œผ๋กœ ์—”ํ‹ฐํ‹ฐT, ๊ธฐ๋ณธํ‚ค ํƒ€์ž…ID > ์„ค์ •.์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ถ”๊ฐ€๋กœ ํ™•์žฅํ•œ๋‹ค.์ด ์ธํ„ฐํŽ˜์ด์Šค์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค๊ฐ€ ์—†์–ด๋„ ์•„๋ž˜ ..

[SpringBoot][Gradle][JPA]์ž…๋ฌธ. ์„ค์ •๋ถ€ํ„ฐ ์‚ฌ์šฉ๊นŒ์ง€.

JPAJava Persistence API  ๊ธฐ์กด์˜ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฟ ์•„๋‹ˆ๋ผ SQL ์ฟผ๋ฆฌ๊นŒ์ง€ JPA๊ฐ€ ์ง์ ‘ ๋งŒ๋“ค์–ด ์‹คํ–‰ํ•ด์ค€๋‹ค.SQL๊ณผ ๋ฐ์ดํ„ฐ ์ค‘์‹ฌ์˜ ์„ค๊ณ„ โ†’ ๊ฐ์ฒด ์ค‘์‹ฌ์˜ ์„ค๊ณ„๋กœ ํŒจ๋Ÿฌ๋‹ค์ž„์„ ์ „ํ™˜.ORM Object Relational Mappping. ๊ฐ์ฒด์™€ ๋งคํ•‘ํ•˜๋Š” ๊ธฐ์ˆ ์ด๋‹ค.๊น€์˜ํ•œ ๊ฐ•์‚ฌ๋‹˜๊ป˜์„œ JPA ์ฑ…์„ ๋ฐœ๊ฐ„ํ•œ ์ดํ›„๋กœ ์šฐ๋ฆฌ ๋‚˜๋ผ์—๋„ ๋ณด๊ธ‰์ด ๋งŽ์ด ๋œ ์ถ”์„ธ๋‹ค.  ํ™˜๊ฒฝ์„ค์ • build.gradle implementation 'org.springframework.boot:spring-boot-starter-data-jpa'  ์ถ”๊ฐ€.jdbc ์‚ญ์ œ.์ถ”๊ฐ€ํ•˜๋ฉด gradle์— jpa์™€ hibernate๊ฐ€ ์ถ”๊ฐ€๋œ ๊ฒŒ ํ™•์ธ๋œ๋‹ค.๐ŸŒŸ jpa๋Š” ์ธํ„ฐํŽ˜์ด์Šค๊ณ  hibernate๋Š” ๊ตฌํ˜„ ํด๋ž˜์Šค ์ด๋‹ค.application.properties..

[SpringBoot]DB์ ‘๊ทผ๊ธฐ์ˆ -JdbcTemplate

์Šคํ”„๋ง JdbcTemplate ์ˆœ์ˆ˜ Jdbc์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ค์ •์„ ํ•˜๋ฉด ๋œ๋‹ค.2025.01.08 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot]DB์ ‘๊ทผ๊ธฐ์ˆ -์ˆœ์ˆ˜JDBC MyBatis์™€ ๋น„์Šทํ•˜๊ฒŒ ๋ฐ˜๋ณต ์ฝ”๋“œ๋ฅผ ๋Œ€๋ถ€๋ถ„ ์ œ๊ฑฐํ•ด์ค€๋‹ค.SQL์€ ์ง์ ‘ ์ž‘์„ฑํ•ด์•ผ ํ•œ๋‹ค.  ์‚ฌ์šฉ๋ฒ• src-main-java-hello-hellospringํŒจํ‚ค์ง€ ์•ˆ์— JdbcTemplateMemberRepositoryํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค.JdcbTemplate ์ƒ์ˆ˜๋ฅผ ์„ ์–ธํ•˜๊ณ . ์•„๋ž˜์ฒ˜๋Ÿผ ์˜์กด์„ฑ ์ƒ์„ฑ์ž (DI) ๋ฅผ ํ•˜๋‚˜ ๋งŒ๋“ ๋‹ค.ResultSet์„ ๋ฐ˜ํ™˜ํ•˜๋Š” RowMapper๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.ResultSet๊ณผ int rowNum์„ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์•„ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ ๋‹ค.VScode๊ธฐ์ค€ ๋‹จ์ถ•ํ‚ค Ctrl ..

[SpringBoot]์Šคํ”„๋ง ํ†ตํ•ฉํ…Œ์ŠคํŠธ

DB์™€ ์—ฐ๊ฒฐ๋œ ์Šคํ”„๋ง ํ†ตํ•ฉํ…Œ์ŠคํŠธ MemberServiceTest๋ฅผ ๋ณต์‚ฌํ•ด ์ด๋ฆ„์„ MemberServiceIntergrationTest๋กœ ๋ฐ”๊ฟ”์ค€๋‹ค.DI์„ค์ •์„ ๋ฐ”๊ฟ”์ค€๋‹ค.์ฝ”๋“œ๋ฅผ ์•„๋ž˜์™€ ๊ฐ™์ด ๋น ๊ฟ”์ค€๋‹ค.@AfterEach์˜ memberRepository.clearStore();โ†’ DB๋ฅผ ํ…Œ์ŠคํŠธํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€์›Œ์ค„ ํ•„์š”๊ฐ€ ์—†์–ด ์‚ญ์ œ.@BeforeEach ๋ฉ”์„œ๋“œ ๋ถ€๋ถ„โ†’ ํ…Œ์ŠคํŠธ๋Š” ๊ตณ์ด DI์ƒ์„ฑ์ž๋กœ ํ•  ํ•„์š” ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ”๋€ DIํ•„๋“œ์ฃผ์ž…์œผ๋กœ ์ถฉ๋ถ„ํ•˜๋‹ค.์–ด๋…ธํ…Œ์ด์…˜@SpringBootTestํ†ตํ•ฉ ํ…Œ์ŠคํŠธ๋ฅผ ์ œ๊ณตํ•œ๋‹ค.์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ ํ…Œ์ŠคํŠธ๋ฅผ ํ•จ๊ป˜ ์‹คํ–‰ํ•œ๋‹ค.@Transactionalํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๊ธฐ ์ „์— ํŠธ๋žœ์žญ์…˜์„ ์‹คํ–‰ํ•œ๋‹ค.๊ทธ๋ฆฌ๊ณ  ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๋ชจ๋‘ ๋„ฃ์€ ํ›„ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚  ๋•Œ๋งˆ๋‹ค rollback์„ ํ•ด์ค€๋‹ค.๋”ฐ๋ผ์„œ ํ…Œ์ŠคํŠธ ๋„์ค‘ DB..

[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..

๋ฐ˜์‘ํ˜•