Spring
๋ฐ์ดํฐ ๋ฒ ์ด์ค ์ปค๋ฅ์
ํ์ด๋, ๋คํธ์ํฌ ์์บฃ์ฒ๋ผ ์ ํ๋ฆฌ์ผ์ด์
์์ ์์ ์ ํ์ํ ์ฐ๊ฒฐ์ ๋ฏธ๋ฆฌ ํด๋๊ณ ์ ํ๋ฆฌ์ผ์ด์
์ข
๋ฃ ์์ ์ ์ฐ๊ฒฐ์ ๋ชจ๋ ์ข
๋ฃํ๋ ์์
์ ํ๋ ค๋ฉด ๊ฐ์ฒด์ ์ด๊ธฐํ์ ์ข
๋ฃ ์์
์ด ํ์ํ๋ค. [ ์คํ๋ง ๋น์ ์ด๋ฒคํธ ๋ผ์ดํ์ฌ์ดํด (์ฑ๊ธํค์ผ ๋) ] ์คํ๋ง ์ปจํ
์ด๋ ์์ฑ ์คํ๋ง ๋น ์์ฑ ์์กด๊ด๊ณ ์ฃผ์
์ด๊ธฐํ ์ฝ๋ฐฑ (๋น์ด ์์ฑ๋๊ณ , ๋น์ ์์กด๊ด๊ณ ์ฃผ์
์ด ์๋ฃ๋ ํ ํธ์ถ) ์ฌ์ฉ ์๋ฉธ์ ์ฝ๋ฐฑ (๋น์ด ์๋ฉธ๋๊ธฐ ์ง์ ์ ํธ์ถ) ์คํ๋ง ์ข
๋ฃ โ ๊ฐ์ฒด์ ์์ฑ๊ณผ ์ด๊ธฐํ๋ฅผ ๋ถ๋ฆฌํ๋ ๊ฒ์ด ์ข๋ค. ์์ฑ์๋ ํ์ ์ ๋ณด๋ ๋ฐ๊ณ , ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํ ๋นํด์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค. ๋ฐ๋ฉด์ ์ด๊ธฐํ๋ ์์ฑ๋ ๊ฐ์ ํ์ฉํด์ ์ธ๋ถ ์ปค๋ฅ์
์ ์ฐ๊ฒฐํ๋ ์ญํ ์ ํ๋ค. ์์ฑ์ ์์์ ๋ฌด๊ฑฐ์ด ์์
์ ํ๋ ๊ฒ์ ์ ์ง๋ณด์๋ฉด์์ ์ข์ง ์๋ค. ์คํ๋ง์ 3๊ฐ์ง ๋ฐฉ๋ฒ..
Spring
์กฐํ ๋์์ ๋น์ด 2๊ฐ ์ด์์ผ ๋ ํด๊ฒฐ๋ฐฉ๋ฒ์ด 3๊ฐ์ง๊ฐ ์๋ค. @Autowired ํ๋ ๋ช
๋งค์นญ @Qualifier @Primary [ @Autowired ํ๋ ๋ช
๋งค์นญ ] @Autowired๋ ์ฒ์์ ํ์
๋งค์นญ์ ์์ํ๋ค. ํ ํ์
์ ์ฌ๋ฌ ๋น์ด ์กด์ฌํ ๊ฒฝ์ฐ์๋ ์ถฉ๋์ด ์ผ์ด๋์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ฒ ๋๋ค. ์ด๋๋ ํ๋ ๋ช
์ ๋ณ๊ฒฝํ๋ฉด ๋๋ค. @Autowired private DiscountPolicy discountPolicy // DiscountPolicy ์ rateDiscountPolicy์ fixDiscountPolicy๊ฐ ์กด์ฌํจ ์ด๋ฐ ์ฝ๋์์ ์ ํํ ํ๋๋ช
์ผ๋ก ์ง์ ํด์ค์ผ ํ๋ค. @Autowired private DiscountPolicy rateDiscountPolicy ์ด๋ ๊ฒ ์ฃผ์
ํด์ฃผ๋ฉด rateDisc..
Spring
@Bean๊ณผ xml์ ์ด์ฉํด์ ๋น์ ๋ฑ๋กํ ์ ์์์ง๋ง, ์ด ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฒ ๋๋ฉด ๋ฑ๋กํด์ผ ํ ๋น์ด ๋ง์ ๋ ๋ฒ๊ฑฐ๋ก์ ์ง๋ค. @Conponent ์ด๋
ธํ
์ด์
์ ์ฌ์ฉํ๋ฉด ์ฝ๊ฒ ๋น์ ๋ฑ๋กํ ์ ์๊ฒ ๋๋ค. โ ์์กด๊ด๊ณ๋ @Autowired ์ด๋
ธํ
์ด์
์ผ๋ก ํด๊ฒฐํ๋ค. [ @Component ์ ๋
ธํ
์ด์
์ถ๊ฐ ] @Configuration @ComponentScan public class AutoAppConfig {} ๋จผ์ AppConfig๋ฅผ ๋ง๋ค๊ณ , @Configuration๊ณผ @Component๋ฅผ ๋ถ์ฌ์ค๋ค. ์ค์ํ ๊ฑด ์ด ํด๋์ค๋ package hello.core; ์ ๋ง๋ค์ด์ผ ํ๋ค! ๋ง๋ ์์น์ ํ์ ํด๋๋ฅผ ๊ฒ์ํ๊ธฐ ๋๋ฌธ์ด๋ค. ์ ์ฌ์ง ์ฒ๋ผ ์ปดํฌ๋ํธ ์ค์บ ๋์์ด ๋์ด์ผ ํ ํด๋์ค์ ์ปดํฌ๋ํธ ์ ๋
ธํ
์ด์
์ ๋ถ์ฌ์ค๋ค..
Spring
์น์ ๊ฒฝ์ฐ์๋ ๊ณ ๊ฐ์ด ์ฌ๋ฌ๋ช
์ด๊ธฐ ๋๋ฌธ์ ์์ฒญํ ๋๋ง๋ค ๊ฐ์ฒด๋ฅผ ์๋ก ์์ฑํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋ญ๋น๊ฐ ์ ๋ง์ ๋ง ์ฌํ๋ค! ๊ทธ๋์ ํด๊ฒฐ์ ํด์ค์ผ ํ๋ค. ๋ฐฉ๋ฒ์๋ ๋๊ฐ์ง๊ฐ ์กด์ฌํ๋ค. 1. ์ง์ ์ฑ๊ธํค ์์ฑ 2. ์ฑ๊ธํค ์ปจํ
์ด๋ ์ด์ฉ [ ์ง์ ์ฑ๊ธํค ์์ฑ ] ์ฑ๊ธํค ํจํด์ ์ ์ฉํ๋ฉด ๊ณ ๊ฐ์ ์์ฒญ์ด ์ฌ ๋๋ง๋ค ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ ๊ฒ์ด ์๋๋ผ, ์ด๋ฏธ ๋ง๋ค์ด์ง ๊ฐ์ฒด๋ฅผ ๊ณต์ ํด์ ์ฌ์ฉํ๋ค. ํ์ง๋ง ์ง์ ๋ง๋๋ ๊ฒ์ ์ฌ๋ฌ ๋จ์ ์ด ์กด์ฌํ๋ค. ์์ฑํด์ผํ ์ฝ๋๊ฐ ๋ง์์ง๋ค. DIP๋ฅผ ์๋ฐํ๋ค. ( ํด๋ผ์ด์ธํธ๊ฐ ๊ตฌ์ฒดํด๋์ค๋ฅผ ์์กดํ๋ค) private static final SingletonService instance = new SingletonService(); DIP๋ฅผ ์๋ฐํ๋ฉด OCP๋ ์๋ฐํ ๊ฐ๋ฅ์ฑ์ด ๋ง๋ค. ๋ด๋ถ์์ฑ์ ๋ณ๊ฒฝํ๊ฑฐ๋ ์ด๊ธฐํ ํ๊ธฐ ์ด๋ ต..
Spring
์คํ๋ง ๋น ์กฐํ๋ ์กฐํํ๋ ๋ฒ๋ง ๊ฐ๋จํ ์ ๋ฆฌํ๋ ์ฉ๋๋ก๋ง ํฌ์คํ
ํด์ผ๊ฒ ๋ค. [ ๋ชจ๋ ๋น ์ถ๋ ฅ ] โ applicationContext.getBeanDefinitionNames(); : ์คํ๋ง์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์ด๋ฆ์ ์กฐํํ๋ค. โ applicationContext.getBean(); : ๋น ์ด๋ฆ์ผ๋ก ๋ ๋น ๊ฐ์ฒด๋ฅผ ์กฐํํ๋ค. [ ์ ํ๋ฆฌ์ผ์ด์
๋น ์ถ๋ ฅ ] โ .getRole()์ ์ฌ์ฉํ๋ฉด ์คํ๋ง ๋ด๋ถ์์ ์ด์ฉํ๋๊ฑด์ง ์ฌ์ฉ์๊ฐ ๋ฑ๋กํ ๋น์ธ์ง ํ์ธํด์ฃผ๋ ์ญํ ์ด๋ค. โ ROLE_APPLICATION : ์ฌ์ฉ์๊ฐ ์ ์ํ ๋น โ ROLE_INFRASTRUCTURE : ์คํ๋ง์ด ๋ด๋ถ์์ ์ฌ์ฉํ๋ ๋น ๐ Ex if(beanDefinition.getRole() == BeanDefinition.ROLE_APPLICATION..
Spring
์ง๊ธ๊น์ง ์์ฑํ ์ฝ๋ ์ค๋ช
ํ์๊ฐ์
์ ํ๊ณ , ์กฐํํ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๋ฌผ๊ฑด์ ๊ตฌ์
ํ ๋ ํ ์ธ ์ ์ฑ
์ ๋ง๋ค๊ณ ์ถ์ด์ ๊ณ ์ ๋ ํ ์ธ๊ธ์ก์ ํ ์ธํด์ฃผ๋ ์ฝ๋๋ฅผ ์์ฑํ๋ค. ๊ทธ๋ฐ๋ฐ ๊ธฐ์
์์ ๊ณ ์ ๋ ํ ์ธ๊ธ์ก์ด ์๋๋ผ ํผ์ผํธ๋ก ํ ์ธํด์ฃผ๊ณ ์ถ๋ค๊ณ ํ๋ฉด ์ฝ๋๋ฅผ ๋ฐ๊ฟ์ผํ๋ค. package hello.core.discount; import hello.core.member.Grade; import hello.core.member.Member; public class RateDiscountPolicy implements DiscountPolicy { private int discountPercent = 10; @Override public int discount(Member member, int price) { if (membe..
Spring
์ค๋์ h2 database ์ค์นํ๊ณ ์คํ๊น์ง ํด๋ด
์๋นโชโฟโช ์ ์ ํ๋ ๋ฐฉ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฅ์ ํ๊ธฐ ๋๋ฌธ์ ์๋ฒ๊ฐ ์ข
๋ฃ๋๋ฉด ๋ฐ์ดํฐ๊ฐ ๋ค ์ฌ๋ผ์ง๊ฒ ๋๋ค. ๋ฐ์ดํฐ๊ฐ ์ฌ๋ผ์ง๋๊ฑธ ๋ฐฉ์งํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅ์ ํด์ผํ๋ค! 1. https://www.h2database.com์ ์ ์ํด์ฃผ์ธ์! ์ ๋ All Platforms์ ๋ค์ด ๋ฐ์๊ณ ์์ถ๊น์ง ํ์ด์ฃผ์ธ์! 2. ์๋ฒ ์ ์ ์ค์น๋ ํ์ผ์ ์ด๊ณ ์์ ์๋ ๋ค๋ชจ๋ฅผ ํด๋ฆญํดํ๋ฉด ํ์ผ ๊ฒฝ๋ก๊ฐ ๋์ต๋๋น ์ด๊ฑธ ๋ณต์ฌํด๋๊ณ cmd๋ฅผ ์ด์ด์ cd ~~~~~ ์ด๋ ๊ฒ ๋ถ์ฌ๋ฃ๊ธฐ ํด์ค๋๋ค. window๋ h2.bat์ ์
๋ ฅํด์ฃผ๋ฉด ์ฐ๊ฒฐ์ด ๋ผ์!! macOS๋ ./h2.sh๋ฅผ ์
๋ ฅํด์ฃผ์ธ์. (mac์ ๊ทธ ์ ์ ๊ถํ์ ๋ถ์ฌํด์ผ๋๋๋ฐ chmod 755 h2.sh๋ฅผ ํด์ค์ผ ๊ถํ ๋ถ์ฌ๊ฐ..
Spring
๊ทธ๋์ ์์ฑํ ์ฝ๋๋ฅผ ํ ๋๋ก ํ์์ ๋ฑ๋กํ๊ณ , ์กฐํํ๋ ์ค์ต์ ์ค๋ ํ๋ค!!! ์ฌ์ค ์๋
์ ์ ๊ณต์์
๋ค์ผ๋ฉด์ ๋ค ํ๋ ๊ณผ์ ์ธ๋ฐ ๊ทธ๋ ๋๋ฌด ๋นจ๋์ด์ ์์ ๋ฐ๋ผ๊ฐ์ง ๋ชปํ์๋,,,, ๊ทธ๋ผ ์ ๋ฆฌ ํฌ์คํ
์์ูฉฬ(ห•อ ๊ด •อห)ู 1. HomeContoller ์์ฑ package hello.hellospring.controller; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.GetMapping; @Controller public class HomeController { @GetMapping("/") // ๋ก์ปฌํธ์คํธ์ ๋ค์ด์ค๋ฉด public String home(){ return "h..
Spring
์ค๋์ ์์กด๊ด๊ณ์ ๋ํด์ ๋ฐฐ์ ๋ค! ์ผ๋ฅธ ๋ค์์ฃผ ์์ ์ง๊ธ ๋ฃ๊ณ ์๋ ์
๋ฌธ ๊ฐ์๋ฅผ ๋๋ด์ผ๊ฒ ๋ค,,,๏ฝก๏พ(๏พ´ω`๏พ)๏พ๏ฝก ์คํ๋ง ๋น์ ๋ฑ๋กํ๋ 2๊ฐ์ง ๋ฐฉ๋ฒ ์ปดํฌ๋ํธ ์ค์บ๊ณผ ์๋ ์์กด๊ด๊ณ ์ค์ ์๋ฐ ์ฝ๋๋ก ์ง์ ๋ฑ๋กํ๊ธฐ ์คํ๋ง๋น์ ์ฝ๊ฒ๋งํด์ ์๋ฐ ๊ฐ์ฒด๋ฅผ ์ด์ผ๊ธฐ ํ๋ค. ์ปดํฌ๋ํธ ์ค์บ์ ์ด์ฉํด์ ์๋์ ์ผ๋ก ์์กด๊ด๊ณ ์ค์ 1. ๋ฉค๋ฒ ์ปจํธ๋กค๋ฌ ์์ฑ package hello.hellospring.controller; import hello.hellospring.domain.Member; import hello.hellospring.service.MemberService; import org.springframework.beans.factory.annotation.Autowired; import org.springfram..
Spring
์ด๋ฒ์ ๋ฐฐ์ด ๊ฑด ์ข ์ด๋ ต๋ค...๊ทธ๋๋ ์ด์ฌํ ๋ค์ด์ผ๊ฒ ๋คเน๏ฝฅฬโก๏ฝฅฬเน ์์ง ๊ธฐ์ด๊ณต๋ถํ๊ณ ์๋๋ฐ๋ ์๋ฐ ๊ณต๋ถ์ ๋ถ์กฑํจ์ด ํ์คํ ๋๊ปด์ง๋คใ
ใ
๋ด์ผ๋ถํฐ ๋ค์ ์๋ฐ ๊ณต๋ถ๋ฅผ ํด์ผ๊ฒ ๋ค ๊ทธ๋์ ์ ์๋๋๋ intelliJ๊ฐ ๊ฐ์๊ธฐ side-by-side์๋ฌ๊ฐ ๋ฌ๋ค...visual c++ ๋ค์ ๊น๊ณ ๊ทธ๋๋ ์๋ผ์ ์ธํ
๋ฆฌ์ ์ด ์ง์ฐ๊ณ ๋ค์ ๊น์๋๋ ์์ฃผ ์ ์๋ ๋๋ค...๋ค์ ์ด๋ฐ ์ผ ๋ง๋ค์ง ๋ง์๋ผ (๊ฆ°๊ซ°) ์ด๋ฒ์ ๋ฐฐ์ด ๊ฑด ํ์ ๊ด๋ฆฌ ์์ ์ด๋ค! ํ์๊ฐ์
์ ํ๊ณ , ์ค๋ณต๋ ์ด๋ฆ์ ์ฌ์ฉํ์ง ๋ชปํ๋๋ก ๊ด๋ฆฌํด์ผํ๋ค! ์ปจํธ๋กค๋ฌ : ์น MVC์ ์ปจํธ๋กค๋ฌ ์ญํ ์๋น์ค : ํต์ฌ ๋น์ฆ๋์ค ๋ก์ง ๊ตฌํ ๋ฆฌํฌ์งํ ๋ฆฌ : ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ๊ทผ. ๋๋ฉ์ธ ๊ฐ์ฒด๋ฅผ DB์ ์ ์ฅํ๊ณ ๊ด๋ฆฌ ๋๋ฉ์ธ : ๋น์ฆ๋์ค ๋๋ฉ์ธ ๊ฐ์ฒด 1. ..