All Posts

■ 스프링(Spring)
  • 빈(Bean) 은 웹서비스 관점에서 객체이다. 빈(Bean) 에서 프로퍼티(Property) 는 멤버필드이다.
  • 스프링 프레임워크빈 팩토리(Bean Factory) / 빈 컨테이너(Bean Container) : 우리가 설정한대로 객체들을 전부 생성해주고, 그 객체들간의 의존성을 주입시켜준다. *빈 와이어링(Bean Wiring) = 빈 묶기
  • 위에서 설명한 특징이 바로 DI(Depandency Injection)
  • 그 외에 관점지향프로그래밍 : AOP(Aspect Orientied Programming)을 지원한다.

 

■ 스프링 WEB MVC
  • MVC모델(Model) / 뷰(View) 컨트롤러(Controller) 로 이루어진다.
  • 모델(Model 은 뷰(View) 에서 출력한 데이터 : 내부적으로 Map 으로 구현되어 있다.
  • Map 은 키(Key) 와 값(Value) 을 가진다. HttpSession 등 '이름=값' 으로 구성된 형태들이 전부 Map 인터페이스의 구현체(구현클래스)이다.
  • 뷰(View) 는 서버(Server) 에서 클라이언트(Client)응답(Response) 하는 것이다.
  • 뷰(View) 는 대표적으로 3가지가있다. (수업이나 프로젝트에서 99.9% 이 3가지만 사용한다.)
  1. Jsp View : HTML 로 응답한다. *InternalResourceView
  2. Redirect View : 다른 주소로 이동하라고 응답한다.
  3. Json View : ajax 요청시 json 으로 응답한다. Mapping Jackson Json View
  • 컨트롤러(Controller) 는 Controll 타워의 역할을 담당한다. 유저의 요청을 받고, 그 요청에서 필요한 데이터를(파라미터나 헤더의 정보들)을 얻고, 비지니스 로직(Business Logic) 을 수행하는 서비스를 선택하여 메서드를 호출하여 뷰(View)에 필요한 데이터(Data) 를 얻어서 Model 에 attribute 로 add 한다. 또한 적절하게 뷰(View) 를 선택한다.
  • 컨트롤러(Controller) 에서 비지니스 로직(Business Login) 을 수행하는 것은 아니다. 단 파일 업로드 / 세션 처리등은 이 곳에서 담당한다.
  • jsp 뷰를 응답하려면 jsp 의 이름을 String 으로 리턴(return) 한다. *만약 주소와 jsp 의 이름이 같다면 리턴이 없어도 됨(void)
  • redirect 뷰를 응답하려면 redirect 에 주소를 더해서 String 으로 리턴한다.
  • json 뷰를 응답하려면 잭슨제이슨(Jackson Jason) 라이브러리 3개를 추가한다 / @Responsebody 로 응답해야한다.
  • 파일업로드를 처리하려면 라이브러리를 추가한다. / SpringFrameWork 에서 제공하는 MultipartFile 클래스와 MultipartHttpServletRequest 클래스를 사용해서 File 업로드 기능을 구현할 수 있다. * 중요한 점은 MultipartFile 의 이름과 <input type="file"> 요소의 이름이 반드시 같아야 한다.
  • 프런트 컨트롤러 (Front Controller) 는 개념이고 이 개념을 구현한게 바로 DispatcherServlet 이다.

 

■ RESTful (API or Web Service)
  • REST 의 개념 : 하나의 uri 는 하나의 고유한 리소스(Resource) : 자원을 대표할 수 있도록 설계해야 한다는 개념이다.
  • REST는 리소스(Resource) / 메서드(Method) / 메세지(Message) 로 분류한다.
  • 리소스(Resource) 는 uri(Uniform Resource Identifier) 
  • 메서드(Method) 는 폼요소의 method 로 get / post / put / delete 
  • "20번 영화의 이름을 '월E' 로 변경한다. 라는 비지니스 로직이 있다면, 리소스(Resource) 는 movie / 메서드(Method) 는 put / 메세지(Message) 는 movie/20
  • 45번 영화를 삭제하는 URI 및 메서드를 표헌하세요.
DELETE /movie/45
  • GET /user/2/follow 는 어떤 의미인지 설명해보세요.
2번 유저의 follow 리스트를 불러오는 의미이다.
  • 영화 목록 3페이지 / 정렬기준 : 새로운 순서로 URI 를 나타내보세요.
GET /movie/page/3
  • 현재 브라우저의 폼에서는 PUT / DELETE 가 적용되지 않는다. 그렇기 때문에 web.xml 에 filter 를 설정해야한다.
  • 영화를 수정하려고 합니다. 폼을 완성하세요.
<form action="/movie" method="post">
 <input type="hidden" name="_method" value="delete"/>
</form>

 

■ 인터셉터(Interceptor)
  • 인터셉터(Interceptor) 는 DispatcherSevlet 에서 우리가 만든 Controller 의 method 호출전에 작동된다.
  • HandlerInterceptor 를 구현하여 클래스를 생성하면 인터셉터(Interceptor) 가 된다.
  • preHandle() 메서드는 전처리 / postHandle() 메서드는 후처리
  • preHandle() 메서드의 리턴값이 true 면 Controller 의 method 호출이 된다.
  • xxx-servlet.xml 에 Interceptor 설정을 해줘야한다.

 


 

■ 스프링

 

  • * 스프링은 애플리케이션 프레임워크라는 특징을 가진다. 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다.
  • 스프링빈팩토리(BeanFactory), 빈(Bean)은 웹에서 객체이다.
  • 빈(Bean)에서 멤버필드를 property 라고도 한다.
  • 빈(Bean) 끼리 의존성을 주입하는 것을 빈 와이어링(Bean Wiring) 이라고 한다.
  • 스프링의 주요기능은 DI(Dependency Injection) : 의존성주입AOP(Aspect Oriented Programing) : 관점지향프로그래밍이라고 한다.
  • 스프링의 설정은 applicationContext.xml에서 설정한다.
  • mybatis와의 연동은 VO, DAO, mapper, Service
  • Service 객체비즈니스로직(Businesslogic)을 담당하고, 트랜젝션(transaction)의 처리 때문에 : 나중에 AOP 설정으로 한다. * 이부분 자세히 찾아보자.
  • 웹개발 방식중 모델(Model) 방식은 MVC 패턴을 웹에 적용하는 방식이다.
  • MVCModelViewControll 로 기능을 나눠 개발하는 방식이다.
  • M모델(Model) 은 데이터 그 자체를 의미한다. View: 정확히는 jsp view 에서 출력할 데이터가 있으면 Controller 에서 그 데이터를 Model 에 attribute 로 등록한다
  • V뷰(View)는 클라이언트에 응답하는 것이다. 대표적으로 JSP View 리다이렉트뷰(Redirect View) / JsonView
  • JSP View = InternalResourceViewResolver
  • Spring MVC 에서 View 는 사용자에게 결과를 렌더링하여 보여주는 Bean 이다.

 

InternalResourceViewResolver

- DispatcherServlet 은 기본적으로 뷰 리졸버(View Resolver) 인 InternalResourceViewResolver 를 사용한다.

- 기본 뷰 리졸버(View Resolver) 는 JSP View 로 사용할 때 쓰인다.

- DispatcherServlet 에게 아무런 뷰 리졸버를 등록하지 않으면, 기본적으로 동작하는 뷰가 뷰 리졸버(View Resolver)이다.

 

 

  • C컨트롤(Controll)은 유저의 요청(url 주소)을 받고, 비지니스 로직(Businesslogic) 을 수행하며 (Service 의 Method 를 호출) View 를 선택하고 Model 을 넘긴다. 여기 한 번더 보기. 머리아파서 나중에 
  • 스프링(Spring)은 프런트 컨트롤러(Front Controller) 패턴을 이용 : 모든 요청을 한 곳에서 처리한다. 
  • 프런트 컨트롤러(Front Controller) 서블릿의 이름은 DispatcherServlet 이다.

 

DispatcherServlet

출처:https://www.slideshare.net/AnselmKim/3-mvc-77568773

- DispatcherServlet 란 한마디로 웹에서의 모든 요청을 받아서 결과로 되돌려준다.  

  이런 DispatcherServlet 이 바로 Front Controller Pattern 기반으로 Front Controller 란 모든 리소스의 요청을 처리하는 하나의 대표 컨트롤러를 두는 패턴을 말한다.

 

  • 모델2(Model2) 로 개발하기 위해서는 설정 파일이 2개이다.
  1. applicationContext.xml : 스프링의 설정
  2. xxxx-servlet.xml : Spring WEB MVC 설정
  • EL(Expression Language)은 attribute 를 출력하기 위한 표현언어이다.
  • EL(Expression Language)은 ${} 로 사용한다.
  • JSTL(Jsp Strandard Tag Library)은 jsp(View) 에서 '<% %>' 을 사용하지 않기 위해 사용하는 태그 라이브러리다.
  • JSTL을 사용하기 위해서는 lib 폴더에 library 를 복사해야 한다.
  • JSTL은 여러가지 중 Core 에서 for문, if문을 태그로 사용 가능하다.

 

EL(Expression Language) JSTL(Jsp Strandard Tag Library)

- 해석 그대로 표현 언어를 인해

- 속성 값들을 편리하게 출력하기 위해 제공된 언어이다

- <%= zxc %> 를 ${zxc} 로 간단하게 사용할 수 있다. 

- 표준 액션 태그이다.

- if문 / for문 / DB 를 편하게 처리할 수 있다.

 

■ Spring WEB MVC + mybatis 로 웹 개발하기(MODEL2 방식)

 

  1. lib 폴더에 .jar 파일을 전부 복사한다.
  2. applicationContext.xml 을 WEB-INF 폴더에 생성한다.
  3. web.xml에 applicationContext.xml을 읽어들이는 ContextLoaderListener 를 설정한다.
  4. web.xml에 dispatcherServlet 을 servlet 으로 설정 / 맵핑도 설정한다.
  5. web.xml 의 servlet-name 으로 WEB-INF 폴더에 'xxx-servlet.xml' 파일을 생성한다.
  6. post 방식의 한글처리를 위해 필더를 web.xml 에 설정한다.
  7. META-INF 폴더에 context.xml 을 복사 *커넥션풀 설정한다.
  8. controller, dao, service, mapper, vo 패키지 만들기 

만약 Members 테이블을 이용해서 멤버정보를 출력하고 싶다면
  1. vo 패키지에 Member 클래스를 생성한다.
  2. dao 패키지에 MembersDAO 인터페이스와 그를 구현하는 MembersDAOImpl 클래스를 총 2개 생성한다.
  3. mapper 패키지에 members.xml 만든다.
  4. service 패키지에 MembersService 인터페이스와 MembersServiceImpl 클래스를 총 2개 생성한다.
  5. WEB-INF 폴더에 mybatis-config.xml 파일을 복사한 후 mapper 와 typeAlias 를 설정한다.
  6. applicationContext.xml 에 커넥션풀 설정 *JNDI로 (Java Naming  and Directory Interface) 
  7. applicationContext.xml 에 sqlSessionFactory 설정한다.
  8. applicationContext.xml 에 sqlSession 설정한다.
  9. applicationContext.xml 에 DAO 설정한다. *sqlSession 의존성 주입
  10. applicationContext.xml 에 service 설정한다. *dao 의존성 주입
만약 'http://localhost/member.jbp' 에서 모든 멤버정보를 모두 출력한다면

 

  1. controller 패키지에 MemberController 클래스 생성한다.
  2. Controller 에 Controller 어노테이션 설정한다. *@Controller
  3. memberList() 라는 이름의 메서드를 생성한다. *@RequestMapping 주소 설정
  4. Controller 를 'xxx-servlet.xml' 에 bean 으로 등록한다.
  5. '/WEB-INF/view'와 '.jsp' 설정을 편하게 하기 위해 view-resolvers 설정
  6. Controller 는 Service 에 의존적이다.
  7. Controller 에 멤버필드로 service 인터페이스를 선언한다.
  8. 의존성 주입을 위해 setter 선언
  9. bean 에 'p-xxxx-ref' 로 service 의존성 주입 *빈 와이어링(Bean Wiring) = 빈 묶기
  10. SELECT 구문을 maper 파일에 설정한다.
  11. DAO 에 추상메서드를 선언한다.
  12. DAO 구현 클래스에서 구현메서드를 만든다.
  13. Service 에 추상메서드를 선언한다.
  14. Service 구현 클래스에서 구현메서드를 만든다.
  15. Controller 에서 Model 이 필요하기 때문에 Model 을 인자로 받는다. *jsp 출력을 하기 위해 사용
  16. Controller 에서 Serivce 의 method 를 호출하여 List 객체를 얻고 그 list 객체를 Model 에 attribute 로 세팅한다.
  17. WEB-INF 폴더에 view 폴더를 생성후 jsp 파일을 생성한다.
  18. jsp 에서 JSTL 과 EL 을 이용해서 출력한다.

POJO
POJO(Plain Old Java Object)로 구현하지 않거나 상속 받지 않는 것을 말한다.

 

최근 글