목차 돌아기기

스프링 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
더보기
  세션 수강여부 기한
1강 스프링 개요 O -
2강 개발 환경 구축 O -
3강 스프링 프로젝트 생성 O -
4강 처음해 보는 스프링 프로젝트 O -
5강 또 다른 프로젝트 생성 방법 O -
6강 DI(Dependency injection) O -
7강 다양한 의존 객체 주입 O -
8강 스프링 설정 파일 분리 O 12/23
9강 의존 객체 자동 주입 O 12/23
10강 의존객체 선택 O 12/24
11강 생명주기 Life Cycle O 12/24
12강 어노테이션을 이용한 스프링 설정 -1 O 12/27
13강 어노테이션을 이용한 스프링 설정 -2 O 12/27
14강 ***웹 프로그래밍 설계 모델*** O 12/28
15강 스프링 MVC 웹서비스 O 12/28
16강 STS를 이용하지 않은 웹 프로젝트 O 12/29
17강 Service & Dao 객체 구현 O 12/29
18강 Controller 객체 구현 O 12/30
19강 Controller 객체 구현 O 12/30
20강 세션, 쿠키 O 12/31
21강 리다이렉트, 인터셉트 O 12/31
22강 Database O 1/2
23강 JDBC O 1/2
24강 JdbcTemplate O 1/3
25강 커넥션풀   1/3

1-1 스프링 프레임워크

스프링 프레임워크의 주요기능은 DI, AOP, MVC, JDBC 등을 제공한다.

1-2 스프링 프레임워크 모듈

스프링 모듈 기능
spring-core 스프링의 핵심인 DI(Depnedency Injection)와 IoC(Inversion of Control)를 제공한다.
spring-aop AOP구현 기능 제공
spring-jdbc 데이터베이스를 쉽게(적은 양의 코드)다룰 수 있는 기능 제공
spring-tx 스프링에서 제공하는 트랜잭션 관련 기능 제공
spring-webmvc 스프링에서 제공하는 컨트롤러(Controller)와 뷰(view)를 이용한 스프링MVC 구현 기능 제공

스프링 프레임워크에서 제공하는 모듈을 사용하려면, 모듈에 대한 의존설정을 개발 프로젝트에 XML 파일등을 이용해 개발자가 직접 하면된다. 

 

1-3 스프링 컨테이너(IoC)

스프링에서 객체를 생성하고 조립하는 컨테이너(container)로, 컨테이너를 통해 생선된 객체를 빈(Bean)이라고 부른다.

1) 객체생성 및 속성 데이터 작성

2) 스프링 컨테이너에서 객체 생성 및 조립

3) 애플리케이션 구현

필요할 때마다 스프링컨테이너에서 기능을 빼서 쓰는 개념이다.sprin 


(2강 개발환경설정)

3-1 프로젝트 생성

groupId와 artifactId

groupId 큰 프로젝트 단위 지하철(1~9호선)
artifactId 세부 프로젝트 단위 1호선, 2호선, 3호선...

3-2 pom.xml 작성

pom.xml

필요한 모듈을 가져오는 기능

3-3 폴더 및 pom.xml 파일의 이해(기본 폴더 디렉토리)

  • src/main
    • src/main/java
      • 특별한 것은 없고, 앞으로 만들어지는 자바 파일들이 관리되는 곳이다. 
    • src/main/resource
      • 자원을 관리하는 폴더로 스프링 설정파일(XML) 또는 프로퍼티 파일 등이 관리된다.
  • src/test

4-1 처음해보는 스프링 프로젝트

java 객체생성 및 Bean 생성

기존 java 객체 생성

//기존 자바 객체생성 (main)
TranspotationWalk transpotationWalk = new TranspotationWalk();
transpotationWalk.move();

//TranspotationWalk
public void move(){
        System.out.println("도로로 이동 합니다.");
    }

Spring Bean이용 IoC생성

//XML Bean 추가
<bean id="tWalk" class ="testPjt.TranspotationWalk"/>

//main
GenericXmlApplicationContext ctx = new GenericXmlApplicationContext("classpath:applicationContext.xml");
TranspotationWalk transpotationWalk = ctx.getBean("tWalk",TranspotationWalk.class);
transpotationWalk.move();

ctx.close();

6-1 DI(Dependency Injection) 의존성 주입

배터리 일체형 : 의존성 없음 / 배터리가 떨어지면 새로 구입해야한다.(비효율)

public class ElectronicCarToy{
	private Battery battery;
    public ElectoincCarToy(){
    	battery=new NormalBattery();//객체 생성될때 new해준다.
    }
}

배터리 분리형1 : 초기에는 배터리X, 사용자가 넣어줘야함(의존성 주입)

public class ElectronicCarToy{
	private Battery battery;
    public ElectoincCarToy(){
    	
    }
    //setter
    public void setBattery(Battery battery){
    	this.battery = battert;
    }
}

배터리 분리형2 : 초기에 배터리O, 사용자가 배터리 교체(의존성 주입)

public class ElectronicCarToy{
	private Battery battery;
    //생성자
    public ElectoincCarToy(){
    	this.batter=battery;
    }
    //setter
    public void setBattery(Battery battery){
    	this.battery = battert;
    }
}

같은 DB 사용하기(DAO 의존성 주입)

public StudentAssbler(){
	studentDAO = new StudentDAO(); //DAO 생성=DB
    registerService = new registerService(studentDAO);
    modifyService = new ModifyService(studentDAO);
    deleteService = new DeleteService(studentDAO);
    selectService = new SelectService(studentDAO);
    allSelectService = new AllSelectService(studentDAO);
 }

studentDAO를 각각의 객체에 주입함으로써 같은 DB를 공유한다. 만약 각각의 객체에서 studentDAO를 생성했다면 각각 다른 DB를 사용하는 것이다.

상기 코드를 Spring ApplicationContext화 하겠다. IoC(제어의 역전) 사용하기

//applcationContext.xml

//studentDao Bean 생성
<bean id ="studentDao" class="ems.member.dao.StudentDao"> </bean>

//의존성 주입
<bean id ="registerService" class="ems.member.service.StudentRegisterService">
	<constructor-arg ref="studentDao"> </constructor-arg>
</bean>
.
.
.

7강 다양한 의존 객체 주입

스프링의 의존 객체를 주입하는 다양한 방법

  java spring 비고
7-1 생성자를 이용한 의존 객체 주입
1) 네이밍이 중요하다 첫 글자는 무조건 소문자이다.
7-2 setter를 이용한 의존 객체 주입
1) 첫 글자는 소문자
2) setter의 set을 제외시킨다.
3) 보통 db연동에서 많이 쓰인다.(초기화)
7-3 List타입 의존 객체 주입
객체를 리스트로 받는 경우도 있다. 그런 경우 사용한다.
7-4 Map타입 객체 주입
객체를 map(key,value)형식으로 받는 경우도 있다. 그런 경우 사용한다.

 


 

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

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

+ Recent posts