본문 바로가기

더 나은 엔지니어가 되기 위해/지금은 안쓰는 자바

[스프링 부트 개념과 활용] 웹 MVC 설정 4. HATEOAS 와 CORS

인프런에서 백기선님의 스프링부트 개념과 활용 강의를 듣고, 개인적으로 공부하며 핵심만 정리한 글입니다.

HATEOAS

해당 내용은 스킵.
이후 REST API 를 공부할 때 제대로 보자.

스프링 부트에서 지원하는 HATEOAS 적용 방법만 간략히 적어둔다.

@GetMapping("/hello")
public EntityModel<Hello> hello() {
  Hello hello = new Hello();
  hello.setPrefix("Hey, ");
  hello.setName("heumsi");

  EntityModel<Hello> helloResource = new EntityModel<>(hello);
  helloResource.add(linkTo(methodOn(SampleController.class).hello()).withSelfRel());
  return helloResource;
}
// 응답 결과
{
  "prefix":"Hey, ",
  "name":"heumsi",
  "_links":{
    "self":{
      "href":"http://localhost/hello"
    }
  }
}

CORS

1) SOP와 CORS

  • Orgin
    • 다음 세가지를 조합한게 하나의 Origin 이다.
      • URI 스키마 (http, https)
      • 호스트 이름 (localhost 등)
      • 포트 (8080, 3306)
    • ex. http://localhost:8080
  • SOP
    • Same Origin Policy 의 약자로, 같은 Orgin 에서만 리소스 요청이 가능하게한 정책이다.
    • 예를 들어, http://localhost:8080 에 실행중인 앱에서 http://localhost:8000 서버로 리소스를 요청을 할 수 없다.
    • 기본적으로 SOP 정책을 따른다.
  • COR
    • Cross Origin Policy 의 약자로, 다른 Origin 에서도 리소스 요청이 가능하게한 정책이다.
    • 서버를 더 개방적으로 열어둔 것이라고 할 수 있다.

2) CORS 사용법

CORS 가 필요한 경우는 다른 Origin 의 요청을 허용해야하는 상황이다.
스프링부트에서는 @CrossOrigin(origin = "다른 origin") 을 활용하면 된다.

@RestController
public class SampleController {

  @CrossOrigin(origins = "http://localhost:8000") // COR 적용
  @GetMapping("/hello")
  public String hello() {
    return "Hello";
  }
}

컨트롤러 단위로 설정하지 않고, 한 파일에서 전역적으로 관리하고 싶으면 WebMvcConfigurer 를 구현한 WebConfig 클래스에서 addCorsMappings() 를 다음과 같이 오버라이딩 해주면 된다.

@Configuration
public class WebConfig implements WebMvcConfigurer {

  @Override
  public void addCorsMappings(CorsRegistry registry) {
    registry.addMapping("/hello")
      .allowedOrigins("http://localhost:8000");

    // 모든 요청에 허용하고 싶은 경우
    registry.addMapping("/**")
      .allowedOrigins("http://localhost:8000");
  }
}