728x90 ๋ฐ์ํ IT/Spring36 [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(์ฑ๊ธํค ์ปจํ ์ด๋ - ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฑ๊ธํค, ์ฑ๊ธํค ํจํด) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฑ๊ธํค 1. ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ฑ๊ธํค โ ์คํ๋ง์ ๊ธฐ์ ์ฉ ์จ๋ผ์ธ ์๋น์ค ๊ธฐ์ ์ ์ง์ํ๊ธฐ ์ํด ํ์ํ์. โ ๋๋ถ๋ถ์ ์คํ๋ง ์ ํ๋ฆฌ์ผ์ด์ ์ ์น ์ ํ๋ฆฌ์ผ์ด์ ์(๋ค๋ฅธ ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ๋ ๊ฐ๋ฅํ๊ธด ํจ) โ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ณดํต ์ฌ๋ฌ ๊ณ ๊ฐ์ด ๋์์ ์์ฒญ์ ํจ(์ ๊ทธ๋ฆผ ์ฐธ์กฐ) โ ์ด๋ ๊ฒ ์์ฒญ์ ํ .. 2023. 10. 30. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น - ๋ค์ํ ์ค์ ํ์ ์ง์, BeanDefinition) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ๋ค์ํ ์ค์ ํ์ ์ง์ - ์๋ฐ ์ฝ๋, XML โ ์คํ๋ง ์ปจํ ์ด๋๋ ๋ค์ํ ํ์์ ์ค์ ์ ๋ณด๋ฅผ ๋ฐ์๋๋ฆด ์ ์๊ฒ ์ ์ฐํ๊ฒ ์ค๊ณ๋์ด ์๋ค. (Java์ฝ๋, XML, Groovy ๋ฑ) 1. ์ด๋ ธํ ์ด์ ๊ธฐ๋ฐ ์๋ฐ ์ฝ๋ ์ค์ ์ฌ์ฉ โ ๊ฐ์์์ ์ฌํ๊น์ง ์ฌ์ฉํ๋ ์ค์ ๋ฐฉ์ AnnotationConfigApplica.. 2023. 10. 28. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น - BeanFactory์ ApplicationContext) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com BeanFactory์ ApplicationContext 1. BeanFactory์ ApplicationContext์ ์ญํ โพ BeanFactory โ ์คํ๋ง ์ปจํ ์ด๋์ ์ต์์ ์ธํฐํ์ด์ค โ ์คํ๋ง ๋น์ ๊ด๋ฆฌํ๊ณ ์กฐํํ๋ ์ญํ ์ ๋ด๋น(getBean() ๊ฐ์) โ ์ฐ๋ฆฌ๊ฐ ์ฌ์ฉํ๋ ๋๋ถ๋ถ์ ๊ธฐ๋ฅ์ Bean.. 2023. 10. 28. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น - ์คํ๋ง ๋น ์กฐํ ์ ๋์ผํ ํ์ ์ด ๋ ์ด์, ์์ ๊ด๊ณ) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ์คํ๋ง ๋น ์กฐํ - ๋์ผํ ํ์ ์ด ๋ ์ด์ ApplicationContextSameBeanFindTest public class ApplicationContextSameBeanFindTest { //ํ ์คํธ๋ฅผ ์ํด ์ฌ์ฉํ ํด๋์ค ์์ฑ @Configuration static class SameBeanConfi.. 2023. 10. 28. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น - ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์กฐํ, ์คํ๋ง ๊ธฐ๋ณธ ๋น ์กฐํ) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ์ปจํ ์ด๋์ ๋ฑ๋ก๋ ๋ชจ๋ ๋น ์กฐํ ApplicationContextInfoTest public class ApplicationContextInfoTest { AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppCo.. 2023. 10. 25. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(์คํ๋ง ์ปจํ ์ด๋์ ์คํ๋ง ๋น - ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ์คํ๋ง ์ปจํ ์ด๋ ์์ฑ MemberApp ApplicationContext applicationContext = new AnnotationConfigApplicationContext(AppConfig.class); โพ `ApplicationContext` ๋ฅผ ์คํ๋ง ์ปจํ ์ด๋๋ผ๊ณ ํ๋ฉฐ, ApplicationC.. 2023. 10. 25. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ์คํ๋ง์ผ๋ก ์ ํํ๊ธฐ AppConfig @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public .. 2023. 10. 25. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - IoC, DI, ๊ทธ๋ฆฌ๊ณ ์ปจํ ์ด๋) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com IoC, DI, ์ปจํ ์ด๋ 1. ์ ์ด์ ์ญ์ IoC(Inversion of Control) โพ ๊ธฐ์กด ํ๋ก๊ทธ๋จ์์๋ ๊ตฌํ ๊ฐ์ฒด๊ฐ ์ค์ค๋ก ํ์ํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ , ์ฐ๊ฒฐํ๊ณ , ์คํํ๋ค๋ฉด AppConfig๊ฐ ๋ฑ์ฅํ๊ณ ๋์ ์ ์ด์ ํ๋ฆ์ ๋ํ ๊ถํ์ ๋ชจ๋ ๊ฐ์ ธ๊ฐ๊ฒ ๋๋ค. โพ ์ด๋ ๋ฏ ํ๋ก๊ทธ๋จ์ ์ ์ด ํ๋ฆ์ ์ง์ ์ ์ดํ.. 2023. 10. 22. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - ์๋ก์ด ๊ตฌ์กฐ์ ํ ์ธ ์ ์ฑ ์ ์ฉ, ์ข์ ๊ฐ์ฒด ์งํฅ ์ค๊ณ์ 5๊ฐ์ง ์์น ์ ์ฉ) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com ์๋ก์ด ๊ตฌ์กฐ์ ํ ์ธ ์ ์ฑ ์ ์ฉ 1. ์๊ตฌ์ฌํญ ํ์ธ โพ ์๊ตฌ์ฌํญ : ์ ์ก ํ ์ธ ์ ์ฑ ์ ์ ๋ฅ ํ ์ธ ์ ์ฑ ์ผ๋ก ๋ณ๊ฒฝ(FixDiscountPolicy โ RateDiscountPolicy) โพ AppConfig์ ๋ฑ์ฅ์ผ๋ก ํฌ๊ฒ ์ฌ์ฉ์์ญ๊ณผ ๊ตฌ์ฑ์์ญ์ผ๋ก ๋ถ๋ฆฌ๋์๊ธฐ ๋๋ฌธ์ ๊ตฌ์ฑ์์ญ์์ RateDiscountPolicy๋ก.. 2023. 10. 21. [์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ] ์ธํ๋ฐ ๊ฐ์ ์ ๋ฆฌ(๊ฐ์ฒด ์งํฅ ์๋ฆฌ ์ ์ฉ - AppConfig ๋ฆฌํฉํฐ๋ง) /* ์ด ๊ธ์ ๊น์ํ๋์ ๊ฐ์๋ฅผ ๋ณด๊ณ ์ ๋ฆฌํ๋ ค๊ณ ์์ฑํ ๊ธ์ ๋๋ค. ๊ฐ์ธ์ ์ธ ๊ณต๋ถ๋ฅผ ์ํด ์ฌ๋ฆฌ๋ ๊ธ์ด๋ฏ๋ก ์ค๊ฐ ์ค๊ฐ ์ฝ๋๋ ์๋ต๋์์ต๋๋ค. */ ์คํ๋ง ํต์ฌ ์๋ฆฌ - ๊ธฐ๋ณธํธ - ์ธํ๋ฐ | ๊ฐ์ ์คํ๋ง ์ ๋ฌธ์๊ฐ ์์ ๋ฅผ ๋ง๋ค์ด๊ฐ๋ฉด์ ์คํ๋ง์ ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์คํ๋ง ๊ธฐ๋ณธ๊ธฐ๋ฅผ ํ์คํ ๋ค์ง ์ ์์ต๋๋ค., ์คํ๋ง ํต์ฌ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ , ์ฑ์ฅํ๋ ๋ฐฑ์๋ ๊ฐ๋ฐ์๊ฐ ๋์ด๋ณด์ธ์! ๐ข www.inflearn.com AppConfig ๋ฆฌํฉํฐ๋ง 1. ๋ฆฌํฉํฐ๋ง ์ appConfig public class AppConfig { public MemberService memberService() { return new MemberServiceImpl(new MemoryMemberRepository()); } public Ord.. 2023. 10. 21. ์ด์ 1 2 3 4 ๋ค์ 728x90 ๋ฐ์ํ