본문 바로가기
반응형

전체 글1072

Spring Batch (part 1. 소개) 스프링에는 다양한 기능들이 있고 우리가 실제로 사용하는것은 프로젝트에 맞게 다양하다.지금까지 다뤄온 글들과는 다른 기능을 하나 소개 해보려고 한다. 먼저 이름을 소개하면 스프링 배치 이다.자세한 내용은 스프링 공식 홈페이지에서 확인을 해볼수가 있다.https://spring.io/projects/spring-batch Spring BatchSpring Batch provides reusable functions that are essential in processing large volumes of records, including logging/tracing, transaction management, job processing statistics, job restart, skip, and resour.. 2022. 8. 25.
스프링 웹플럭스(webflux) 지금까지의 기존의 스프링에서는 request 와 response 가 명백히 존재했다. 하지만 요즘 같은 시대에는 동시에 여러개의 작업이 이루어지고, 그러면서 나오는 개념이 동기식/ 비동기식, 그리고 블로킹/ 논블로킹의 개념이다. 해당 개념에 대해서는 아래 참고 포스팅을 확인해보도록 하자. 그리고 또한 요즘에는 리액티브 프로그래밍이라 하여 "리액티브(reactive)"란 용어는 I/O 이벤트에 반응하는 네트워크 요소, 마우스 이벤트에 반응하는 UI 컨트롤러 등 변화에 반응하는 것을 중점으로 둔 프로그래밍 모델을 말한다. 그런 의미에서 논 블로킹(non-blocking)은 리액티브다. 이유는 블로킹되지 않고 작업이 완료되거나 데이터가 사용 가능해짐 등과 같은 알림에 반응하기 때문이다. 수많은 요청에 의해 응.. 2022. 8. 24.
Optional 이란? 지난 포스팅에서 dto 변수의 null 에 대한 포스팅을 다뤄본적이 있다. 관련 내용은 아래 참고 포스팅에 존재한다. 하지만 변수가 null이 아니라 dto 자체가 예를들어 쿼리의 결과가 없어서 dto 자체가 null이 될 경우가 있다. 물론 이럴경우는 전처리에서 if (dto ==null){ 으로 하면서 return 을 시켜주거나 혹은 초기값 설정등으로 처리할수 있지만 null을 미리 체크를 해볼수가 있다. 그때 사용하는것이 Optional이다. Rest를 사용할 경우에를 예로 들어보면 repository 에서 받을때 ExampleDto findById(String id); 이렇게 findById 에 대한 변수 결과를 받는것이 아니라. Optional findById(String id); 이런 식으로 .. 2022. 8. 23.
@Valid annotation (BindingResult, Error)(유효성 검사) 지난번에 다뤘던 포스팅 중에서 not null관련 포스팅도 존재하고, jackson 관련 포스팅도 존재한다. 둘의 공통점은 dto 등에서 변수에 설정을 걸어주는것이다. 하지만 이 둘 말고도 또다른 annotation이 존재하는데 그것들에 대해서 잠깐 소개 하고 valid annotation으로 한번에 유효성 검증을 하는 법에 대해서 소개해보려고 포스팅을 작성한다. 위에 두가지 경우에 대해서는 아래 참고 포스팅을 참고해보길 바란다. 오늘 사용할 annotation 관련은 import javax.validation.constraints.*; 임포트를 따른다. Anotation 제약조건 @Size(min=,max=) 문자열, 배열등의 크기가 만족하는가? @Pattern(regex=) 정규식을 만족하는가? @M.. 2022. 8. 22.
querydsl 동적 쿼리 관련 JPA 를 사용하며 좀더 유연한 쿼리를 위해 querydsl을 선택을 많이 하곤 하는데, querydsl 을 사용하는 이유 중 또 하나는 동적 쿼리 이다. 그중 조건문을 걸기 위한 동적 쿼리에 대해서 특히 많이 사용이 된다. 그중 많이 사용되는 BooleanBuilder, BooleanExpression을 다뤄볼 것이다. 사용법은 다음과 같다. BooleanBuilder BooleanBuilder builder = new BooleanBuilder(); if (!StringUtils.isEmpty(name)) { builder.and(academy.name.eq(name)); } if (!StringUtils.isEmpty(address)) { builder.and(academy.address.eq(ad.. 2022. 8. 21.
jackson annotation 관련 자바에서 , 특히 dto 에서 많이 사용하는 jackson 관련 annotation을 소개하려고 한다. dto 에 대한 정의는 아래 참고 포스팅을 확인해보는것을 추천한다. @JsonProperty 는 json을 받는 쪽에서 이름을 지정하여 받게 한다. @JsonProperty("bookid") private int book_id; 이렇게 되어있다면 실제로는 book_id 인데 bookid로 보내진 값을 book_id 값에 담는다. @JsonUnwrapped 는 dto 안에 다른 dto가 선언 되어있으면 실제로 json 형식으로 받을때 "a":{ "b":"value", "c":{ "d":"value", "e":"value2" } } 이렇게 받아지는것을 C에다가 해당 어노테이션을 달 경우 "a":{ "b":.. 2022. 8. 20.
안티패턴이란? 안티패턴이란 소프트웨어 공학 용어로 자주 사용되지만 불필요하거나 잘못 사용되고 있는 습관을 말한다. 단순 잘못된 습관에서 그치면 그만이지만 가독성을 떨어뜨리거나, 실제 불필요한 소스로 자원을 낭비하거나, 보안의 문제 등 때문에 지양하는 패턴이다. 다양한 이유가 있지만 대표적으로 많이 사용하는 사례들을 정리해보면 다음과 같다. if, while, for 문 등 한줄로 만들기 금지 오히려 짧은 코드를 만들기 위해 간단한 반복,조건문들을 한줄로 만드는 코드들이 간혹 보이는데 이는 오히려 가독성을 떨어뜨려 안좋은 코드라고 할수 있다. 반복문에서 배열의 크기 같은것은 변수로 지정해놓고 사용을 해야함 만약 반복문 안에 (for 문에 조건 거는것 말고 반복문 안에) if ( a> list.length()) 이런 코드.. 2022. 8. 19.
Entity, DTO, VO 차이 자바에서는 객체를 구현하는 다양한 방법이 있는데 대표적으로 Entity, DTO, VO 이렇게 세가지가 있다. 이들에 대해서 다뤄보려고 한다. 먼저 세가지를 분명하게 구분하는 이유는 다음과 같다. Entity와 DTO를 분리해서 관리해야 하는 이유는 DB Layer와 View Layer 사이의 역할을 분리 하기 위해서이다. DB Layer = Persistence Tier, View Layer = Presentation Tier Entity는 실제 테이블과 매핑되어 만일 변경되게 되면 여러 다른 Class에 영향을 끼치고, DTO는 View와 통신하며 자주 변경되므로 분리 해주어야 한다. 결국 DTO는 Domain Model 객체(Entity)를 그대로 두고 복사하여, 다양한 Presentation Lo.. 2022. 8. 18.
JPA, Hibernate, Spring Data JPA 저번 포스팅에서 jpa에 대한 내용은 이미 다룬적이 있다. 참고를 하실 분들은 아래 참고 포스팅에서 직접 확인을 해보기 바란다. 이번 포스팅에서는 해당 JPA를 사용하는데 많이 나오고 함께 공부해야하는 hibernate와 비슷한 이름의 Spring Data JPA 에 대해서 함께 비교하며 얘기를 해볼까 한다. JPA공부를 시작함에 있어서 많이들 헷갈려 하는 부분이 JPA와 Hibernate와의 관계다. 동영상강의에서는 처음에 EntityManager를 활용하여 Data를 삭제 저장 업데이트를 하지만, 실제 실무에서는 EntityManager를 사용하지 않고 Repository 인터페이스 만을 이용해서 JPA를 사용을 주로 한다. 만약 querydsl 까지 다루게 되면 EntityManager를 좀더 다.. 2022. 8. 17.
반응형