목록Java (53)
오답노트
Listener JPA에는 Listener가 있는데, curd를 할 때, Anotation을 활용해 전후로 원하는 로직을 만들어 넣을 수 있다. https://www.baeldung.com/jpa-entity-lifecycle-events#lifecycle Auditing Listener를 통해서 자주 사용하는 기능을 Spring에서 Anotation으로 미리 만들어 놨다. (ex. CreatedDate) 이를 사용하기 위해서 AuditingEntityListener를 상속 받으면 된다. @Data @MappedSuperclass @EntityListeners(value = AuditingEntityListener.class) public class BaseEntity { @CreatedDate priv..
H2 자바 기반의 RDB이다. 프로젝트 초반에 테스트용 DB로 많이 활용되고 있다. 환경 설정 build.gradle 파일에서 다음과 같은 의존성이 추가되어 있는지 확인하자 (h2database:h2) 그리고 application.yaml에서 다음과 같이 설정하자. (application.properties로 되어있으면 yaml로 변경) 그리고 프로젝트를 Run 시키면 콘솔에 h2에 대한 정보가 나온다. 포커스된 주소를 복사한다. 그리고 아래 두 가지 방법으로 접속이 가능하다. Web Page http://localhost:8080/h2-console/ 에 접속하여 JDBC URL에 입력한다. Connect를 누르면 접속 할 수 있다. InteliJ 인텔리제이에서도 접속 할 수 있다. 우측 탭에서 Dat..
JPA 2019년 부터 Jakarta Persistence API라고 개명됐다. JPA는 인터페이스, 이넘, 추상 클래스로 이루어져있다. 그리고 실제 구현은 Hibernate에 구현되어 있다. Spring Data JPA Hibernate를 간편하게 사용할 수 있도록 추상 객체를 다시 한 번 감싼 것이다. ORM 어플리케이션과 DB를 연결하는 것이 ORM이다. ORM은 JPA로 이루어져 있는데, 이를 구현해 놓은 것이 Hibernate이고 이 중 자중 사용하는 것을 더 간편하게 사용할 수 있도록 해놓은 것이 Spring Data JPA인 것이다.
JUnit JUnit은 Java 소스를 모듈 단위로 테스트할 수 있는 도구다. 이는 스프링 환경에 이미 Import 되어 있으며 API도 테스트 할 수 있다. 실습 import com.example.springcalculator.component.Calculator; import com.example.springcalculator.component.DollarCalc; import com.example.springcalculator.component.MarketApi; import com.example.springcalculator.dto.Req; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson...
import com.example.server.dto.Req; import com.example.server.dto.User; import lombok.extern.slf4j.Slf4j; import org.springframework.http.RequestEntity; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import java.net.URI; import java.nio.c..
Server to Server 지금까지는 서버를 개발하여 클라이언트의 요청을 처리하기만 했다. 하지만 우리도 누군가의 클라이언트가 되어 요청을 보내고 응답을 받아와야 할 경우가 있다. GET import com.example.client.dto.UserResponse; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.stereotype.Service; import org.springframework.web.client.RestTemplate; import org.springframework.web.util.UriComponentsBuilder; import j..
Async 비동기 처리는 thread를 통해 다른 작업을 처리하게 만들고 기존 로직은 그대로 실행시키게 하는 것이다. @SpringBootApplication @EnableAsync public class AsyncApplication { public static void main(String[] args) { SpringApplication.run(AsyncApplication.class, args); } } 메인 클래스에서 EnableAsync Annotation을 사용하요 비동기를 사용하는 것을 명시한다. import lombok.extern.slf4j.Slf4j; import org.springframework.scheduling.annotation.Async; import org.springfr..
Interceptor Intercepter는 FIlter와 매우 유사한 형태로 존재하지만, 차이점은 Spring Context에 등록된다는 점이다. AOP와 유사한 기능을 제공 할 수 있고, 주로 인증 단계를 처리하거나, Logging을 하는데 사용한다. 이를 전/후처리 함으로써 Service business logic과 분리 시킨다. import com.example.interceptor.annotation.Auth; import com.example.interceptor.exception.AuthException; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import l..
Filter 웹 어플리케이션에서 관리되는 영역으로써 Spring Boot Framework에서 Client로 부터 오는 요청/응답에 대해서 최초/최종 단계의 위치에 존재하며, 이를 통해서 요청/응답의 정보를 변경하거나, Spring에 의해서 데이터가 변환되기 전의 순수한 Client의 요청/응답 값을 확인 할 수 있다. 유일하게 ServletRequest, ServletResponse의 객체를 변환 할 수 있다. 주로 스프링에서는 요청과.응답의 logging 으로 활용하거나, 인증과 관련된 logic들을 해당 filter에서 처리한다. 이를 선/후 처리 함으로써, Service business logic과 분리 시킨다. @SpringBootApplication @ServletComponentScan pu..
Spring은 엔터프라이즈급 프레임워크이기 때문에 수많은 API가 있을 수 있다. 이에 따른 예외처리를 하기 위해 Spring에서는 전역으로 Exception을 발생시킬 수 있는데, 이를 이용하여 사용자 친화적인 Validation을 만들어 보자 @ExceptionHandler(value = MethodArgumentNotValidException.class) public ResponseEntity methodArgumentNotValidException(MethodArgumentNotValidException e, HttpServletRequest httpServletRequest){ List errorList = new ArrayList(); BindingResult bindingResult = e...