파비콘
파비콘이란? 웹 페이지에 접속했을 때, 상단 탭에 보여지는 아이콘이다.
예를들면 아래와 같다. 특정 홈페이지에 접속했을 때 대표적으로 보이는 아이콘이다.
파비콘은 아래 링크에서 만들거나 다운받을 수 있다.
The best Favicon Generator (completely free)
With Favicon.io you can quickly generate a favicon for your website for free!
favicon.io
적용하는 방법은 아이콘을 만든 후 src > main > resources 하위의 폴더에 집어넣으면 된다.
나는 static 폴더 하위에 favicon.ico라는 이름으로 집어넣어서 적용시켰다.
HATEOAS
HATEOAS란? Hypermedia As The Engine Of Application State의 줄임말로 REST 아키텍처의 한 구성 요소이다.
기존의 REST api 의 고급 버전이라고 생각하면 된다.
예를들어 기존에는 아래와 같은 응답 데이터가 잇었다고 한다면
HATEOAS를 도입한 응답 데이터는 아래와 같다.
다른 부분 말고 Body 부분의 json 데이터만 살펴보자.
기존에는 prefix와 name에대한 정보만 전달했었다면 HATEOAS는 link를 통해 접근 가능한 api를 제공하는 것이다.
현재는 self, 그러니까 해당 api를 요청한 곳의 정보만 전달하고 있지만, 원한다면 다른 가능한 서비스도 link를 통해 제공할 수 있다.
사용법은 pom.xml에 아래 의존성을 추가한다.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-hateoas</artifactId>
</dependency>
그 후 사용하고자 하는 RestController에서 아래와 같이 구현하면 된다.
@GetMapping("/hello")
public EntityModel<Hello> hello(){
Hello hello = new Hello();
hello.setPrefix("Hey ");
hello.setName("cho");
EntityModel<Hello> helloEntityModel = new EntityModel<>(hello);
helloEntityModel.add(linkTo(methodOn(SampleController.class).hello()).withSelfRel());
return helloEntityModel;
}
Hello 클래스는 prefix와 name만을 변수로 가지고있는 클래스이고, EntityModel이 hateoas에서 제공하는 클래스이다.
기존의 Hello 객체를 EntityModel로 전환해줘야 한다.
이 전까지는 공식 클래스 이름이 Resource였는데 EntityModel로 바뀌었다고 하니 참고하자.
EntityModel로 전환하면서 전달하고자 하는 객체를 주입한 후 add를 통해 link를 추가할 수 있다. 링크를 추가하는 방법은 여러 방법이 있다고 하니 더 찾아보면 좋을 듯 하다.
이 기술을 현업에서 얼마나 사용하는 지는 모르겠지만, REST api 기술 중에 고급? 기술이라고 하니 알아두자.
CORS
cors란? Cross-Origin Resource Sharing이다. 기본적으로는 보안상의 이유로 Single-Origin Policy가 적용되어있다고 한다.
그럼 Origin이란 무엇일까?
Origin은 URI 스키마 (http, https) + hostname(xxx.com, localhost) + 포트 (8080, 18080 등) 을 합해서 Origin이라고 한다.
이제 다시 SOP를 얘기하자면 SOP는 같은 origin에서만 리소스를 공유할 수 있다는 것이다.
그리고 cors란 다른 origin의 리소스도 공유할 수 있다는 뜻이다
cors를 구현하는 방법을 소개한다.
우선 cors를 적용하고자 하는 RequestMapping 메소드에 직접 @CrossOrigin 어노테이션을 이용해 cors를 허용할 origin의 주소를 적용하는 방법이다. 현재 서버의 origin이 http://localhost:8080일때 원래는 http://localhost:8080/cors 로 요청이 들어왔을 때만 "cors"를 반환해 cors.html을 보여준다고 하면, 이제는 http://localhost:18080/cors의 요청도 허용한다는 뜻이다.
이렇게 메소드마다 적어주기 귀찮다면 controller 위에 적어주면 해당하는 controller의 메소드 전체에 적용할 수도 있다.
그것도 싫다고 한다면 WebMvcConfigurer를 상속받아 커스터마이징 할 수도 있다.
이 클래스에서 addCorsMappings 메소드를 override하는 방법으로 구현할 수도 있다.
'프로그래밍 > Spring Boot' 카테고리의 다른 글
[Spring Boot] 의존성 관리 & 내장 웹 서버 & JAR (0) | 2020.06.29 |
---|---|
[Spring Boot] 자동 설정 (@SpringBootApplication 어노테이션) (0) | 2020.06.29 |
[Spring Boot] 스프링 부트 소개 & 프로젝트 생성 & 구조 (0) | 2020.06.29 |