문정현
동료 코드 리뷰
JoinColumn의 name, referencedColumnName
영속성 컨텍스트와 트랜잭션 범위
게시판 흑구님 피드
- AOP 사용해보기 → @AspectJ를 사용해서 controller의 결과를 json으로 파싱하는 어드바이스를 작성해보기
@Aspect @Component public class ResponseAop { @Around("execution(* com.example.springbootboardjpa.controller.*.*(..))") public ApiResponse<Object> responseString(ProceedingJoinPoint joinPoint) throws Throwable { return ApiResponse.ok(joinPoint.proceed()); } } ... @RestController @RequestMapping("api/v1/posts") public class PostRestController { @Autowired PostService postService; @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) public Object create(@RequestBody @Valid PostDto postDto) { long result = postService.create(postDto); return Long.toString(result); } }
- RestControllerAdvice, ExceptionHandler 로 처리하기
- Dto의 필드는 Wrapper Class로 하기(입력값이 없었다는 걸 확실하게 표현할 수 있음)
- Dto나 Entity에 대한 Bean Validation 사용하기
- statusCode는 HttpStatus를 사용하는 방식으로 사용
public class ApiResponse<T> { private int statusCode; private T data; @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd HH:mm:ss", timezone = "Asia/Seoul") private LocalDateTime serverDatetime; public ApiResponse(HttpStatus status, T data) { //입력은 HttpStatus로 받고 response로 내보낼 때는 value를 이용해서 변환하기 this.statusCode = status.value(); this.data = data; this.serverDatetime = LocalDateTime.now(); } public static <T> ApiResponse<T> ok(T data) { return new ApiResponse<>(HttpStatus.OK, data); } public static <T> ApiResponse<T> fail(HttpStatus status, T data) { return new ApiResponse<>(status, data); } }
정해민
@Mock VS @MockBean
- @MockBean은 스프링 컨테이너를 올려서 테스트를 할 때 기존 빈을 목으로 대체 해준다.
ReflectionTestUtils
테스트에서 사용할 데이터로 엔티티를 생성해야 하는 경우 id와 같이 private하고 setter 또는 생성자를 통해 설정할 수 없는 필드에 어떻게하면 원하는 값을 설정해 줄 수 있을지 찾아보다 알게 되었습니다.
- 테스트에서 private 필드에 값을 설정하거나, private 메서드를 호출할 수 있습니다.
- 클래스 이름에서 볼 수 있듯이 내부적으로 리플렉션을 사용합니다.
최지훈
JPA 테이블의 상속 관계 매핑에 대해 궁금한 점이 많았는데 이 블로그에서 도움을 얻었습니다!
최현웅
Sql - 서브쿼리