일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- AuthenticationPrincipal
- 백트래킹
- JsonSerializer
- Application Argument
- 리소스 서버
- 백기선
- application.properties
- 스프링부트
- Application Event
- HttpMessageConverters
- OAuth2
- WebApplication Type
- HATEOAS
- EnableAutoConfiguration
- @Profile
- 정적 리소스
- rest api
- 브루트포스
- 다익스트라
- webjar
- Application Runner
- cors
- Spring Security
- 리소스핸들러
- 외부설정
- 스프링 부트
- 알고리즘
- @ConfigurationProperties
- JPA
- 백준
- Today
- Total
목록분류 전체보기 (114)
아카이브
Account 도메인 추가하기 @Entity @Getter @Setter @EqualsAndHashCode(of="id") @Builder @NoArgsConstructor @AllArgsConstructor public class Account { @Id @GeneratedValue private Integer id; private String email; private String password; @ElementCollection(fetch = FetchType.EAGER) @Enumerated(value = EnumType.STRING) private Set roles; } AccountRole 추가하기 public enum AccountRole { ADMIN, USER } Event에 owen..
여러 컨트롤러 간의 중복 코드 제거하기 클래스 상속을 사용하는 방법 @Ingore 어노테이션으로 테스트로 간주되지 않도록 설정 중복 코드를 모아둔 BaseControllerTest class를 만들고 extends 하여 사용하기 하기 // 중복 어노테이션 @SpringBootTest @AutoConfigureMockMvc @AutoConfigureRestDocs @Import(RestDocsConfiguration.class) // bean import @ActiveProfiles("test") @Ignore // test로 간주되지 않도록 public class BaseControllerTest { // 중복 의존성 주입 @Autowired protected MockMvc mockMvc; @Autowi..
EventController에 updateEvent() 구현하기 @PutMapping("/{id}") public ResponseEntity updateEvent(@PathVariable Integer id, @RequestBody @Valid EventDto eventDto, Errors errors) { Optional byId = this.eventRepository.findById(id); if (byId.isEmpty()) {// 수정하려는 이벤트가 없는 경우, 404 NOT_FOUND return ResponseEntity.notFound().build(); } if (errors.hasErrors()) {// 입력 데이터 바인딩이 이상한 경우, 400 BAD_REQUEST return bad..
EventController에 getEvent 구현 @GetMapping("/{id}") public ResponseEntity getEvent(@PathVariable Integer id) { Optional byId = this.eventRepository.findById(id); if (byId.isEmpty()) { return ResponseEntity.notFound().build(); } Event event = byId.get(); /* HATEOAS links add */ EventResource eventResource = new EventResource(event); eventResource.add(new Link("/docs/index.html#resources-events-get"..
페이징, 정렬을 어떻게 할까? - spring-data-jpa가 제공하는 Pageable을 사용 Page에 안에 들어있는 Event 들은 리소스로 어떻게 변경할까? - 하나씩 순회하면서 직접 EventResource로 맵핑을 시킬까.. - PagedResourceAssembler 사용하기 queryEvents handler 추가하기 @GetMapping public ResponseEntity queryEvents(Pageable pageable, PagedResourcesAssembler assembler) { Page page = this.eventRepository.findAll(pageable); PagedModel entityModels = assembler.toModel(page, EventRe..
1. HashTable은 thread-safe 하다. HashMap은 그렇지 않다. - thread-safe란? 멀티스레드 환경에서 동시 접근이 발생하는 경우에도 값의 내용이나 프로그램 실행에 문제가 없음을 보장하는 것이다. - 각 스레드에서 프로그램 실행 결과의 올바름을 보장한다. - thread-safe는 synchronized cost를 발생시키므로, 단일 스레드 환경에서는 HashMap의 성능이 더 좋다. 2. HashTable의 key는 not-null이고, HashMap은 하나의 null key와 다수의 null value가 허용된다. - HashTable의 key는 hashCode(), equals() 에서 사용되기 때문에 null을 허용하지 않는다.
Index Handler는 다른 리소스에 대한 링크를 제공한다.(EventController 및 문서화) @RestController public class IndexController { @GetMapping("/api") public RepresentationModel index() { RepresentationModel index = new RepresentationModel(); index.add(linkTo(EventController.class).withRel("events")); return index; } } ErrorResource 작성 : 에러 발생 시 Index 링크 제공 public class ErrorsResource extends EntityModel { public Errors..
애플리케이션 설정과 테스트 설정 중복 어떻게 줄일 것인가? - @SpringBootTest 통합 테스트 시 모든 빈들을 등록하게 된다. 이때 Postgresql을 사용한다. - @WebMvcTest와 같은 Mock Test의 경우는 기본적으로 H2 인메모리 DB를 사용하고, mock bean들을 등록한다. - test/resources에 test용 application.properties를 생성하고 활용하면, properties 우선순위로 인해 main의 같은 파일을 overriding 해서 같은 설정이 아니라면 값이 상실되기에 중복 코드의 문제점이 존재한다. Profile과 @ActiveProfiles 로 중복 문제를 해결 - 테스트 클래스에 @ActiveProfiles("test") 기입하여, mai..
Mavn plugin 설정하기 org.asciidoctor asciidoctor-maven-plugin 1.5.8 generate-docs prepare-package process-asciidoc html book org.springframework.restdocs spring-restdocs-asciidoctor ${spring-restdocs.version} maven-resources-plugin copy-resources prepare-package copy-resources ${project.build.outputDirectory}/static/docs ${project.build.directory}/generated-docs adoc template 추가 src/main/asciidoc/in..
API 문서 만들기 요청 본문 문서화: request-body 응답 본문 문서화: response-body 링크 문서화: links self query-events update-event profile 링크 추가 요청 헤더 문서화: requestHeaders 요청 필드 문서화: requestFields 응답 헤더 문서화: responseHeaders 응답 필드 문서화: responseFields links : linkWithResl() ~Headers : headerWithName ~Fields : fieldWithPath @Test @DisplayName("정상적으로 이벤트를 생성하는 테스트") void createEvent() throws Exception { EventDto eventDto = Ev..