๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Spring Quick Start

(16)
forward์™€ redirect ์ฐจ์ด ํฌ์›Œ๋“œ RequestDispatcher๋ฅผ ์ด์šฉํ•˜์—ฌ ์‘๋‹ต์œผ๋กœ ์‚ฌ์šฉํ•  JSPํ™”๋ฉด์œผ๋กœ ๋„˜๊ฒจ์„œ, ํฌ์›Œ๋“œ๋œ ํ™”๋ฉด์ด ํด๋ผ์ด์–ธํŠธ์— ์ „์†ก๋˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ํ•œ๋ฐ˜์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ์‹คํ–‰ ์†๋„๊ฐ€ ๋น ๋ฅด๋‹ค. ํด๋ผ์ด์–ธํŠธ ๋ธŒ๋ผ์šฐ์ €์˜ URL์ด ๋ฐ”๋€Œ์ง€ ์•Š์•„ ์‘๋‹ต์ด ์–ด๋””์—์„œ ๋“ค์–ด์™”๋Š”์ง€ ํ™•์ธํ•  ์ˆ˜ ์—†๋‹ค. ๋ฆฌ๋‹ค์ด๋ ‰ํŠธ ์š”์ฒญ๋œ JSP์—์„œ ์ผ๋‹จ ๋ธŒ๋ผ์šฐ์ €๋กœ ์‘๋‹ต ๋ฉ”์‹œ์ง€๋ฅผ ๋ณด๋ƒˆ๋‹ค๊ฐ€ ๋‹ค์‹œ ์„œ๋ฒ„๋กœ ์žฌ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ํฌ์›Œ๋“œ๋ฐฉ์‹๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ผ๋‹จ ์‘๋‹ต์ด ๋ธŒ๋ผ์šฐ์ €๋กœ ๋“ค์–ด๊ฐ„ ๋‹ค์Œ, ์žฌ์š”์ฒญํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค. ์‘๋‹ต์ด ๋“ค์–ด์˜จ ํŒŒ์ผ๋กœ ๋ธŒ๋ผ์šฐ์ €์˜ URL์ด ๋ณ€๊ฒฝ๋œ๋‹ค. ๋‘๋ฒˆ์˜ ์š”์ฒญ๊ณผ ์‘๋‹ต์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๋ฏ€๋กœ ์‹คํ–‰ ์†๋„๋Š” ํฌ์›Œ๋“œ ๋ฐฉ์‹๋ณด๋‹ค ๋Š๋ฆฌ๋‹ค.
Model 1 ์•„ํ‚คํ…์ณ๋กœ ๊ฒŒ์‹œํŒ ๊ฐœ๋ฐœ (JSP์™€ JavaBeans๋งŒ์„ ์‚ฌ์šฉ) Spring Quick Start(์ฑ…)์˜ Day3 class01~02 ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. Model 1 Architecture ๊ตฌ์กฐ 90๋…„๋Œ€ ๋ง๋ถ€ํ„ฐ 2000๋…„๋Œ€ ์ดˆ๊นŒ์ง€ ์ž๋ฐ” ๊ธฐ๋ฐ˜์˜ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ์‚ฌ์šฉ๋˜์—ˆ๋˜ ์•„ํ‚คํ…์ณ์ด๋‹ค. JSP์™€ JavaBeans๋งŒ ์‚ฌ์šฉํ•œ ๋ชจ๋ธ์ด๋‹ค. Model: ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™ ๋กœ์ง์„ ์ œ๊ณตํ•˜๋ฉด์„œ DB์—์„œ ๊ฒ€์ƒ‰ํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ ์ €์žฅ๋˜๋Š” ์ž๋ฐ” ๊ฐ์ฒด๋ฅผ ์˜๋ฏธํ•œ๋‹ค. ์•ž์„  ์‹ค์Šต์—์„œ VO(๋˜๋Š” DTO)์™€ DAO ํด๋ž˜์Šค๊ฐ€ ๋ฐ”๋กœ Model ๊ธฐ๋Šฅ์˜ ์ž๋ฐ” ๊ฐ์ฒด์ด๋‹ค. View: JSP ์ฝ”๋“œ ์ค‘์—์„œ๋„ ์‚ฌ์šฉ์ž๊ฐ€ ์›ํ•˜๋Š” ํ™”๋ฉด์„ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด HTML์™€ CSS๋ฅผ ์‚ฌ์šฉํ•œ ๋ถ€๋ถ„์ด view ๊ธฐ๋Šฅ์„ ๋‹ด๋‹นํ•œ๋‹ค. Controller: JSP ํŒŒ์ผ์— ์ž‘์„ฑ๋œ ์ž๋ฐ” ์ฝ”..
ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์„ ์ด์šฉํ•œ Spring JDBC JDBC๋ž€? JDBC๋Š” ์ž๋ฐ” ๊ฐœ๋ฐœ์ž๋“ค์ด ๊ฐ€์žฅ ์˜ค๋žซ๋™์•ˆ ์‚ฌ์šฉํ•œ DB ์—ฐ๋™ ๊ธฐ์ˆ ์ด๋‹ค. JDBC ํ”„๋กœ๊ทธ๋žจ์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•ด์•ผ ํ•  ์ฝ”๋“œ๊ฐ€ ๊ต‰์žฅํžˆ ๋งŽ๋‹ค. ์Šคํ”„๋ง์€ JDBC ๊ธฐ๋ฐ˜์˜ DB ์—ฐ๋™ ํ”„๋กœ๊ทธ๋žจ์„ ์‰ฝ๊ฒŒ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋„๋ก JDBCTemplate ํด๋ž˜์Šค๋ฅผ ์ง€์›ํ•œ๋‹ค. ๋ฐ˜๋ณต๋˜๋Š” DB ์—ฐ๋™ ๋กœ์ง์€ JDBCTemplate ํด๋ž˜์Šค์˜ ํ…œํ”Œ๋ฆฟ ๋ฉ”์†Œ๋“œ๊ฐ€ ์ œ๊ณตํ•˜๊ณ , ๊ฐœ๋ฐœ์ž๋Š” ๋‹ฌ๋ผ์ง€๋Š” SQL ๊ตฌ๋ฌธ๊ณผ ์„ค์ •๊ฐ’๋งŒ ์‹ ๊ฒฝ์“ฐ๋ฉด ๋œ๋‹ค. ์Šคํ”„๋ง JDBC ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• 1. pom.xml์—์„œ JDBC์™€ DBCP ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. org.springframework spring-jdbc ${org.springframework-version} commons-dbcp commons-dbcp 1.4 โ€‹ 2. ํ”„๋กœํผํ‹ฐ ํŒŒ์ผ์„ ์ด์šฉํ•˜์—ฌ DataSour..
๋น„์ฆˆ๋‹ˆ์Šค ์ปดํฌ๋„ŒํŠธ ์‹ค์Šต Spring Quick Start(์ฑ…)์˜ Day1 class06~07 ์‹ค์Šต์„ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๊ธฐ๋กํ•œ ๋‚ด์šฉ์ž…๋‹ˆ๋‹ค. ์‹ค์Šต ์ฝ”๋“œ๋Š” ์—ฌ๊ธฐ์„œ ํ™•์ธํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. MySQL๋กœ db๋ฅผ ๋ฐ”๊พธ๋ฉด์„œ ๊ธฐ์กด ์ฑ…์˜ ์‹ค์Šต์—์„œ ๋ณ€๊ฒฝํ•œ ๋ถ€๋ถ„ dependency mysql mysql-connector-java ${mysql.version} table ์ƒ์„ฑ CREATE TABLE BOARD ( SEQ INTEGER(5) PRIMARY KEY, TITLE VARCHAR(200), WRITER VARCHAR(20), CONTENT VARCHAR(2000), REGDATE datetime default CURRENT_TIMESTAMP, CNT INTEGER(5) default 0 ); SQL๋ฌธ private final String BOARD_I..
@Service, @Repository, @Controller์˜ ๊ฐ„๋žตํ•œ ์„ค๋ช… @Service, @Repository, @Controller๋Š” @Component๋ฅผ ์ƒ์†๋ฐ›๋Š” ์–ด๋…ธํ…Œ์ด์…˜์ด๋‹ค. ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์€ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ํ•ด๋‹น ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋„๋ก ์„ค์ •ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ๋ถ„ํ™”๋œ ์ด์œ ๋Š” ํด๋ž˜์Šค๋ฅผ ๋ถ„๋ฅ˜ํ•ด์„œ ์ธ์‹ํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค. ๊ฐ๊ฐ์˜ ์–ด๋…ธํ…Œ์ด์…˜์€ ํ•ด๋‹น ํด๋ž˜์Šค์— ๋งž๋Š” ๊ธฐ๋Šฅ์ด ์ถ”๊ฐ€๋˜์–ด ์žˆ๋‹ค. @Service๋Š” ๋น„์ฆˆ๋‹ˆ์Šค ๋กœ์ง์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์—, @Repository๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์—ฐ๋™์„ ์ฒ˜๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค์—, @Controller๋Š” ์‚ฌ์šฉ์ž ์š”์ฒญ์„ ์ œ์–ดํ•˜๋Š” ํด๋ž˜์Šค์— ๋ถ™์ธ๋‹ค.
@Component ์‚ฌ์šฉ๋ฒ• ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” ํด๋ž˜์Šค ํŒจ์Šค์— ์žˆ๋Š” ํด๋ž˜์Šค๋“ค์„ ์Šค์บ”ํ•˜์—ฌ @Component๊ฐ€ ์„ค์ •๋œ ํด๋ž˜์Šค๋“ค์„ ์ž๋™์œผ๋กœ ๊ฐ์ฒด ์ƒ์„ฑํ•œ๋‹ค. ์–ด๋…ธํ…Œ์ด์…˜ ์„ค์ •ํ•˜๋Š” ๋ฐฉ๋ฒ• 1. Context ๋„ค์ž„์ŠคํŽ˜์ด์Šค ์ถ”๊ฐ€ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ์ด๋‹ค. 2. ์ปดํฌ๋„ŒํŠธ ์Šค์บ”(component-scan) ์„ค์ • ์—˜๋ฆฌ๋จผํŠธ์˜ base-package๋กœ ์ง€์ •ํ•œ ํŒจํ‚ค์ง€๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ชจ๋“  ํŒจํ‚ค์ง€๊ฐ€ ์Šค์บ” ๋Œ€์ƒ์— ํฌํ•จ๋œ๋‹ค. 3. ๊ฐ์ฒด ์ƒ์„ฑ์„ ์›Œํ•˜๋Š” ํด๋ž˜์Šค์— @Component์œผ๋กœ ์ง€์ • ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๊ฐ€ ์žˆ์–ด์•ผ๋งŒ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค. package polymorphism; import org.springframework.stereotype.Component; @Component public class LgTV implements TV { public L..
์ปฌ๋ ‰์…˜ ๊ฐ์ฒด ์„ค์ • ์ข…๋ฅ˜ java.util.List ๋ฆฌ์ŠคํŠธ1 ๋ฆฌ์ŠคํŠธ2 java.util.Set: ์ค‘๋ณต๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š๋Š” ์ง‘ํ•ฉ ๊ฐ์ฒด Lovegame 0415 I'm in love java.util.Map: ํŠน์ • key๋กœ ๋ฐ์ดํ„ฐ๋ฅผ ๋“ฑ๋กํ•˜๊ณ  ์‚ฌ์šฉ ์•„์ด์œ  ๋ถ„ํ™์‹  ์—”์‹œํ‹ฐ BOSS java.util.Properties: key-value ํ˜•ํƒœ์˜ ๋ฐ์ดํ„ฐ 2020.12.30 2020๋…„ ๋Œ๋ ค๋‚ด
Setter ์ธ์ ์…˜ ์ด์šฉํ•˜๊ธฐ (p ๋„ค์ž„์ŠคํŽ˜์ด์Šค) ๋จผ์ € ์ƒ์„ฑ์ž ๋Œ€์‹  setter ๋ฉ”์†Œ๋“œ๋ฅผ ์ถ”๊ฐ€ํ•œ๋‹ค. public class SamsungTV { private Speaker speaker; private int price; public void SamsungTV(){ } // ์ƒ์„ฑ์ž ๋Œ€์‹  setter ๋ฉ”์†Œ๋“œ public setSpeaker (Speaker speaker){ this.speaker = speaker; } public void setPrice(int price){ this.price = price; } } Setter ์ธ์ ์…˜์„ ์ด์šฉํ•˜๋ ค๋ฉด ๋Œ€์‹  ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ์˜ name ์†์„ฑ๊ฐ’์ด ํ˜ธ์ถœํ•˜๊ณ ์ž ํ•˜๋Š” ๋ฉ”์†Œ๋“œ ์ด๋ฆ„์ด๋‹ค. name="speaker"์ด๋ฉด setSpeaker()๊ฐ€ ํ˜ธ์ถœ๋˜๊ณ  name="addressList"์ด๋ฉด setAddressList()..
์ƒ์„ฑ์ž ์ธ์ ์…˜(Constructor Injection) ์ด์šฉํ•˜๊ธฐ 1. ๊ธฐ๋ณธ ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ๋Š” XML ์„ค์ • ํŒŒ์ผ์— ๋“ฑ๋ก๋œ ํด๋ž˜์Šค๋ฅผ ์ฐพ์•„์„œ ๊ฐ์ฒด ์ƒ์„ฑํ•  ๋•Œ ๊ธฐ๋ณธ์ ์œผ๋กœ ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์—†๋Š” ๊ธฐ๋ณธ ์ƒ์„ฑ์ž๋ฅผ ํ˜ธ์ถœํ•œ๋‹ค. ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ๊ฐ€์ง€๋Š” ์ƒ์„ฑ์ž๋Š” ๋ฐ”๋กœ ์ƒ์„ฑ์ž ์ธ์ ์…˜(Constructor Injection)์„ ์‚ฌ์šฉํ•˜์—ฌ ์ฒ˜๋ฆฌํ•œ๋‹ค. public class SamsungTV { private SonySpeaker speaker; private int price; public SamsungTV(){ } public SamsungTV(SonySpeaker speaker){ this.speaker = speaker; } public SamsungTV(SonySpeaker speaker, int price){ this.speaker = speaker; this.price = price; } } ์Šค..
์Šคํ”„๋ง ์˜์กด์„ฑ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ• Dependency Lookup: ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ƒ์„ฑํ•œ ๊ฐ์ฒด๋ฅผ ๊ฒ€์ƒ‰(Lookup)ํ•˜์—ฌ ์‚ฌ์šฉํ•˜๋Š” ๋ฐฉ์‹ Dependency Injection: ๊ฐ์ฒด ์‚ฌ์ด์˜ ์˜์กด ๊ด€๊ณ„๋ฅผ ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์— ๋“ฑ๋ก๋œ ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•ด์ฃผ๋Š” ๋ฐฉ์‹. ๋Œ€๋ถ€๋ถ„ ์ด ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•œ๋‹ค. Constructor Injection: ์ƒ์„ฑ์ž ๊ธฐ๋ฐ˜ Setter Injection: Setter ๋ฉ”์†Œ๋“œ ๊ธฐ๋ฐ˜ ์ฐธ๊ณ ๋กœ, ์˜์กด์„ฑ ๊ด€๊ณ„๋ž€ ๊ฐ์ฒด์™€ ๊ฐ์ฒด์˜ ๊ฒฐํ•ฉ ๊ด€๊ณ„๋ฅผ ๋งํ•œ๋‹ค. ํด๋ž˜์Šค ๋‹ค์ด์–ด๊ทธ๋žจ์œผ๋กœ ์ด ๊ด€๊ณ„๋ฅผ ์‰ฝ๊ฒŒ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŒ…์—์„œ ๊ฐ ์˜์กด์„ฑ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•ด ์ž์„ธํžˆ ๋‹ค๋ค„๋ณผ ๊ฒƒ์ด๋‹ค.
์Šคํ”„๋ง XML ์„ค์ • ํŒŒ์ผ์˜ <import>, <bean> ์—˜๋ฆฌ๋จผํŠธ ๋ฃจํŠธ ์—˜๋ฆฌ๋จผํŠธ ์—˜๋ฆฌ๋จผํŠธ ์‹œ์ž‘ ํƒœ๊ทธ์— ๋„ค์ž„์ŠคํŽ˜์ด์Šค๋ฅผ ๋น„๋กฏํ•œ XML ์Šคํ‚ค๋งˆ ๊ด€๋ จ ์ •๋ณด๊ฐ€ ์„ค์ •๋œ๋‹ค. ํŒŒ์ผ์ด ์ž๋™์„ ์ƒ์„ฑ๋  ๋•Œ, beans ๊ธฐ๋ณธ ๋„ค์ž„์ŠคํŽ˜์ด์Šค๊ฐ€ ์„ ์–ธ๋˜์–ด ์žˆ์œผ๋ฉฐ, spring-beans.xsd ์Šคํ‚ค๋งˆ ๋ฌธ์„œ๊ฐ€ ๋“ฑ๋ก๋˜์–ด ์žˆ๋‹ค. , , , ๋“ฑ ๋„ค ๊ฐœ์˜ ์—˜๋ฆฌ๋จผํŠธ๋ฅผ ์ž์‹ ์—˜๋ฆฌ๋จผํŠธ๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ ํƒœ๊ทธ๋ฅผ ์ด์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์„ ํฌํ•จํ•จ์œผ๋กœ์จ ํ•œ ํŒŒ์ผ์— ์ž‘์„ฑํ•˜๋Š” ๊ฒƒ๊ณผ ๊ฐ™์€ ํšจ๊ณผ๋ฅผ ๋‚ผ ์ˆ˜ ์žˆ๋‹ค. ๋ถ„๋ฆฌํ•˜์—ฌ ์ž‘์„ฑํ•œ ์„ค์ • ํŒŒ์ผ์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์—˜๋ฆฌ๋จผํŠธ ์Šคํ”„๋ง ์„ค์ • ํŒŒ์ผ์— ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. class ์†์„ฑ์€ ํ•„์ˆ˜์ด๋‹ค. ํŒจํ‚ค์ง€ ๊ฒฝ๋กœ๊ฐ€ ํฌํ•จ๋œ ์ „์ฒด ํด๋ž˜์Šค ๊ฒฝ๋กœ๋ฅผ ์ •ํ™•ํ•˜๊ฒŒ ์ง€์ •ํ•ด์•ผ ํ•œ๋‹ค. id ์†์„ฑ์€ ๊ฐ์ฒด๋ฅผ ์œ„ํ•œ ์ด๋ฆ„์„ ์ง€์ •ํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค. ์†์„ฑ๊ฐ’์—๋Š” CamelCase๋ฅผ ์‚ฌ์šฉ..
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ์ข…๋ฅ˜ BeanFactory ์Šคํ”„๋ง ์„ค์ •ํŒŒ์ผ์— ๋“ฑ๋ก๋œ Bean ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋Šฅ๋งŒ ์ œ๊ณตํ•œ๋‹ค. ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์— ์˜ํ•ด์„œ Bean ๊ฐ์ฒด๊ฐ€ ์‚ฌ์šฉ๋˜๋Š” ์‹œ์ (Lazy Loading) ์— ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•œ๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์—์„œ๋Š” ์‚ฌ์šฉ๋  ์ผ์ด ์—†๋‹ค! BeanFactory๋ฅผ ์ƒ์†ํ•œ ApplicationContext Bean ๊ฐ์ฒด ์ƒ์„ฑ ๋ฐ ๊ด€๋ฆฌ, ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ, ๋ฉ”์‹œ์ง€ ๊ธฐ๋ฐ˜์˜ ๋‹ค๊ตญ์–ด ์ฒ˜๋ฆฌ, AOP ์ฒ˜๋ฆฌ, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ ์ง€์› ๋“ฑ ๋งŽ์€ ๋ถ€๋ถ„์„ ์ง€์›ํ•˜๊ณ  ์žˆ๋‹ค. ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ๊ตฌ๋™๋˜๋Š” ์‹œ์ ์— ๊ฐ์ฒด๋“ค์„ ์ƒ์„ฑํ•˜๋Š” Pre-Loading ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•œ๋‹ค. ApplicationContext์˜ ๊ตฌํ˜„ ํด๋ž˜์Šค๋Š” ๋งค์šฐ ๋‹ค์–‘ํ•œ๋ฐ ๋ฐ‘์˜ ๋‘ ํด๋ž˜์Šค๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์‚ฌ์šฉํ•œ๋‹ค. GenericXmlApplicationnCont..
IoC, ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์ดํ•ดํ•˜๊ธฐ IoC(Inversion of Control): ์ œ์–ด์˜ ์—ญํ–‰ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ง์ ‘ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ๊ฐ์ฒด ๊ฐ„์˜ ์˜์กด๊ด€๊ณ„๋ฅผ ์†Œ์Šค์ฝ”๋“œ๋กœ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ  ์ปจํ…Œ์ด๋„ˆ๋กœ ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. IoC๋ฅผ ์ด์šฉํ•˜๋ฉด ๋‚ฎ์€ ๊ฒฐํ•ฉ๋„์˜ ์ปดํฌ๋„ŒํŠธ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์€ ํ”„๋กœ๊ทธ๋žจ์€ ์œ ์ง€๋ณด์ˆ˜๊ฐ€ ์–ด๋ ต๋‹ค. ๋ฐ‘์€ ๊ฒฐํ•ฉ๋„๊ฐ€ ๋†’์€ ํ”„๋กœ๊ทธ๋žจ์˜ ์˜ˆ์ด๋‹ค. public class LgTV { public void turnOn() { System.out.println("LgTV---์ „์› ์ผ ๋‹ค."); } public void turnOff() { System.out.println("LgTV---์ „์› ๋ˆ๋‹ค."); } public void soundUp() { System.out.println("LgTV---์†Œ๋ฆฌ ์˜ฌ๋ฆฐ๋‹ค."); } public voi..
ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋ž€? ํ”„๋ ˆ์ž„์›Œํฌ ๊ฐœ๋… ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๊ฐœ๋ฐœ์—์„œ ๊ธฐ๋ณธ์ด ๋˜๋Š” ๋ผˆ๋Œ€๋‚˜ ํ‹€์„ ์ œ๊ณตํ•œ๋‹ค. ๊ฐœ๋ฐœ์ž๋Š” ๋ผˆ๋Œ€์— ์‚ด์„ ๋ถ™์ด๋Š” ์ž‘์—…์„ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค. ์žฅ์  ๋น ๋ฅธ ๊ตฌํ˜„ ์‹œ๊ฐ„ ์‰ฌ์šด ๊ด€๋ฆฌ ๊ฐœ๋ฐœ์ž๋“ค์˜ ์—ญ๋Ÿ‰ ํš์ผํ™” ๊ฒ€์ฆ๋œ ์•„ํ‚คํ…์ฒ˜์˜ ์žฌ์‚ฌ์šฉ๊ณผ ์ผ๊ด€์„œ ์œ ์ง€ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๋Š” ๋กœ๋“œ ์กด์Šจ์ด 2004๋…„์— ๋งŒ๋“  ์˜คํ”ˆ์†Œ์Šค ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์Šคํ”„๋ง์€ ํ•œ ์ค„๋กœ "IoC์™€ AOP๋ฅผ ์ง€์›ํ•˜๋Š” ๊ฒฝ๋Ÿ‰์˜ ์ปจํ…Œ์ด๋„ˆ ํ”„๋ ˆ์ž„์›Œํฌ"๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ฒฝ๋Ÿ‰(Lightweight) ์Šคํ”„๋ง์€ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ชจ๋“ˆ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ์œผ๋ฉฐ, ๊ฐ ๋ชจ๋“ˆ์€ ํ•˜๋‚˜ ์ด์ƒ์˜ JAR ํŒŒ์ผ๋กœ ๊ตฌ์„ฑ๋จ. ๋ช‡ ๊ฐœ์˜ JAR ํŒŒ์ผ๋งŒ ์žˆ์œผ๋ฉด ๊ฐœ๋ฐœ๊ณผ ์‹คํ–‰์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ POJO(Plain Old Java Object)ํ˜•ํƒœ์˜ ๊ฐ์ฒด๋ฅผ ๊ด€๋ฆฌํ•œ๋‹ค. (POJO๋Š” ํด๋ž˜์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š”๋ฐ ํŠน๋ณ„ํ•œ ๊ทœ..
InTelliJ๋กœ ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ ์‹œ์ž‘ํ•˜๊ธฐ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ ๊ตฌ์ถ• ์ฑ…์—์„œ๋Š” Eclipse, Tomcat ์„œ๋ฒ„, H2 database๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. ํ•˜์ง€๋งŒ ๋‚˜๋Š” ๊ธฐ์กด์— eclipse๋กœ Spring ๊ฐœ๋ฐœ์„ ํ–ˆ๋‹ค๊ฐ€ ๋„ˆ๋ฌด ํ™”๋‚˜๋Š” ์ผ์ด ๋งŽ์•˜๋‹ค... ๊ทธ๋ž˜์„œ jetbrains์‚ฌ์˜ intelliJ๋กœ ์‹ค์Šต์„ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค. ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค ์—ญ์‹œ SQL๋ฌธ์„ ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๋Š” MySQL๋กœ ๋ฐ”๊ฟ”์„œ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค. ๋‚˜์˜ ์‹ค์Šต ํ™˜๊ฒฝ์€ intelliJ + Tomcat ์„œ๋ฒ„ + MySQL์ด๋‹ค. Spring ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๊ตฌ์ถ•ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๊ฐ๋ณด๋‹ค ๋ณต์žกํ–ˆ๋‹ค. ์ธํ”„๋Ÿฐ์˜ "์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์„ ์œ„ํ•œ IntelliJ IDEA ์„ค์ •" ๋ฌด๋ฃŒ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๋„์›€์„ ๋ฐ›์•˜๋‹ค. ๊ฐ•์˜์— ๋ง๋ถ™์ด์ž๋ฉด, ๋Œ€ํ•™์ƒ ์‹ ๋ถ„์ด๋ผ๋ฉด intelliJ์˜ ultimate(์œ ๋ฃŒํŒ)์„ ๋ฌด๋ฃŒ๋กœ ์‰ฝ๊ฒŒ ๋‹ค์šด ๋ฐ›์•„ ์“ธ ์ˆ˜ ์žˆ๋‹ค. ์‹ค์Šต ํ”„๋กœ..
๐Ÿ’ซ Spring Quick Start ๐Ÿ’ซ ์ฑ… ์ •๋ณด 2020.12.24-2020.12.28 ์™„๋… ๐Ÿ’ซ ์„œ๋ก  Spring์„ ๊ณต๋ถ€ํ•ด๋ณธ ์ด๋ ฅ์€ ์žˆ์œผ๋‚˜ ๊ทผ๋ณธ์ ์ธ ๊ฐœ๋…์„ ์—ฌ์ „ํžˆ ์ž˜ ๋ชจ๋ฅธ๋‹ค๊ณ  ํŒ๋‹จํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ Spring์— ๋Œ€ํ•œ ๋‘๋ ค์›€์ด ๋งŽ์•˜๋˜ ์ฐฐ๋‚˜, ์„ ๋ฐฐ๋‹˜์˜ ์ถ”์ฒœ์„ ํ†ตํ•ด ์ฑ…์„ ๊ตฌ๋งคํ•ด์„œ ๊ฐ€๋ณ๊ฒŒ ์ฝ์–ด๋ณด์•˜๋‹ค. ํ•ญ์ƒ ๊ฐ•์˜๋ฅผ ํ†ตํ•ด ๊ณต๋ถ€ํ–ˆ์—ˆ๋Š”๋ฐ, ๊ฐœ๋…๋“ค์ด ์ •๋ˆ๋œ ๋ง๋กœ ์ •๋ฆฌ๋˜์–ด ์žˆ์–ด์„œ ์ดํ•ด๊ฐ€ ํ›จ์”ฌ ์ž˜ ๋˜์—ˆ๋‹ค. ์•„๋Š” ๋ถ€๋ถ„์€ ๋น ๋ฅด๊ฒŒ ์ง€๋‚˜๊ฐ€๊ณ , ๋ชจ๋ฅด๋Š” ๋ถ€๋ถ„์€ ๊ฒ€์ƒ‰ํ•˜๋ฉด์„œ ์—ด์‹ฌํžˆ ์ฝ์—ˆ๋‹ค. ๋•๋ถ„์— ๋„ˆ๋ฌด ํšจ์œจ์ ์œผ๋กœ ๊ณต๋ถ€ํ•  ์ˆ˜ ์žˆ์—ˆ๋‹ค. java ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ์ง€๋Š” ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ, ์‹œ๊ฐ„์ด ์ง€๋‚˜๋ฉด์„œ ๊นŒ๋จน๋Š” ๊ฒŒ ์•„๊น๊ธฐ๋„ ํ•˜๊ณ  ๊ธฐ๋กํ•˜๋ฉด์„œ ๋น ๋ฅด๊ฒŒ 2ํšŒ๋… ํ•˜๋Š” ๊ฒƒ๋„ ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค๊ณ  ์ƒ๊ฐํ•ด์„œ ์ •๋ฆฌ ๋…ธํŠธ๋ฅผ ์ฝ”๋“œ์™€ ํ•จ๊ป˜ ์ž‘์„ฑํ•˜๋ ค ํ•œ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ชฉ์ ์ด๋ผ ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. ์ •..