목차 돌아가기

웹 프로그래밍의 구조에서 Service와 DAO 객체의 구현에 대해서 학습합니다.

 

17-1 웹 어플리케이션 준비
특히 Service, DAO(Data Access Object) 쪽을 추가적으로 다룰 예정이다.
17-2 한글처리

web.xml에 한글처리 관련 코드를 추가해준다.

<!-- 한글처리 -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>
			org.springframework.web.filter.CharacterEncodingFilter     
		</filter-class>
		<init-param>
			<param-name>encoding</param-name>   
			<param-value>UTF-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>  
			<param-value>true</param-value>
		</init-param>
	</filter>    

	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>/*</url-pattern>  <!-- 모든 것 -->                
	</filter-mapping>

 

17-3 서비스 객체 구현
방법 설명
Service 객체 생성
MemberService service = new MemberService();
- 과거 순수 자바 이용 방법


Service 객체 생성
@Autowired
MemberService service;
- @Autowired 빈 객체 주입 

가장 실무에서 많이 쓰이는 방법

1. Service 객체 명시한다.
- @Service를 맨위에 붙힌다. (기타 : @Component, @Repository 셋 다 가능. ) 
2. MemberService service
17-4 DAO 객체 구현
방법 설명
 

1. 맨위에 @Component, @Repository를 명시한다.
- 쓰고 싶을 때 @Autowired를 붙여서 사용하면 된다.
1. Contoller를 통해 파라미터를 받아온다.
2. Service를 통해서 해당 파라미터에 특정한 기능(System.out.print() 등등)과 같은 기능을 처리 한후 DAO로 전달한다.
3. DAO에서는 DB에 (수정, 삭제, 추가)를 직접 담당한다.

'Spring > [인프런] Spring FrameWork' 카테고리의 다른 글

세션, 쿠키  (0) 2022.01.03
Controller 객체 구현  (0) 2021.12.31
스프링 MVC 웹서비스  (0) 2021.12.29
웹 프로그래밍 설계 모델(MVC)  (0) 2021.12.28
어노테이션을 이용한 스프링 설정 -1  (0) 2021.12.27

목차 돌아기기

스프링 MVC 프레임워크를 이용한 웹 프로그래밍 구현방법을 학습

14-1 웹 서버(Tomcat) 다운로드

완료

14-2 웹 서버(Tomcat) 와 이클립스 연동

완료

14-3 이클립스에 STS(Spring Tool Suit)설치
STS를 활용하여 기존의 설정해야만 했던 web.xml등과 같은 설정을 자동으로 해주며 개발자의 수고를 덜어준다.
intelliJ에서 STS 설정하기 설명
1.maven 프로젝트 설정
2. Spring MVC 설정
3. web.xml 변경
4. Artifact-Spring 라이브러리 추가(오른쪽 스프링 라이브러리 두개 더블클릭)
5. pom.xml 라이브러리 dependency추가 (maven 자동 import 설정)
참고 https://developyun.tistory.com/12
14-4 STS를 이용한 웹프로젝트 생성
14-5 스프링 MVC 프레임워크를 이용한 웹프로젝트 분석

직접 login 메소드 실행하기
Controller 생성
@Controller
public class Login {
    @RequestMapping(value="/login", method = RequestMethod.GET)
        public String login(Model model){
            model.addAttribute("loginKey", "loginValue");
            return "login"; //login.jsp
        }
}
login.jsp 생성
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
	<title>Login</title>
</head>
<body>
<h1>
	Hello world!  
</h1>

<P>  loginKey is ${loginValue}. </P>
</body>
</html>
실행화면

 

목차 돌아가기

스프링 MVC 프레임워크 기반의 웹 프로그래밍 구조에 대해서 학습

13-1 웹 프로그래밍 구축하기 위한 설계모델

  • 모델1 방식 (절차형 방식)
  • 모델2 방식 (MVC 방식)

모델1 방식 (기존방식 : 절차형 방식)

기본적인 설계 모델 흐름
1. 클라이언트(브라우저)가 서버(WAS)에게 Request를 한다.
2.WAS에서 데이터베이스에게 Request를한다.(Service & DAO)
3. WAS는 UI작업을 해서 클라이언트에게 Response를 http로 준다.
단점 WAS쪽에 때려박다보니 유지보수 측면에서 너무 빡세다.

모델2 방식(MVC 방식) Spring도 그렇고 거의 대부분 이거다.

기본적인 설계 모델 흐름
위와 차이점
1. WAS들어 올때 Controller, Service, DAO를 거친다.
2. Service 모듈화 (기능)
3. DAO->모델->데이터베이스
4. Controller에게 줄때 JSP(view)를 거쳐서 Response해준다.
장점 유지보수 측면에서 좋다.

13-2 스프링 MVC프레임워크 설계구조

가장 중요한 부분이며 암기!!!

설계구조 흐름도
1, DispatcherServlet 이라는 객체가 요청을 클라이언트(브라우저)로 부터 받는다.
2. HandlerMapping에게 던진다.
(HandlerMapping이란 녀석은 여러 수많은 컨트롤러에서 가장 적합한 컨트롤러를 매핑해준다)
3. HandlerAdapter 각 컨트롤러의 가장 적합한 메서드를 찾아내고 model를 받아온다.
중략... (Service->DB)
4. ViewResolver (뷰)한테 Model 보낸다. 가장 적합한 JSP를 선택한다.
5. View 응답생성(JSP)

  1. 클라이언트가 요청한 URL을 DispatcherServlet이 가로챈다. (web.xml에 DispatcherServlet 등록)
  2. 가로챈 정보를 HandlerMapping에게 보내 요청을 처리할 수 있는 Controller를 찾아낸다. 디폴트 전략 : BeanNameUrlHandlerMapping, DefaultAnnotationHandlerMapping
  3. 요청을 찾은 컨트롤러에게 보낸다. (컨트롤러 → 개발자 구현 영역)
  4. 컨트롤러에서 해당 요청 처리 후 요청을 응답받을 View의 이름을 리턴. 이 이름을 ViewResolver가 먼저 받아 해당하는 View가 있는지 검색
  5. 해당 View가 존재한다면 처리결과를 View에 보낸 후 결과를 다시 DispatcherServlet에게 전달. DispatcherServlet은 최종 결과를 클라이언트에게 전송
 
13-3 DispacherServlet 설정
DispatcherServlet 설정 설명
*web.xml이 생소하다면 JSP, Servlet등의 레퍼런스를 검색해본다.
1. web 어플리케이션의 가장 첫 관문이자. 사거리의 신호등과도 같다.
2. servlet에 DispatcherServlet을 설정해준다.
3. org.springframework.web.servelt.dispacherServlet설정
4. init-param에 스프링 설정파일도 설정해준다.
(web.xml이라는 기존 설정에 Dispatcher를 삽입하는 과정) 
좌측 그림은 초기화 파라미터에서 스프링 설정 파일을 했냐 안했냐의 따라서 어떻게 컨테이너가 설정되는가에 대한 그림이다.

1. 스프링 설정파일(초기화 파리미터) 경우(일반적인 방법)
- 초기화 파라미터에서 지정한 파일(servlet-context.xml)을 이용하여 스프링 컨테이너를 생성
2. 초기화 하지 않은 경우
- appServlet-context.xml을 이용한 스프링 컨테이너를 자동으로 생성 
13-4 Controller 객체 - @Controller
흐름 설명
1. Controlle는 개발자가 만드는 것
위는 선언
아래는 컨테이너 정의 하는 것
13-5 Controller 객체 - @RequestMapping
흐름 설명
1. Controller에서 적당한 메서드를 HandlerAdapter가 찾는과정
2. Controller에 메서드에 RequestMapping("/method")를 붙여준다. (요청 : localhost8090/ch08/success)
13-6 Controller 객체 - Model 타입의 파라미터
흐름 설명
1. 모델과 뷰를 컨트롤러가 보내준다. 

1. 개발자는 Model 객체 데이터를 담아서 DispatcherServlet에 전달 가능하다.
2. DispacherServlet에 전달된 Model 데이터는 View에서 가공되어 클라에게 응답처리한다.
13-7 View 객체
흐름 설명

 
- InternalResourceViewResolver가 view파일을 보낸다.
JSP파일명 설정(bean)
return : "success"
1. prefix /WEB-INF/views
2. suffix .jsp
3. JSP파일명 : /WEB-INF/views/success.jsp

13-8 전체적인 웹프로그래밍 구조

전체적인 흐름

4,5번 과정에서 Service, DAO, DB를 거치고 View, Model을 가져온다.

 

'Spring > [인프런] Spring FrameWork' 카테고리의 다른 글

Service & Dao 객체 구현  (0) 2021.12.30
스프링 MVC 웹서비스  (0) 2021.12.29
어노테이션을 이용한 스프링 설정 -1  (0) 2021.12.27
생명주기(Life Cycle)  (0) 2021.12.24
의존객체 선택  (0) 2021.12.24

XML을 이용한 스프링 설정파일 제작을 Java 파일로 제작할 수 있는 방법에 대해서 학습

12-1-1 XML 파일을 Java 파일로 변경하기
기존방법 java 파일로 변경(어노테이션이용)

java config로 쓰는 방법
Annotation활용한다.

1) @Configuration
2) @bean

설정하기
AnnotationConfigApplicationContext ctx = 
				new AnnotationConfigApplicationContext(MemberConfig.class);
xml->java
  xml java
config


new

Java 파일 분리
여러 java로 config를 분리하여 유지보수를 쉽게 한다.
*일반적으로 기능에 따라서 분리한다. (Dao, Service, DB, Utills)
xml java
한개의 Config파일 다수의 Config파일
@Import 어노테이션
각각의 java config를 파일을 하나의 main에서 import 한다. 배열로 넣지않고 각각을 설정해주는 방식

config에서 import 해준다.
설정해준다.

 

'Spring > [인프런] Spring FrameWork' 카테고리의 다른 글

스프링 MVC 웹서비스  (0) 2021.12.29
웹 프로그래밍 설계 모델(MVC)  (0) 2021.12.28
생명주기(Life Cycle)  (0) 2021.12.24
의존객체 선택  (0) 2021.12.24
의존객체 자동 주입  (0) 2021.12.23

스프링 컨테이너와 빈(Bean) 객체의 생명주기(Life Cycle)에 대해서 학습합니다. 

 

11-1 스프링 컨테이너 생명주기
스프링 컨테이너 생명주기 설명
생성 단계 : 스프링 컨테이너 생성, bean 의존성 주입 되어짐 따라서 스프링 컨테이너 생성과 bean객체 생성 시점은 동일하다.

getBean 단계 : 

소멸 : ctx.close(); 스프링 컨테이너, bean 객체의 메모리가 소멸된다. -> 자원을 해제 한다.

위와 같은 말
11-2 빈(Bean) 객체 생명주기
구현가능 설명
스프링 컨테이너는 2가지 (추상)인터페이스를 제공한다. (명시만 되어 있지 구현부는 없다)
1. InitializingBean
2. DisposalbleBean

그 이후 빈 객체에서 메서드 사용 가능
1. afterPropertiesSet
2. destory
11-3 init-method, destory-method 속성
설정 구현 설명
xml 설정에서 method를 만들어주고 service에서 구현하며 bean객체 생성 시점 소멸시점에 특정한 작업을 한다.
특정한 작업이 db연동 등이 있다.
xml이 아닌 implement를 해준다. 그리고 overide하여 해당 메서드에 특정한 작업을 수행한다.

 

다수의 빈(Bean)객체의존 객체의 대상이 되는 객체를 선택하는 방법에 대해서 학습한다.

  • 다수의 빈(Bean)이라서 모호한 것을 "어떤 것"을 @Autowired 할지를 명확하게 해주는 것을 의미한다.
10-1 의존객체 선택
Exception 상황 이유
동일한 객체가 2개 이상인 경우 스프링 컨테이너는 자동 주입 대상 객체를 판단하지 못해서 Exception을 발생시킨다.
해결방법
- @Qualifier : 우선자 어노테이션
10-2 의존객체 자동 주입 체크
의존객체가 없는 경우 Exception을 발생하지 않게 하는 방법
상황 solution
@Autowired(requried = false)
bean이 등록되어 있지 않아도 Exception을 발생시키지 않는다. 거의 이런 경우는 없을 것이다.
10-3 @Injection
Autowired 속성과 아예 똑같지만 requried를 제공하지 않는다. 왜 Autowired가 많이 쓰이는지 모르겠으나 아무튼 그렇다...

 

'Spring > [인프런] Spring FrameWork' 카테고리의 다른 글

어노테이션을 이용한 스프링 설정 -1  (0) 2021.12.27
생명주기(Life Cycle)  (0) 2021.12.24
의존객체 자동 주입  (0) 2021.12.23
스프링 설정 파일 분리  (0) 2021.12.23
스프링 강의노트  (0) 2021.10.22

의존객체를 자동으로 주입하는 방법에 대해서 학습합니다.

9-1 의존객체 자동 주입이란?
스프링 설정 파일에서 의존 객체를 주입할 때 <constructor-org> 또는 <property> 태그로 의존 대상 객체를 명시하지 않아도 스프링 컨테이너가 자동으로 필요한 의존 대상 객체를 찾아서 의존 대상 객체가 필요한 객체에 주입해 주는 기능이다. 구현 방법은 @Autowired와 @Resource 어노테이션을 이용해서 쉽게 구현할 수 있다.
스프링 컨테이너 방법
@Autowired
@Resource

 

9-2 @Autowired
주입하려는 객체의 타이비 일치하는 객체를 자동으로 주입한다.
@Autowired사용시 주의할 점
생성자에는 Autowired 주는 것은 상관없는데 프로퍼티 또는 메서드에 @Autowired를 줄 때에는 반드시 기본 생성자(디폴트 생성자)를 명시해주고 사용한다. 이유는 간단하다. 다음과 같이 WordDao를 필요로하는 메서드인데 해당 객체가 없으면 의존성 주입이 어렵다. 
9-3 @Resource
주입하려고 하는 객체의 이름이 일치하는 객체를 자동으로 주입한다.
  • @Autowired랑 비슷하다.
  • 생성자에 쓰지 못한다.
  • 프로퍼티, 메서드에 쓸 수있다.
  • 기본생성자 필수이다.

'Spring > [인프런] Spring FrameWork' 카테고리의 다른 글

어노테이션을 이용한 스프링 설정 -1  (0) 2021.12.27
생명주기(Life Cycle)  (0) 2021.12.24
의존객체 선택  (0) 2021.12.24
스프링 설정 파일 분리  (0) 2021.12.23
스프링 강의노트  (0) 2021.10.22

목차로 돌아가기

스프링 설정파일 효율적으로 관리하기 위해서 설정 파일을 분리하는 방법에 대해 학습한다.

 

8-1 스프링 설정 파일 분리

파일 분리

appilcationContext를 appCtx1,2,3.xml로 분리했다. 

8-2 빈(Bean)의 범위

싱글톤(Singleton)
스프링 컨테이너에서 생성된 빈 (Bean) 객체의 경우 동일한 타입에 대해서는 기본적으로 한 개만 생성이 되며, getBean() 메소드로 호출될 때 동일한 객체가 반환된다.
  Spring Java
생성
new ClassName();
new ClassName();
new ClassName();
차이점 Spring Container는 처음 생성될 때 객체를 미리 생성한다. 따라서 getBean을 호출1, 호출2에서 각각 호출할 때 같이 "A" 객체를 바라본다. 기존 자바 코드에서 new를 할 때, 각각은 다른 메모리를 사용하여 객체를 생성한다. 
프로토타입(ProtoType)
싱글톤 범위와 반대의 개념, 프로토타입의 경우 개발자는 별도로 설정을 해줘야 하는데 스프링 설정 파일에서 빈(Bean) 객체를 정의할 때 scope속성을 명시해 주면 된다. scope="prototype"을 해주면 Spring Container의 객체를 참조하는 것 아닌 새로운 메모리의 객체를 생성하게 끔 해준다. (위의 기존 java처럼, 흔치 않음)
설정 호출 output

 

'Spring > [인프런] Spring FrameWork' 카테고리의 다른 글

어노테이션을 이용한 스프링 설정 -1  (0) 2021.12.27
생명주기(Life Cycle)  (0) 2021.12.24
의존객체 선택  (0) 2021.12.24
의존객체 자동 주입  (0) 2021.12.23
스프링 강의노트  (0) 2021.10.22

+ Recent posts