MapleStory Cookie With Halo

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

[SpringBoot][Gradle]Lombok ์ถ”๊ฐ€

Lobok ์ถ”๊ฐ€/์‚ฌ์šฉ build.gradle๋”๋ณด๊ธฐconfigurations { compileOnly { extendsFrom annotationProcessor }}dependencies { compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testCompileOnly 'org.projectlombok:lombok' testAnnotationProcessor 'org.projectlombok:lombok'}์ถ”๊ฐ€๋œ ๊ฒŒ ํ™•์ธ๋œ๋‹ค.vscode ๋กฌ๋ณต extention ์ถ”๊ฐ€settings์—์„œ Annotation Processing์„ ์ผœ์ค€๋‹ค.์‚ฌ์šฉ๋ฒ• @Getter  ์™€  @ Setter  ๋ฅผ ์ด์šฉํ•ด ..

[SpringBoot]์ปดํฌ๋„ŒํŠธ ํƒ์ƒ‰ ์œ„์น˜ ์ง€์ •์™€ ๊ธฐ๋ณธ ์Šค์บ” ๋Œ€์ƒ. (+ ํ•„ํ„ฐ)

์ปดํฌ๋„ŒํŠธ ํƒ์ƒ‰ ์œ„์น˜ ์ง€์ •basePackages = "๊ฒฝ๋กœ"  ๐Ÿ’ก basePackages = ("๊ฒฝ๋กœ1", "๊ฒฝ๋กœ2") ๋กœ ์—ฌ๋Ÿฌ ๊ฐœ๋ฅผ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. ๐Ÿ’ก ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, @ComponentScan์ด ๋ถ™์€ ํŒจํ‚ค์ง€๊ฐ€ ์‹œ์ž‘ ์œ„์น˜๊ฐ€ ๋œ๋‹ค.โ€ป ์ด ๋ฐฉ๋ฒ•, ์„ค์ • ์ •๋ณด ํด๋ž˜์Šค์˜ ์œ„์น˜๋ฅผ ํ”„๋กœ์ ํŠธ ์ตœ์ƒ๋‹จ์— ๋‘๋Š” ๋ฐฉ๋ฒ•์ด ๊ถŒ์žฅ๋œ๋‹ค. ๐Ÿ’ก ์ค‘์š”!!!์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ์ƒ์„ฑํ•˜๋ฉด ์ž๋™์ƒ์„ฑ๋˜๋Š” @SpringBootApplication ์— @ComponentScan์ด ๋“ค์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์Šคํ”„๋ง๋ถ€ํŠธ๋กœ ํ”„๋กœ์ ํŠธ๋ฅผ ์ƒ์„ฑํ•˜๋ฉด @ComponentScan์œผ๋กœ ํด๋ž˜์Šค๋ฅผ ์ง€์ •ํ•  ํ•„์š”์—†์ด ๋ฐ”๋กœ @Component๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.  ์ปดํฌ๋„ŒํŠธ ์Šค์บ” ๊ธฐ๋ณธ ๋Œ€์ƒ @Componentโ†’ ๋นˆ์œผ๋กœ ๋งŒ๋“ค ํด๋ž˜์Šค ๊ฐ์ฒด๋กœ ์ธ์‹.@Controllerโ†’ ์Šคํ”„๋ง MVC ์ปจํŠธ๋กค..

[SpringBoot]์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ

