스프링부트(Spring Boot)는 자바의 웹 프레임워크로 기존 스프링(Spring) 프레임워크에 톰캣 서버를 내장하고 여러 편의 기능들을 추가하여 꾸준한 인기를 누리고 있는 프레임워크이다.
IoC를 적용한 환경에서는 사용할 객체를 직접 생성하지 않고 객체의 생명주기 관리를 외부에 위임합니다. 여기서 '외부'는 스프링 컨테이너 또는 Ioc컨테이너를 의미합니다.
객체의 관리를 컨테이너에 맡겨 제어권이 넘어간 것을 제어 역전이라고 부르며 제어 역전을 통해 의존성 주입(DI;Dependency Injection), 관점 지향 프로그래밍(AOP;Aspect-Oriented Programming)등이 가능해집니다.
스프링을 사용하면 객체의 제어권을 컨테이너로 넘기기 때문에 개발자는 비즈니스 로직을 작성하는 데 더 집중할 수 있습니다.
의존성 주입(DI:Dependency Injection)이란 제어 역전의 방법 중 하나로 사용할 객체를 직접 생성하지 않고 외부 컨테이너가 생성한 객체를 주입받아 사용하는 방식을 의미합니다.
스프링에서 의존성을 주입받는 방법은 세 가지가 있습니다.
스프링에서는 @Autowired라는 어노테이션을 통해 의존성을 주입할 수 있습니다. 스프링 4.3 이후 버전 생성자를 통해 의존성을 주입할 때 @Autowired 어노테이션을 생략할 수도 있습니다.
@RestController
public class DIController {
MyService myService;
@Autowired
public DIController(MyService myService){
this.myService = myService;
}
@GetMapping("/di/hello")
public String getHello(){
return myService.getHello();
}
권장하는 의존성 주입 방법은 생성자를 통해 의존성을 주입받는 방식입니다. 다른 방식과는 다르게 생성자를 통해 의존성을 주입받는 방식은 레퍼런스 객체 없이는 객체를 초기화할 수 없게 설계할 수 있기 때문입니다.
AOP는 관점을 기준으로 묶어 개발하는 방식을 의미합니다. 이러한 AOP를 구현하는 방법은 크게 세가지 있습니다.
스프링AOP의 목적은 OOP와 마찬가지로 모듈화해서 재사용 가능한 구성을 만드는 것이고 모듈화된 객체를 편하게 적용할 수 있게 함으로써 개발자가 비즈니스 로직을 구현하는 데만 집중할 수 있게 도와주는 것입니다.
HTTP를 잘사용하기 위한 아키텍쳐(제약조건들의 집합) 스타일이다.
REST는 URI와 HTTP 메소드를 사용해서 자원과 행위를 표현합니다.
REST의 원칙을 지키면서 API의 의미를 표현하고 쉽고 파악하기 쉽게 하는 것을 RESTful하다고 합니다.
REST한 방식으로 데이터를 상호교환하게 설계된 API를 말합니다.
=>HTTP를 잘사용하기 위해 URI와 HTTP메소드를 사용해서 URI로 어떤 자원에 접근할 것인지, 메소드로 어떤 행위를 할 것인지 표현하여 설계된 API를 말합니다.
->API가 RESTful로 간주되기 위해서는 몇가지 조건이 있는데 그 중 가장 중요한 건 클라이언트와 서버가 종속적이지 않아야한다는 말입니다. 즉, 클라이언트가 요청시마다 자기정보를 보내야하고 서버는 받은 정보로 클라이언트의 정보를 확인합니다.
URL만 보고 어떤 자원에 접근할 것인지 메소드를 보고 어떤 행위를 할지 알 수 있기 때문에 개발을 할 때 용이합니다.
@RestController
public class HelloController {
@RequestMapping(value = "/hello", method = RequestMethod.GET)
public String hello(){
return "Hello World";
}
}

@RequestMapping(value = "/variable1/{variable}")
public String getVariable1(@PathVariable String variable) {
return variable;
}