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

TIL/๐ŸŒฟ SPRING

์ˆœ์ˆ˜ ์Šคํ”„๋ง ์šฉ์–ด ์ •๋ฆฌ

WAS(Web Application Server): ์›น์„œ๋ฒ„์— ์˜ํ•ด ์ ‘์ˆ˜๋˜์–ด์ง„ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์œ„ํ•ด ์„œ๋ธ”๋ฆฟ์„ ์‹คํ–‰์‹œํ‚ค๋Š” ์†Œํ”„ํŠธ์›จ์–ด(์ปจํ…Œ์ด๋„ˆ/์„œ๋ธ”๋ฆฟ์ปจํ…Œ์ด๋„ˆ)
 
HttpServletํด๋ž˜์Šค : ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๊ฐ€ ์ƒ์†๋ฐ›์•„์•ผ ํ•˜๋Š” ํด๋ž˜์Šค
 
์„œ๋ธ”๋ฆฟ ๋งคํ•‘: ํŠน์ • ์„œ๋ธ”๋ฆฟ์˜ ์š”์ฒญ, ๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ ์ž ์„ค์ •ํ•˜๋Š” ๊ฒƒ
 
์„œ๋ธ”๋ฆฟ url๋งคํ•‘ ์„ค์ • ๋ฐฉ์‹ : ์–ด๋…ธํ…Œ์ด์…˜๋ฐฉ์‹, xml ๋ฐฉ์‹, @WebServlet
 
Request.getServletContext(): ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์—์„œ ์„œ๋ฒ„side์˜ ์ •๋ณด์ €์žฅ์„ ์œ„ํ•œ application ๊ฐ์ฒด ๋ฉ”์†Œ๋“œ
Request.getSession(): HttpSession๊ฐ์ฒด
 
Cookie๋Š” ํด๋ผ์ด์–ธํŠธ side์— ์ •๋ณด ์ €์žฅ
 
Response๊ฐ์ฒด: ์ •๋ณด๊ฐ€ ์ €์žฅ๋œ ์ฟ ํ‚ค๋ฅผ ํด๋ผ์ด์–ธํŠธ์— ์ €์žฅํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ๊ฐ์ฒด
 
์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค์˜ ๋ฉ”์†Œ๋“œ: service(),doGet(), doPost()
 
Dispatcher(RequsetDispatcher): MVC๋ชจ๋ธ์—์„œ controller์˜ ๊ฒฐ๊ณผ๋ฅผ view jspํŽ˜์ด์ง€๋กœ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๊ฐ์ฒด
 
์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ํด๋ž˜์Šค๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ชฉ์ : ๊ณตํ†ต์ ์ธ ๊ธฐ๋Šฅ์„ ํ˜ธ์ถœ ์ „/ํ›„์— ์‹คํ–‰์‹œํ‚ค๊ณ  ์‹ถ์„ ๋•Œ
์„œ๋ธ”๋ฆฟ ํ•„ํ„ฐ ํด๋ž˜์Šค๋ฅผ ๋“ฑ๋กํ•ด๋‘๋Š” ๋ฐฉ๋ฒ•: web.xml์— ๋“ฑ๋กํ•˜๊ฑฐ๋‚˜ ์–ด๋…ธํ…Œ์ด์…˜ ๋ฐฉ์‹์œผ๋กœ ์„ค์ •
์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ์‹œ์ ์€ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์žˆ์„ ๋•Œ
์„œ๋ธ”๋ฆฟ ๊ฐ์ฒด์˜ ๋ผ์ดํ”„ ์‚ฌ์ดํด์€ ์„œ๋ธ”๋ฆฟ ์ปจํ…Œ์ด๋„ˆ์— ์˜ํ•ด์„œ ๊ด€๋ฆฌ
์„œ๋ธ”๋ฆฟ(๊ฐ์ฒด): ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ ์ฒ˜๋ฆฌ๋ฅผ ํ•˜๊ธฐ ์œ„ํ•œ ์„œ๋ฒ„์˜ worker
 
