참고블로그1: https://jojoldu.tistory.com/28 참고블로그2: https://blog.naver.com/eun033/140206797670 참고블로그3:https://m.blog.naver.com/PostView.nhn?blogId=acornedu&logNo=221128616501&proxyReferer=https%3A%2F%2Fwww.google.com%2F 참고블로그4:https://m.blog.naver.com/jhc9639/220967034588

스프링?프레임워크?


-스프링은 자바를 통한 웹어플리케이션 구현을 편하게 도와주는 프레임워크

-프레임워크란 말 그대로 뼈대. 개발을 편리하게 하기 위해 개발자들이 미리 만들어 놓은 뼈대이며, 우리들은 그걸 편하게 갖다 쓰면 된다.

-즉, 스프링 프레임워크란 자바를 통한 웹 어플리케이션을 쉽게 구현할 수 있도록 개발한 것

-만약 프레임워크 없이 개발을 한다면 모두 제각각의 스타일대로 개발을 하고, 충돌나는 부분이 있으면 갈등 요소도 많이 생길 것. 프레임워크라는 틀이 있다면 그런 충돌을 최소화할 수 있고 프레임워크 규칙에 맞춰서 협업할 수 있을 것이다.

-스프링은 웹 프레임워크가 아니라, 자바기반 프레임워크이며 여러 모듈로 구성되어 있다. 웹어플리케이션을 만들기 위해 등장한 모듈이 SpringMVC이다.

-라이브러리 vs 프레임워크


-‘라이브러리 + 클래스 = 프레임워크’라고 보면 된다!

-스프링 관련 개념, 용어 정리


1. WAS(Web Application Server)

  • 애플리케이션과 서버 환경을 만들어 동작시키는 기능을 제공하는 소프트웨어 프레임워크(위키피디아 참고).

-Web서버와 WAS서버의 차이점?

  • Web서버 : 브라우저 클라이언트로부터 HTTP 요청을 받아 HTML등의 웹문서에 반응하는 프로그램. HTTP 프로토콜 기반으로 하여 브라우저 요청을 서비스 하는 기능 담당 ->HTML문서같은 정적 컨텐츠를 처리하는 서버

  • WAS서버 : 동적 서버 콘텐츠를 수행(WEB서버와 구별) ->JSP 등을 읽고 처리하여 동적 컨첸츠를 처리하는 서버

  • WAS서버에는 최근 WEB서버가 포함되어 있음(아파치 톰캣)

  • JSP와 서블릿을 실행시킬 수 있는 소프트웨어 -> 웹컨테이너

  • WAS = WEB서버 + WEB컨테이너라고 이해(틀렸을지도?)

  • WEB서버(예:Apache)에서는 정적처리를 하고, WAS서버(예:Tomcat)에서는 동적처리를 함. 왜? 분산처리를 하여 서버 부담을 줄이기 위해서이다.

  • Apache Tomcat은 Apache + Tomcat의 합작

(사진출처:https://minjookwon.files.wordpress.com/2015/05/web-browser.gif?w=640)

2. Servlet

  • 서버에서 웹페이지 등을 동적으로 생성하거나 데이터 처리를 수행하기 위해 자바로 작성된 프로그램. 자바로 작성된 프로그램의 일종.

  • 서블릿은 자바코드안에 HTML을 포함(JSP는 HTML문서 안에 JAVA코드 포함)

  • 비슷한 기술은 PHP,ASP

  • 과거에는 서블릿만으로 웹페이지를 만들었음(현재에는 JSP기술과 같이 사용)

3. JSP(Java Server Page)

  • HTML만으로 웹서버와 관련된 여러 처리가 힘들어 JSP 기술 도입
  • 서블릿 단점을 보완하기 위해 만들어진 서블릿 기반 스크립트 기술

  • JSP 기술은 프리젠테이션 층, 즉 뷰 담당
  • Servlet 기술은 사용자 요청을 받아 분석하고 비지니스 층과 통신하여 데이터를 주고 받아 프리젠테이션 층으로 응답하는(넘기는) 컨트롤러 층 담당

4. MVC Pattern

  • 디자인패턴 중 하나
  • Model, View, Controller의 약자
  • 하나의 프로그램,프로젝트에서 각각의 역할에 맞게 분담한 것
  • MVC의 큰 흐름은 클라이언트의 요청이 컨트롤러로 넘어가고, 컨트롤러는 모델을 통해 데이터를 받아오며, 그 정보를 바탕으로 를 제어하여 클라이언트 측에 보여줌

5. DI(Dependency Injection)

  • 의존성 주입으로 번역

  • 프로그래밍에서 구성요소 간의 의존 관계가 소스코드 내부가 아닌, 외부의 설정파일(스프링 컨테이너)을 통해 정의되게 하는 ‘디자인패턴’중 하나(위키백과 참고)

  • 기존방식대로 객체(빈)를 new연산자를 통해 생성하는 것이 아니라, 스프링컨테이너라는 친구에게 대신 생성해주고 라이프사이클도 관리해달라고하며 맡긴 후, 나중에 필요할 때 @Autowired 등으로 불러와서 사용하는 것

  • 인스턴스 생성 및 관리를 내가 아니라, 컨테이너로 바뀌기 때문에 ‘제어의 역전(IoC)’이라는 것이 발생

  • 이를 통해 객체간의 결합도가 낮아지기 때문에, 한 객체가 변한다고 다른 객체가 변할 위험성 등이 낮아짐 + 재사용성도 증가

-추후 계속 작성 예정-