MapleStory Cookie With Halo

๐Ÿƒ Spring 46

[Spring]์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ƒˆ๋กœ์šด ํ• ์ธ ์ •์ฑ… ์ ์šฉ์˜ ๋ฌธ์ œ์ 

์ด์ „ ํŽธ: 2025.01.17 - [๐Ÿƒ Spring] - [Spring]์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐœ๋ฐœ-์ฃผ๋ฌธ๊ณผ ํ• ์ธ ๋„๋ฉ”์ธ. ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ VIPํšŒ์›์˜ ํ• ์ธ ์ •์ฑ…์ด ๋ชจ๋“  ์ƒํ’ˆ 1000์› ํ• ์ธ โ†’ 10%ํ• ์ธ์œผ๋กœ ๋ฐ”๋€Œ์—ˆ๋‹ค. discount ํŒจํ‚ค์ง€์— ๊ณ ์ •ํ• ์ธ ์ •์ฑ… RateDiscountPolicy ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.ํ…Œ์ŠคํŠธ๋ฅผ ํ•ด๋ณด์•˜๋‹ค.์ƒˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์„œ๋น„์Šค์—์„œ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด FixDiscountPolicy โ†’ RateDiscountPolicy ๋กœ ๋ณ€๊ฒฝํ–ˆ๋‹ค.์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ๋กœ ์ด๋ ‡๊ฒŒ ๋ณ€๊ฒฝํ–ˆ์„ ๋•Œ๋Š” ๋ฌธ์ œ์ ์ด ์žˆ๋‹ค.DiscountPolicy ์ •์ฑ… = new FixDiscountPolicy์ธํ„ฐํŽ˜์ด์Šค ๋ณ€์ˆ˜๋ช… = new ๊ตฌํ˜„ํด๋ž˜์Šค ์ธํ„ฐํŽ˜์ด์Šค ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ ๊ตฌํ˜„ํด๋ž˜์Šค๋„ ์˜์กดํ•˜๊ธฐ ๋•Œ๋ฌธ์— DIP์™€ OCP๋ฒ•์น™์„ ์œ„๋ฐฐํ•œ๋‹ค.โ†’ Service์—์„œ P..

๐Ÿƒ Spring 2025.01.18

[Spring]์ˆœ์ˆ˜ ์ž๋ฐ” ๊ฐœ๋ฐœ-์ฃผ๋ฌธ๊ณผ ํ• ์ธ ๋„๋ฉ”์ธ. ๊ทธ๋ฆฌ๊ณ  ํ…Œ์ŠคํŠธ

discount์™€ order ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค.discountinterface DiscountPolicyclass FixDiscountPolicy implements DiscountPolicyclass Order์ฝ”๋“œid, name, price, discount ๋ณ€์ˆ˜๋ฅผ ๋งŒ๋“ค์–ด ์ƒ์„ฑ์ž์™€ getter & setter๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.ํ• ์ธ๋œ ๊ฐ€๊ฒฉ calculatePrice() ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค.toString()์„ ์˜ค๋ฒ„๋ผ์ด๋“œ ๋ณด๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ญ๋‹ˆ๋‹ค.2024.09.06 - [โ˜• JAVA/โ˜• Class & Method] - [JAVA]toString ํ•จ์ˆ˜ OrderSeriveceinterfaceimplํ…Œ์ŠคํŠธโ€ป ์‹ค์ œ ์ฝ”๋“œ๋Š” ์ œ github์—์„œ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.โ€ป ์ฐธ์กฐ : https://www.inflearn.com/ro..

๐Ÿƒ Spring 2025.01.17

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

[Spring]์Šคํ”„๋ง ํ•ต์‹ฌ ์›๋ฆฌ-๊ธฐ๋ณธํŽธ. ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ๊ณผ ๋น„์ง€๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ.