์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ์žฅ์ : ๋น ๋ฅธ ๊ตฌํ˜„ ์‹œ๊ฐ„, ์‰ฌ์šด ๊ด€๋ฆฌ, ๊ฐœ๋ฐœ์ž๋“ค์˜ ์—ญ๋Ÿ‰ ํš์ผํ™”, ๊ฒ€์ฆ๋œ ์•„ํ‚คํ…์ณ์˜ ์žฌ์‚ฌ์šฉ๊ณผ ์ผ๊ด€์„ฑ ์œ ์ง€
์Šคํ”„๋ง ํ”„๋ ˆ์ž„์›Œํฌ์˜ ํŠน์ง•: ๊ฒฝ๋Ÿ‰(POJO), IoC, ๊ด€์ ์ง€ํ–ฅํ”„๋กœ๊ทธ๋ž˜๋ฐ(AOP) ์ง€์›, ์ปจํ…Œ์ด๋„ˆ ์—ญํ• 
๊ฒฐํ•ฉ๋„: ํ•˜๋‚˜์˜ ํด๋ž˜์Šค๊ฐ€ ๋‹ค๋ฅธ ํด๋ž˜์Šค์™€ ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” ์ง€
๋‹คํ˜•์„ฑ๊ณผ ๋””์ž์ธ ํŒจํ„ด(Factory)์ด์šฉํ•˜์—ฌ ๊ฒฐํ•ฉ๋„๋ฅผ ๋‚ฎ์ถค
Maven๋ฉ”์ด๋ธ: ์Šคํ”„๋ง ํ”„๋กœ์ ํŠธ์˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ build ๊ด€๋ฆฌํˆด
Pom.xml: ๊ด€๋ฆฌํˆด์˜ ๋นŒ๋“œ์˜ ์—ฌ๋Ÿฌ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ๋Š” ํŒŒ์ผ
Bean: ์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์— ๊ด€๋ฆฌ๋˜์–ด ์ง€์€ ์ž๋ฐ” ๊ฐ์ฒด
 
์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์˜ ๋กœ๋”ฉ ์ˆœ์„œ
1.์ปจํ…Œ์ด๋„ˆ ์ƒ์„ฑ 2. Bean์ด ๋“ค์–ด์žˆ๋Š” xml ์„ค์ • ํŒŒ์ผ ์ฝ์Œ 3.xmlํŒŒ์ผ์— ๋“ฑ๋ก๋œ bean๋“ค์˜ lifecycle๊ณผ dpendency๊ฐ€ ๊ด€๋ฆฌ
 
Singleํ†ค: bean ๊ฐ์ฒด์˜ scope ๊ธฐ๋ณธ ์†์„ฑ๊ฐ’
Ioc: Inversion of control, ํ”„๋กœ๊ทธ๋žจ์˜ ํ๋ฆ„์„ ๊ฐœ๋ฐœ์ž๊ฐ€ ์•„๋‹Œ ํ”„๋ ˆ์ž„์›Œํฌ๊ฐ€ ์ฃผ๋„
DI: Dependency Injection, ์ปจํ…Œ์ด๋„ˆ๊ฐ€ ์˜์กด๊ด€๊ณ„๋ฅผ Bean์„ค์ • ์ •๋ณด๋ฅผ ๋ฐ”ํƒ•์œผ๋กœ ์ž๋™์œผ๋กœ ์—ฐ๊ฒฐ
DI ๊ตฌํ˜„ ๋ฐฉ๋ฒ• : setter injection, constructor injection
<bean id=โ€tvโ€ class=โ€poly.sam.TVโ€> -> ์ž๋ฐ”์ฝ”๋“œ : SamsaugTv tv= new SamsaungTV();
 
 
 
์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค 

  • HttpServlet ์ถ”์ƒ ํด๋ž˜์Šค: ์„œ๋ธ”๋ฆฟ ํด๋ž˜์Šค๊ฐ€ ๋ฌด์กฐ๊ฑด ์ƒ์†๋ฐ›์•„์•ผ ํ•˜๋Š” ํด๋ž˜์Šค( javax๋ผ๋Š” ํŒจํ‚ค์ง€ ์•ˆ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—)
  • HttpServlet ์ถ”์ƒํด๋ž˜์Šค๋ฅผํ†ตํ•ด์„œ๋ธ”๋ฆฟ์˜๊ฐ์ฒด๋ฅผ์ฐ์–ด๋‚ผ์ˆ˜์žˆ๋Š”FirstServlet์ด๋ผ๋Š”ํด๋ž˜์Šค์ƒ์„ฑ
  • ์ถ”์ƒ ํด๋ž˜์Šค ์•ˆ์— ๋“ค์–ด์žˆ๋Š” ์ค‘์š” ๋ฉ”์†Œ๋“œ : service ์˜ค๋ฒ„๋ผ์ด๋”ฉ ํ•˜๊ธฐ
  • cd /Users/kimjihyun/spring
  • javac -cp /Applications/apache-tomcat-8.5.76/lib/servlet-api.jar FirstServlet.java

 
