https://spring.io/guides/gs/rest-service/ 

 

Getting Started | Building a RESTful Web Service

In Spring’s approach to building RESTful web services, HTTP requests are handled by a controller. These components are identified by the @RestController annotation, and the GreetingController shown in the following listing (from src/main/java/com/example

spring.io

 

스프링 부트에서는 알아서 Jackson JSON 라이브러리를 사용해서 클래스를 JSON으로 바꿔준다. Jackson은 web starter에 기본적으로 포함되어 있다. 

 

RESTful 웹 서비스를 만드는데 스프링의 접근법에서, HTTP 요청은 컨트롤러에 의해 다뤄진다. @RestController 애노테이션을 사용한다. 

Run the Service

@GetMapping 애노테이션은 HTTP GET 요청이 설정한 문자열로 매핑되어 매핑된 문자열에 해당되는 메소드를 실행시킨다. 

@PostMapping 애노테이션 은 HTTP POST요청.

(@RequestMApping(method=GET), @RequestMApping(method=POST) 와 같은 의미)

	@GetMapping("/greeting")
	public Greeting greeting(@RequestParam(value = "name", defaultValue = "World") String name) {
		return new Greeting(counter.incrementAndGet(), String.format(template, name));
	}

@RequestParam 은 쿼리스트링 파라미터 name을 greeting() 메소드에 name 파라미터로 바인딩 시켜준다. 만약 name 파라미터가 부재한다면 defaultValue로 설정한 World 가 사용된다.

 

전통적인 MVC 컨트롤러와 RESTful 웹 서비스 컨트롤러의 핵심 차이는 HTTP response body가 생성되는 방식이다. 데이터를 HTML로 서버사이드 렌더링을 수행하는 view technology에 의지하는 대신, RESTful 웹 서비스는 데이터 객체자체를 리턴한다. 객체데이터가 HTTP response에 JSON의 형식으로 직접적으로 쓰여진다. 

 

@RestController 애노테이션은 해당 클래스의 모든 메소드는 view가 아닌 객체를 리턴하는 컨트롤러로 동작하도록 한다. @Controller와 @ResponseBody 두 애노테이션을 포함하는 약칭이다. 

 

객체를 JSON으로 바꿀 때는 사용자가 직접할 필요 없이 클래스패스에 Jackson2가 있어서 스프링의 MappingJackson2HttpMessageConverter가 자동으로 JSON으로 변환해준다. 

 

@SpringBootApplication 애노네이션은 다음을 포함한다.

- @Configuration : 해당 클래스를 application context를 위한 bean 정의의 source로서 태그를 지정한다.

- @EnableAutoConfiguration : 스프링 부트에게 클래스패스의 설정과 다른 bean, 그리고 다양한 property 설정을 추가하는 것을 시작하라고 한다. 예를 들어, spring-webmvc가 클래스패스에 있으면 애플리케이션을 웹 애플리케이션이라고 표시하고 DispatcherServlet과 같은 주요 동작을 설정한다.

- @ComponentScan : 다른 컴포넌트나, 설정, com/example 패키지에 있는 서비스를 찾게 한다. 

 

main() 메소드는 스프링 부트의 SpringApplication.run() 메소드를 사용해서 애플리케이션을 시작한다. 

 

★ web.xml 파일도 없고, 웹 앱을 100% 순수 자바로 설정할 수 있다. 

 

그래들이나 메이븐을 커맨드라인으로 애플리케이션을 실행시킬 수 있고, 또, 모든 디펜던시, 클래스, 리소스 등을 포함하는 단일 실행가능한 JAR파일을 빌드할 수도 있다.실행가능한 jar를 빌딩하는 것은 다른 환경에 따른 개발 라이프싸이클 동안 애플리케이션을 배포하는 것, 옮기는 것, 버전관리하는 것을 쉽게 한다. 

 

Gradle 을 사용하는 경우

1) ./gradlew bootRun으로 애플리케이션을 실행할 수 있다.

2) ./gradlew build 로 빌드하고 JAR파일을 java -jar build/libs/gs-rest-service-0.1.0.jar 로실행할 수 있다.

 

 

Maven 을 사용하는 경우

1) ./mvnw spring-boot:run 으로 애플리케이션을 실행할 수 있다. 

2) ./mvnw clean package 로 빌드하고 java -jar target/js-rest-service-0.1.0.jar 로 실행할 수 있다.

'정보 > Framework' 카테고리의 다른 글

[Java] Interface Filter 필터  (0) 2023.08.04

https://javadoc.io/doc/javax.servlet/javax.servlet-api/latest/index.html

 

javax.servlet-api 4.0.1 javadoc (javax.servlet)

Latest version of javax.servlet:javax.servlet-api https://javadoc.io/doc/javax.servlet/javax.servlet-api Current version 4.0.1 https://javadoc.io/doc/javax.servlet/javax.servlet-api/4.0.1 package-list path (used for javadoc generation -link option) https:/

javadoc.io

javax.servlet에서 제공하는 filter에 대해 알아보자.

일단 filter는 Interface이므로 implement하고 메소드를 override하여 커스텀필터를 만들 수 있다.

import javax.servlet.*;      
import java.io.IOException;  

public class customFilter implements Filter {                                                                                                            
                                                                                                                                                         
    @Override                                                                                                                                            
    public void init(FilterConfig filterConfig) throws ServletException {                                                                                
                                                                                                                                                         
    }                                                                                                                                                    
                                                                                                                                                         
    @Override                                                                                                                                            
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { 
    	//모든 request, response가 오므로, 뭔가 인증이나 권한체크를 한다!
    }                                                                                                                                                    
                                                                                                                                                         
    @Override                                                                                                                                            
    public void destroy() {                                                                                                                              
                                                                                                                                                         
    }                                                                                                                                                    
}

documentation ) 

필터는 the request to a resource 또는 the response from a resource 혹은 두 상황 모두에서 필터링을 제공한다.

doFilter 메소드에서 필터링을 한다. 모든 필터는 FilterConfig object에 접근할 수 있고,ServletContext에 참조 권한이 있다.

 

확인된 예들

  1. Authentication Filters
  2. Logging and Auditing Filters
  3. Image conversion Filters
  4. Data compression Filters
  5. Encryption Filters
  6. Tokenizing Filters
  7. Filters that trigger resource access events
  8. XSL/T filters
  9. Mime-type chain Filter

doFilter 메소드는,

void doFilter(ServletRequest request,
              ServletResponse response,
              FilterChain chain)
       throws IOException,
              ServletException

chain의 끝에 리소스에 client의 request로 request/response 쌍이 chain을 지날때마다 container에서 호출된다. 이 메소드로 통고된 FilterChain은 Filter가 chain의 다음 entity로 접근할 수 있을지 허락한다.

chain.doFilter() 을 통해 다음 entity를 깨우거나 request의 실행을 막아 접근이 불가능하게 한다.

 

init메소드나 destroy메소드는 기본적으로 뭔가 수행하지 않는다. custom하여 사용은 할 수 있겠지만

init메소드는 filter가인스턴스화 되었을때 한번 호출되고, destroy는 filter의 doFilter메소드에 모든 쓰레드가 종료되거나 제한시간이 경과한 후일 때만 호출된다.

 

 

'정보 > Framework' 카테고리의 다른 글

[SpringBoot] Rest-Service  (0) 2024.01.18

+ Recent posts