Programming-[Backend]/Spring 73

[탐험][자바 스프링 Http 통신하기] 1. URL Connection

Java/Spring을 활용하여 외부 Http 서버에 요청을 보내고, REST 통신을 하기 위한 방법들을 정리한다. 오래된 기술 순으로 나열하면 다음과 같다. URLConnection HttpClient RestTemplate WebClient 실제 Spring 프로젝트를 만들어서 Http 요청/응답 처리를 해보며 각 라이브러리의 사용법 및 장단점 등을 공부해본다. 그 외 부수적으로 초보 개발자가 얻어갈 수 있는 내용들을 정리할 것이다. project stack : java 17, spring boot 2.7.0, maven 4.0.0 / IDE : intellij Ultimate 1. URLConnection 소개 jdk 1.2부터 내장되었다. jdk 1.2는 1998년 Jave SE 1.2로 발표되었..

[TIL] 스프링 트랜잭션 따로 적용 하기 (REQUIRES_NEW), 클래스 분리 필요

스프링에서 트랜잭션을 분리하고 싶을 때, @Transactional(propagation = Propagation.REQUIRES_NEW)로 트랜잭션을 분리하고자 하는 메서드에 어노테이션을 달아주면된다. 이외에도 @Transactional을 분리하는 종류에 대해서는 이전에 정리했었다. [TIL][링크] 트랜잭션의 전파, Spring @Transactional 중첩 그러나 이때, 트랜잭션을 분리하고자 하는 메서드를 반드시 클래스를 분리해서 적용해야한다. 이것은 @Transactional 어노테이션이 Spring의 CGLIB Proxy를 기반으로 동작하기 때문이다. 다시 말해 동일한 Bean으로 등록된 클래스의 메서드에서는 @Transactional을 단일 건으로 취급한다. Proxy로 불러온 빈은 다른 클..

[TIL]PageableDefault는 non-deterministic sort를 한다

SpringData에서 사용하는 @PageableDefault는 non-deterministic sort를 발생시킨다. 따라서 사용을 자제하는 것이 좋은 것 같다. 경우에 따라서는 편하거나, 다른 방법이 있을수도 있지만... 용법 public PageRm getXxxList( @PageableDefault(size = 25) final Pageable pageable, @Valid XxxPo xxxPo) { return something...; } 현상 및 원인 @PageableDefault를 적용하면 1개 항목에 대해서만 sort를 하도록 되어있기 때문이다. (아래 사진 및 참조 1) 따라서 10개의 컬럼이 있는 리스트인데, 예를 들어서 name.asc로 정렬을 했다면 name으로 정렬하고 나머지 다른..

[링크] 스프링 AOP 용어 개념 정리

AOP는 Aspect Oriented Programming의 약자이다. 관점에 따라 프로그래밍을 하겠다는 뜻이 된다. 코드에서 공통적으로 나타나는 부가적인 기능을 모듈화하여 하나의 관점(Aspect)로 바라보고 공통화한다. 주요개념 Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능 PointCut : JointPoint의 상세한 스펙을 정의한..

[TIL][링크] 트랜잭션의 전파, Spring @Transactional 중첩

참조 링크의 블로그에 너무 잘 정리되어 있어서 읽어보면 될 것 같다. 요약하자면 다음과 같다. 스프링에서는, @Transactional의 propagation 설정을 통해 트랜잭션의 전파를 설정할 수 있다. 1. REQUIRED 기본 설정은 REQUIRED이다. 트랜잭션A(부모) 내부에 트랜잭션B(자식)가 실행되는 경우, 트랜잭션A에 트랜잭션 B가 합류한다. 다시말해 커밋이나 롤백의 기준이 트랜잭션 A만 존재하는 경우와 같다. 아래는 자식 트랜잭션에 주는 속성을 소제목과 같이 바꿨을 때의 동작 방식을 설명한다. 2. REQUIRES_NEW A, B 개별 트랜잭션으로 취급한다. 각각 커밋과 롤백이 이루어진다. 3. MANDATORY 부모에 자식이 합류한다. 다만, 부모 트랜잭션이 없으면 에러가 발생한다. ..

[TIL][Thymeleaf] String null 처리 : #string.defaultString

#strings의 메서드들을 사용하면 객체의 값이 null 일때 처리할 값을 지정할 수 있다. Elvis(?:) 문법을 써도 되지만, 여러 객체가 한 번에 표시될 때는 #strings의 메서드를 활용해야한다. 1 2 3 4 Colored by Color Scripter cs 이렇게 쓰면, 만약 4개의 값 중 세번째 값인 XxxEntity.attr.address.detail 값이 null일때는 , default로 빈 공백(' ')을 넣어준다. 참조 https://cizz3007.github.io/타임리프/syntax/thymeleaf/2018/04/10/thymeleaf2/

[스프링 웹MVC-2] 21. 업로드, 다운로드 기능 구현 예제

여러 개의 파일을 한 번에 업로드 하는 방법, 업로드 파일을 브라우저 상에서 확인하도록 하는 방법, 다운로드 하는 방법에 대해서 학습해본다. 기존 파일에 도메인 코드를 추가하여 진행한다. 각 메서드나 방법론 보다는 전체적인 파일 전송 방식에 대한 이해가 중요하다. 1. 도메인 생성 Item 클래스의 필드값은 상품의 이름, 다운로드할 수 있는 상품 이미지, 조회했을 때 표시되는 이미지 리스트를 필드값으로 한다. 그리고 업로드된 파일의 이름을 저장할 수 있도록 UploadFile 클래스를 만든다. java/hello/upload/domain/Item.java 1 2 3 4 5 6 7 8 9 @Data public class Item { private Long id; private String itemName..