NOW OR NEVER

[Spring] 스프링 MVC 기초 본문

Back-End/JAVA

[Spring] 스프링 MVC 기초

LAURA 2022. 5. 27. 09:02
반응형

Spring

  • 어플리케이션을 개발하기 위한 프레임 워크 종류 중 하나
  • 프레임워크: 프로그램을 만들기 위한 기본 틀 혹은 구조(뼈대) 즉 어플리케이션을 만들기 위한 클래스의 모음집을 칭한다.
    • 필요한 이유: 개발하는 과정에서 빈번한 수정에 대한 요구에 유연하게 대처하기 위한 것
  • 과거에는 struts 기반, 지금은 spring 기반
  • 전자정부표준프레임워크 안에 spring과 mybatis 기반으로 되어 있음

주요 특징

Dependency Injection(DI)

  • 의존성 주입
  • 클래스와 클래스 간의 의존을 스프링이 제공
  • 사용자가 수정 요구한 객체를 소스코드 내에 쓰지 않고 스프링의 환경설정 파일에 설정
  • 객체 한번에 수정 가능
  • 일일히 바꾸게 되면 미쳐 못바꾼 객체가 있을 수 있고Aspect Oriented Programming(AOP)

AOI


느슨한 의존관계

  • 강한 의존 관계 : 클래스로 관계로 되어있고 new로 객체 생성시 강한 의존 관계에 있다고 말한다.
  • 강한 의존 관계를 느슨하게 연결(느슨한 의존관계)하는 것
  • 느슨한 의존관계를 만들기위해서
    • 인터페이스 이용 : 클래스를 직접 사용하는 것이 아닌 중간에 인터페이스를 만듦, 하지만 new 뒤에 오는 메소드 이름 변경해야 함

eclipse 에서의 Spring

스프링 환경설정 파일(XML)

  • 사용할 프로젝트 - 오른쪽 버튼 - properties - java build path - libraries - class path - add external jars - 다운 받아놓은 라이브러리 안 모든 jar들 선택 후 열기 - apply and close
    • dtd 작성 시 오타 발생 할 수 있으므로 쉽게 만들어 주는 도구 플러그인 설치
    • Help - Eclipse MarketPlace - find에 spring 검색 - Spring Tools3 - Spring IDE Core만 설치
  • new- others - Spring - Spring Bean Configuration file 생성
  • Spring Bean Configuration file 안에서 bean 태그 활용
    • id : 프로그램에서 사용할 아이디
    • class : 사용할 클래스
    • 자식 태그 없을 땐 만 작성
    • <bean id="dao" class="exam01.MemberDAO"/> 는 자바문법으로 MemberDAO dao = new MemberDAO();와 같다.
    • bean 태그 class에 들어가는 파일에 생성자 있을 경우 bean 태그 안에 constructor-arg 태그 사용
      <bean id="p" class="exam01.Person">
        <constructor-arg value="홍길동"/>
        <constructor-arg value="20"/>
      </bean>

bean 태그 속성

autowire
  • spring의 특성인 DI와 연관
  • 환경변수 파일 내 bean 태그 속성 autowire 설정
    • byName : 이름이 똑같은 객체 있을 시 자동 의존 관계 설정
    • byType
      • 그 type의 객체(해당 type)는 유니크해야함
    • constructor : 생성자에 의한 자동 의존 관계 설정
    • autodetect
scope
  • singleton : 디폴트, bean 태그에 설정한 id로 만든 객체들은 같은 객체이다. 즉 스프링 컨테이너에 한 개의 객체만 존재
  • prototype : bean을 사용할 때 마다 서로 다른 객체 생성

constructor-arg 태그

  • value로 생성자에 들어가는 매개변수를 수와 순서대로 값 전달
  • 의 ref는 참조할 bean태그의 id와 동일해야 함

property 태그

  • bean 태그 class에 들어가는 파일 setter로 값 초기화 하는 경우 bean 태그 안에 property 태그 사용
    • value에 setter에 들어갈 값 작성
      • 참조 자료형일 때 ref에 참조하는 bean id 설정

스프링 컨테이너

  • 클래스와 클래스 간의 의존을 스프링 컨테이너가 제공하는 방법
  • (최상위)bean factory - applicationContext - webApplicationContext
  • bean factory
    // Spring 제공 객체 
    Resource resource = new FileSystemResource("beans.xml");
    

// 어플리케이션에 필요한 객체 제공자 역할의 객체 생성, bean factory를 통한 spring 제공 객체 사용 가능
BeanFactory factory = new XmlBeanFactory(resource);

// bean.xml(스프링 환경변수 파일)에 작성한 사용할 객체의 id로 객체 불러오기
MessageBean m = (MessageBean)factory.getBean("객체id");

- applicationContext : resource 없이 객체 생성 가능
    - class path를 기준으로 xml 위치 표현 가능
    - ApplicationContext context = new ClassPathXmlApplicationContext("환경변수파일xml 경로");
    - 스프링 환경변수 파일에 작성한 사용할 객체의 id로 객체 불러오기: BoardDAO dao = (BoardDAO)context.getBean("객체id");
---
## 어노테이션 기반 객체 생성
- 환경변수파일 xml에 작성하는 것이 아닌 환경설정(@Configuration)하는 클래스를 만들어 사용
- @Configuration : 환경 설정 할 클래스 앞에 작성
- @Bean : bean 태그 대신 사용할 메소드 앞에 작성, 메소드의 이름이 bean태그의 id역할과 동일, 메소드 앞에 반환할 객체의 타입 작성
- ApplicationContext context = new ClassPathXmlApplicationContext(클래스이름.class)
- @Controller
- @RequestMapping

## Spring MVC 패턴 주요 구성 요소
- DispatcherServlet : 클라이언트의 요청을 전달받아 컨트롤러에게 클라이언트의 요청을 전달하고 컨트롤러가 리턴한 결과 값을 view에 전달하여 알맞은 응답 생성하도록 함
    - servlet 태그
    - servletmapping 태그
- HandlerMapping : 클라이언트의 요청 URL을 어떤 컨트롤러가 처리할 지 결정
- Controller : 클라이언트의 요청을 처리한 뒤, 그 결과를 DispatcherServlet에게 알려주는 역할, 스트럿츠의 action과 동일한 역할 수행
- ModelAndView : 컨트롤러가 처리한 결과 정보 및 뷰 선택에 필요한 정보를 담음
- ViewResolver: 컨트롤러의 처리 결과를 생성할 뷰 결정
- View(뷰) : 컨트롤러의 처리 결과 화면 생성
    - WEB-INF/views/파일

'Back-End > JAVA' 카테고리의 다른 글

[Spring] Jquery  (0) 2022.06.17
[Spring] Spring boot로 Spring project 생성  (0) 2022.06.02
[JAVA] JDBC(Java DataBase Connection Programming)  (0) 2022.04.15
[JAVA] Network Programming  (0) 2022.04.14
[JAVA] Thread  (0) 2022.04.13
Comments