분류 전체보기 144

JVM 힙 메모리 개념 정리 및 적절한 설정 방법

1. JVM이 서버의 전체 메모리를 다 사용하지 않는 이유서버에 4GB의 물리적 메모리가 있다고 해도 JVM이 이를 전부 사용하지 않는 이유는 운영 체제(OS)와 JVM의 메모리 관리 방식 때문이다.이를 세부적으로 살펴보면 다음과 같다.(1) OS가 사용할 메모리를 남겨둬야 한다JVM이 실행되는 서버는 단순히 JVM만 사용하는 것이 아니라 OS 자체가 동작하고 있다.네트워크, 디스크 I/O, 캐시 관리 등을 위해 일정 메모리가 필요하다.일반적인 리눅스 서버의 경우, 최소한 500MB~1GB 정도의 메모리를 OS가 자체적으로 사용한다.만약 JVM이 4GB를 전부 차지하면 OS가 원활하게 동작하지 못하고, 전체적인 시스템 성능이 저하될 수 있다.(2) JVM의 Heap 외에도 많은 메모리가 필요JVM이 사용..

운영 2025.03.12

[운영] JVM 메모리 설정, 왜 중요할까?

JVM 힙 메모리 크기 개념 정리 및 실무 적용 사례서론: JVM 메모리 설정, 왜 중요할까?JVM 기반의 애플리케이션을 운영하다 보면 OutOfMemoryError(OOM) 가 발생하거나, GC(Garbage Collection) 튜닝이 필요한 경우가 많다.이럴 때 JVM 메모리 구조를 제대로 이해하고 적절한 설정을 하면 애플리케이션 성능 최적화와 안정적인 운영이 가능하다.이번 포스팅에서는 JVM 힙 메모리 개념과 설정 방법을 실무 경험을 바탕으로 정리하고, 적절한 메모리 설정값과 실무 적용 사례를 공유하려 한다.1. JVM 메모리 구조 살펴보기JVM이 사용하는 메모리는 크게 다음과 같이 구분할 수 있다.메모리 영역 역할 및 설명Heap애플리케이션이 생성하는 객체 저장 공간 (-Xms, -Xmx 로 설..

운영 2025.03.12

[운영] 반정규화(Denormalization)를 활용한 성능 최적화: 실무 경험과 해결 방안

반정규화를 활용한 성능 최적화: 실무 경험과 해결 방안본 게시글은 실무 경험을 기반으로 작성되었으나, 회사의 실제 데이터 모델 및 프로젝트 내용과는 무관하며 일부 내용을 각색하였습니다. 보안 및 기밀 유지 정책을 준수하기 위해 특정 기술적 세부 사항이 변경되었음을 알려드립니다.1. 서론대규모 데이터를 다루는 시스템에서 정규화(Normalization)는 데이터 무결성을 유지하고 중복을 최소화하는 핵심 원칙이다. 하지만 조회 성능 최적화가 필요한 경우 반정규화(Denormalization)를 적용하여 데이터 접근 속도를 개선할 필요가 있다.이번 포스팅에서는 직원 관리 시스템 성능 최적화 과정에서 반정규화를 적용한 실무 경험을 공유하며, 반정규화의 장점과 단점, 그리고 발생한 문제를 어떻게 해결했는지를 정리..

데이터베이스 2025.03.11

[Spring Boot] 실무에서의 디자인 패턴과 도메인 디자인 패턴 적용 사례

Spring Boot 기반 실무에서의 디자인 패턴과 도메인 디자인 패턴 적용 사례Spring Boot 기반의 백엔드 개발을 진행하면서 다양한 디자인 패턴을 적용해야 하는 상황을 자주 마주하게 됩니다. 특히 도메인 중심의 설계를 고려할 때, 단순한 CRUD를 넘어 비즈니스 로직을 체계적으로 관리하는 것이 중요합니다. 이번 포스팅에서는 실무에서 경험한 디자인 패턴과 도메인 디자인 패턴을 적용한 사례를 공유하며, 어떤 고민을 했고, 어떤 방식으로 해결했는지를 정리해 보겠습니다.본 게시글은 실무 경험을 기반으로 작성되었으나, 회사의 실제 데이터 모델 및 프로젝트 내용과는 무관하며 일부 내용을 각색하였습니다. 보안 및 기밀 유지 정책을 준수하기 위해 특정 기술적 세부 사항이 변경되었음을 알려드립니다.1. 레이어드..

Spring @Transactional - REQUIRES_NEW vs REQUIRED, 그리고 실전 적용 사례

Spring @Transactional - REQUIRES_NEW vs REQUIRED, 그리고 실전 적용 사례1. 개요Spring에서는 @Transactional을 활용하여 트랜잭션을 관리할 수 있다. 하지만 단순히 @Transactional을 선언하는 것만으로 충분하지 않을 때가 많다. 특히 트랜잭션 전파(Propagation) 옵션을 적절히 선택하지 않으면 예상치 못한 문제가 발생할 수 있다.이번 글에서는 REQUIRES_NEW와 REQUIRED의 차이점을 실무에서 발생했던 이슈와 함께 설명하고, 커스텀 예외 처리 적용 사례를 통해 이를 어떻게 해결할 수 있는지 정리해보려고 한다.2. @Transactional의 전파(Propagation) 개념1) REQUIRED (기본값)부모 트랜잭션이 있으면 ..