๐Ÿ’ก ์‹ฑ๊ธ€ํ†ค์ด๋ž€?2025.02.24 - [๐Ÿ“‘ ๊ฐœ๋ฐœ ์‚ฌ์ „/โœจ ๋””์ž์ธ ํŒจํ„ด] - Singleton ์‹ฑ๊ธ€ํ†ค ํŒจํ„ด  ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ  ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์‹ฑ๊ธ€ํ„ด ํŒจํ„ด์„ ์ ์šฉํ•˜์ง€ ์•Š์•„๋„, ๊ฐ์ฒด๋ฅผ ์‹ฑ๊ธ€ํ†ค์œผ๋กœ ๊ด€๋ฆฌํ•œ๋‹ค.์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ์‹ฑ๊ธ€ํ†ค ์ปจํ…Œ์ด๋„ˆ ์—ญํ• ์„ ํ•œ๋‹ค.โ†’ ์ด๋ ‡๊ฒŒ ์‹ฑ๊ธ€ํ†ค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์‹ฑ๊ธ€ํ†ค ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค.์ด ๋•๋ถ„์— ์‹ฑ๊ธ€ํ†ค์˜ ๋ชจ๋“  ๋‹จ์ (DIP, OCP, ์ฝ”๋“œ์˜ ๋ณต์žก์„ฑ, ํ…Œ์ŠคํŠธ)์„ ํ•ด๊ฒฐํ•œ๋‹ค. ๐Ÿ’ก ์Šคํ”„๋ง์˜ ๊ธฐ๋ณธ ๋นˆ ๋“ฑ๋ก ๋ฐฉ์‹์€ ์‹ฑ๊ธ€ํ†ค์ด์ง€๋งŒ, ๋‹ค๋ฅธ ๋ฐฉ์‹๋„ ์ง€์›ํ•œ๋‹ค.ํ•˜์ง€๋งŒ ๋ณดํ†ต 99ํผ ๊ทธ๋Œ€๋กœ ์‹ฑ๊ธ€ํ†ค ๋ฐฉ์‹์„ ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค. โ€ป ์ฐธ์กฐ : https://www.inflearn.com/roadmaps/373

[SpringBoot]BeanDefinition

์Šคํ”„๋ง์ด ๋‹ค์–‘ํ•œ ์„ค์ • ํ˜•์‹์„ ์ง€์›2025.02.24 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot]๋‹ค์–‘ํ•œ ์„ค์ • ์ง€์›-์ž๋ฐ” ์ฝ”๋“œ, xml ํ•  ์ˆ˜ ์žˆ๋Š” ์ด์œ ๋Š” BeanDefinition์ด๋ผ๋Š” ์ถ”์ƒํ™”๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.Spring Container โ†’ BeanDefinition โ† Appconfig.class / appConfig.xml / appCoinfig.xxx์„ค์ • ํŒŒ์ผ ํ˜•์‹์„ ์ฝ๋Š” AnnotationConfigApplicationContext์™€ genericXmlApplicationContext ํด๋ž˜์Šค๋ฅผ ๋ณด๋ฉด ๋นˆ์„ ์ฝ๋Š” BeanDefinitionReader๊ฐ€ ์ „์—ญ๋ณ€์ˆ˜๋กœ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.์œ„์™€ ๊ฐ™์ด ์ด ๋ฉ”ํƒ€ ์ •๋ณด BeanDefinition ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์Šคํ”„๋ง ๋นˆ..

[SpringBoot]๋‹ค์–‘ํ•œ ์„ค์ • ์ง€์›-์ž๋ฐ” ์ฝ”๋“œ, xml

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ๋‹ค์–‘ํ•œ ํ˜•์‹์˜ ์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ›์•„๋“ค์ผ ์ˆ˜ ์žˆ๋‹ค.์ž๋ฐ” ์ฝ”๋“œ AppConfig.class, xml, Groovy  emd@์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ž๋ฐ” ์ฝ”๋“œ ์„ค์ • ์‚ฌ์šฉxml ์„ค์ •๋ ˆ๊ฑฐ์‹œ ํ”„๋กœ์ ํŠธ ๋“ค์—์„œ ๋งŽ์ด ๋ณผ ์ˆ˜ ์žˆ๋‹ค.์žฅ์  : ์ปดํŒŒ์ผ ์—†์ด ๋นˆ ์„ค์ • ์ •๋ณด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.appConfig.xml ๋งŒ๋“ค๊ธฐ์ฝ”๋“œ๋”๋ณด๊ธฐ โ€ป ref๋Š” reference์˜ ์ค„์ž„ ๋ง๋กœ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๋œป์ด๋‹ค. ๊ทธ๋ž˜์„œ ref์— ๋“ค์–ด๊ฐ„ ์ด๋ฆ„๋“ค์„ ๋”ฐ๋กœ ์œผ๋กœ ๋งŒ๋“ค์–ด ๋‘” ๊ฒƒ์ด๋‹ค.ํ…Œ์ŠคํŠธโ€ป ์ฐธ์กฐ : https://www.inflearn.com/roadmaps/373

