전체 글 178

[인프런] Simple Design: 25년차 개발자가 전하는 깔끔한 코드의 본질

좋은 코드의 기준, 정말 '주관적'일까요?좋은 코드의 기준이 있을까요? 깔끔한 코드? 읽기 쉬운 코드? 아름다운 코드?좋은 코드의 기준이 이런 주관적인 것 밖에 없을까요?팀장과 나의 코드 기준이 다른가요?동료들의 코드를 리뷰할 때 나는 어떤 이야기를 해줄 수 있을까요?본 밋업에서는 코드의 품질을 좀더 객관적으로 판단할 수 있는 기준들을 제시합니다.그러나, 그 기준을 단순히 제시하는 것에 그치기보다는, 그 기준을 이끌어내기 위해 어떤 질문들을 던졌는지어떤 사고 과정을 거쳤는지를 공유하고 각자가 스스로 고민하고 판단할 수 있는 기회를 제공하고자 합니다.그래서, 각자가 다른 사고 과정을 거치더라도 보편적인 기준에 도달할 수 있다는 것을 함께 경험하기를 바랍니다.사실 이 밋업을 듣는다고 해서 갑자기 매일 좋은 ..

스터디 2025.05.06

Elasticsearch 색인(Index) 구조

Elasticsearch 색인(Index) 구조 완전 정복 1. 서론 – Elasticsearch를 이해하려면 Lucene부터Elasticsearch는 강력한 분산 검색 엔진이지만, 그 핵심에는 Apache Lucene이라는 라이브러리가 있습니다. Elasticsearch는 데이터를 검색하기 위해 Lucene을 내부적으로 사용하며, 색인(index)과 검색(search)과 관련된 대부분의 기능은 Lucene의 구조 위에 구축되어 있습니다.따라서 Elasticsearch의 동작 원리를 정확히 이해하려면 Lucene이 데이터를 어떻게 색인하고 검색하는지를 먼저 알아야 합니다.2. Lucene의 색인 구조와 Elasticsearch 내부 동작2.1 문서 색인과 Flush문서가 색인될 때, Lucene은 해당 ..

Elasticsearch 아키텍처 구성 요소

