@RequestMapping 어노테이션

  • HTTP Request로 들어오는 URL을 특정 Controller 클래스나 메서드로 연결시키는 역할을 한다.
@Controller
@RequestMapping("/home")
public class TestController {

	//hostname:port/home/에 대한 HTTP Request URL에 대응하는 역할
    @RequestMapping("/")
    String getName(){
        return ~;
    }

	//hostname:port/home/test/에 대한 HTTP Request URL에 대응하는 역할
    @RequestMapping("/test")
    String showTest(){
        return ~;
    }
    
}
  • http://localhost:8080/home/은 getName()을 호출
  • http://localhost:8080/home/test는 showTest()을 호출

'Web > Spring' 카테고리의 다른 글

[Spring] IoC 컨테이너 와 Spring Bean  (0) 2020.12.28
[Spring] POJO 와 Java Beans  (0) 2020.12.28
[Spring] @Controller 와 @RestController  (0) 2020.12.28
[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25

IoC 컨테이너 (Inversion of Control, 제어의 역전)

  • 개발자가 설정만 하면 컨테이너가 알아서 처리한다.

  • 스프링에서는 객체 생성, 연결 및 소멸의 책임이 IoC 컨테이너로 인계된다.

  • 자바 클래스는 의존성을 정의하고, IoC 컨테이너는 객체를 만들고 의존성을 연결한다.

  • IoC(제어의 역전)을 구현한 방법으로 DI(의존성 주입)를 사용한다.

 

Spring Bean

  • 빈(Bean)은 스프링 컨테이너를 통해 생성되고, 스프링에 의해 생명주기가 관리되는 객체를 의미한다.

  • 빈을 생성해야하는 클래스에 @Component 어노테이션을 사용하면 런타임 시점에서 IoC 컨테이너가 객체들을 스캔하며 빈으로 등록해줍니다.

  • Controller, Service 등을 하나의 빈(Bean)이라고 한다.

 

빈(Bean)의 장점

  • 의존성 생성에 대한 책임이 없기 때문에 느슨한 결합도를 유지할 수 있다.

 

스프링 빈(Bean)을 등록하는 2가지 방법

1. 컴포넌트 스캔과 자동 의존관계 설정

  • @Controller, @Service, @Repository 어노테이션 내부에 @Component가 등록되어있기 때문에 Spring Bean으로 자동 등록된다.

 

2. 자바 코드로 직접 스프링 빈 등록

  • 설정 클래스는 @Configuration 어노테이션을 클래스 선언부 앞에 추가를 한다.

  • 특정 타입을 리턴하는 메서드를 만들고 @Bean 어노테이션을 붙여주면 자동으로 해당 타입의 빈 객체가 생성된다.

싱글톤

  • 스프링은 스프링 컨테이너에 스프링 빈(Bean)을 등록할 때 기본으로 싱글톤으로 등록한다.

  • 싱글톤은 userController면 userController 하나, userService면 userService 하나를 뜻한다.

  • 같은 스프링 빈(Bean)이면 모두 같은 인스턴스이다.

 

정리

  • 스프링은 DI(의존성 주입)을 통해 객체간의 결합도를 낮추어 단위테스트가 가능한 설계를 도와준다.

  • 객체지향 설계원칙 중 OCP(개방 폐쇄 원칙), DIP(의존성 역전 원칙)은 프레임워크의 도움 없이 지키기 힘들다.

 

'Web > Spring' 카테고리의 다른 글

[Spring] @RequestMappnig 어노테이션  (0) 2020.12.28
[Spring] POJO 와 Java Beans  (0) 2020.12.28
[Spring] @Controller 와 @RestController  (0) 2020.12.28
[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25

POJO

  • EJB의 낮은 생산성, 성능, 불필요한 기술적인 복잡도 등을 보완한 프레임워크

  • 특정 환정, 규약에 종속되지 않는다.

  • 객체지향원리에 충실해야한다.

 

장점

  • 코드가 간결해진다.

  • 객체지향 설계를 할 수 있다.

  • 테스트에 유리하다.

 

public class PoJoExample{
    private String name;
    private int age;

    public String getName(){
        return name;
    }

    public void setName(String name){
        this.name = name;
    }

    public int getAge(){
        return age;
    }

    public void setAge(int age){
        this.age = age;
    }

}
  • 이러한 빈(Bean) 클래스를 POJO라고 부른다.

  • Spring을 이용하면 POJO 프로그램의 장점을 살려서 코드를 간결하게 작성할 수 있다.

 

Java Beans

  • 데이터를 읽고, 쓰기 가능한 Class

  • POJO 예시 코드를 Java Beans라고 한다.

  • VO(DTO)도 Beans라고 볼 수 있다.

 

규칙

  • 멤버변수의 접근자는 private

  • 멤버변수마다 getter/setter 가 존재

  • getter/setter 메소드의 접근자는 public

 

'Web > Spring' 카테고리의 다른 글

[Spring] @RequestMappnig 어노테이션  (0) 2020.12.28
[Spring] IoC 컨테이너 와 Spring Bean  (0) 2020.12.28
[Spring] @Controller 와 @RestController  (0) 2020.12.28
[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25

@Controller

Controller - View

@Controller는 주로 View를 반환하기 위해 사용합니다. 

  1.  Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

  2. DispatcherServlet이 Handler Mapping에 요청해 해당 Controller를 찾는다.

  3. 해당 Controller에서 요청을 처리한 후 응답을 DispatcherServlet으로 반환하고, View를 Client에게 반환한다.

 

Controller - Data

Data를 반환해야하는 경우 @ResponseBody 어노테이션을 활용해 Json형태로 데이터를 반환할 수 있습니다.

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

  2. DispatcherServlet이 Handler Mapping에 요청해 해당 Controller를 찾는다.

  3. @ResponseBody를 사용하여 Client에게 Json형태로 데이터를 반환합니다.

 

@RestController

RestController

@RestController는 @Controller + @ResponseBody 이고, 주용도는 Json 형태로 객체 데이터를 반환하는 것입니다.

  1. Client는 URI 형식으로 웹 서비스에 요청을 보낸다.

  2. DispatcherServlet이 Handler Mapping에 요청해 해당 RestController를 찾는다.

  3. RestController는 요청을 처리한 후 데이터를 반환한다.

 

'Web > Spring' 카테고리의 다른 글

[Spring] IoC 컨테이너 와 Spring Bean  (0) 2020.12.28
[Spring] POJO 와 Java Beans  (0) 2020.12.28
[Spring] DAO 와 DTO  (0) 2020.12.25
[Spring] Spring MVC 구조  (0) 2020.12.25
[Spring] DI (Dependency Injection, 의존성 주입)  (0) 2020.12.17

+ Recent posts