[SpringBoot]BeanFactory์™€ ApplicationContext

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆBeanFactory์™€ ApplicationContext BeanFactory์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ตœ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค.๋นˆ์„ ๊ด€๋ฆฌํ•˜๊ณ  ์กฐํšŒ getBean().ApplicationContextBeanFactory ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์ƒ์† ๋ฐ›์•„ ์ œ๊ณตํ•œ๋‹ค.๋นˆ ์กฐํšŒ ์™ธ์—๋„ ํŽธ๋ฆฌํ•œ ๋ถ€๊ฐ€ ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค.MessageSource ๋ฅผ ํ™œ์šฉํ•œ ๊ตญ์ œํ™” ๊ธฐ๋Šฅโ†’ ๊ฐ ๋‚˜๋ผ์— ๋งž๊ฒŒ ๋ฒˆ์—ญํ•ด ์ถœ๋ ฅํ•œ๋‹ค.EnviromentCapable ํ™˜๊ฒฝ๋ณ€์ˆ˜โ†’ ๋กœ์ปฌ/๊ฐœ๋ฐœ/์šด์˜ ๋“ฑ์„ ๊ตฌ๋ถ„ํ•ด์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค.ApplicationEventPublisher ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ด๋ฒคํŠธโ†’ ์ด๋ฒคํŠธ๋ฅผ ๋ฐœํ–‰ํ•˜๊ณ  ๊ตฌ๋…ํ•˜๋Š” ๋ชจ๋ธ์„ ํŽธ๋ฆฌํ•˜๊ฒŒ ์ง€์›ํ•œ๋‹ค.ResourcePatternResolver ํŽธ๋ฆฌํ•œ ๋ฆฌ์†Œ์Šค ์กฐํšŒโ†’ ํŒŒ์ผ/ํด๋ž˜์ŠคํŒจ์Šค/์™ธ๋ถ€ ์†Œ์Šค๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ์กฐํšŒ  ๐Ÿ’ก ๋”ฐ๋ผ์„œ ๋ถ€๊ฐ€๊ธฐ๋Šฅ์ด ..

[SpringBoot]์Šคํ”„๋ง ๋นˆ ์กฐํšŒ

๊ธฐ๋ณธ ์กฐํšŒac.getBean(๋นˆ์ด๋ฆ„, ํƒ€์ž…)   ๐Ÿ’ก ์˜ค๋ฅ˜ ํ…Œ์ŠคํŠธ๋นˆ์ด ์—†์œผ๋ฉด NoSuchBeanDefinitionException ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.assertThrows๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•ด๋‹น ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒ ์‹œ ํ…Œ์ŠคํŠธ ์„ฑ๊ณต์ด ๋œจ๊ฒŒ๋” ์ฝ”๋“œ๊ฐ€ ์งœ์˜€๋‹ค.  ๋™์ผํ•œ ํƒ€์ž…์ด ๋‘๊ฐœ ์ด์ƒ์ผ ๊ฒฝ์šฐ    ๐Ÿ’ก ํŠน์ • ํƒ€์ž… ๋ชจ๋‘ ์กฐํšŒํ•˜๊ธฐ  ac.getBeansOfType(ํƒ€์ž…);   ์ƒ์†๊ด€๊ณ„ ๋ถ€๋ชจ ํƒ€์ž…(Interface)์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ์ž์‹ ํƒ€์ž…๋„ ํ•จ๊ป˜ ์กฐํšŒ๋œ๋‹ค.๊ทธ๋ž˜์„œ ๋ชจ๋“  ์ž๋ฐ” ๊ฐ์ฒด์˜ ์ตœ๊ณ  ๋ถ€๋ชจ์ธ Objectํƒ€์ž…์œผ๋กœ ์กฐํšŒํ•˜๋ฉด, ๋ชจ๋“  ์Šคํ”„๋ง ๋นˆ์„ ์กฐํšŒํ•  ์ˆ˜ ์žˆ๋‹ค.     ํ‰์ƒ ์‹œ์—๋Š” ์ด๋Ÿฌํ•œ ๋นˆ ์กฐํšŒ๋ฅผ ์‚ฌ์šฉํ•  ์ผ์ด ์—†์ง€๋งŒ, ์ˆœ์ˆ˜ ์ž๋ฐ” ์ฝ”๋“œ๋ฅผ Spring์œผ๋กœ ๋ณ€ํ™˜ ์‹œ ์‚ฌ์šฉ๋œ๋‹ค. โ€ป ์ฐธ์กฐ : https://www.inflearn.com/r..

