본문 바로가기
관리자

Programming-[Backend]/Spring

(76)
[TIL] ResponseEntity<?>, inner class File name too Long ResponseEntity: objectMapper 처리 상황다른 API에 요청을 보내고 ResponseEntity의 파라미터에 ResponseEntity으로 응답 객체의 타입을 구체화하여 받을려고 했다. 문제SomeType과 일치하지 않는 응답이 오면 유연하게 대처가 안된다. 이를 위해 ? 타입이 존재한다. 이렇게 ? 타입으로 유연하게 받은 뒤에 objectMapper 등을 이용하여 json으로 변환하고 다시 읽어들이면 유연하게 응답을 받을 수 있다.  예시ResponseEntity response = imageUpload(file);try { String jsonBody = objectMapper.writeValueAsString(response.getBody()); SomeType imageUp..
[TIL] spring WebFlux, WebClient - 비동기 polling 배경서버에 요청이 들어오면 다른 서버에 비동기적으로 polling 요청을 보내야하는 상황. 처음에는 생각나는대로 while문과 try-catch 문을 사용해 구현했으나, 리팩토링 하다보니 Spring WebFlux를 사용하면 간결한 문법과 함께 polling 시에 벌어지는 여러 상황들을 대처할 수 있는 메서드들이 주어져서 편하게 코딩할 수 있다는 것을 알게되었다. 코드 @Asyncprotected CompletableFuture> pollingAuthResult(String authReqId, String realmId, String clientId, String expiresIn, String interval) { HttpHeaders headers = new HttpHeaders(); hea..
[TIL] Spring Java GC, OOM, JVM Heap dump - Memory Analyzer, pmd OOM, GC스프링 빈은 GC 대상이 되지 않는다.Collection 타입의 변수를 static으로 설정 후 프로그래밍 로직상 제거해주는 로직이 없다면 JVM Heap Memory가 계속 쌓이면서 에러가 날 수 있다.JVMJVM Heap Dump를 뜨는 방법이 있고, AWS S3에 쌓을 수 있다.JVM Heap Dump를 분석하는 도구들이 있다. eclipse의 Memory Analyzer 활용Heap Dump 파일을 업로드하면 메모리를 많이 사용한 변수들을 순위 별로 잡아내준다.정적 분석 도구로 pmd 같은 것들을 적용하면 ci flow에 적용하여 미리 OOM이 날 수 있는 부분들을 체크해볼 수 있다.Pod 로드 시 JVM Option상 -XX DirectMemory 지정값은 통상 Xmx 값의 1/10..
[탐험][자바 스프링 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으로 정렬하고 나머지 다른..
[링크][탐험][작성중] WebMvcConfigurer, WebMvcConfigurationSupport, @EnableWebMvc 전체적 개념 https://goodgid.github.io/Spring-WebMvcConfigurer/ WebMvcConfigurationSupport, WebMvcConfigurer 차이 https://wedul.site/349
[링크] 스프링 AOP 용어 개념 정리 AOP는 Aspect Oriented Programming의 약자이다. 관점에 따라 프로그래밍을 하겠다는 뜻이 된다. 코드에서 공통적으로 나타나는 부가적인 기능을 모듈화하여 하나의 관점(Aspect)로 바라보고 공통화한다. 주요개념 Aspect : 위에서 설명한 흩어진 관심사를 모듈화 한 것. 주로 부가기능을 모듈화함. Target : Aspect를 적용하는 곳 (클래스, 메서드 .. ) Advice : 실질적으로 어떤 일을 해야할 지에 대한 것, 실질적인 부가기능을 담은 구현체 JointPoint : Advice가 적용될 위치, 끼어들 수 있는 지점. 메서드 진입 지점, 생성자 호출 시점, 필드에서 값을 꺼내올 때 등 다양한 시점에 적용가능 PointCut : JointPoint의 상세한 스펙을 정의한..