[JPA] JSON 직렬화 순환 참조 해결하기 순환 참조. JPA에서 양방향으로 연결된 엔티티를 JSON 형태로 직렬화하는 과정에서, 서로의 정보를 계속 순환하며 참조하여 StackOverflowError 를 발생시키는 현상 . 직렬화. 객체/데이터를 바이트 형태로 변환하여 네트워크를 통해 송수할 수 있도록 만드는 것 Situation Product 에서 ProductCategory를 조회할 수도 있고, ProductCategory 에서 Product 도 조회할 수 있어야 한다. Controller 에서 Product 목록을 JSON 형태 직렬화하여 반환해야 한다. @Getter @NoArgsConstructor @Entity public class Product extends BaseTimeEntity..
Spring Boot 2.4 profile 구동 방식 Spring Boot 2.4 버전이 릴리즈 되면서 application.properties, application.yml 파일 로드 방식에 변화가 있었다. 설정 파일을 단일 파일로 사용할 경우 해당되지 않겠지만, 각 프로필별 속성이 필요할 경우 변화에 대한 인식이 필요하다. 우리는 시간이 없기에.. 관련 Spring blog 내용을 요약해보았다. . . 우선 크게 관심 갖어야 할 부분은 아래 항목인 것 같다. \1. spring.profiles -> spring.config.activate.on-profile \2. spring.profiles.include -> spring.profiles.group \3. spring.config.activate...
SpringBoot & Mybatis & MS-SQL 오랜만에 Spring Mybatis 설정을 할 일이 생겼는데, 기억이 가물가물해서.. 정리를 해보았다. 하지만, 가급적 메서드 기반으로 쿼리를 생성해주는 Querydsl 을 사용하는 것으로.. Dependency 먼저 Mybatis 와 mssql-jdbc 관련 종속성을 추가해 주자. mssql-jdbc 버전은 java 버전과 mybatis-spring-boot 버전은 spring-boot 버전과 맞춰주자. 아무 버전을 선택했다가.. 종속성 문제로 복잡해 지니 잘 확인해 보자! 😢 pom.xml com.microsoft.sqlserver mssql-jdbc 9.4.1.jre8 org.mybatis.spring.boot mybatis-spring-boot..
Spring Boot API TDD Start 현재 회사에서는 테스트 코드 문화가 없다 보니 간접적인 경험을 많이 해보고자 관련 영상들을 많이 찾아보고 있다. 최근 YOUTHCON'21 을 보고 손주원님이 발표하신 Spring Boot TDD 발표가 너무 인상 깊었고 많은 도움이 되어 정말 간략하게 내용을 정리해 보았다. 미래의 나 혹은 또 다른 누군가가 이 글을 보고 도움이 되길.. 인수 테스트 인수 테스트 (Acceptance Test) 사용자의 시나리오(요구사항)를 기반으로 수행하는 테스트 소프트웨어가 사용자 요구사항을 충족하는지에 대한 테스트가 진행 인수 조건 (Acceptance Creteria) 사용자의 요구사항 @SpringBootTest 통합 테스트를 위한 @annotation 여러 모듈들..
The Scheduled Annotation in Spring @Scheduler를 사용해서 일정한 시간 간격으로, 혹은 특정 일정에 코드가 실행되도록 해보자. Spring Scheduler Dependency Spring Boot starter 에 기본적으로 의존 org.springframework.scheduling Enable Scheduling Project Application Class에 @EnableScheduling 추가 @EnableScheduling // 추가 @SpringBootApplication public class SchedulerApplication { public static void main(String[] args) { SpringApplication.run(Schedu..
Spring MongoTemplate & Pagination 기존 SQL Server / MySQL이 아닌 MongoDB를 활용하여 게시판을 만들게 되었다. 관계형 Database Model과 다른 Document 지향 Database Model로 쿼리도 생소하고.. Spring에서의 사용도 유사하면서 다르다보니 정리해두면 언젠가 쓸모가 있을 듯 하다. 기본적인 내용은 지난번에 작성한 QueryDSL과 Pagination을 활용하여 리스트 검색 기능과 유사하다. 다만, 쿼리 생성 부분이 약간(?) 많이 달라서 정리를 한 번 해보자! MongoDB Dependency 관련 설명은 생략하고, 쿼리 생성 핵심 부분만 훑어보자. Repository import org.springframework.data.mon..
Infinite Scrolling & Pagination Infinite Scrolling 구현에 참고할 수 있는 정말 좋은 자료가 있다. jQuery Infinite Scrolling Demos 속도 개선을 위해 VanillaJs로 구현된 Demo를 활용하여 구현해보자. Demo scrollingTest.html 아래 코드를 적용해보면 바로 동작을 확인해볼 수 있다. Infinite Scroll + Pagination Experiment TEST Apply Demo 코드를 활용해서 적용해보자 ! View infiniteScrolling.html Infinite Scroll + Pagination Experiment TEST Controller GalleryApiController.java @Requir..
Spring Error Handling Custom Error Pages Documentation Spring Boot 는 Error Handling 과정에서 먼저 Custom Error Page 를 찾고, 없을 경우 White label Error Page를 보여준다. Spring Document를 참고하면 Custom Error Pages 를 쉽게 적용할 수 있다. Add Error Pages 특정 상태 코드에 대한 사용자 정의 HTML 오류 페이지를 표시하려면 /error 디렉터리에 파일을 추가하자. 오류 페이지는 정적(static) HTML거나 템플릿(templates)을 사용하여 작성할 수 있다. 파일 이름은 정확한 상태 코드 또는 영상 시리즈 마스크 static HTML file map 404..