1. 개요서비스를 운영하며 장애는 언제든지 발생할 수 있고, 장애에 대응하는 것은 중요한 일입니다.그렇기 위해서는 시스템의 상태를 실시간으로 모니터링하고 관리하는 것이 매우 중요합니다. 모니터링을 시스템을 이용하면 운영상 발생하는 오류에 대해 빠른 확인이 가능하고, 시스템 상태를 통해 성능을 개선할 수 있습니다. 지금부터는 스프링 Actuator, 프로메테우스, 그라파나를 이용해 모니터링 시스템을 구축해보도록 하겠습니다. 2. Spring Actuator스프링 부트가 제공하는 액츄에이터는 지표 수집, 추적 감사 등의 모니터링하고 관리할 수 있는 다양한 편의 기능들을 제공합니다. 가장 먼저 Gradle 의존성을 추가해줍니다.implementation 'org.springframework.boot:spr..
1. 스프링 데이터 JPA란?스프링 데이터 JPA는 스프링 프레임워크에서 JPA를 편리하게 사용할 수 있도록 지원하는 프로젝트로 JPA 기반 데이터 접근 계층을 쉽게 구현할 수 있도록 도와줍니다. CRUD를 처리하기 위한 공통 인터페이스를 제공하고 생산성을 높이기 위한 다양한 기능을 제공합니다. 2. 스프링 데이터 JPA 사용법gradle 의존성 추가implementation 'org.springframework.boot:spring-boot-starter-data-jpa'public interface ProductRepository extends JpaRepository {}스프링 데이터 JPA는 리포지토리를 개발할 때 인터페이스만 작성하면 실행 시점에 스프링 데이터 JPA가구현체를 동적으로 생성해..
1. 정적 팩토리 메서드란?정적 팩토리 메서드는 인스턴스를 생성자로 생성하지 않고, 별도의 객체 생성의 역할을 하는 정적 메소드를 사용해 인스턴스를 생성하는 방식입니다. ex)자바의 LocalTime 클래스내 정적 팩토리 메서드public static LocalTime of(int hour, int minute) { HOUR_OF_DAY.checkValidValue(hour); if (minute == 0) { return HOURS[hour]; } MINUTE_OF_HOUR.checkValidValue(minute); return new LocalTime(hour, minute, 0, 0);}위 예시 코드에서 본 LocalTime의 of 메서드처럼 생성자를 사용하지 않고 정적 메서드를 사용해 객..
1. 불변 객체란 무엇일까?불변 객체는 객체의 상태(내부의 값, 필드, 멤버 변수)가 변하지 않는 객체로 한 번 초기화 후 수정될 수 없기 때문에 예측 가능하고 안전한 코드 작성을 할 수 있게 도와줍니다. 대표적으로 자바의 String, Integer 등의 클래스가 불변으로 설계되어 있습니다. 지금부터는 불변 객체의 장점과 불변 객체를 구현하는 방법에 대해 알아보겠습니다. 2. 불변 객체의 장점스레드 안정성(Thread Safety)멀티스레드 환경에서 가변 객체를 여러 스레드가 동시에 수정하려 할 때 동기화를 적절히 처리하지 않으면 예상치 못한 동작이 발생할 수 있습니다. 하지만 불변객체는 상태가 변하지 않으므로 스레드 안정성을 보장할 수 있습니다. Side Effect를 최소화할 수 있다.객체의 공..
1. Dispatcher Servlet이란?디스패처 서블릿은 Spring Framework에서 HTTP 프로토콜로 들어오는 요청을 받아 적합한 컨트롤러에 위임해주는 프론트 컨트롤러입니다. 프론트 컨트롤러란 무엇일까?프론트 컨트롤러(Front Controller)는 서블릿 컨테이너 제일 앞에서 서버로 들어오는 클라이언트 요청을 받아서 처리해주는 컨트롤러로 공통된 처리 과정을 거친 후 적절한 컨트롤러나 서비스로 요청을 전달하는 역할을 합니다.프론트 컨트롤러가 어플리케이션의 요청을 핸들링 해주고, 공통 작업을 처리해주어 중복 코드를 제거할 수 있다는 장점이 있습니다. 2.Dispatcher Servlet 동작 과정 1. 핸들러 조회 : 핸들러 매핑을 통해 요청 URL에 맞는 Handler(Controller..
JVM은 메모리를 자동으로 관리해주기 때문에 개발자들이 걱정을 조금이나마 덜고 개발할 수 있는 장점이 있었습니다.하지만 GC를 수행하는 과정에서 Stop The World가 발생하게 되고 이 과정에서 애플리케이션이 중지되는 문제가 있습니다. 또한 자바가 발전하며 Heap사이즈가 커지며 지연현상이 커지게 되었고 이를 위한 다양한 GC 알고리즘들이 만들어지게 되었습니다. 지금부터 GC 알고리즘에 대해 알아보겠습니다. 1. Serial GC(잘 쓰이지 않음)GC를 싱글스레드로 진행하기 때문에 Stop-The-Word의 시간이 길어진다.Old 영역에서 Mark Sweep에 Compact 작업을 추가적으로 실행한다.CPU 코어가 1개일 때 사용하기 위해 개발되었다. java -XX:+UseSerialGC -ja..
1. GC(Garbage Collection)이란? 가비지 컬렉션은 자바에서 사용되는 메모리 관리 기법으로 프로그램이 동적으로 할당한 메모리를 자동으로 관리해 더 이상 사용되지 않는 객체를 주기적으로 해제하는 역할을 합니다.MyObject obj = new MyObject("안녕");obj = null; //obj는 더 이상 참조되지 않아 GC 대상이 된다MyObject obj2 = new MyObject("first");obj2 = new MyObject("second"); //first 객체는 더 이상 참조되지 않는다. c와 c++에서는 프로그래머가 직접 수동으로 메모리 할당과 해제를 일일이 해줘야 하지만 자바에서는 가비지 컬렉터가 메모리 관리를 해주기 때문에 메모리를 효율적으로 사용할 수 있고 메모..
1. Call by Value와 Call by Reference란?Call by Value란 값에 의한 호출을 의미합니다. 함수에 값을 전달할 때 값을 복사해서 전달하고, 전달한 값을 변경하여도 원본은 변경되지 않습니다. Call by Reference란 참조에 의한 호출을 의미합니다. 함수에 값을 전달할 때 참조 값을 전달하게 됩니다.2. 자바에서 Call by Value의 동작방식자바의 데이터 타입은 크게 두 가지로 나누어집니다.원시타입 - byte, short, int, float, long, double, char, boolean참조타입 - Class, interface, Array, Enum 등등메소드 파라미터로 원시 타입과 참조 타입을 전달하며 일어나는 동작 방식을 보며 자바가 어떻게 Call..
1. Grafana란?그라파나(Grafana)는 데이터 시각화 및 모니터링 도구로, 주로 시스템 및 애플리케이션의 성능을 모니터링하고 문제를 진단하는 데 사용됩니다. 또한 다양한 데이터 소스를 통합하여 대시보드 형태로 시각화 할 수 있어 많이 사용됩니다. 지금부터 Grfana를 어떻게 설치하고 사용하는지 알아보겠습니다. 2. Grafana 설치https://grafana.com/grafana/download?platform=linux 에서 자신이 설치하려는 인스턴스 환경에 맞는 명령어를 복사해 실행해 줍니다. sudo apt-get install -y adduser libfontconfig1 muslwget https://dl.grafana.com/enterprise/release/grafana-ente..
1. 래퍼 클래스란?자바에서 자료형은 기본형(Primitive Type)과 참조형(Reference Type)으로 나누어집니다. 프로그래밍을 하다 기본형의 데이터를 객체로 표현해야 하는 경우가 생기는데 이럴 때 기본형을 객체로 다루기 위해 사용하는 클래스를 래퍼클래스(Wrapper Class)라고 합니다. 지금부터 래퍼클래스에 대해 자세히 알아봅시다. 2. 래퍼 클래스가 생긴 이유?기본형(Primitive Type)은 객체가 아니기 때문에 다음과 같은 한계점이 존재합니다.객체가 아니다 : 객체가 아니기 때문에 객체지향의 장점을 살릴 수 없다(메소드 제공 불가)null 값을 가질 수 없다 : 기본형은 항상 값을 가지기 때문에 null 표현을 할 수 없다.이런 단점을 해결하기 위해 기본형을 객체로 감싸서 ..