일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 알고리즘
- 스프링부트
- @Profile
- 스프링 부트
- 외부설정
- @ConfigurationProperties
- 백기선
- webjar
- HATEOAS
- 다익스트라
- HttpMessageConverters
- 정적 리소스
- WebApplication Type
- AuthenticationPrincipal
- rest api
- Application Argument
- 리소스핸들러
- 백준
- Application Runner
- JPA
- application.properties
- JsonSerializer
- Spring Security
- cors
- EnableAutoConfiguration
- Application Event
- 리소스 서버
- OAuth2
- 브루트포스
- 백트래킹
- Today
- Total
목록분류 전체보기 (114)
아카이브
Spring REST Docs란? API 문서 작성 자동화 도구 - 성공 Test Case를 기반으로 API 스펙을 작성하기 때문에, 제품 코드를 건드릴 필요가 없다 - 문서의 조각을 만드는 것을 snippets라고 칭한다. - API 코드를 변경했을 때, Test Case가 성공하면 문서도 자동으로 바뀐다. - 추가 테스트에 대한 문서화가 강제된다. Asciidoctor ? HTML 문서 작성 도구 - Rest Docs가 문서 작성에 필요한 코드 조각을 만드는 도구라면, Asciidoctor는 Adoc 파일을 활용하여 html 문서를 만들어주는 도구이다. 테스트를 통한 snippets 생성 방법 - MockMvc(@WebMvcTest) : Contoller Layer 만 테스트하기에 속도가 빠르다. -..
스프링 부트가 HATEOAS 자동설정을 지원하므로, @EnableEntityLinks, @EnableHypermediaSupport 어노테이션 X 1. extends ResourceSupport 문제 : objectMapper가 BeanSerializer로 serialize하는데, BeanSerializer는 기본적으로 그 객체의 이름으로 감싸서 보낸다. - @JsonUnwrapped 로 해결 : wrapping object를 unwrapping하여 json을 펼쳐준다. - extends EntityModel : 내부적으로 @JsonUnwrapped 처리가 되어있다. 2. Content-Type : application/hal+json 으로 보내면 client가 _li..
입력받을 수 없는 값들이 넘어왔을 경우 Bad Request를 응답한다. ObjectMapper 설정하기 - serialize : Object -> JSON -deSerialize : JSON -> Object JSON -> Object 변환 시 unknown properties(입력받을 수 없는 값) 일 경우 오류가 발생하는데, 이를 무시하기 위해 application-properties에 spring.jackson.deserialization.fail-on-unknown-properties=true를= 통해 무시한다. name, number를 받을 수 있는 경우에 size(unknown)을 넘길 경우, 이를 무시하고 deserialize를 진행한다. @DisplayName("입력받을 수 없는 값을 사..
기존의 테스트 코드 @Test void testFree() { // 1 Event event = Event.builder() .basePrice(0) .maxPrice(0) .build(); event.update(); assertThat(event.isFree()).isTrue(); // 2 event = Event.builder() .basePrice(1000) .maxPrice(0) .build(); event.update(); assertThat(event.isFree()).isFalse(); // 3 event = Event.builder() .basePrice(0) .maxPrice(1000) .build(); event.update(); assertThat(event.isFree()).isF..
spring-boot-starter-validation 의존성 추가 org.springframework.boot spring-boot-starter-validation EventDTO package me.jumen.demoinflearnrestapi.events; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import javax.validation.constraints.Min; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import j..
ModelMapper 의존성 추가 org.modelmapper modelmapper 2.3.9 EventDto 추가 package me.jumen.demoinflearnrestapi.events; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import java.time.LocalDateTime; @Builder @NoArgsConstructor @AllArgsConstructor @Data public class EventDto { private Integer id; private String name; private String description;..
package me.jumen.demoinflearnrestapi.events; import lombok.*; import java.time.LocalDateTime; @Builder @AllArgsConstructor @NoArgsConstructor @Getter @Setter @EqualsAndHashCode(of="id") public class Event { private Integer id; private String name; private String description; private LocalDateTime beginEnrollmentDateTime; private LocalDateTime closeEnrollmentDateTime; private LocalDateTime beginE..
CORS (Cross-Origin-Resource-Sharing) : 교차 출처 리소스 공유 서로 다른 Origin끼리 리소스를 공유할 수 있는 것 SOP(Single-Origin Policy: 같은 Origin끼리만) 우회하기 위한 표준 기술 스키마 / 호스트 / 포트 - 3가지의 조합이 Origin이다 ex) http / hostname / 8080 CORS 허용의 경우 http / hostname / 8080 에서 http / hostname/ 18080 으로 요청을 보내면 리소스를 받을 수 있다 구현 - @CrossOrigin(origins = "허용주소:포트") 구현 - WebMvcConfigurer
Hypermedia As The Engine Of Application state 링크에 사용 가능한 URL을 리소스로 전달하여 client가 참고하여 사용할 수 있도록 하는 것 REST API를 만들때, 서버가 리소스를 제공하며 연관된 링크 정보들까지 함께 제공하고 클라이언트는 제공된 연관 정보를 바탕으로 재접근 하기 위한 것 참조문서:https://spring.io/guides/gs/rest-hateoas/ org.springframework.boot spring-boot-starter-hateoas pom.xml 의존성 추가 slicing test를 통해 GET /hateoas를 보내면 handler에서 Reflection을 통해 SampleController.class의 hateoas() meth..
기본 error handler인 BasicErrorController가 존재하는데, 별도의 custom handler도 구성할 수 있다 @ExceptionHandler(SampleException.class) - RuntimeException을 상속한 SampleException이 발생하면 해당 method를 실행한다 Global using을 위해 @ControllerAdvice controller를 만들고, 이 안에 @ExceptionHandler를 구성하면 모든 controller에서 사용할 수 있다