Spring
Hibernate 신기능 @SoftDelete 기능
Hibernate 신기능 @SoftDelete 기능
2024.04.10Spring Boot도 벌써 3.2.X버전대가 릴리즈 되었고, 그에 따라서 자동으로 하이버네이트도 마이너 버젼 업데이트가 되었습니다. 6.4 버젼부터 해당하는 기능을 사용할 수 있습니다. 해당하는 기능을 한번 사용해보고 싶어서 테스트 해봤습니다. 일단 기본적으로 스프링 부트는 3.2.1 부터 사용 가능할 수 있으므로 참고 부탁드립니다. 기존에 사용하던 Soft Delete 방식 기존에는 Soft Delete기능을 사용하기 위해서는 개념적으로 사용해야하는 @Where절과 같은 기능을 사용하여, 삭제 컬럼에 대한 flag에 대한 조건을 엔티티 자체에 붙여서 사용해야했다. 그리고 삭제조건을 자동으로 update절로 바꿔서 처리할 수 있는 @SqlDelete문 과 같은 어노테이션이 필요했다. 즉, 개념적인 So..
@JsonInclude란?
@JsonInclude란?
2024.02.04일단 글또 5주차를 맞이하여 테크테크스러운 글을 많이 작성하고 있다. 특히 요즘에는 별다른건 아니고, Jackson에 좀 꽂혀서 요즘 Serialize 혹으 Deserialize하는 방식에 대해서 어떤식으로 작동하는 거고 해당하는 코드들이 어떤 일련의 과정 속에서 움직이는 게 궁금했었다. 일단 기본적으로 Include를 많이 사용은 하는데 어떤 상황에서 사용하는게 좋을지 취사선택해야하는 경우가 많은데, 해당하는 값을 어떤식으로 처리하는게 좋을지 궁금해졌다. 사실은 Include nonNull 동작원리를 찾다가 동작방식을 찾아내질 못해서, 다른 주제로 선회하긴했다. 찾아보니까 이렇게 딥한 내용이었나 싶어서 좀 더 구체적으로 테스트 해봐도 좋겠다싶었다 JsonInclude란? 일단 JsonInclude라는 ..
부모 - 자식 관계에 있는 DTO를 효과적으로 표현하는 JsonTypeInfo Deduction기능을 알아보자.
부모 - 자식 관계에 있는 DTO를 효과적으로 표현하는 JsonTypeInfo Deduction기능을 알아보자.
2024.01.21왜 쓰게 되었나.. 일단 회사 프로젝트가 잦은 야근으로 지난주를 훌렁 날려버린 나는 현재 눈물의 개발 글쓰기를 진행중인데, 해당하는 프로젝트 진행도중 Request는 공통정보가 있지만, 각 3rd-party 서비스 추가 응답을 활용해서 각각의 응답에 따라 다른 API를 넘겨줘야하는 상황에 봉착했다. 해당하는 프로젝트에서 중복적으로 많이 사용되는 field가 있었고.. 해당하는 필드를 각 DTO별로 중복적으로 사용하는건 좀 귀찮은 일이기도 하니.. 해당하는 형태를 부모-자식 형태를 통해 상속으로 처리를 하려했다. 상속의 경우 Json Serialize가 값으로 처리되기가 곤란한 경우가 종종 있었는데, 특히나 Spring boot에서 별다른 어노테이션이 없이 무자비하게 떨렁 응답에 대한 처리를 해봤자.. 상..
테스트 코드를 짜고는 싶은데, 테스트 실패시 빌드 실패가 걱정된다면?
테스트 코드를 짜고는 싶은데, 테스트 실패시 빌드 실패가 걱정된다면?
2023.09.02test.onlyIf { !project.hasProperty('test') } 다음처럼 작성해주면, 테스트 프로퍼티가 있는경우 혹은 해당 프로퍼티의 존재 여부를 따져서 테스트에 대한 실행을 막는다. 위에는 스크립트문으로 강제하는 방법이라면, 명령어로 강제하는 방법도 있음. gradle build -x test 하지만, 실제로 빌드 환경을 구축해두면 스크립트로 테스트가 다 돌아가므로, 굳이 아래 스크립트문 까지 사용하는 것보다는 위의 빌드 제약 조건으로 걸어 주는게 더 좋다고 생각한다. 물론 스크립트로 테스트가 돌아가는 것은 gradle build 스크립트를 반드시 돌리는 상황이 생겨서 그런거지.. 우리가 직접 스크립트문을 작성해서 돌린다면, 스크립트 명령문으로 강제 할 수는 있다 출처 https://a..
Spring boot build gradle에서 test task시 하면 좋은 것.
Spring boot build gradle에서 test task시 하면 좋은 것.
2023.09.02build.gradle 파일에서 tasks.named('test') }{ useJunitPlatform() } 이렇게 많이 쓰는데, gradle 가이드 문서에서 추천하는 방식은 다음처럼 tasks.named('test', Test) }{ useJunitPlatform() } 이래야지 useJunitPlatform이 메소드 역할을 하는것. 참고로 Spring Boot 기본 설정에서 제공하는 양식이 위의 양식으로 build.gradle이 되어있어서 그런거지 실제로 gradle 버전업을 통해서 적용 해야할 문법은 아래가 맞다 물론 없어도 동작은 하는듯한데.. 암튼 공식문서에선 그랬다. https://docs.gradle.org/current/userguide/java_testing.html#sec:java_t..
Spring 설정파일 우선순위
Spring 설정파일 우선순위
2023.04.11Application.yaml 설정 파일 실행시 우선순위 매번 까먹어서 한번 재대로 정리해봄 default 셋업 아래에 on-profile 설정되어있는데 안먹어서 왜 안먹나 했더니 application.yaml이 우선순위가 높아서 default 옵션을 무시하고 다른 옵션이 들어가버려서 안되길래 도대체 어떤식으로 해결해야하는지 확인해봤다. 이경우에는 application.yaml에 profile이 있으면 됨 혹은 아예 파일이 따로 존재한다던지 여러가지 방법이 존재하니 참고 Application.yaml은 다음과 같은 우선순위를 가지게된다. 1. [Application properties](https://docs.spring.io/spring-boot/docs/current/reference/html/fea..
Spring boot 3.0.0 SQL Basic Binder 로깅 안되는 문제 해결기
Spring boot 3.0.0 SQL Basic Binder 로깅 안되는 문제 해결기
2022.12.02스프링부트에서 SQL문을 로깅하자 JPA에서 sql문 로깅하기 위해서는 application.yml에서 로깅레벨이나 옵션 사용해서 문제해결을 한다. spring: jpa: properties: hibernate: format_sql: true use_sql_comments: true logging: level: org.hibernate.SQL: debug org.hibernate.type.descriptor.sql: trace 이러면 JPA를 통해서 만들어지는 SQL문을 확인해볼 수도 있고… SQL문에서 발생하는 ?를 통해 들어가진 값들도 확인이 가능하다. 아래는 2.7.6 Spring boot 버젼입니다. 아래는 3.0.0 Spring Boot 버젼입니다. Spring Boot 3.0.0 버젼으로 넘어..
Spring RestDocs를 통한 Swagger 페이지 구축기 - 1. 구성하기
Spring RestDocs를 통한 Swagger 페이지 구축기 - 1. 구성하기
2022.07.24테스트 코드로 API docs 관리를 할 수 있다고? Spring Rest Docs 라이브러리는 테스트 코드를 작성하면 Asciidoc 파일을 통해서 테스트 코드를 구현할 수 있다. 하지만, 불편한 점들이 눈에 밟혔다. Asciidocs 파일에 대한 이해도가 반드시 필요했으며, Rest Docs가 기본적으로 제공하는 Docs 제공 하는 페이지가 나랑 취향이 너무 안맞았다. 솔직히 보면서 이렇게 까지 써야할까라는 생각을 했었는데… 웹사이트를 뒤적뒤적 거리다 마침 RestDocs 테스트 코드를 바탕으로 Swagger 문서를 구성할 수 있는 라이브러리를 찾아, 그 기능을 사용해보기로 했다. 구축기 가장 본 바탕이 되었던 이 레포지토리를 기준으로 개발 환경 세팅 방법을 확인하자. https://github.co..
Slack으로 Spring boot 에러 로깅 관제하기
Slack으로 Spring boot 에러 로깅 관제하기
2022.07.18토이프로젝트에 로깅은 필수.. 로깅(log)은 프로젝트를 처음 접해본 사람이 아니면, 솔직히 한번쯤은 겪고 가야할 문제이다. 로깅 자체의 구현이 어렵진 않을 것이다. Spring과 같은 Web Framework에서는 이미 로깅 프레임워크를 제공해주기 때문이다. 그중에서 우리는 logback 기능을 활용해서, 서비스를 구현해놓는게 심적으로 편하다. (이미 구현되어있으니까) 로깅 다 좋은데 말야… 로깅이 에러 대응과 같은 역할을 하는게 있고, logback에서는 파일, 콘솔과 같은 툴로 이미 로그를 여러 모습으로 관리를 해주고 있기 때문에, 우리가 이러한 로그 파악에 있어서 파일을 통한 로깅, 혹은 콘솔창에 대한 로그를 통해서 확인을 해줄 수 있다. 문제는 그것이 실시간성으로 확인이 어렵다는 점이다. 왜냐하..
스프링 롤백 테스트 하는 방식에 대한 생각
스프링 롤백 테스트 하는 방식에 대한 생각
2022.05.01JPA 관련해서 게시물 찾다가 위와 같은 블로그를 발견했어서 무슨 문제인지를 파악해보고 싶어서 해결기와 관련한 글을 작성해보았습니다 https://ttl-blog.tistory.com/523?category=906284 [JPA] 살려주세요 문제 상황을 간단하게 나타내 보도록 하겠습니다.. TestEntity @Getter @Setter @NoArgsConstructor(access = AccessLevel.PROTECTED) @Entity public class TestEntity { @Id @GeneratedValue(strategy = Generat.. ttl-blog.tistory.com TL; DR! 블로그의 질문 사항의 핵심은 롤백 상황을 테스트 환경에서 테스트 가능하도록 만드는것이었다. 블로..
Spring Batch를 활용한 토이프로젝트 - 1. 영화 업체를 가져와보자!
Spring Batch를 활용한 토이프로젝트 - 1. 영화 업체를 가져와보자!
2022.03.13안녕하세요. 2021년도 연말에 회사에서 사내 배치 프로그램을 만들일이 있어서 어떤 툴을 쓸지 고민하던 도중 Spring 공부에도 큰 도움이 되지 않을까 싶어서 Spring Batch를 공부하기 시작했었습니다. 실제로 Spring Batch에 대해서 공부하는데 큰 도움을 줄만한 게 뭐가 있을까 고민해보았는데요. 아무래도 가장 큰 도움을 줄만한 건 딱봐도 토이(파일럿) 프로젝트 같았습니다. 그래서 어떤 프로젝트를 하는게 좋을지 큰 고민을 했었는데 Spring Batch 관련한 토이프로젝트를 만들어주셨던 한 블로그에 글에 큰 도움을 받아 형식은 좀 다르지만, 여러 가지 Batch에 대해서 구현을 해보았습니다. Spring Batch를 공부하시는 분들이라면, 어느 정도의 절차를 바탕으로 진행하면서 점진적으로 ..
Spring Batch Partition 병렬 처리 해결기
Spring Batch Partition 병렬 처리 해결기
2021.12.19TL;DR 병렬처리는 아예 ItemReader에 AbstractPagingItemReader 재정의후 페이징 doPageRead() 재정의하면 쉽게 처리가능. ListItemReader에는 InputStreamReader가 없어서 non-thread-safe해서, 아예 병렬처리 없이 싱글 스레드로 돌았던 것. 해결을 위한 여정.. 병렬 처리는 스프링 배치에서 여러가지 방법을 제공해주는데 그중 가장 좋은 방법인 partition방식을 이용해서 해결하려 했다. 문제는 병렬처리는 마음처럼 잘 해결이 안되는 게 문제였는데, 동기식으로 Blocking되는 방식으로 시스템이 돌아갔던것이 가장 큰 문제였다. 배치 개수 배치 방법 시작 시간 종료 시간 총 걸린시간 비고 700개 partition 2021년 12월 10..