[Spring / JPA] Server-Sent-Events(SSE)와 OSIV
·
Spring
1. 서론 요즘 대부분 Spring Boot JPA를 많이 사용하고 추가로 SseEmiters로 실시간 알림기능 구현을 하려고 하면 대다수 IOException : Broken Pipe, Connection is not available, request timed out after 30004ms 이런 에러가 발생할 것입니다. 원인은 JPA의 영속성 컨텍스트, OSIV가 true로 설정되서 생기는 문제입니다. 이 글에서는 OSIV가 뭔지 정확히 왜 이런 에러가 생기는 건지 알아보고자 합니다. 2. 프록시 객체와 지연로딩 2 - 1. 프록시란? 프록시는 실제 클래스를 상속 받아서 만들어진 가짜 객체라고 할 수 있습니다. 이러한 프록시 객체는 실제 객채의 참조를 보관하는 특징을 가지고 있어 프록시 객체를 통해..
[Spring] Spring Boot Redis 사용하기 / 이메일 인증 유효시간
·
Spring
Redis는 key-value 구조로 데이터를 저장하는 In-memory 기반의 데이터베이스 시스템입니다. Spring boot 에선 어떻게 구현하는지 알아봅시다. 1. 먼저 Redis란? 먼저 Redis가 어떤건지는 블로그 다른 게시글에 작성해놨습니다. [CS / DataBase] 인메모리 데이터 저장소 Redis, 왜 사용할까? 개발을 하면서 트랜잭션의 속도를 어떻게 하면 줄일 수 있을까? 고민하면서 찾아보면 Redis라는 시스템을 접하게 된다. 그럼 이 Redis는 무엇일까? 1. 레디스(Redis) 란? Redis의 풀네임에서 할 수 있듯 repeater2487.tistory.com 2. Spring Boot에서 Redis 사용하기 2 - 1. 기본 설정 [ 의존성추가 ] 저는 대게 gradle를..
[Java / Spring] @RequestMapping, @PatchVariable 있을때? 없을때?
·
Spring
Spring으로 API를 만들다보면 @RequestMapping에 @PatchVariable이 있을때도 있고 없을때도 있다. 1. @RequestMapping이란? Spring 개발 시 특정 URL로 요청(Request)을 보내면 Controller에서 어떠한 방식으로 처리할지 정의 이때 들어온 요청을 특정 method와 매핑하기 위해 사용하는 어노테이션 DispatcherServlet이 Controller 파일을 찾고, 논리적 주소가 매핑된 Method를 찾음 @RestController public class MainController { @RequestMapping(value = "/main", method = RequestMethod.GET) public String Main(...) { ... ..
[Java /Spring] SpringBoot Test / TestRestTemplate
·
Spring
Spring혹은 SpringBoot를 이용하여 RestApi를 설계할 때, 상태코드를 같이 전달하기 위해 ResponseEntity를 사용하는 경우가 많다. 이 문서에서는 이러한 ResponseEntity를 사용하는 RestApi Test환경에 유용하게 사용되는 TestRestTemplate에 대해 알아보자. 📕 TestRestTemplate REST 방식으로 개발한 API의 Test를 최적화 하기 위해 만들어진 클래스이다. HTTP 요청 후 데이터를 응답 받을 수 있는 템플릿 객체이며 ResponseEntity와 함께 자주 사용된다. Header와 Content-Type 등을 설정하여 API를 호출 할 수있다. 📗 예제 1. postForEntity JWT을 사용하는 로그인 Api의 테스트이다. [A..
[Java / Spring] 스프링부트 테스트 어노테이션 @SpringBootTest와 @WebMvcTest
·
Spring
SpringBoot환경에서 테스트코드를 작성할 때 대다수 JUnit5을 사용하고, @SpringBootTest 어노테이션 혹은 @WebMvcTest를 사용한다. 둘의 차이점을 알아보자 📕 @SpringBootTest 프로젝트의 전체 컨텍스트를 로드하여 빈을 주입하기 때문에 속도가 느리고, 통합 테스트를 할 때 많이 사용한다. 컴포넌트 스캔 범위는 Bean 전체이다. 즉, 애플리케이션이 실행할 당시 스캔되는 범위와 동일하다. 애플리케이션의 모든 설정을 가져오기 때문에 애플리케이션의 범위가 넓을수록 테스트가 느려질 수 밖에 없고, 이는 단위테스트에 적절하지 않다. 📕 @WebMvcTest Web 테스트 중에서 MVC테스트를 하는데 사용하며 컴포넌트 스캔의 범위는 스프링 컨테이너에서 Presentation L..
[Spring / JPA] 일대다 매핑과 빌더 패턴
·
Spring
📕 JPA의 일대다 매핑 관계 📗 엔티티 설계 다음과 같이 Spiring JPA와 Lombok을 사용한 Member 와 Characters 간 1:N 관계가 있다고 가정을 하자 [Member] @Entity @Getter @Setter @NoArgsConstructor public class Member extends BaseTimeEntity { /** * 회원 목록 테이블 */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "member_id") private long id; @Column(unique = true) private String username; private String password; @Enumerat..
마볼링
'Spring' 카테고리의 글 목록