[leetcode][JAVA] 3112. Minimum Time to Visit Disappearing Nodes

💡 문제Minimum Time to Visit Disappearing Nodes  (https://leetcode.com/problems/minimum-time-to-visit-disappearing-nodes/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요.💡 문제 (문제 설명 (한글 번역))n개의 노드로 이루어진 무방향 그래프가 주어진다.각 엣지는 edges[i] = [ui, vi, lengthi] 형태로 주어지며, 이는 ui와 vi 사이를 lengthi 만큼의 시간으로 이동할 수 있음을 의미한다.또한, 배열 disappear가 주어지며, disappear[i]는 노드 i가 사라지는 시간을 나타낸다. 즉, disappear[i] 시간 이후에는 해당 노드를 방문할 수 없다..

[웹 보안] 디렉터리 트래버설(Directory Traversal) 공격이란?

디렉터리 트래버설(Directory Traversal) 공격이란?웹 애플리케이션을 개발할 때, 파일을 다루는 기능은 필수적입니다. 하지만, 사용자의 입력을 검증 없이 파일 경로로 사용할 경우 디렉터리 트래버설(Directory Traversal) 공격에 노출될 수 있습니다. 이번 글에서는 디렉터리 트래버설이 무엇인지, 공격 방식과 실제 예제, 그리고 이를 방어하는 방법을 정리해보겠습니다.🔍 디렉터리 트래버설(Directory Traversal) 개념**디렉터리 트래버설(Directory Traversal, 패스 트래버설)**은 공격자가 파일 시스템을 탐색하여 허가되지 않은 파일에 접근하는 보안 취약점입니다. 웹 애플리케이션이 사용자 입력을 기반으로 파일을 읽거나 로드하는 경우, 공격자는 ../ 같은 디..

Network 2025.01.30

[운영] 비동기 처리와 Thread Pool을 활용한 API 성능 최적화

멀티스레드 기반 API 성능 개선: 실전 적용 및 사례 분석API 성능이 느려지고 응답 속도가 지연된다면?**멀티스레딩(Multi-threading)**을 활용하여 성능을 최적화하고 처리 속도를 향상시킬 수 있습니다.이번 글에서는 멀티스레드 기반 API 성능 개선을 위한 개념, 적용 사례, 코드 예제를 함께 살펴보겠습니다.📌 멀티스레딩(Multi-threading)이란?멀티스레딩은 하나의 프로세스 내에서 여러 개의 스레드를 동시에 실행하는 방식입니다.기본적으로 싱글스레드와 비교하면 다음과 같은 차이가 있습니다.실행 방식 설명싱글스레드(Single-threading)한 번에 하나의 작업만 처리멀티스레드(Multi-threading)여러 개의 작업을 동시에 실행하여 응답 속도 향상📌 멀티스레딩을 활용하는..

운영 2025.01.30

[도서] 도메인 주도 설계로 시작하는 마이크로서비스 개발 – 실무와 연결된 인사이트

저자: 한정헌, 유해식, 최은정, 이주영출판사: 위키북스1. 이 책을 읽게 된 계기마이크로서비스 아키텍처(MSA)는 최근 몇 년간 빠르게 확산되며 많은 개발팀이 이를 도입하고 있다. 그러나 단순히 서비스를 작게 나눈다고 유지보수가 쉬워지는 것은 아니다. 중요한 것은 각 서비스가 독립성을 유지하면서도 하나의 시스템처럼 원활하게 동작하도록 설계하는 것이다.개발을 하면서 "이 서비스를 어디까지 독립적으로 분리할 수 있을까?" 라는 고민을 자주 하게 된다. 특정 도메인의 기능을 설계할 때, 향후 기능이 확장되더라도 유연하게 대응할 수 있는 구조를 만드는 것이 중요하다. 하지만 서비스 간 강한 의존성이 발생하면, 오히려 모놀리식보다 더 복잡한 시스템이 되어버리는 문제가 생길 수 있다.실무에서도 여러 개의 서비스가..

도서 2025.01.30

[leetcode][JAVA] 385. Mini Parser (스택)

💡 문제mini-parser (https://leetcode.com/problems/mini-parser/description/)자세한 문제 설명과 입출력 예는 링크를 참고해주세요. 총 소요 시간: 35~55분 💡 문제 (문제 설명 (한글 번역))문자열 s가 중첩된 리스트의 serialization을 나타냅니다. 이를 deserialize하는 파서를 구현하여 deserialized된 NestedInteger를 반환하세요.NestedInteger는 다음 두 가지 중 하나를 가질 수 있습니다:단일 정수정수 또는 다른 중첩 리스트를 포함하는 리스트예제 1입력: s = "324"출력: 324설명: 단일 정수 `324`를 포함하는 NestedInteger 객체를 반환합니다.예제 2입력: s = "[123,[4..