본문 바로가기

전체 글100

컨테이너 모니터링으로 투명성 있는 애플리케이션 만들기(9장) 1. 컨테이너화된 애플리케이션에서 사용되는 모니터링 기술 스택1-1. 모니터링 도구프로메테우스(Prometheus) : 애플리케이션 컨테이너에서 측정된 수치를 수집그라파나(Grafana) : 수치를 시각화해 이해하기 쉬운 대시보드 형태로 구성이 도구들은 오픈 소스이며 여러 플랫폼에서 사용할 수 있다. 그러므로 개발 환경과 운영 환경을 막론한 어떤 환경에서도 동등하게 애플리케이션의 성능을 확인할 수 있다 1-2. 프로메테우스에 대해서프로메테우스 구조는 아래와 같다. 프로메테우스의 장점프로메테우스를 사용하면 모니터링의 중요한 측면인 일관성이 확보된다.모든 애플리케이션을 똑같은 표준적인 형태로 모니터링할 수 있다.측정값을 추출하기 위한 쿼리 언어도 한 가지만 익히면 되고, 전체 애플리케이션 스택에 똑같은 모니.. 2025. 7. 10.
헬스 체크와 디펜던시 체크로 애플리케이션의 신뢰성 확보하기 0. 들어가며도커 컨테이너에서 실행 중인 애플리케이션 상태가 정상적으로 동작하는지 확인하는 것은 중요하다. 도커에서도 헬스 체크와 디펜던시 체크 기능을 통해 애플리케이션이 비정상 상태라는 것을 알 수 있다. 플랫폼이 제공하는 기능을 활용하기 위해 필요한 정보를 컨테이너 이미지에 추가하는 방법을 알아보자. - 헬스 체크 : 서버의 상태를 주기적으로 확인하여 서버의 정상 작동 여부를 판단하는 과정- 디펜던시 체크 : 애플리케이션이 실행되기 전에 필요한 외부 리소스나 서비스, 즉 의존성이 정상적으로 작동하는지 확인하는 과정 1. 헬스 체크를 지원하는 도커 이미지 빌드하기먼저, 헬스 체크 로직이 없는 경우부터 살펴보자. 다음은 무작위 숫자를 반환하는 간단한 REST API이다. 이 애플리케이션에는 버그가 있어 .. 2025. 7. 4.
@Transactional 에 대하여 0. 들어가며 Spring에서 비즈니스 로직을 구현할 때 무조건 메서드마다 @Transactional을 붙여서 사용했다. 그런데 의문이 들었다. @Transactional 내부 동작이 어떻게 돌아가는지, 왜 메서드마다 붙여야 하는지, 나는 이걸 왜 쓰는지도 모르면서 자연스럽게 쓰고 있는지...!! 이제는 알아야 할 때가 왔나보다. 그래서 이번에는 @Transactional을 파헤쳐보려고 한다. Let's go~ 1. 트랜잭션(Transaction)이란?일단, DB에서의 트랜잭션에 대해 간단히 알고 넘어가보자!1-1. 트랜잭션이란 무엇인가?데이터베이스 트랜잭션은 DB의 상태를 변경시키기 위해 수행하는 작업의 논리적 단위를 의미한다. 좀 더 쉽게 말하자면, 한 꺼 번에 수행되어야 할 여러 쿼리문을 하나의 트.. 2025. 6. 3.
GC(Garbage Collectoin)에 대하여 0. 들어가며JVM을 공부하던 도중 실행 엔진에 속한 GC가 어떻게 동작하는지 궁금해졌다. JVM의 Heap 영역도 여러 영역으로 나뉘게 되어 생각보다 복잡하였다. 그래서 GC가 어떻게 Heap 메모리를 관리하는지 자세히 파헤쳐보려고 한다. 가비지 컬렉션(1,2)이 무엇인지, 어떻게 동작하는지(3, 4), GC 알고리즘(5), 마지막으로 GC 튜닝(6)을 간략하게 알아보고자 한다. Let's Go~!!(GC에 대한 개념이 처음이라면 유튜브로 먼저 찾아보는 것을 추천합니다. 하단에 참고 링크 있음.)1. GC(Garbage Collection)란?가비지 컬렉션(Garbage Collection, GC)은 자바의 메모리 관리 방법 중의 하나로 JVM(자바 가상 머신)의 Heap 영역에서 동적으로 할당했던 메.. 2025. 5. 22.
Java - Immutable Object(불변 객체) Java를 공부하다 보면 '불변 객체' 라는 말을 들어봤을 것이다. 불변 객체가 무엇인지 알아보자! 1. Immutable이란?Immutable은 '불변의, 변경할 수 없는' 이라는 뜻을 가지고 있다. 객체 지향 프로그래밍에서 불변객체(Immutable object)는 생성 후 그 상태를 바꿀 수 없는 객체를 말한다. 대표적으로 String, Boolean, Integer, Float, Long 등이 있다. 예를 들어, String a = "apple" 에서 a = "banana"로 재할당이 가능하다. a가 참조하고 있는 heap 영역의 객체가 바뀌는 것이지 heap영역에 있는 값이 바뀌는 것이 아니다. 즉, 값이 변경되는 것이 아니라 새로운 객체를 만들고 그 객체를 a가 참조하게 하는 것이다. 이렇게 .. 2025. 4. 20.
데이터베이스 - 인덱스에 대해서 1. 인덱스란?데이터베이스 인덱스(index)는 추가적인 쓰기 작업과 저장 공간을 활용하여 데이터베이스 테이블에 저장된 데이터의 검색 속도를 향상시키기 위한 자료구조이다. 조건을 만족하는 튜플(들)을 빠르게 조회하기 위해 사용한다. (빠르게 정렬(order by)하거나 그룹핑(group by)하기 위해서)1-1. Index를 쓰는 이유만약, Index를 사용하지 않게 되면 어떻게 될까? Index를 사용하지 않으면 데이터를 검색할 때 전체 테이블을 스캔(full scan)을 하게 된다. 만약 데이터가 1억에 있으면 O(N)의 시간복잡도로 1억 번을 탐색하게 된다. 하지만 Index를 사용하게 되면 검색 대상 레코드의 범위를 줄일 수 있다. 이는 대량의 데이터를 다루는 경우 데이터 검색 속도를 크게 향상시.. 2025. 4. 16.