분류 전체보기 (70) 썸네일형 리스트형 예외 발생 시 롤백 방지하기: Spring에서 독립적인 트랜잭션 설정 방법 프로젝트에서 repository.save() 메서드를 사용했음에도 불구하고 데이터가 커밋되지 않는 문제를 겪은 적이 있습니다. 이 글에서는 문제의 원인과 해결 방법을 공유합니다. 트랜잭션 처리 방식문제의 원인을 파악하기 위해 하나의 쓰레드에서 두 개의 메서드를 사용하며, 각각의 트랜잭션이 어떻게 작동하는지 세 가지 케이스로 살펴보겠습니다. 1. 첫 번째 케이스: 동일 트랜잭션두 메서드(A 트랜잭션, B 트랜잭션)가 동일한 트랜잭션에 포함되어 있습니다. 즉, A와 B가 모두 성공해야 트랜잭션이 커밋됩니다. 만약 B에서 예외가 발생하면, A에서의 작업까지 모두 롤백됩니다. |-----------(A 트랜잭션)-----------| |-----------(.. ELK 스택으로 실시간 로그 수집 및 분석하기: Logback, Filebeat, Elasticsearch, Kibana Quick Starter 서비스를 운영하고 모니터링 하기 위해서 로그 수집은 중요하죠. ELK 스택의 간단한 소개와 사용 방법에 대하여 소개하겠습니다. 우선 로그를 분석하기 위해서는 DB에 쌓여있는 로그가 있어야겠죠. 로그를 수집하기 위해서 아래 것들을 사용할 겁니다.1. 로그 저장 라이브러리 : logback2. 파일로 저장된 로그를 읽어서 네트워크로 로그를 전송하는 프로그램 : filebeat3. 전송받은 로그를 저장하는 프로그램 : elasticsearch4. 로그를 보기쉽게 정렬하고 분석해주는 프로그램 : kibana 로그 저장 라이브러리 [Logback]log4j, slf4j 와 logback 등 여러가지 라이브러리가 있으나,spring boot 1.0.0 버전부터 spring boot starter에 포함된 logba.. Grafana로 실시간 서비스 모니터링: Actuator와 Prometheus Quick Starter 많이 서비스들을 사용하고 있는 Grafana를 이용해서 서비스 모니터링을 하는 방법을 소개하겠습니다. 서비스 모니터링을 하기 위해서 아래의 것들이 필요합니다. 1. 모니터링용 데이터를 생성하는 라이브러리 : Actuator 2. 모니터링용 데이터를 저장하는 Database : Prometheus 3. 모니터링을 위한 대시보드 : Grafana 워낙 내용이 많아서 간단하게 사용하는 방법만 보고 넘어가겠습니다. 모니터링용 데이터를 생성하는 라이브러리과거에는 모니터링을 위한 데이터를 각각 만들어서 모니터링 툴의 규격에 맞춰 넣어주었지만 요즘에는 다양한모니터링 툴들이 나와서 그것들을 다 사용할 수 있는 Micrometer 를 써보겠습니다. Micrometer 는 규격화된 인터페이스이고 Prometheus, G.. OutOfMemoryError 해결하기: IntelliJ로 메모리 누수 분석하는 방법 코드에 누수가 있거나 요청량이 많아지면 메모리 사용량 100%가 발생할 수 있습니다. 메모리 사용량이 100%가 되면 더이상 메모리를 할당할 수 없고 이는 서비스 장애로 이어집니다. Intellij에서는 메모리 사용량을 분석하기 쉽게 만든 툴이 있어 소개해드리겠습니다. 우선. 메모리 분석하기에 앞서 OutofMemory를 만들어보겠습니다. 간단하게 컨트롤러에 반복문을 만들었고,JVM 옵션으로 -XX:+HeapDumpOnOutOfMemoryError 를 넣었습니다.위 옵션은 OutOfMemory 발생 시 heap dump를 생성하는 옵션입니다.(만약 엑츄에이터를 사용한다면 GET 요청을 통해 dump를 받을 수 있습니다.)(terminal에서는 $ jmap -dump:format=b,file=/path.. Java Checked vs Unchecked Exception: 예외 처리의 원칙과 트랜잭션 롤백 Checked Exception과 Unchecked Exception에 대한 이해Java에서 예외 처리(Exception Handling)는 매우 중요한 요소입니다.저는 아키텍처 설계에서 가장 중요하다고 생각되는게 Exception 처리라고 생각합니다. 예외는 프로그램 실행 중에 발생할 수 있는 비정상적인 상황을 나타내며, 이 예외를 적절히 처리하지 않으면 프로그램이 예기치 않게 종료될 수 있습니다.Java에서는 예외를 두 가지 유형으로 나눌 수 있는데, 바로 Checked Exception과 Unchecked Exception입니다. 이번 글에서는 두 가지 예외의 차이점과 사용 사례, 그리고 언제 어떤 예외를 사용하는 것이 적절한지에 대해 알아보겠습니다. Checked Exception이란Checked.. 의존성 역전 원칙(DIP): 유연하고 확장 가능한 코드 설계의 핵심 의존성 역전의 원칙(Dependency Inversion Principle, DIP)은 객체지향 설계의 5대 원칙 중 하나로, 상위 수준 모듈이 하위 수준 모듈에 의존하지 않도록 하여 시스템의 결합도를 줄이고 유연성을 높이는 데 중점을 둡니다. 이 원칙은 애플리케이션이 변화에 쉽게 대응할 수 있도록 구조적으로 설계하는 데 중요한 역할을 합니다. 의존성 역전의 원칙(DIP)의 핵심 개념 DIP는 두 가지 주요 원칙으로 설명됩니다. 1. 상위 수준 모듈은 하위 수준 모듈에 의존해서는 안 된다.상위 수준 모듈은 애플리케이션의 비즈니스 로직을 담당하고, 하위 수준 모듈은 데이터베이스나 네트워크와 같은 구체적인 기능을 처리합니다. 상위 모듈이 하위 모듈에 직접 의존하면, 하위 모듈이 변경될 때 상위 모듈도 영향을.. Java 불변 객체(Immutable Object) 와 장단점 불변 객체(Immutable Object)는 한 번 생성되면 그 상태가 변하지 않는 객체를 의미합니다. 자바에서 가장 흔히 사용되는 불변 객체의 예로는 String 클래스가 있습니다. 이 글에서는 String 클래스를 통해 불변 객체의 개념을 살펴보고, 불변성의 장점과 단점에 대해 논의해 보겠습니다. String 클래스: 불변 객체의 대표적인 예 String 클래스의 인스턴스는 불변 객체입니다. 즉, 한 번 생성된 String 객체의 내부 상태(저장된 문자열)는 변경할 수 없습니다. 예제를 통해 이를 확인해 보겠습니다.String text = "abc";text = text + "def";System.out.println(text); // 출력 결과: "abcdef" 이 코드에서 text 변수는 처음에.. 좋은 코드를 위한 5가지 핵심 원칙: SOLID부터 리팩토링까지 좋은 코드를 작성하는 방법에 대해 많은 이론과 원칙이 있지만, 저는 특히 다음 5가지가 중요하다고 생각합니다. 1. SOLIDSOLID 원칙은 효과적인 소프트웨어 설계의 핵심입니다. 이 중에서도 '단일 책임 원칙(Single Responsibility Principle, SRP)'은 특히 중요합니다. SRP는 하나의 클래스가 단 하나의 책임을 가져야 한다고 말합니다. 이 원칙을 지키면 클래스 간의 복잡도가 줄어들고, 코드의 가독성과 유지보수성이 향상됩니다. 단일 책임 원칙을 통해 각 클래스의 목적이 명확해지며, 이는 전체 시스템의 이해와 확장성에 긍정적인 영향을 미칩니다. 2. 읽기 쉬운 코드좋은 코드인지 확인하는 방법은 아주 간단합니다.좋은 코드의 핵심 요소 중 하나는 바로 '읽기 쉬움'입니다. 다른.. 이전 1 2 3 4 5 6 7 ··· 9 다음