[SpringBoot]์Šคํ”„๋ง์œผ๋กœ ์ „ํ™˜

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ ApplicationContext   ์ธํ„ฐํŽ˜์ด์Šค ์ด๋‹ค.๊ตฌํ˜„์ฒด  new AnnotationConfigApplicationContext(AppConfig.class);์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋ฅผ ์ƒ์„ฑํ•  ๋•Œ ๊ตฌ์„ฑ ์ •๋ณด(AppConfig)๋ฅผ ์ง€์ •ํ•ด์ฃผ์–ด์•ผ ํ•œ๋‹ค.AppConfig์— @Bean ์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๋‹ด์•„์„œ ๊ด€๋ฆฌํ•ด์ค€๋‹ค.์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” XML ๊ธฐ๋ฐ˜์œผ๋กœ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๊ณ , ์• ๋…ธํ…Œ์ด์…˜ ๊ธฐ๋ฐ˜ ์ž๋ฐ” ์„ค์ • ํด๋ž˜์Šค๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.โ€ป ์š”์ฆ˜์€ xml๋กœ ์ž˜ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค.AC.getBean("ํด๋ž˜์Šค๋ช…", ํƒ€์ž…);  @Configuration@Bean   ์Šคํ”„๋ง ๋นˆ ๋“ฑ๋ก @Bean  Bean ์• ๋…ธํ…Œ์ด์…˜์ด ๋ถ™์€ ํด๋ž˜์Šค๋“ค์„ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๋นˆ์œผ๋กœ ๋“ฑ๋กํ•œ๋‹ค.์ด ๋•Œ ํ•จ์ˆ˜๋ช… ๊ทธ๋Œ€๋กœ ์‚ฌ์šฉํ•œ๋‹ค.๋นˆ ์ด๋ฆ„์„ ์ง€..

[SpringBoot][Maven][RestAPI]MyBatis, JPA์‚ฌ์šฉํ•˜๊ธฐ

โ€ป ์ด์ „ ํŽธ2025.01.26 - [๐Ÿƒ Spring/๐Ÿƒ Spring Boot] - [SpringBoot][RestAPI]Get/PostMapping(+json)  DB ์—ฐ๊ฒฐ pom.xml์— DB ์˜์กด์„ฑ์ถ”๊ฐ€application.properties์˜ ํ˜•์‹์„ application.yml๋กœ ๋ฐ”๊ฟ”์ฃผ๋ฉด ๊ฐ€๋…์„ฑ๊ณผ ํ˜ธํ™˜์„ฑ์ด ์ข‹์•„์ง„๋‹ค.DB์—ฐ๊ฒฐ ์ฝ”๋“œ๋ฅผ ์ ์–ด์ค€๋‹ค.(๊ฐ•์˜ ์ฝ”๋“œ์—์„œ ์ข€ ๋” ์ถ”๊ฐ€ํ•ด์ค˜์•ผ ์‹คํ–‰๋๋‹ค)๋ธŒ๋ผ์šฐ์ €๋กœ http://127.0.0.1:8080/h2-console ์— ์ ‘์†ํ•˜๋ฉด ์ด๋Ÿฐ ์ฐฝ์ด ๋œฌ๋‹ค.JDBC URL ๋งŒ application.yml ์—์„œ ์ง€์ •ํ•œ ๋Œ€๋กœ ์ ์–ด์ค€๋‹ค.์ ‘์†ํ•˜๋ฉด ์ด๋Ÿฌํ•œ h2์—์„œ ์ œ๊ณตํ•˜๋Š” ํ™”๋ฉด์ด ๋ณด์ธ๋‹ค.์ฟผ๋ฆฌ๋กœ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค๊ณ  ๊ฐ’์„ ๋„ฃ์–ด์คฌ๋‹ค.  MyBatis ์‚ฌ์šฉํ•˜๊ธฐ ๋ฉ”์ด๋ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ Mybatis..

๋ฐ˜์‘ํ˜•