728x90

전체 글 288

CircuitBreaker, Resilience4j, RestClient

CircuitBreaker 회로차단기를 뜻으로 (금융·주식 파동에 대비한) 거래 일시 중지 (조치), 안전 장치. 라는 뜻도 가지고 있다. 프로그래밍에서도 비슷한 의미로 사용되며 API를 통한 외부 서비스와의 통신이 많은 MSA 환경에서 반드시 필요한 개념이다. 예를 들어 A서비스에서 B서비스의 API를 사용하고 있는데 B서비스에서 장애가 발생했다고 가정해보자. 장애에는 여러가지 상황이 있을 수 있는데 대표적으로 서비스가 아예 죽었거나 갑자기 트래픽이 몰려 처리 시간이 오래 걸리는 경우를 생각해볼 수 있다. 타겟 서비스가 아예 죽어있는 상황이라면 그나마 나은 편에 속한다. 일반적으로 호출하는 서비스에서는 이러한 상황에 대해 예외처리를 해놓았을 것이기 때문이다. 별도의 공통 에러 페이지를 띄우는 것이 바로..

Backend/Spring+Boot 2021.07.09

슬라이딩 윈도

슬라이딩 윈도(Sliding window)는 두 개의 네트워크 호스트간의 패킷의 흐름을 제어하기 위한 방법이다. TCP와 같이 데이터의 전달을 보증하는 프로토콜에서는 패킷 하나 하나가 정상적으로 전달되었음을 알리는 확인 신호(acknowledgement, 이하 ACK)를 받아야하며, 만약 패킷이 중도에 잘못되었거나 분실되어 확인받지 못하는 경우, 해당 패킷을 재전송해야하는 필요가 있다. 슬라이딩 윈도는 일단 '윈도(메모리 버퍼의 일정 영역)'에 포함되는 모든 패킷을 전송하고, 그 패킷들의 전달이 확인되는대로 이 윈도를 옆으로 옮김(slide)으로서 그 다음 패킷들을 전송하는 방식이다. 슬라이딩 윈도는 아직 확인을 받지 않고도 여러 패킷을 보내는 것을 가능케 하기 때문에, 매번 전송한 패킷에 대해 확인을 ..

Base/개념정리 2021.07.09

동기/비동기, 블로킹/논블로킹, 동시성/병렬성

Spring 환경에서 역사가 깊고 가장 흔하게 사용되는 @Async 를 생각해보자. 우리는 이를 통해 논블로킹/비동기 로직을 만들 수 있다. 사실 비동기라는 표현이 대중적으로 사용되지만 논블로킹이라는 표현도 적지 않게 사용된다. 일반적으로 블로킹==동기, 논블로킹==비동기 공식은 성립하지만 용어가 다른만큼 각각이 의미하는 바도 다르므로 이를 정확하게 이해하고 넘어갈 필요가 있다. 일반적으로 어떠한 test_1(), test_2(), test_3() 이라는 메소드를 순차적으로 호출하면 직전 메소드의 실행이 종료된 뒤에야 다음 메소드가 실행되고 이를 블로킹 방식이라 한다. 하지만 @Async를 사용하면 별도의 스레드에서 작업을 처리하기 때문에 직전 메소드의 종료와 무관하게 곧바로 다음 메소드가 실행되도록 할..

Base/개념정리 2021.07.08

ObjectMapper json 직렬화/역직렬화 주의사항

1. 직렬화를 위해서는 각 인스턴스 변수에 대한 Getter 메소드가 포함되어 있거나 각 인스턴스 변수에 @JsonProperty 가 명시되어 있어야 한다. 이는 택1로 적용하면 된다. 2. 역직렬화를 위해서는 기본생성자가 반드시 필요하다. 각 인스턴스 변수에 대한 Setter 메소드가 필수로 필요하진 않지만 존재한다면 그것을 활용한다. 3. 일반적으로 ObjectMapper 는 기본으로 쓰지 않고 아래와 같이 재정의해서 프로젝트에서 static 메소드로 사용한다. public class ObjectMapperUtils { private static final ObjectMapper mapper = new ObjectMapper(); static { mapper.registerModule(new Java..

Backend/Spring+Boot 2021.07.07

@RequestMapping consumes, produces

@ReqeustMapping 정의시 아래와 같이 consumes와 produces 를 정의할 수 있다. @RequestMapping("/test" , consumes = MediaType.APPLICATION_JSON_UTF8_VALUE , produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public String hello(){ return "hello"; } consumes 는 클라이언트로부터 수신하고자 하는 데이터 포맷을 지정하는 것이고 produces는 서버에서 응답하고자 하는 데이터 포맷을 지정하는 것이다. 클라이언트 입장에서는 서버쪽 api 호출시 보낼 데이터의 포맷을 Content-Type 이라는 헤더값으로 명시하고 응답받을 수 있는 데이터 포맷을 Ac..

Backend/Spring+Boot 2021.07.07

MapStruct 참고

https://meetup.toast.com/posts/213 Object Mapping 어디까지 해봤니? : NHN Cloud Meetup 이 글에서는 Object Mapping 라이브러리인 MapStruct에 대해 소개합니다. NHN Forward 2019에서 발표한 내용에 대해 조금 더 자세히 설명합니다. meetup.toast.com 사실 ObjectMapper 에서도 convertValue() 라는 메소드로 객체 매핑을 지원한다. 또한 이보다 객체매핑에 특화된 ModelMapper나 Orika 같은 라이브러리도 있다. 그런데 ObjectMapper, ModelMapper, Orika의 가장 큰 단점은 runtime 시점에 reflection을 통해 맵핑을 하기 떄문에 맵핑 객체의 사이즈가 커질수..

CDN

Contents Delivery Network의 줄임말로 콘텐츠 전송 네크워크를 의미한다. 대용량 또는 사용자의 잦은 요청이 있는 컨텐츠들을 엑세스 하려는 곳에서 지리적으로 더 가까운 Cache 서버에 분산 배치하여 응답속도를 높히고 컨텐츠의 전송 중 발생하는 트래픽 집중 & 병목현상 및 데이터 손실을 해결하기 위해 등장한 컨텐츠 전송 기술이다. 참고: https://ijbgo.tistory.com/32

Base/OS, Network 2021.06.11
728x90