Programming-[Backend]/SpringBoot (22) 썸네일형 리스트형 Swagger UI(feat. keycloak Open API) 1. Swagger UISwagger UI라는 도커 이미지가 제공된다!https://github.com/swagger-api/swagger-ui/blob/HEAD/docs/usage/installation.md docker run -p 80:8080 swaggerapi/swagger-ui 해당 도커 컨테이너를 실행하고, localhost로 접속하여 위 쪽 입력창에 .json 파일의 웹 주소를 입력하면 API를 사용할 수 있는 Swagger 문서가 생성된다. 나는 keycloak의 REST API를 확인해보기 위해서 keycloak의 OPEN API 문서의 주소를 붙여넣었다.https://www.keycloak.org/docs-api/latest/rest-api/openapi.json 2. Ke.. [TIL] @JsonInclude: 응답 객체 json의 끝부분이 깨질 때 문제외부 서버에서 응답을 받아왔는데, 맨 끝에 }로 json이 닫히는 부분이 제대로 오지 않아서 parsing이 일부 실패하여 오류가 나고 있었다. 원인Ro 객체로 응답을 지정하고 있었는데, body의 마지막 데이터들이 results가 아닌 code, name, description 속성값들이 모두 null로 오고 있었다. json에는 null이 없으므로 null이 맨 마지막에 오면 역직렬화 시에 위와 같이 불완전한 parsing이 일어날 수 있다. 해결책 1. 응답하는 쪽에서 null 데이터가 있는 경우 "null"로 String 처리해주는 것이 좋다.2. Ro 객체에 아래처럼 @JsonInclude(JsonInclude.Include.NON_NULL)을 추가해주면 null 데이터는 역직렬화시에 무시되.. CircuitBreaker: Resilience4j - 지연 및 실패 전파 방지하기 배경여러 서비스들을 운영하는 환경에서 Gateway처럼 공통으로 쓰는 서버가 있다고 가정해보면, 이 공통으로 쓰는 서버에서 지연이 발생했을 때 해당 지연이 모든 서비들로 전파되는 문제가 발생할 수 있다. 이를 막기 위해 Resilience4j 라이브러리의 CircuitBreaker 기능이 있다. 일정 호출 수, 지연 시간 등의 기준을 두고 그 시간이 넘어가면 빠르게 각 서비스들에 Response를 주는 방식이다. 그럼 지연 대기를 위해 각 서비스에서 대기 중이던 스레드들이 Response를 빠르게 받고 자원 해제가 되어 부하 지연 전파가 없어지게 된다. 더 자세한 내용은 참고 자료들을 보면 된다.ref.) https://wellbell.tistory.com/256 적용 내용 살펴보기 아래와 같이 설.. 스프링 데이터, 파일 동시에 전달 시 Swagger Schema 표시 개요정확한 내용은 아니다. 그런데 찾아봐도 답이 없는 것 같아서 기록해둔다. 상황스프링 부트 및 Swagger를 사용하여 컨트롤러에서 입력 객체(po)와 파일 업로드 리스트를 동시에 받아야하는 상황이 생겼다.@PostMapping(value = "send/mms/{type}", consumes = {MediaType.MULTIPART_FORM_DATA_VALUE, MediaType.APPLICATION_JSON_VALUE}) public ResponseEntity sendMms( @Parameter( ... ) @PathVariable("type") @ValidType(prefix = "mms") Stri.. testcontainer 자바 도커 컨테이너 테스트: @ExtendWith, @DirtiesContext 1. testcontainer 개요 testcontainer는 테스트 시에만 사용할 수 있는 컨테이너를 실행시켜준다. 애플리케이션 실행에는 필요없지만 테스트만을 위해 컨테이너가 필요한 경우 해당 이미지를 구동시켜주는 것이다. 만약 테스트를 위해 MySQL DB가 필요하다면 testcontainer가 없는 경우 SpringBoot가 제공하는 In-memory DB를 이용하거나 따로 DB용 컨테이너를 실행해야할텐데, testcontainer는 그러한 과정 대신 테스트가 실행될 때만 MySQL용 컨테이너를 띄워주고 테스트가 끝나면 해당 컨테이너를 종료시킨다. build.gradle에 아래처럼 추가해준다.dependencies { ... testImplementation "org.testcontainers.. Mapstruct 기능 기록 uses, expression, @Named, qualifiedByName Mapstruct로 Mapping 할 때, 유용했던 기능에 대해서 정리한다. uses특정 객체 내부에 다른 객체가 list로 포함된 경우 uses를 사용해서 list 객체의 매핑을 자동으로 할 수 있다. //Mapper 내부에 uses로 사용@Mapper(componentModel = "spring", uses = {TaxPoToTaxDtoMapper.class})public interface GoodsPoToGoodsDtoMapper extends BasePoDtoMapper { GoodsDto copy(GoodsPo source);}// GoodsPo: List가 포함되어 있다public class GoodsPo extends BasePoAbstract { private String id;.. @SpringBootApplication 이해하기 1. @SpringBootApplication 소개 IntelliJ IDE에서 Spring Initializr를 통해 프로젝트를 새로 생성하면, 따로 Spring 관련 라이브러리들(ex. Spring Web 등)을 추가해주지 않더라도 java/main 메서드의 최상위 클래스 위에 @SpringBootApplication 어노테이션이 설정된다. 이 글에서는 해당 어노테이션의 기능에 대해서 정리해보고자 한다. 2. @SpringBootApplication의 기능 @SpringBootApplication은 Spring Bean 설정 기능과 라이브러리들의 의존성 추가 작업을 해준다. 즉 @EnableAutoConfiguration, @Configuration, @ComponentScan 어노테이션이 주 기능이라.. [탐험]Spring MVC, String 전체 앞 뒤 공백 제거하기! - MappingJackson2HttpMessageConverter, @JsonFormat, StringTrimmerEditor 1. 목표 SpringMVC를 이용하는 프로젝트에서 클라이언트의 입력값으로 들어오는 String 문자열 값의 앞 뒤 공백을 제거한다. "이름" : " 컴퓨터 탐험가 " -> "이름" : "컴퓨터 탐험가" 위와 같이 String의 앞 뒤 공백을 제거하는 것을 Java, Spring 쪽에서는 trim이라고 한다(자바스크립트에서도). 이 글의 목표는 프로젝트 전체에서 String값을 trimming하는 방법에 대해 정리하는 것이다. 개별 필드에 대한 trim에 대해서도 조금은 다룬다. 2. 방법과 적용 범위 집중적으로 다룰려고 하는 내용은 프로젝트 전체에서 trim을 적용하는 방법이다. 다만 이럴 경우 사용자가 의도적으로 문자열 앞뒤로 공백을 넣는 경우는 작동하지 않게될 수 있다. 예를 들어 비밀번호 입력 시.. 이전 1 2 3 다음