일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 데이터베이스
- 이펙티브 자바
- @Valid
- Proxy Patter
- @SpyBean
- multi module
- JPA
- Firebase
- @MockBean
- Service Locator 패턴
- NotBlank
- 트랜잭션
- @ControllerAdvice
- Connection Pool
- Item04
- java
- FCM
- NotEmpty
- 디자인 패턴
- restTemplate
- Service Locator
- Effetive Java
- springboot
- SQL 삽입 공격
- Effective Java
- db
- deleteById
- 플라이웨이트
- Web
- Spring Boot
- Today
- Total
목록분류 전체보기 (64)
NoTimeForDawdling
JpaRepository에서 delete() 메서드를 호출하여 삭제하려고 하는데 삭제가 안 되는 현상이 발생했다..! 코드는 에러없이 잘 돌아갔는데 자세히 보니 delete 쿼리가 실행되지 않았다! 소스 코드 Entity @Entity @Getter @NoArgsConstructor(access = PROTECTED) public class Product { ... @OneToMany(mappedBy = "product", cascade = CascadeType.ALL, orphanRemoval = true) private List interestProductList = new ArrayList(); ... } @Entity @Getter @NoArgsConstructor(access = PROTECTE..
API를 요청할 때 request body로 들어는 paramter에 대해 문자열 검증하는 방법으로 @NotNull, @NotEmpty, @NotBlank가 있습니다. 이 3가지 Annotation은 비슷해 보이지만 조금씩 다릅니다. 오늘은 이 3가지 Annotation의 차이점에 대해 확실하게 알고 넘어가 보겠습니다. 해당 포스트에서 사용할 DTO는 다음과 같습니다. @Getter @NoArgsConstructor public class ValidationDto { @NotNull private String notNull; @NotEmpty private String notEmpty; @NotBlank private String notBlank; } @NotNull @NotNull은 말 그대로 null..
오늘은 Swagger에 Authorization header를 설정하는 방법을 알아보겠습니다. Swagger에 header를 설정하는 방법을 2가지가 있습니다. 각각의 API에 Header 정보를 추가하는 방법 전역으로 관리하는 방법 두 가지 방법을 모두 알아보겠습니다. 참고로 이번 포스트는 JWT 토큰을 통해 로그인 처리를 한다고 가정하고 진행합니다. 1. 각각의 API에 Header 정보를 추가하는 방법 @Configuration @EnableSwagger2 public class SwaggerConfig { @Bean public Docket api() { ParameterBuilder parameterBuilder = new ParameterBuilder(); parameterBuilder.nam..
오늘은 @ControllerAdvice를 이용해서 @Valid시 발생하는 에러를 처리해보겠습니다. @Valid 사용법은 여기에 자세히 나와있습니다. @ControllerAdvice란? @ControllerAdvice는 @Controller 전역에서 발생할 수 있는 예외를 잡아 처리해주는 애너테이션입니다. 자 그럼 이제 코드를 통해 알아보겠습니다. ExceptionController.class @RestControllerAdvice public class ExceptionController { @ExceptionHandler(MethodArgumentNotValidException.class) public ResponseEntity handelValidationExceptions(MethodArgument..
Spring Boot를 이용해서 @Valid 어노테이션을 이용한 유효성 검증 방법을 알아보려 합니다. @Valid를 이용하면, Service단이 아닌 객체 안에서, 들어오는 값에 대한 검증을 할 수 있습니다. Jakarta Bean Validation에서 제공하는 검증 어노테이션을 이용하겠습니다. 해당 어노테이션을 사용하기 위해서는 다음 의존성을 추가해줘야 합니다. implementation 'org.springframework.boot:spring-boot-starter-validation' @Valid 사용 방법 유효성 검증을 위한 간단한 DTO를 작성해 보겠습니다. @Getter @NoArgsConstructor public class UserSaveRequest { @NotNull private ..
오늘은 Spring Boot에서 RestTemplate Connection Pool을 설정하는 방법에 대해 알아보겠습니다. RestTemplate은 기본적으로 Connection Pool을 직접적으로 지원하지 않기 때문에 매번 RestTemplate를 호출할 때마다, 로컬에서 임시 TCP 소켓을 개방하여 사용합니다. 이렇게 사용된 TCP 소켓은 TIME_WAIT 상태가 되는데, 요청량이 엄청나게 많아진다면 이러한 소켓들은 재사용될 수 없기 때문에 응답이 지연될 수밖에 없습니다. 하지만 RestTemplate의 내부 구성에 의해 Connection Pool을 설정할 수 있습니다. RestTemplate에서 내부적으로 사용되는 HttpClient를 이용하면 됩니다. RestTemplate.class /** ..
특정 Entity의 필드 값으로 List를 들고 있었고, 해당 필드를 업데이트하려고 다음과 같은 에러가 발생했다! A collection with cascade="all-delete-orphan" was no longer referenced by the owning entity instance 매핑 관계는 다음과 같다. @OneToMany(mappedBy = "product", fetch = EAGER, cascade = CascadeType.ALL, orphanRemoval = true) private List fileList = new ArrayList(); 그리고 문제의 업데이트 코드! private void changeFileList(List fileList) { this.fileList = fi..
RestTemplate란? RestTemplate은 Spring에서 제공하는 http 통신에 유용하게 쓸 수 있는 템플릿으로, HTTP 서버와의 통신을 단순화하고 RESTful 원칙을 지키고, jdbcTemplate처럼 기계적이고 반복적인 코드를 깔끔하게 정리해줍니다. RestTemplate은 org.springframework.http.client 패키지에 있으며, HttpClient를 추상화해서 HttpEntity의 json, xml 등 제공해줍니다. RestTemplate 사용 방법 1. Bean 설정하기 RestTemplate을 사용하기 위해 일단 Bean 설정을 해줘야 합니다. 매번 RestTemplate를 new 키워드로 생성하는 것은 번거롭고 안전하지 않기 때문에 Spring에서 제공하는 D..