반응형

Spring Boot

    Spring boot2 resilience4j를 이용한 circuit breaker 사용

    fault tolerance library (장애 허용 시스템) fault tolerance library는 무엇인가? 간단하게 이야기해보자. MSA 환경에서 한 개의 서비스에서 다른 api를 호출 할 때 일시적으로 에러가 발생하고 있다고 가정해보자. 만약 이 시기에 요청이 계속 들어오면 계속 500에러를 내보내게 된다. 그럼 사용자들은 이 서비스에 대해서 신뢰를 잃어 버리게 되고 안좋은 인식을 만들 수 있다. 그래서 특정 api 호출과 같은 작업에 에러가 발생했을 때, 그 횟수를 정해놓고 그 횟수 이상 에러를 초과하면 기존에 설정해 놓은 fallback에 맞게 동작하게 하고 일정 시간 후에 다시 시도하여 진행하는 등에 작업이 필요하다. 이게 바로 fault tolerance library (장애 허용 ..

    Spring Junit5 test Mockito (백기선님 인프런 강의)

    mockito는 실제 객체와 비슷하게 동작하도록 하여 검증할 수 있는 방법을 제공해주는 라이브러리 이다. spring-boot-starter-test 모듈에 기본적으로 포함되어 있으며, 이 모듈을 사용하지 않을 경우 mockito-core, mockito-junit-jupiter 모듈을 추가하면 된다. Mock 객체 만들기 Mock 객체를 만들어서 테스트를 진행할 수 있다. Mock객체로 만들고 싶은 객체에 @Mock 어노테이션을 달기만 하면 되는데 이때 만들어진 Mock 객체는 Null이기 때문에 그렇게 하지 않기 위해서 @ExtendWith(MockitoExtension.class)를 추가한다. @ExtendWith(MockitoExtension.class) class MockWedulTest { @..

    Spring BootJunit5 테스트 (백기선님 인프런 강의)

    Junit 5 테스트 Junit4를 잘 알고 있던건 아니지만 새로 입사한 회사에서 Junit5를 사용하여 테스트 코드를 짜기때문에 더 잘 알고 싶어 공부하게 되었다. 그 중 백기선님의 Junit5 테스트 코드 관련 인강을 인프런에서 듣게 되었다. 내용이 너무 좋았고 그동안 몰랐고 정리가 되지 않았던 부분을 많이 알게 되었다. 이를 아주 간략하게만 정리해봤다. 가격이 그리 비싸지 않기 때문에 한번쯤은 꼭 보는걸 추천한다. https://www.inflearn.com/course/the-java-application-test/# 소개 Junit5는 Junit3, 4에서 사용하던 Junit Platform 구현체 Vintage대신 Jupiter를 사용해서 TestEngine Api를 사용하는 test 프레임워..

    RestHighLevelClient를 사용하여 search after 기능 구현하기

    https://wedul.site/541에서 search after 기능을 사용해서 검색을 하는 이유를 알아봤었다. 그럼 spring boot에서 RestHighLevelClient를 이용해서 search after를 구현을 해보자. 1. Mapping 우선 index가 필요한데 간단하게 상품명과 지역 가격정보들을 가지고 있는 wedul_product 인덱스를 만들어 사용한다. { "settings": { "index": { "analysis": { "tokenizer": { "nori_user_dict": { "type": "nori_tokenizer", "decompound_mode": "mixed", "user_dictionary": "analysis/userdict_ko.txt" } }, "ana..

    Redis에서 Pub/Sub 방식 소개 및 Spring Boot에서 구현해보기

    redis에 추가된 SUBSCRIBE, UNSUBSCRIBE 그리고 PUBLISH는 Publish/Subscribe 메시지 패러다임을 구현한 기능이다. sender(publisher)들은 특별한 receiver(subscriber)에게 값을 전달하는게 아니라 해당 채널에 메시지를 전달하면 그 메시지를 구독하고 있는 subscribe에게 메시지를 전송한다. subscribers는 하나 또는 그 이상의 채널에 구독을 요청하고 publisher가 누구인지 상관 없이 해당 채널에 들어온 모든 메시지를 읽게된다. 이 subscriber와 publisher의 decoupling은 확장성있는 성장을 가져올 수 있다. Redis-Cli로 기능 사용하기 subscriber redis-cli를 열고 SUBSCRIBE 채널..

    Intellij에서 spring boot multi module 사용시 jsp 못찾는 이슈 해결방법

    기존에 공부삼아서 개발중이던 wedulpos에 spring batch를 추가해보려고 했다. 그래서 공통으로 mono 프로젝트로 되어있던 wedulpos를 multi module로 수정했다. 그랬더니 이상하게 servlet context에서 jsp를 로드하지 못했다. 그래서 계속해서 ServletException not include... jsp 또는 ServletException not jsp found 오류가 발생했다. 그래서 엄청난 구글링을 2틀동안했다. 집에서 그리고 약속장소에서 기다리면서 노트북으로 그리고 퇴근하고 오늘.. 정말 가지가지한 방법을 다해봤었다. 기본적으로 embed-tomcat의 경우 jasper를 가지고 있지 못해서 별도의 모듈을 추가하고 servlet jspl 추가했고, comp..

    kafka docker에 간단 설치 후 Spring boot 연동 테스트

    간단하게 Kafka 설치docker-compose.yml 생성 후 docker-compose up -d를 통해 설치12345678910111213141516version: '2'services: zookeeper: image: wurstmeister/zookeeper ports: - "2181:2181" kafka: image: wurstmeister/kafka ports: - "9092:9092" environment: KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_ADVERTISED_HOST_NAME: wedul.pos KAFKA_CREATE_TOPICS: "test:1:1" volumes: - /var/run/docker.sock:/var/run/docker.so..

    생성한 Custom validation으로 에러메시지 출력하기

    바로 직전 https://wedul.tistory.com/562?category=595982 에서 Custom validation을 만들어서 입력된 값에 validation을 체크하는 방법을 알아봤다.그럼 이 validation체크를 통해서 front에 상황에 맞는 에러를 보내줄 수 있도록 조치를 취해보자.우선 @valid 처리를 했었던 컨트롤러에서 에러 메시지를 수집해야한다. 1. ControllerSpring에서 Validation 작업을 진행할 시 validation에 문제가 발생하면 에러 내용을 묶어서 BindingResult로 처리할 수 있도록 제공해준다. 이를 사용하기 위해서 parameter로 BindingResult값을 추가해준다.1234567891011121314/** * 회원가입 * *..

    JPA 매핑 어노테이션 - DDL 2

    엔티티 매핑에서 사용될 컬럼의 필드 유형을 설정하는 매핑 어노테이션을 정리해보자. @Column 테이블에서 사용 되는 컬럼이라는 필드를 지정해줄때 사용하며 name, nullable(기본이 true) 등의 설정을 해줄 수 있다. 12@Column(name = "NAME", length = 10, nullable = true)private String userName;cs @Enumerated 자바의 enum 타입을 매핑할 때 사용한다. 속성으로 EnumType.ORDINAL과 EnumType.STRING이 존재하는데 이름 그대로 ORDINAL은 순서를 STRING은 Enum의 이름을 저장한다12345678910111213141516171819202122232425262728public class Memb..

    Spring Boot Cross Domain 처리

    웹 브라우저에서 같은 도메인을 사용하는 서비스에 대한 요청은 정상적으로 처리가 되나 도메인이 같지 않은 서비스에 요청을 할경우에 오류가 발생한다. 이는 동일 출처 정책(Same Origin Policy) 라는 정책을 두어 다른 도메인의 서버에 요청하는 것을 보안 문제로 간주하고 이를 차단하는 것 때문에 발생한다. Spring Boot에서 간단한 방식으로 해결할 수 있다. 1. 요청에 @CrossOrigin 애노테이션 붙히기12345@GetMapping("/greet")@CrossOriginpublic Greet greeting() { return new Greet("test");}Colored by Color Scriptercs 2. 특정 도메인에서 오는 요청만 받고 싶을 경우.-> 특정 도메인에서 오는..

반응형