[Spring] Spring 기본 개념

원알렉스·2020년 5월 12일
3

Spring

목록 보기
1/3
post-thumbnail
post-custom-banner

MVC 구조

  • 모델 - 뷰 - 컨트롤러의 약자로, 디자인 패턴의 일종이다.
  • 비즈니스 처리 로직과 사용자 인터페이스를 구분시켜 서로 영향 없이 개발이 가능하다는 장점이 있다.
  • 모델은 애플리케이션이 무엇을 할지에 대해 정의한다.
    처리되는 데이터, 데이터베이스, 내부 알고리즘 등 내부 비즈니스에 관한 로직의 처리를 수행한다. 즉, 사용자에게 보이지 않는 로직.
  • 는 말 그대로 사용자에게 보여지는 영역이다. JSP등 사용자 인터페이스를 담당한다.
  • 컨트롤러는 모델에게 어떻게 할 것인지를 알려주며, 모델과 뷰 사이를 연결하는 역할을 한다. 사용자의 입출력을 받아서 데이터를 처리한다.

컨테이너

  • 프레임워크 안에서 인스턴스들의 생명 주기를 관리하며, 생성된 인스턴스들에게 추가적인 기능을 부여한다.
  • 자기가 작성한 코드의 처리과정을 컨테이너에서 수행한다.
  • 스프링 컨테이너는 스프링 프레임워크 핵심에 위치하며, DI를 통해 애플리케이션을 구성하는 컴포넌트들을 관리한다.
  • Lifecycle Mangement, configuration, Dependency Resolution, Object pooling 등을 관리.

IOC 컨테이너

  • Inversion of Control, 제어의 역전이라는 뜻으로,
    인스턴스의 생성 및 소멸을 개발자 대신 컨테이너가 해준다. 그 외 제어권을 프레임워크에서 가져 간다는 말로도 쓰인다.
  • 필요한 이유
    1. 컴포넌트/오브젝트가 자유로운 삽입이 가능하도록 하기 위해
    2. 서비스의 configuration이 일관성을 갖도록 하기 위해
    3. 단일화된 서비스의 접근방법 제공
    4. 비즈니스 오브젝트에 부가적인 enterprise service를 제공

DI

  • Dependency Injection, 의존성 주입이라는 뜻으로,
    IOC를 실제로 주입하는 방법이다.
  • 의존성이 있는 컴포넌트를 개발자가 코드로 명시하는 것이 아니라 Spring이 런타임에서 연결해 처리 해준다.
  • 의존적인 객체를 직접 생성하거나 제어하는 것이 아니라,
    특정 객체에 필요한 객체를 외부에서 결정해서 연결해주는 것이다.

Spring MVC의 흐름

  1. 요청된 URL을 dispatcher-servlet으로 전달.
  2. 핸들러 매핑은 해당 URL에 매핑된 컨트롤러가 있는지 검사 후 컨트롤러에 전달.
  3. 해당 컨트롤러가 로직을 처리.
  4. ModelAndView 객체 생성 후, 로직의 결과를 담아서 dispatcher-servlet에 전달.
  5. dispatcher-servlet은 전달 받은 뷰가 있는지 검사하기 위해 ViewResolver로 보냄.
  6. ViewResolver는 받은 뷰가 있는지 검사 후 뷰로 보냄.
  7. 모델과 같이 뷰를 그린 후에 dispatch-servlet으로 보냄.
  8. 최종적으로 컨텐츠를 클라이언트에게 전달.

Bean 객체

  • 자바에서 POJO(Plain Old Java Object)로,
    XML 설정 파일을 통한 생명주기, 종속성 등의 메타데이터를 가지고 스프링 컨테이너에서 생성된 객체이다.
  • 컨테이너에서 생성되었다는 점을 제외하면 일반 자바 객체와 같다.

VO

  • Value Object의 줄임말로, 값을 갖고 있는 객체이다.
  • 비즈니스 값을 가져올때 사용되며, 보통 값을 수정할 수 없는 것으로 한다. 즉, getter만 있고 setter는 없는 것이 일반적이다.

DTO

  • Data Transfer Object의 줄임말로 VO와 같이 값을 갖고 있는 객체이다.
  • VO와의 차이점은 하나의 인스턴스로, 데이터 핸들링에 사용되는 객체이다.
  • DTO를 통해 데이터를 전달 할 수 있다.

DAO

  • Data Access Object의 줄임말로, 실제 DB에 접속하는 객체이다.
  • Service와 DB 사이에서 가져온 데이터를 엔티티로 변환시켜 가져온다.
profile
Alex's Develog 🤔
post-custom-banner

0개의 댓글