🛠 Elasticsearch 아키텍처 완전 정복: 클러스터, 노드, 인덱스, 샤드, 레플리카Elasticsearch는 대용량 분산 검색 엔진으로, 고성능 검색과 실시간 로그 분석 등에 강력한 성능을 발휘합니다.이번 글에서는 Elasticsearch의 핵심 아키텍처인 클러스터, 노드, 인덱스, 샤드, 레플리카의 개념과 이들 간의 관계를 실무적인 시각으로 자세히 살펴봅니다.📌 전체 구성 요소 한눈에 보기구성 요소설명클러스터 (Cluster)Elasticsearch 전체 시스템 단위노드 (Node)클러스터에 참여하는 서버 한 대인덱스 (Index)문서(Document)들의 논리적 집합샤드 (Shard)인덱스를 물리적으로 분할한 단위레플리카 (Replica)샤드의 복제본, 고가용성 보장🔧 1. 클러스터 (..

Elasticsearch란? Elasticsearch 입문자를 위한 이해하기 쉬우면서도 전문적인 지식을 알아보자.

🔍 Elasticsearch란? 완전 기초부터 핵심까지 한 번에 이해하기데이터의 양이 폭발적으로 증가하는 시대, 빠르고 정확한 검색은 많은 시스템에서 핵심 기능으로 자리잡고 있습니다.Elasticsearch는 이러한 검색 기능을 매우 강력하고 유연하게 제공하는 분산형 검색 및 분석 엔진입니다.이번 포스트에서는 Elasticsearch가 무엇인지, 어떤 구조로 동작하며 어떤 강점을 가지는지 완전 기초부터 핵심 포인트까지 정리해보겠습니다.✅ Elasticsearch란?1. 분산형 RESTful 검색/분석 엔진Elasticsearch는 단순히 텍스트를 검색하는 툴이 아닙니다.다음과 같은 특징을 지닌 다목적 고성능 검색 플랫폼입니다:특징설명분산형 (Distributed)여러 대의 서버에 데이터를 자동 분산 저..

이 작은 차이가 성능을 바꾼다! key={index} vs key={id}

🔍 key={index} vs key={id} 차이점 & 성능 최적화 이유React에서 리스트를 렌더링할 때 각 항목을 구별할 수 있도록 key 속성을 제공해야 합니다.잘못된 key 설정은 불필요한 리렌더링을 유발하고 성능을 저하시킬 수 있습니다.이번 포스팅에서는 key={index}와 key={id}의 차이점을 설명하고, 최적의 방법을 알아보겠습니다.🚨 key={index}의 문제점{data.map((item, index) => ( ))}✔️ index를 key로 사용하면 배열 순서가 바뀔 때 React가 항목을 잘못 인식할 가능성이 큽니다.📌 문제 발생 시나리오1️⃣ 새로운 항목이 리스트 중간에 삽입될 때기존 리스트: [A, B, C]새로운 리스트: [A, NEW, B, C]React는 i..

React 2025.03.18

React 18 + TypeScript + React Query + Hooks 실무 적용기

1. 들어가며최근 프로젝트에서 React 18과 React Query를 활용하여 서버 상태 관리 최적화를 진행했습니다.기존 방식에서는 불필요한 API 요청이 많아 성능 문제가 있었고, 이를 React Query로 개선하면서 어떤 점이 효과적이었는지 공유하려 합니다.특히,✅ React 18의 자동 배치(Auto Batching) 기능이 성능에 미친 영향✅ React Query를 활용한 API 요청 최적화✅ 불필요한 리렌더링을 줄이기 위한 전략에 대해 다룰 예정입니다.2. 실무에서 적용한 핵심 기술2.1 React 18 – 자동 배치(Auto Batching)React 18에서는 여러 개의 setState가 자동으로 하나의 렌더링으로 합쳐지는 자동 배치(Auto Batching) 기능이 도입되었습니다.📌 ..

React 2025.03.18

React 18에서 효율적인 컴포넌트 설계란?

1. 프로젝트 개요프론트엔드를 담당하면서 React 18, TypeScript, React Query, Hooks를 활용하여 개발을 진행했다. 이 과정에서 겪은 문제들과 해결 과정, 그리고 효율적인 컴포넌트 설계에 대해 공유하고자 한다.2. 기술 개요2.1 React 18 개요React 18은 동시성 렌더링(Concurrent Rendering)과 자동 배치(Automatic Batching) 등의 새로운 기능을 추가하여 성능을 향상시킨 버전이다. 주요 기능은 다음과 같다:Concurrent Rendering: UI 업데이트를 더욱 부드럽게 처리할 수 있도록 함Automatic Batching: 여러 상태 업데이트를 자동으로 배치하여 불필요한 렌더링 방지Transition API: UI 상태 전환을 더욱..

React 2025.03.18

[운영] 로그는 적을수록 좋다? ELK 로그 최적화 전략과 운영 팁

ELK 로그 최적화: 불필요한 로그가 애플리케이션 성능에 미치는 영향과 해결책1. 실무에서 발생한 문제최근 ELK(Elasticsearch, Logstash, Kibana) 스택을 활용하여 애플리케이션 로그를 관리하는 과정에서 불필요한 로그가 과도하게 남겨지는 문제를 경험했다. 특히 Elasticsearch Memory Pool 관련 로그가 지속적으로 기록되었는데, 실제 운영에 중요한 로그는 아니었음에도 불구하고 애플리케이션 성능과 운영 비용에 영향을 줄 가능성이 있었다.이 문제를 해결하기 위해 불필요한 로그를 관리하고 최적화하는 방법을 정리해 보았다.2. 불필요한 로그가 애플리케이션 운영에 미치는 영향1) 성능 저하I/O 부하 증가: 로그가 많을수록 디스크 쓰기(Write) 부하가 증가하여 애플리케이션..

운영 2025.03.12

Java 애플리케이션 성능 최적화: JVM 힙 메모리 설정 가이드

