๋ชฉ๋ก์ ์ฒด ๊ธ (162)
EEALL@ONCE
1. ๐ํ ์ด๋ธ 2. ๐ง ๋ฌธ์ 2๊ฐ ์ด์์ ๊ฒ์๋ฌผ์ ์์ฑํ ์ฌ์ฉ์๋ง ์ ํํ๊ณ ์ถ๋ค. 3. ๐ก ํด๊ฒฐ SELECT u.id, u.username FROM Users u WHERE u.id IN ( SELECT p.user_id FROM Posts p GROUP BY p.user_id HAVING COUNT(*) >= 2 ); ๐ด HAVING HAVING ์ ์ SQL์์ ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ์ ๋ํ ํํฐ๋ฅผ ์ ๊ณต. ์ฆ, GROUP BY ์ ๋ก ๊ทธ๋ฃนํ๋ ๊ฒฐ๊ณผ ์ค ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ๊ทธ๋ฃน๋ง์ ์ ํํ๊ณ ์ถ์ ๋ ์ฌ์ฉ HAVING ์ ์ GROUP BY ์ ๊ณผ ํจ๊ป ์ฌ์ฉ๋๋ฉฐ, WHERE ์ ๊ณผ ๋น์ทํ๊ฒ ๋์ํ์ง๋ง ์ค์ํ ์ฐจ์ด์ ์ด ์์! WHERE ์ ์ ๊ฐ๋ณ ํ์ ๋ํ ํํฐ๋ฅผ ์ ๊ณตํ๋ ๋ฐ๋ฉด, HAVING ์ ์ ๊ทธ๋ฃน์ ๋ํ ํํฐ๋ฅผ ์ ๊ณต..
๐ ํ ์ด๋ธ : payment (์๋ฉ/ํ ์ธ) / bill (์ฒญ๊ตฌ) ๐ง๋ฌธ์ ์ฌํญ: ์ฒญ๊ตฌ ํ ์ด๋ธ๊ณผ ์๋ฉ ํ ์ด๋ธ์ด ์๋๋ฐ, ์ฒญ๊ตฌ ํ ์ด๋ธ ํญ๋ชฉ์ ๋ํ ์๋ฉ์ด ๋์๋์ง๋ฅผ ์ฒดํฌํ๊ณ ์ถ๋ค. ๋ค๋ง ๋ชจ๋ ๋ฉ๋ถ ์ด์ธ์๋ ๋ถ๋ถ์ ์ผ๋ก ์ฐ๋์ฐ๋ ๋ฉ๋ถํ์ ๊ฐ๋ฅ์ฑ๋ ์๋ ์ํฉ ๋ํ ์๋ฉ ํ ์ด๋ธ์ ๊ณ ๊ฐ์ด ์๋ฉํ ๊ธ์ก๋ ์์ด์ง๋ง ํ์ฌ๊ฐ ํ ์ธํด์ฃผ๋ ๊ธ์ก๋ ์์ธ๋ค. (์ฆ ์ฒญ๊ตฌ๊ธ-์๋ฉ๊ธ-ํ ์ธ๊ธ=0 ์ด ๋์ด์ผ ์๋ฉ์ด ๋๋ค.) ๐ก์๋ฃจ์ : SELECT bill.bill_sn, bill.ban, bill.bill_item, bill.charge_money, SUM(IFNULL(pym.pym_amt, 0)), SUM(IFNULL(sale.pym_amt, 0)), (bill.charge_money - SUM(IFNULL(pym.pym_amt, 0)) ..
1. ๊ธฐ๋ณธ ac.getBean(๋น์ด๋ฆ, ํ์ ) / ac.getBean(ํ์ ) import hello.AppConfig; import hello.core.member.MemberService; import hello.core.member.MemberServiceImpl; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.springframework.beans.factory.NoSuchBeanDefinitionException; import org.springframework.context.annotation.AnnotationCo..
ApplicationContext ApplicationContext applicationContext =new AnnotationConfigApplicationContext(AppConfig.class); Spring Framework์์ ApplicationContext๋ Bean์ ๊ด๋ฆฌํ๊ณ Spring ์ ํ๋ฆฌ์ผ์ด์ ์ ์ํ ๋ฐํ์ ํ๊ฒฝ์ ์ ๊ณตํ๋ Spring ์ปจํ ์ด๋๋ฅผ ๋ํ๋ด๋ ์ธํฐํ์ด์ค์ ๋๋ค. 1. ApplicationContext๋ ์ธํฐํ์ด์ค ์ด๋ฉฐ 2. Spring Container๋ xml ๊ธฐ๋ฐ๊ณผ annotation ๊ธฐ๋ฐ์ด ์๋ค. 3. ๋ฐ๋ผ์ AnnotationConfigApplicationContext ์ด ๋ถ๋ถ์ ์ ํ๋ฆฌ์ผ์ด์ ์ปจํ ์คํธ์ ๊ตฌํ์ฒด ์ธ๊ฑฐ๋ค. ๊ทผ๋ฐ, ๊ทธ๋ฌ๋ฉด ๋๋ ์์์ container..
@Configuration @Configuration์ Java ์ฝ๋๋ฅผ ์ฌ์ฉํ์ฌ ๋น ๊ตฌ์ฑ์ ์ ์ํ ์ ์๊ฒ ํด์ฃผ๋ Spring์ ๊ฐ๋ ฅํ ์ฃผ์ Java ํด๋์ค์์ @Configuration ์ฃผ์์ ์ฌ์ฉํ๋ฉด ํด๋์ค์ Spring Bean ๊ตฌ์ฑ ๋ฉ์๋๊ฐ ํฌํจ๋์ด ์์์ ๋ํ๋ ์ฆ ์ฌ๊ธฐ์ Bean๋ค์ด ์์ด์! ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ @Bean @Bean์ ์ฌ์ฉํ๋ฉด Annotated ๋ฉ์๋๊ฐ ๋ฆฌํดํ ๊ฐ์ฒด๋ฅผ Spring Bean์ผ๋ก ๊ด๋ฆฌํ๋๋ก Spring์ ์ง์ ์ฆ ์ฌ๊ธฐ์ ํด๋น ์ด๋ฆ์ Bean์ผ๋ก ๊ด๋ฆฌํ ๊ฑฐ ์์ด์ ! ๋ผ๊ณ ์๋ ค์ฃผ๋ ์ญํ ๋ฉ์๋๋ ๋น์ ์์ฑํ๊ณ ๊ตฌ์ฑํ๊ธฐ ์ํ ํฉํ ๋ฆฌ ์ญํ ์ ํจ. ๋ฉ์๋์ ๋ฆฌํด ํ์ ์ ์์ฑํ ๋น์ ํ์ ์ ๋ํ๋ import org.springframework.context.annotati..
์ ์ด์ ์ญ์ IoC(Inversion of Control) ๊ตฌํ ๊ฐ์ฒด(์๊ฐ ์ญํ )์ด ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ ( ๋ฐฐ์ฐ ์บ์คํ ์ด๋ผ๊ณ ํ๋๊ฑธ ) ์ค์ค๋ก ํ๋ค๋ฉด, AppConfig ์ดํ์๋ ๊ตฌํ ๊ฐ์ฒด๋ ์๊ธฐ ๋ก์ง๋ง ์คํํ๋ ํ๋ ์ญํ ์ ํ๊ณ (๊ธ์ ์ ๊ฐ๋ง ์ ๊ฒฝ์ฐ๊ณ ) ํ๋ก๊ทธ๋จ์ ์ ์ด์ ํ๋ฆ์ AppConfig ๊ฐ ์ํํ๋ค. ์ฆ ๋๊ฐ ๋ด ๊ธ์ ์ผ์คํ ๋ ์ง๋ ๋ชจ๋ฅธ์ฒด, ๊ทธ๋ฅ ์์ฌ๋ง ์ ์์์ฌ๋ฆฌ๋ฉด ๋๋๊ฒ ์ ์ด์ ์ญ์ (IoC)์ด๋ค. ( ๊ตฌํ ๊ฐ์ฒด๊ฐ ๋๊ฐ ์บ์คํ ๋ ์ง ๋ชฐ๋ผ์ ์ ์ด์ ์ญ์ ์ด๋ผ๊ณ ํ๋ ๊ฒ ๊ฐ๋ค!) ํ๋ ์์ํฌ vs ๋ผ์ด๋ธ๋ฌ๋ฆฌ - ํ๋ ์์ํฌ๋ฉด ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ์ ์ดํ๊ณ , ๋์ ์คํ ( JUnit) - ๋ด๊ฐ ์์ฑํ ์ฝ๋๊ฐ ์ง์ ์ ์ด์ ํ๋ฆ์ ๋ด๋นํ๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์์กด๊ด๊ณ์ ์ฃผ์ DI(Dependency Injecti..
App Config๋ฅผ ์ฌ์ฉํจ์ผ๋ก์จ, ์ฌ์ฉ ์์ญ๊ณผ ํด๋น ๋ถ๋ถ์ ์ฌ์ฉํ ์ ์๊ฒ ์กฐ๋ฆฝํ๋ ๊ตฌ์ฑ ์์ญ์ผ๋ก ์๋ฒฝํ๊ฒ ๋๋๊ฒ ๋์๋ค.
์ธ๋ฑ์ค๋ฅผ ๋ง๋๋ ์ด์ ? ์ธ๋ฑ์ค๋ฅผ ์ค์ ํ๋ ๊ฒ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฑ๋ฅ๊ณผ ์ฟผ๋ฆฌ ์ฒ๋ฆฌ ์๋๋ฅผ ํฅ์์ํค๋๋ฐ ๋์์ด ๋ฉ๋๋ค. ์ธ๋ฑ์ค์ ์ค์ ์ ๋ฐ์ดํฐ๋ฒ ์ด์ค ํ ์ด๋ธ์ ํน์ ์ด(์นผ๋ผ)์ ๋ํด ๋น ๋ฅธ ๊ฒ์ ๋ฐ ์ ๋ ฌ ์์ ์ ๊ฐ๋ฅํ๊ฒ ํฉ๋๋ค. ๋น ๋ฅธ ๊ฒ์ ์๋: ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ํ ์ด๋ธ์ ๋ฐ์ดํฐ๋ฅผ ์์ฐจ์ ์ผ๋ก ๊ฒ์ํ๋ ๊ฒ์ด ์๋๋ผ ์ธ๋ฑ์ค ํธ๋ฆฌ๋ฅผ ์ด์ฉํ์ฌ ๋น ๋ฅด๊ฒ ์ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค. ์ธ๋ฑ์ค๊ฐ ์๋ ์ด์ ์ฌ์ฉํ ๊ฒ์์ ์ ํ ๊ฒ์๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๋ฉฐ, ๋๋์ ๋ฐ์ดํฐ์์๋ ํจ์จ์ ์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค. ์ ๋ ฌ ์๋ ํฅ์: ์ธ๋ฑ์ค๋ฅผ ์ฌ์ฉํ๋ฉด ์ ๋ ฌ ์์ ๋ ํจ์ฌ ๋น ๋ฆ ๋๋ค. ์ธ๋ฑ์ค๊ฐ ์๋ ์ด์ ๊ธฐ์ค์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ๋ ฌํ๋ฉด ์ ๋ ฌ ์๊ณ ๋ฆฌ์ฆ์ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋น๊ตํ๋ ํ์๊ฐ ์ค์ด๋ค์ด ๋ ๋น ๋ฅธ ์ ๋ ฌ์ด ๊ฐ๋ฅํฉ๋๋ค. ์กฐ์ธ ์ฑ๋ฅ ํฅ์: ๋ ๊ฐ ..