분류 전체보기 1341

Ch07. 액츄에이터 - 다양한 엔드포인트

각각의 엔드포인트를 통해서 개발자는 애플리케이션 내부의 수많은 기능을 관리하고 모니터링할 수 있다. 스프링 부트가 기본으로 제공하는 다양한 엔드포인트에 대해서 알아보자. 다음은 자주 사용하는 기능 위주로 정리했다 엔드포인트 목록 https://docs.spring.io/spring-boot/docs/current/reference/html/actuator.html#actuator.endpoints Production-ready Features You can enable recording of HTTP exchanges by providing a bean of type HttpExchangeRepository in your application’s configuration. For convenience, ..

Ch07. 액츄에이터 - 엔드포인트 설정

엔드포인트를 사용하려면 다음 2가지 과정이 모두 필요하다. 엔드포인트 활성화 엔드포인트 노출 엔드포인트를 활성화한다는 것은 해당 기능 자체를 사용할지 말지 on, off를 선택하는 것이다. 엔드포인트를 노출하는 것은 활성화된 엔드포인트를 HTTP에 노출할지 아니면 JMX에 노출할지 선택하는 것이다. 엔드포인트를 활성화하고 추가로 HTTP를 통해서 웹에 노출할지, 아니면 JMX를 통해서 노출할지 두 위치에 모두 노출할지 노출 위치를 지정해주어야 한다. 물론 활성화가 되어있지 않으면 노출도 되지 않는다. 그런데 엔드포인트는 대부분 기본으로 활성화되어 있다.( shutdown 제외) 노출이 되어 있지 않을 뿐이다. 따라서 어떤 엔드포인트를 노출할지 선택하면 된다. 참고로 HTTP와 JMX를 선택할 수 있는데,..

Ch07. 액츄에이터 - 액츄에이터 시작

