분류 전체보기 77

보상트랜잭션

Rollback은 @Transactional 어노테이션으로 보통 하게 되는데 UncheckedException인 RuntimeException때 default로 rollback된다. CheckedException인 다른 Exception은 throw를 해도 rollback되지 않는다. NullPointerException이 Runtime Exception의 예. @Transactional 어노테이션 방식과 EntityManager를 써서 begin, commit, rollback하는 방식이 있다. 한 서비스에서만 가능한듯 하다. 서비스마다 IoC컨테이너가 다르고 빈을 공유하지 않기 때문인듯 하다. 같은 트랜잭션으로 처리가 안 되는 것 같다. 한번 간단한 예제를 만들어서 시도해봐야겠다. woowabros...

Architecture/MSA 2021.04.15

Spring AOP

AOP(Aspect Oriented Programming): 관점 지향 프로그래밍. 어떤 로직을 핵심적인 관점, 부가적인 관점으로 나눠서 그 관점에 따라 각각 모듈화하겠다는 것 보통 부가적인 관점으로 분류할 수 있는 것들은 DB연결, 로깅, 파일 입출력 등이 있다. 그런 것들을 매 클래스마다 적용할 수 없으니(흩어진 관심사) 비지니스 로직에서 분리하여 모듈로 재사용하겠다라는 것이 AOP의 취지 AOP 주요 개념 Aspect, Target, Advice, Joint Point, Point Cut AOP 특징 .프록시 패턴 기반의 AOP 구현체, 프록시 객체를 쓰는 이유는 접근 제어 및 부가기능을 추가하기 위해서 .스프링빈에만 적용 가능 .스프링IoC와 연동하여 엔터프라이즈 애플리케이션에서 가장 흔한 문제(..

Backend/Spring AOP 2021.04.14

Feign

Netflix에서 만든 선언적 http client. 선언적이란 말은 어노테이션 선언만으로 트랜잭션을 적용하게 하는 기술 Feign의 선언적 http 클라이언트 역시 어노테이션만으로 http클라이언트를 만들 수 있고 이를 통해 http api 호출이 가능하다. 보통 hytrix와 같이 사용한다. Feign client: feign client는 web service 클라이언트를 보다 쉽게 작성할 수 있도록 해준다. 서버에 있는 api를 호출할 수 있는 역할을 한다. Client interface를 만들어서 @FeignClient 를 붙이고 name에 해당하는 서비스를 찾아 실행한다. 설정이 중요하다.

Eureka

마이크로서비스의 동적인 탐색과 로드밸런싱을 제공한다. 로드밸런싱을 위해 내부적으로 Ribbon을 사용한다. Netflix OSS(Open Source Software)의 여러가지 컴포넌트 중 하나 등록된 모든 서비스들의 정보(hostname, ip, port 등)가 레지스트리로 관리되고 접근정보를 요청하는 Eureka Client 서비스들에게 목록을 제공한다. 크게 Eureka Sever, Eureka Client로 나눠져 있다. Eureka Server : 서비스들의 정보를 저장하느느 곳, 각 client로부터 30초(default)마다 heartbeat를 받게 된다. Eureka Client : 각 서비스들, 자신을 Eureka Server에 등록. 서비스들의 위치 정보를 Eureka Server로부..

Zuul

모든 마이크로서비스에 대해 요청을 먼저 받아들이고 라우팅하는 프록시 API Gateway 기능을 수행한다. API Gateway ? 서버 앞단에서 모든 엔드포인트를 단일화 해주는 또 다른 서버의 역할을 해준다. 1. 인증/인가 서비스는 서비스 호출에 있어 매우 중요하다. 관리자와 사용자가 분리되어 있는 웹 서비스에서 호출이 이러한 호출이 자유롭지 못하면 문제가 있다. 모놀리틱 아키텍처에서는 보안처리를 Dependency를 사용해서 처리했지만 서비스가 분리되어있는 상태에서는 소스 중복이 심해지고 유지보수가 힘들어진다. 이러한 것을 API Gateway를 이용해서 해결할 수 있다. 2. 라우팅과 로드밸런싱 대용량 처리 서비스에 있어 가장 필수인 로드밸런싱을 제공한다. 요청이 많은 서비스에 대해서만 로드 밸런..

Zookeeper

분산 시스템에서 정보를 공유할 때, 클러스터에 있는 서버들의 상태 체크, 동기화를 위한 락(lock)처리를 해결할 수 있는 시스템을 코디네이션 시스템이라고 하는데 대표적인 것이 바로 Apache Kafka이다. 가장 일반적인 용도로 클러스터 내의 각 서버들의 설정 정보를 저장하는 저장소로 쓸 수 있다. Watch 기능을 이용하면 설정 정보가 저장될 경우, 각 서버로 알려서 바로 반영할 수 있다. 글로벌 락 - 분산 서버가 공유자원을 접근하려 할 때 동시에 하나의 작업만 발생해야한다고 하자. 그 작업에 lock을 걸고 작업을 할 수 있도록 해준다. Kafka나 HBase 등에 쓰인다.

Backend/Kafka 2021.04.13

Kafka

배경 링크드인 웹사이트에서 생성되는 로그를 처리하여 웹사이트 활동을 추적하는 것을 목적으로 개발되었다. 대량의 로그를 분석하여 사용자가 웹에서 하는 활동을 모니터링하고 서비스 개선에 활용하는 것이다. 필요한 조건을 모두 만족하는 기술이 없었기에 여러 조건을 고려하여 만들었다. Pub/Sub model을 구현한 분산 메시징 시스템 - 메시지 생산자인 프로듀서를 Publisher, 메시지 소비자인 컨슈머를 Subscriber라고 한다. - Publiser가 Subscriber에게 직접 메시지를 보내는 것이 아니라 Broker를 통해 전달한다. - Publisher는 누가 그 메시지를 수신하는지 알 수 없고 브로커에 있는 토픽이라고 불리는 카테고리 안에 메시지를 등록한다. - 여러 Subscriber가 같은 ..

Backend/Kafka 2021.04.13