JVM 힙 메모리 개념 정리 및 적절한 설정 방법1. JVM 메모리 구조 개요JVM(Java Virtual Machine)은 여러 개의 메모리 영역을 관리하며, 그중 Heap 메모리가 가장 중요한 역할을 한다.아래는 JVM이 사용하는 주요 메모리 영역이다.메모리 영역 역할 및 설명Heap객체가 저장되는 공간. -Xms, -Xmx 옵션으로 크기 조절 가능.Stack각 쓰레드별 메서드 호출 스택을 저장하는 공간.Metaspace클래스 메타데이터 저장 공간 (-XX:MaxMetaspaceSize로 크기 조절).Code CacheJIT(Just-In-Time) 컴파일된 코드 저장 공간.Direct MemoryByteBuffer.allocateDirect() 같은 네이티브 메모리 사용.2. 서버 전체 메모리(4G..

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..

[도서] 면접을 위한 CS 전공지식 노트 독후감

독후감이 책은 컴퓨터공학을 전공했거나 IT 업계에서 취업을 준비하는 사람들에게 매우 유용한 내용을 담고 있다. 특히, IT 면접에서 자주 다뤄지는 CS 전공 지식을 체계적으로 정리해 놓아 취업 준비생뿐만 아니라 실무에서 사용하는 지식을 보완하려는 개발자들에게도 큰 도움이 된다.책은 크게 운영체제, 네트워크, 데이터베이스, 자료구조, 알고리즘 등의 주요 CS 분야로 나뉘어 있으며, 각 주제마다 핵심적인 내용을 명확히 설명하고 있다. 또한, 단순히 개념만 나열하는 것이 아니라, 실제 면접에서 나올 만한 질문을 바탕으로 답변과 해설을 제시해 실전 대비에 초점이 맞춰져 있다.주요 장점효율적인 구성책의 가장 큰 장점은 방대한 CS 지식을 짧은 시간 안에 효율적으로 학습할 수 있도록 구성되어 있다는 점이다. 각 주..

도서 2025.01.27

[Spring Framework] 스프링 싱글톤: 실제 업무에서 마주하는 문제와 해결 방법

실제 업무에서 마주하는 문제와 해결 방법스프링을 사용하다 보면 개발자라면 누구나 한 번쯤 들어보는 개념이 바로 **싱글톤(Singleton)**입니다. 스프링 컨테이너(ApplicationContext)가 기본적으로 빈(Bean)을 싱글톤으로 관리한다는 사실은 많이 알려져 있지만, 이를 제대로 이해하지 못하면 예상치 못한 문제를 마주할 수 있습니다. 특히, 멀티스레드 환경에서의 동시성 문제, 빈 스코프의 잘못된 활용, 또는 상태 관리 실수 등은 실제 업무에서 흔히 발생하는 상황입니다.이번 글에서는 스프링의 싱글톤이 왜 중요한지, 그리고 이를 실제 업무에서 어떻게 체감할 수 있는지 살펴보겠습니다. 또한, 흔히 발생하는 문제와 해결 방법을 함께 다뤄 안정적인 애플리케이션 설계를 위한 실질적인 팁을 공유합니다..

[Spring Framework] 스프링 컨테이너의 싱글톤: 왜, 어떻게 관리될까?

스프링 컨테이너의 싱글톤: 왜, 어떻게 관리될까?스프링 프레임워크를 사용하다 보면 "싱글톤"이라는 용어를 자주 접하게 됩니다. 싱글톤은 객체 생성 방식에 큰 영향을 미치며, 애플리케이션 전반에 걸쳐 효율적인 리소스 관리와 코드 구조를 단순화하는 핵심 개념입니다. 이번 글에서는 스프링 컨테이너의 싱글톤이 무엇인지, 자바의 싱글톤 패턴과 어떤 차이가 있는지, 그리고 싱글톤 사용 시 주의할 점에 대해 다뤄보겠습니다.1. 싱글톤이란?**싱글톤(Singleton)**은 단 하나의 객체만 생성되도록 보장하는 디자인 패턴입니다. 주로 애플리케이션에서 전역적으로 공유해야 하는 리소스를 관리할 때 사용됩니다. 예를 들어, 데이터베이스 연결 풀, 로그 관리 클래스 등이 이에 해당합니다.자바에서는 아래와 같은 코드로 싱글톤..

[Java] 싱글톤은 Enum 타입으로 만들어라

싱글톤 패턴: 구현, 문제점, 해결책1. 싱글톤 패턴이란?싱글톤 패턴은 클래스의 인스턴스가 단 하나만 생성되도록 보장하고, 어디에서든 이를 전역적으로 접근할 수 있게 하는 디자인 패턴입니다.주로 공유 리소스 관리, 설정 객체 등에 사용됩니다.전형적인 싱글톤 구현 방식public class User { private static final User INSTANCE = new User(); private User() {} public static User getInstance() { return INSTANCE; }}2. 기존 싱글톤 방식의 문제점직렬화(Serialization)와 역직렬화(Deserialization)Serializable 인터페이스를 구현할 경우, 역직렬..

[Java] 싱글톤(Singleton) 패턴의 사용 이유와 문제점

싱글톤 패턴이란?싱글톤 패턴(Singleton Pattern)은 소프트웨어 디자인 패턴 중 하나로, 클래스의 인스턴스를 단 하나만 생성하고, 해당 인스턴스에 전역적으로 접근할 수 있도록 보장하는 방법입니다.이 패턴은 공통된 자원을 관리하거나 전역 상태를 유지해야 할 때 자주 사용됩니다.주요 특징은 아래와 같습니다.인스턴스가 한 번만 생성됨.전역적으로 접근 가능.동일한 자원을 반복 생성하지 않아 효율적.싱글톤 패턴을 사용하는 이유자원의 효율적 관리인스턴스를 하나만 생성하고 이를 공유하기 때문에 메모리 낭비를 줄일 수 있습니다.데이터베이스 연결, 로그 관리 등에서 유용합니다.글로벌 접근성 제공애플리케이션 어디서나 동일한 객체에 접근 가능.중복 코드 작성 없이 공통 데이터와 로직을 공유.상태 관리의 일관성단일..

[JPA] 엔티티 매핑 (Entity Mapping)

엔티티 매핑 (Entity Mapping)엔티티 매핑(Entity Mapping)은 객체 지향 프로그래밍에서 엔티티 클래스와 데이터베이스 테이블 간의 매핑을 정의하는 핵심 개념입니다. JPA(Java Persistence API)와 같은 ORM(Object-Relational Mapping) 기술을 활용하여 데이터베이스와 객체 간의 데이터를 매핑하고 관리할 수 있습니다. 이번 글에서는 엔티티 매핑의 기본 개념, 주요 애노테이션, 실무 적용 사례, 그리고 엔티티 매핑 시 주의해야 할 점에 대해 다뤄보겠습니다.1. 엔티티 매핑의 기본 개념엔티티(Entity)는 데이터베이스의 테이블과 매핑되는 자바 클래스입니다. JPA를 통해 우리는 자바 객체를 데이터베이스 테이블에 쉽게 매핑하고, CRUD(Create, R..

[JPA] JPQL (Java Persistence Query Language) 완벽 가이드

JPQL (Java Persistence Query Language) 완벽 가이드JPQL(Java Persistence Query Language)은 JPA(Java Persistence API)에서 엔티티 객체를 대상으로 하는 쿼리 언어로, SQL과 유사하지만 데이터베이스 테이블이 아닌 엔티티 객체를 대상으로 작동한다는 점에서 차이가 있다. JPQL은 데이터베이스에 의존하지 않는 객체 지향 쿼리로, JPA를 사용하는 애플리케이션에서 데이터베이스와 독립적으로 유지보수가 용이한 코드를 작성하는 데 필수적이다.JPQL 기본 문법JPQL은 기본적으로 SQL과 문법이 유사하지만, 테이블 대신 엔티티 객체를 대상으로 조회를 수행한다.// JPQL 예시String jpql = "SELECT m FROM Member..

[JPA] JPA 기본 사용법

JPA 기본 사용법1. JPA란 무엇인가?JPA(Java Persistence API)는 자바 애플리케이션에서 관계형 데이터베이스를 사용하기 위한 표준 인터페이스입니다. ORM(Object Relational Mapping)을 통해 객체와 데이터베이스 테이블을 매핑하여 객체 지향적인 프로그래밍 패러다임을 유지하면서 데이터베이스 작업을 할 수 있게 해줍니다. JPA의 주요 구현체로는 Hibernate, EclipseLink 등이 있습니다.주요 용어Entity: 데이터베이스 테이블에 매핑되는 클래스EntityManager: 엔티티를 관리하고 데이터베이스 작업을 수행하는 인터페이스Persistence Context: 엔티티의 상태를 관리하는 공간으로, 영속성 컨텍스트라고도 함2. JPA 설정JPA를 사용하기 ..

메시지 큐(Message Queue)

메시지 큐(Message Queue)는 메시지의 무손실(durability)을 보장하며, 프로세스 간 비동기 통신(asynchronous communication)을 지원하는 데이터 전송 시스템이다.  메시지 큐는 데이터가 생산자(Producer)에서 소비자(Consumer)로 안전하게 전달될 때까지 중간 버퍼 역할을 수행한다. 메시지는 큐에 순서대로 저장되며, 소비자가 큐에서 메시지를 꺼내 처리할 때까지 유지된다. 이러한 특성 덕분에 시스템의 비동기 처리와 내결함성을 향상시킬 수 있다. 메시지 큐는 메시지의 버퍼 역할을 하며, 생산자(Producer)와 소비자(Consumer) 간의 비동기 데이터 전송을 가능하게 한다. 기본적으로 생산자가 메시지를 큐에 발행(publish)하고, 큐에 연결된 소비자가 ..

운영/Kafka & MQ 2025.01.11

캐시(Cache) 전략

회사에서 대규모 데이터 조회와 성능 최적화가 중요한 프로젝트를 진행하며 캐시를 도입한 경험이 있습니다. 당시, 시스템 성능이 저하되는 문제를 해결하기 위해 데이터베이스에 대한 직접적인 접근을 줄이고 캐시 계층을 활용하는 방안을 검토하게 되었습니다. 특히, 자주 변경되지 않는 데이터나 반복적인 연산 결과를 캐싱함으로써 응답 속도를 향상시키고 서버 부하를 줄일 수 있었습니다.이 글에서는 실무 경험을 바탕으로 캐시 계층의 개념과 활용 방법, 그리고 캐시 사용 시 고려해야 할 점들을 상세히 다루고자 합니다. 캐시를 적절히 활용함으로써 시스템의 성능과 확장성을 개선하고, 안정적인 서비스를 제공하는 데 도움이 되기를 바랍니다.1. 캐시 계층(Cache Layer) 설명캐시(Cache)는 데이터 조회 속도를 향상시키..

운영 2025.01.11

[Network] 데이터베이스 다중화: 확장성과 안정성을 위한 설계

데이터베이스 다중화: 확장성과 안정성을 위한 설계실무에서 시스템 장애 상황을 경험하면서 다양한 장애 대응 방안을 적용해 본 적이 있습니다. 당시 장애 대응 중 하나로 데이터베이스 다중화를 진행하게 되었고, 이를 통해 시스템 안정성을 높일 수 있었습니다. 이번 경험을 계기로 데이터베이스 다중화에 대해 더 깊이 학습하게 되었으며, 공부한 내용을 정리하여 블로그 포스팅 형식으로 공유하고자 합니다. 이 글에서는 데이터베이스 다중화의 개념과 이를 실무에 적용할 때의 장점, 그리고 장애 상황에서의 대처 방법에 대해 설명하겠습니다.데이터베이스 다중화란?데이터베이스 다중화(Database Replication)는 데이터베이스의 동일한 복제본을 여러 서버에 저장하여 시스템의 성능, 가용성, 안정성을 향상시키는 기술입니다..

Network 2025.01.11