액츄에이터가 제공하는 프로덕션 준비 기능을 사용하려면 스프링 부트 액츄에이터 라이브러리를 추가해야 한다. build.gradle dependencies { implementation 'org.springframework.boot:spring-boot-starter-actuator' //actuator 추가 } 액추에이터 기능 http://localhost:8080/actuator로 접근하면, 기본적으로 제공하는 기능을 사용할 수 있다. 액츄에이터는 /actuator 경로를 통해서 기능을 제공한다. http://localhost:8080/actuator/health로 접근하자 이 기능은 현재 서버가 잘 동작하고 있는지 애플리케이션의 헬스 상태를 나타낸다. 액츄에이터 기능을 웹에 노출 application...

Ch07. 액츄에이터 - 프로덕션 준비 기능이란?

프로덕션 준비 기능이란? "전투에서 실패한 지휘관은 용서할 수 있지만 경계에서 실패하는 지휘관은 용서할 수 없다"라는 말이 있다. 이 말을 서비스를 운영하는 개발자에게 맞추어 보면 장애는 언제든지 발생할 수 있다. 하지만 모니터링(경계)은 잘 대응하는 것이 중요하다. 개발자가 애플리케이션을 개발할 때 기능 요구사항만 개발하는 것은 아니다. 서비스를 실제 운영 단계에 올리게 되면 개발자들이 해야 하는 또 다른 중요한 업무가 있다. 바로 서비스에 문제가 없는지 모니터링하고 지표들을 심어서 감시하는 활동들이다 운영 환경에서 서비스할 때 필요한 이런 기능들을 프로덕션 준비 기능이라 한다. 쉽게 이야기해서 프로덕션을 운영에 배포할 때 준비해야 하는 비 기능적 요소들을 뜻한다 지표(metric), 추적(trace)..

Ch01. Apache Kafka 기본 개념 및 이해 - Broker, Zookeeper

Kafka Broker Kafka Broker는 Partition에 대한 Read 및 Write를 관리하는 소프트웨어이다. Kafka Server라고 부르기도 한다. Topic 내의 Partition 들을 분산, 유지 및 관리 각각의 Broker들은 ID로 식별된다.(단, ID는 숫자) Topic의 일부 Partition들을 포함한다. Topic 데이터의 일부분(Partition)을 갖을 뿐 데이터 전체를 갖고 있지 않는다. Kafka Cluster : 여러 개의 Broker들로 구성된다. Client는 특정 Broker에 연결하면 전체 클러스터에 연결된다. 최소 3대 이상의 Broker를 하나의 Cluster로 구성해야 한다. 4대 이상을 권장한다. Kafka Broker ID와 Partition ID..

Ch01. Apache Kafka 기본 개념 및 이해 - Topic, Partition, Segment

Apache Kafka 주요 요소 Topic : Kafka 안에서 메시지가 저장되는 장소 논리적인 표현 Producer : 메시지를 생산(Produce)해서 Kafka의 Topic으로 메시지를 보내는 애플리케이션 Consumer : Topic의 메시지를 가져와서 소비(Consume)하는 애플리케이션 Consumer Group : Topic의 메시지를 사용하기 위해 협력하는 Consumer들의 집합 하나의 Consumer는 하나의 Consumer Group에 포함되며, Consumer Group내의 Consumer들은 협력하여 Topic의 메시지를 분산 병렬 처리한다. Producer와 Consumer의 기본 동작 방식 Producer와 Consumer는 서로 알지 못하며, Producer와 Consume..

Ch01. Apache Kafka 기본 개념 및 이해 - Apache Kafka

Kafka란? 이벤트 스트리밍 플랫폼이다. Event 란? Event는 비즈니스에서 일어나는 모든 일(데이터)을 의미한다. 웹사이트에서 무언가를 클릭하는 것 청구서 발행 송금 배송 물건의 위치 정보 택시의 GPS 좌표 센서의 온도/압력 데이터 Event는 BigData의 특징을 가진다. 비즈니스의 모든 영역에서 광범위하게 발생 대용량의 데이터(Big Data) 발생 Event Stream은 연속적인 많은 이벤트들의 흐름을 의미 Apache Kafka의 탄생 LinkedIn 내에서 개발되었다. 하루 4.5 조 개 이상의 이벤트 스트림 처리 하루 3,000 억 개 이상의 사용자 관련 이벤트 스트림 처리 기존의 Messaging Platform(예, MQ)로 처리 불가능 이벤트 스트림 처리를 위해 개발 201..

Ch06. 외부설정과 프로필(2) - @Profile

프로필과 외부 설정을 사용해서 각 환경마다 설정값을 다르게 적용하는 것은 이해했다. 그런데 설정값이 다른 정도가 아니라 각 환경마다 서로 다른 빈을 등록해야 한다면 어떻게 해야 할까? 예를 들어서 결제 기능을 붙여야 하는데, 로컬 개발 환경에서는 실제 결제가 발생하면 문제가 되니 가짜 결제 기능이 있는 스프링 빈을 등록하고, 운영 환경에서는 실제 결제 기능을 제공하는 스프링 빈을 등록한다고 가정해 보자.. PayClient public interface PayClient { void pay(int money); } DI를 적극 활용하기 위해 인터페이스를 사용한다. LocalPayClient @Slf4j public class LocalPayClient implements PayClient{ @Overri..

Ch06. 외부설정과 프로필(2) - YAML

스프링은 설정 데이터를 사용할 때 application.properties 뿐만 아니라 application.yml이라는 형식도 지원한다. YAML YAML(YAML Ain't Markup Language)은 사람이 읽기 좋은 데이터 구조를 목표로 한다. 확장자는 yaml , yml 이다. 주로 yml을 사용한다. application.yml my: datasource: url: local.db.com username: username password: password etc: max-connection: 1 timeout: 3500ms options: CACHE,ADMIN YAML의 가장 큰 특징은 사람이 읽기 좋게 계층 구조를 이룬다는 점이다. YAML은 space (공백)로 계층 구조를 만든다. s..

Ch06. 외부설정과 프로필(2) - 외부 설정 사용(@ConfigurationProperties 검증)

@ConfigurationProperties를 통해서 숫자가 들어가야 하는 부분에 문자가 입력되는 문제와 같은 타입이 맞지 않는 데이터를 입력하는 문제는 예방할 수 있다. 그런데 문제는 숫자의 범위라던가, 문자의 길이 같은 부분은 검증이 어렵다. 예를 들어서 최대 커넥션 숫자는 최소 1, 최대 999라는 범위를 가져야 한다면 어떻게 검증할 수 있을까? 이메일을 외부 설정에 입력했는데, 만약 이메일 형식에 맞지 않는다면 어떻게 검증할 수 있을까? 개발자가 직접 하나하나 검증 코드를 작성해도 되지만, 자바에는 자바 빈 검증기(java bean validation)이라는 훌륭한 표준 검증기가 제공된다. @ConfigurationProperties 은 자바 객체이기 때문에 스프링이 자바 빈 검증기를 사용할 수 ..