개발자의 길/글로 적는 웹개발
-
6-2) 글로 적는 웹개발 - 스프링(Spring)2019.09.28
6-3) 글로 적는 웹개발 공부 - 스프링(Spring)
2019. 9. 28. 19:51
■ 스프링(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가지만 사용한다.)
- Jsp View : HTML 로 응답한다. *InternalResourceView
- Redirect View : 다른 주소로 이동하라고 응답한다.
- 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 설정을 해줘야한다.
'개발자의 길 > 글로 적는 웹개발' 카테고리의 다른 글
6-2) 글로 적는 웹개발 - 스프링(Spring) (0) | 2019.09.28 |
---|---|
6) 글로 적는 웹개발 - 스프링(Spring) (0) | 2019.09.23 |
5-3) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.22 |
5-2) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.18 |
5) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.17 |
6-2) 글로 적는 웹개발 - 스프링(Spring)
2019. 9. 28. 15:37
■ 스프링
- * 스프링은 애플리케이션 프레임워크라는 특징을 가진다. 애플리케이션 프레임워크는 특정 계층이나, 기술, 업무 분야에 국한되지 않고 애플리케이션의 전 영역을 포괄하는 범용적인 프레임워크를 말한다.
- 스프링은 빈팩토리(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 패턴을 웹에 적용하는 방식이다.
- MVC란 Model 과 View 와 Controll 로 기능을 나눠 개발하는 방식이다.
- 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 |
- DispatcherServlet 란 한마디로 웹에서의 모든 요청을 받아서 결과로 되돌려준다. 이런 DispatcherServlet 이 바로 Front Controller Pattern 기반으로 Front Controller 란 모든 리소스의 요청을 처리하는 하나의 대표 컨트롤러를 두는 패턴을 말한다. |
- 모델2(Model2) 로 개발하기 위해서는 설정 파일이 2개이다.
- applicationContext.xml : 스프링의 설정
- 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 방식)
- lib 폴더에 .jar 파일을 전부 복사한다.
- applicationContext.xml 을 WEB-INF 폴더에 생성한다.
- web.xml에 applicationContext.xml을 읽어들이는 ContextLoaderListener 를 설정한다.
- web.xml에 dispatcherServlet 을 servlet 으로 설정 / 맵핑도 설정한다.
- web.xml 의 servlet-name 으로 WEB-INF 폴더에 'xxx-servlet.xml' 파일을 생성한다.
- post 방식의 한글처리를 위해 필더를 web.xml 에 설정한다.
- META-INF 폴더에 context.xml 을 복사 *커넥션풀 설정한다.
- controller, dao, service, mapper, vo 패키지 만들기
만약 Members 테이블을 이용해서 멤버정보를 출력하고 싶다면 |
- vo 패키지에 Member 클래스를 생성한다.
- dao 패키지에 MembersDAO 인터페이스와 그를 구현하는 MembersDAOImpl 클래스를 총 2개 생성한다.
- mapper 패키지에 members.xml 만든다.
- service 패키지에 MembersService 인터페이스와 MembersServiceImpl 클래스를 총 2개 생성한다.
- WEB-INF 폴더에 mybatis-config.xml 파일을 복사한 후 mapper 와 typeAlias 를 설정한다.
- applicationContext.xml 에 커넥션풀 설정 *JNDI로 (Java Naming and Directory Interface)
- applicationContext.xml 에 sqlSessionFactory 설정한다.
- applicationContext.xml 에 sqlSession 설정한다.
- applicationContext.xml 에 DAO 설정한다. *sqlSession 의존성 주입
- applicationContext.xml 에 service 설정한다. *dao 의존성 주입
만약 'http://localhost/member.jbp' 에서 모든 멤버정보를 모두 출력한다면 |
- controller 패키지에 MemberController 클래스 생성한다.
- Controller 에 Controller 어노테이션 설정한다. *@Controller
- memberList() 라는 이름의 메서드를 생성한다. *@RequestMapping 주소 설정
- Controller 를 'xxx-servlet.xml' 에 bean 으로 등록한다.
- '/WEB-INF/view'와 '.jsp' 설정을 편하게 하기 위해 view-resolvers 설정
- Controller 는 Service 에 의존적이다.
- Controller 에 멤버필드로 service 인터페이스를 선언한다.
- 의존성 주입을 위해 setter 선언
- bean 에 'p-xxxx-ref' 로 service 의존성 주입 *빈 와이어링(Bean Wiring) = 빈 묶기
- SELECT 구문을 maper 파일에 설정한다.
- DAO 에 추상메서드를 선언한다.
- DAO 구현 클래스에서 구현메서드를 만든다.
- Service 에 추상메서드를 선언한다.
- Service 구현 클래스에서 구현메서드를 만든다.
- Controller 에서 Model 이 필요하기 때문에 Model 을 인자로 받는다. *jsp 출력을 하기 위해 사용
- Controller 에서 Serivce 의 method 를 호출하여 List 객체를 얻고 그 list 객체를 Model 에 attribute 로 세팅한다.
- WEB-INF 폴더에 view 폴더를 생성후 jsp 파일을 생성한다.
- jsp 에서 JSTL 과 EL 을 이용해서 출력한다.
POJO |
POJO(Plain Old Java Object)로 구현하지 않거나 상속 받지 않는 것을 말한다. |
'개발자의 길 > 글로 적는 웹개발' 카테고리의 다른 글
6-3) 글로 적는 웹개발 공부 - 스프링(Spring) (1) | 2019.09.28 |
---|---|
6) 글로 적는 웹개발 - 스프링(Spring) (0) | 2019.09.23 |
5-3) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.22 |
5-2) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.18 |
5) 글로 적는 웹개발 공부 - 복습 (0) | 2019.09.17 |