์ž…๋ฌธํŽธ : 2024.10.23 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot]์ž…๋ฌธ-ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ  start.spring.io์—์„œ ์•„๋ž˜ ์บก์ฒ˜๋Œ€๋กœ ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ํ™˜๊ฒฝ์„ค์ •์„ ๋งŒ๋“ค์—ˆ๋‹ค.์‹œ์ž‘ ์ „์— git์— repository๋ฅผ ๋จผ์ € ์˜ฌ๋ฆฌ๊ณ  ์—ฐ๋™ํ–ˆ๋‹ค.2025.01.02 - [๐Ÿ˜ผ Git] - [Git]์ดˆ๊ฐ„๋‹จ ๋กœ์ปฌ ์›Œํฌ์ŠคํŽ˜์ด์Šค repository์— ์˜ฌ๋ฆฌ๊ธฐ vscode์— open folder ๋กœ ๋ถˆ๋Ÿฌ์™”๋‹ค.ํ”„๋กœ์ ํŠธ๋ช…Applicationํด๋ž˜์Šค์—์„œ Run ํ–ˆ์„ ๋•Œ ์ œ๋Œ€๋กœ ๋˜๋Š” ์ง€ ํ™•์ธํ•œ๋‹ค. ๋น„์ง€๋‹ˆ์Šค ์š”๊ตฌ์‚ฌํ•ญ๊ณผ ์„ค๊ณ„ ํšŒ์›๋“ฑ๊ธ‰์€ ์ผ๋ฐ˜๊ณผ VIPDB๋Š” ๋ฏธํ™•์ •์ฃผ๋ฌธ๊ณผ ํ• ์ธ ์ •์ฑ…์ƒํ’ˆ์„ ์ฃผ๋ฌธํ•˜๋Š”๋ฐ ๋“ฑ๊ธ‰์— ๋”ฐ๋ผ์„œ.๋ชจ๋“  VIP๋Š” ์ฒœ์›์„ ํ• ์ธํ•ด์ฃผ๋Š” ๊ณ ์ •๊ธˆ์•กํ• ์ธ(๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ ๋†’์Œ) โ€ป ์ฐธ์กฐ : https://www..

๐Ÿƒ Spring 2025.01.12

[Spring]์Šคํ”„๋ง์ด๋ž€?

๐ŸŒฑ ์Šคํ”„๋ง์ด๋ž€?JAVA๊ธฐ๋ฐ˜ ๊ฐ์ฒด ์ง€ํ–ฅ ์–ธ์–ด๊ฐ€ ๊ฐ€์ง„ ๊ฐ•๋ ฅํ•œ ํŠน์ง•์„ ์‚ด๋ ค๋‚ธ ํ”„๋ ˆ์ž„์›Œํฌ. ํ•ต์‹ฌ ๊ธฐ์ˆ ์Šคํ”„๋ง ID ์ปจํ…Œ์ด๋„ˆAOP์ด๋ฒคํŠธ๊ธฐํƒ€๊ทธ ์™ธ์—๋„ ์•„๋ž˜ ์Šคํ”„๋ง ์ƒํƒœ๊ณ„์˜ ์—ฌ๋Ÿฌ ํ”„๋กœ์ ํŠธ๋ฅผ ๊ฒฐํ•ฉํ•ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์Šคํ”„๋ง ์ƒํƒœ๊ณ„ ๐ŸŒ  ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ์„ค์ •์ด ์ •๋ง ์–ด๋ ค์šด๋ฐ, ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•˜๋Š” ๊ฒŒ ๋ฐ”๋กœ ์Šคํ”„๋ง ๋ถ€ํŠธ์ด๋‹ค.์Šคํ”„๋ง๋ถ€ํŠธ๋Š” ํ†ฐ์บฃ ๊ฐ™์€ ์„œ๋ฒ„๋ฅผ embed ๋‚ด์žฅํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๋ฒ„์ „๊นŒ์ง€ ์ „๋ถ€ ์ž๋™์œผ๋กœ ๊ตฌ์„ฑํ•œ๋‹ค.โ€ป ์Šคํ”„๋ง ๋ถ€ํŠธ๋Š” ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๊ฒŒ ๋„์™€์ฃผ๋Š” ๊ธฐ์ˆ ์ด์ง€ ๋ณ„๊ฐœ์˜ ๊ธฐ์ˆ ์ด ์•„๋‹ˆ๋‹ค. ์ด์™ธ์—๋„ https://spring.io/projects ์— ๋“ค์–ด๊ฐ€๋ฉด ๋‹ค์–‘ํ•œ ์Šคํ”„๋ง ๊ด€๋ จ ํ”„๋กœ์ ํŠธ๋ฅผ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. โ€ป ์ฐธ์กฐ : https://ww..

๐Ÿƒ Spring 2025.01.12

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

๋ฐ˜์‘ํ˜•