servlet ํด๋ž˜์ŠคํŒŒ์ผ์œ„์น˜
์•„ํŒŸ์น˜ํ†ฐ์บฃ- webapps - ROOT - WEB-INF - classes
WEB-INF ํด๋” : ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์–ด์„ธ์Šค ํ•  ์ˆ˜ ์—†์Œ(์™ธ๋ถ€์—์„œ ์ ‘๊ทผ x)
ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ ‘๊ทผ ๋˜์–ด์ง€์ง€ ์•Š๋Š” ํ™˜๊ฒฝ์„ค์ •์ด๋‚˜ ๋ณดํ˜ธ๋˜์–ด์•ผ ํ•  ํŒŒ์ผ๋“ค์„ ๋ง‰์•„๋‘ 
 
 
์„œ๋ธ”๋ฆฟ ๋งคํ•‘
- ํŠน์ • servlet ์š”์ฒญ ํ•˜๊ฑฐ๋‚˜ ์ „์ฒด ๊ฒฝ๋กœ์˜ url์„ ์š”์ฒญํ•˜๋ฉด ๋ณต์žกํ•˜๊ณ  ๋ณด์•ˆ์—๋„ ์ทจ์•ฝํ•˜๊ธฐ ๋•Œ๋ฌธ์—
๊ฐ„๋‹จํ•˜๊ฒŒ ๊ฒฝ๋กœ๋ฅผ ํ‘œํ˜„ํ•˜๊ณ ์ž ์„ค์ •ํ•˜๋Š” ๊ฒƒ

  • ํด๋ผ์ด์–ธํŠธ์˜ request - naver,com/edit -> ์›น์„œ๋ฒ„+WAS๊ฐ€ ์„œ๋ฒ„ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ๊ธ€ ์ˆ˜์ •A3๋กœ ๊ฐ-> <web.xml>์ด ์š”์ฒญ(url)์— ๋Œ€ํ•ด๋งคํ•‘๋œ ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ WAS๊ฐ€ ์‹คํ–‰
  • naver,com/edit ๊ณผ ๊ธ€ ์ˆ˜์ •A3 ์ด ๋‘ ๊ฐœ์˜ ์ฝ”๋“œ๋ฅผ ์—ฐ๊ฒฐ ์‹œ์ผœ์ฃผ๋Š” ํ™˜๊ฒฝ์„ค์ •์„ ๋งคํ•‘์ด๋ผ ํ•จ
  • WEB-INF๋Š” ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์ง์ ‘ ์ ‘๊ทผ ํ•  ์ˆ˜ ์—†๊ธฐ ๋–„๋ฌธ์— ๋ฐ‘์˜ ๋งคํ•‘์ด๋ผ๋Š” ์ž‘์—…์„ ํ†ตํ•ด์„œ ์š”์ฒญ ์ฃผ์†Œ ์„ธํŒ…
  • WAS๋Š” ๋งคํ•‘ ๋˜์–ด์žˆ๋Š” ์ •๋ณด๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ด๋‹น ์„œ๋ธ”๋ฆฟ ์ฝ”๋“œ๋ฅผ ์ฐพ์•„์„œ ์‹คํ–‰

servlet ์›น ์ž…/์ถœ๋ ฅapi
- serviceํด๋ž˜์Šค: ๋ฉ”์ธ ๋ฉ”์†Œ๋“œ,์‹œ์ž‘ ๋ฉ”์†Œ๋“œ, ์ž๋™์œผ๋กœ ํ˜ธ์ถœ๋˜์–ด์ง€๋Š” ๋ฉ”์†Œ๋“œ (servlet ํด๋ž˜์Šค์˜ ๋ฉ”์ธ์— ํ•ด๋‹น)
 
 
 
Servlet ์ž‘์„ฑ ๋ฐ ์ˆ˜์ • -> ํด๋ž˜์Šค ํŒŒ์ผ๋กœ ์ปดํŒŒ์ผ -> ํด๋ž˜์Šค ํŒŒ์ผ์„ ์‹คํ–‰ ์œ„์น˜๋กœ ์ด๋™(classes) -> ์›น์„œ๋ฒ„ ์žฌ์‹œ์ž‘ -> ๋ธŒ๋ผ์šฐ์ €๋กœ requestํ•˜์—ฌ ํ™•์ธ