로깅은 애플리케이션 문제 해결의 오랜 역사와 관찰 가능성의 세 가지 주요 요소(메트릭, 트레이스와 함께) 중 하나입니다. 운영 환경에서 아무런 정보 없이 문제를 해결하기는 어려우며, 장애가 발생했을 때 개발자들은 로그 파일이 있는 것을 반가워합니다. 로그는 주로 사람이 읽을 수 있는 형식으로 작성됩니다. 구조화된 로깅은 로그 출력을 잘 정의된, 종종 기계가 읽을 수 있는 형식으로 작성하는 기술입니다. 이러한 형식은 로그 관리 시스템에 입력되어 강력한 검색 및 분석 기능을 가능하게 합니다. 구조화된 로깅에 가장 일반적으로 사용되는 형식 중 하나는 JSON입니다. Spring Boot 3.4에서는 기본적으로 구조화된 로깅을 지원합니다. Elastic Common Schema (ECS)와 Logstash 형식..
Kubernetes에서 애플리케이션의 안정성과 가용성을 보장하기 위해 다양한 설정이 필요합니다. 그 중 Autoscaling과 PodDisruptionBudget(PDB)은 Pod의 수를 조절하고 가용성을 유지하는 데 중요한 역할을 합니다. 이 두 설정은 겉보기에는 비슷한 기능을 제공하는 것처럼 보일 수 있지만, 실제로는 서로 다른 목적을 가지고 있습니다. 이번 글에서는 Autoscaling과 PDB의 차이점, 그리고 왜 두 설정을 함께 사용하는 것이 중요한지에 대해 알아보겠습니다.Autoscaling 설정의 역할Autoscaling은 Kubernetes에서 애플리케이션의 부하에 따라 Pod의 개수를 자동으로 조정하는 기능입니다. Horizontal Pod Autoscaler(HPA)가 이 기능을 담당하..
✅ 아래 글의 내용 및 이미지는 인프런 "쿠버네티스 어나더 클래스 (지상편) - Sprint 1, 2" 강의를 듣고 정리한 글입니다. 강사님이 정리해주신 눈에 잡히는 IT 생태계이 오픈소스들을 잘 깊이 있게 공부하는게 좋다! => 남들이 뭐가 좋다더라에 휩쓸리지말고 처음엔 여기에만 집중해도 충분하다!개발기존부터 해왔던 App 개발부터 배포까지 써야되는 기술들.오케스트레이션 /매니징마이크로 서비스로 만들 때 쓰면 좋은 오픈 소스들플랫폼과 런타임앱을 클라우드에 올릴 때 주요 사용되는 기술들 프로비저닝과 분석실제 프로젝트에서 써야되는 기술들이 있는데 만약 프로젝트에서 앱을 마이크로 서비스로 개발하고 클라우드까지 올린다? => 프로비저닝과 분석에 있는 기술들을 다 아는게 좋다.분석 / 모니터링 큰 규모의 프로..
두 명령어의 차이점은 Datadog에서 로그를 필터링하는 방식과 필터링하는 필드의 차이점에 있습니다. 각 명령어가 어떤 필드를 대상으로 하는지와 그 필드의 내용에 따라 로그 검색 결과가 달라집니다.@error.stack:*org.apache.catalina.connector.ClientAbortException*대상 필드: error.stack검색 방식: error.stack 필드의 내용에 org.apache.catalina.connector.ClientAbortException 문자열이 포함된 로그 항목을 찾습니다.용도: 이 명령어는 예외가 발생했을 때의 전체 스택 트레이스에 org.apache.catalina.connector.ClientAbortException 문자열이 포함된 로그를 검색합니다. ..
스프링부트에서 테스트 코드를 작성할 때 자주 사용하는 @Mock과 @MockBean의 차이점. 이 두 어노테이션은 모킹(Mocking)을 통해 테스트를 효율적으로 작성할 수 있게 해주지만, 용도와 환경이 다르다. 또한, 리포지토리, 서비스 레이어, 컨트롤러 테스트 시 어떤 상황에서 어떤 어노테이션을 사용하는 것이 좋을지 작성.@Mock@Mock은 Mockito 프레임워크에서 제공하는 어노테이션이다. 특정 클래스의 모킹된 객체를 생성하며, 이 객체는 스프링 컨텍스트와는 무관하게 독립적으로 동작한다.@MockBean@MockBean은 스프링 부트에서 제공하는 어노테이션이다. 스프링 애플리케이션 컨텍스트에 모킹된 빈을 추가하고, 실제 스프링 빈 대신 모킹된 빈을 주입한다. 주로 통합 테스트 환경에서 사용된다...
Java의 스트림은 왜 한 번만 읽을 수 있는가?Java의 스트림이 한 번만 읽을 수 있는 이유는 스트림의 설계 방식과 데이터 처리 방법 때문이다. 스트림은 데이터를 한 방향으로 순차적으로 읽도록 설계되어 있으며, 한 번 읽은 데이터는 메모리에 저장되지 않기 때문에 다시 읽으려면 데이터를 재전송 받아야 한다. 이 방식은 스트림의 기본적인 동작 방식으로, 데이터를 처음부터 끝까지 한 번에 읽도록 설계되어 있다.이유 1: 데이터 소비스트림은 데이터를 한 번에 한 바이트씩 읽는다. 한 번 읽은 데이터는 소비되어 더 이상 스트림에 남아 있지 않게 된다. 이를 통해 메모리 사용을 최소화하면서 데이터를 처리할 수 있다.이유 2: 메모리 효율성스트림은 대량의 데이터를 메모리에 로드하지 않고 순차적으로 처리하기 때문에..
제목을 짓기가 어려웠다.내가 겪은 상황은 AWS 서버와 IDC 서버에서 도메인은 같지만 AWS 와 IDC 였는데..해보지는 않았지만 이런 상황도 될 것 같다.예를 들어 서버가 2대로 로드밸런싱을 하는데 A, B 서버가 있다고 한다면 A서버에만 테스트를 해보고 싶을 때 A서버 아이피는 192.168.0.100B서버 아이피는 192.168.0.101 이라고 하고 도메인으로 접속 후 LB로 흘러들어가게 한다면 두 개중 어디로 갈지 모르지만 만약 내 컴퓨터에서 /etc/hosts로 A아이피와 도메인을 작성해주고 브라우저 재시작 후 도메인으로 접속을 하게 되면 A서버로만 접속을 하게 될 것이다. blog.seongseob.dev 가 서버 2대로 로드밸런싱이 되어있다면 이렇게 hosts 파일을 수정해주면 내 컴..
orElse와 orElseGet의 차이점은 기본값을 제공하는 방식과 시점에 있다.orElse방식: 기본값을 직접 인자로 받습니다.특징: orElse는 Optional이 비어있지 않더라도 기본값을 항상 생성합니다. 이는 기본값 생성이 비용이 많이 드는 경우 비효율적일 수 있습니다.T orElse(T other)예시:String result = Optional.ofNullable(someValue) .orElse(createDefaultValue()); // createDefaultValue()가 항상 호출됨orElseGet방식: 기본값을 생성하는 Supplier를 받습니다.특징: orElseGet은 Optional이 비어있을 때만 Supplier를 실행하여 기본값을..
- Total
- Today
- Yesterday
- svn
- LocalDate
- intellij
- localtime
- Java
- Spring
- 오라클
- Bash tab
- Kotlin
- Linux
- Spring Security
- mybatis
- 북리뷰
- springboot
- window
- docker
- 베리 심플
- jQuery
- maven
- Github Status
- Mac
- k8s
- oracle
- mybatis config
- config-location
- input
- rocky
- LocalDateTime
- elasticsearch
- JavaScript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |