전체 글 55

데이터베이스 프로시저, 함수, 뷰: 각각의 역할과 사용법

프로시저와 함수 뷰의 차이점을 설명드리겠습니다. 1. 프로시저프로시저(Procedure)는 데이터베이스의 데이터에 대한 작업을 수행하기 위한 목적으로 사용됩니다. 이것은 데이터의 추가, 수정, 삭제, 검색 등과 같은 다양한 데이터 조작 작업을 수행하는 데 사용됩니다.비즈니스 룰 검증, 트랜잭션 관리, 보안 제어 등과 같은 데이터베이스 관리 작업에도 활용됩니다.프로시저는 무엇을 return하는 것 보다 데이터를 조작하기 위해 사용됩니다. 그런 이유로 리턴값이 없는 프로시저가 일반적입니다. 2. 함수함수(Function)는 주로 값을 계산하거나 가공하기 위해 사용됩니다.함수는 return 값으로 단일 값(숫자 또는 문자열)을 제공하는 것이 일반적입니다.함수는 입력 값을 받아서 계산하고, 그 결과 값을 반환합..

Database 2023.12.26

트랜잭션 격리 수준의 종류와 성능 최적화 전략

트랜잭션과 격리 수준 데이터베이스에서 트랜잭션과 격리 수준은 데이터의 무결성을 유지하고 동시성을 관리하는 중요한 개념입니다. 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변화시키기 위해 실행되는 프로그램의 단위 작업입니다. 트랜잭션은 다음과 같은 ACID 속성을 만족해야 합니다.A : Atomicity 원자성을 의미하며, 트랜잭션 내의 모든 연산은 하나의 작은 단위로 동작해야 합니다. 쉽게말해 모든 연산이 실패하거나, 모든 연산이 성공하거나 둘 중 하나만 처리되도록 해야합니다.C : Consistency 일관성을 의미하며, 트랜잭션은 데이터 일관성 상태에서 다른 일관된 상태로 전환해야 합니다. 예를 들면 "학생"이라는 데이터가 테이블에서 삭제된다면 "수강신청"이라는 학생에 Relation 되어있는 데이터..

Database 2023.09.02

JPA와 Hibernate의 차이점은 무엇인가요?

JPA와 Hibernate는 둘 다 자바 환경에서 관계형 데이터베이스를 다루기 위한 도구입니다. 몇 가지 중요한 차이점이 있습니다. JPA는 자바 객체와 데이터베이스 테이블 간의 매핑을 위한 표준 API를 제공합니다.JPA 자체는 구현이 없으며, 인터페이스만 제공합니다. 그러므로 Hibernate라는 ORM이 없을 경우 JPA의 기능들을 사용할 수 없습니다.JPA는 JPQL이라는 언어를 제공합니다. 객체 지향적인 쿼리를 작성할 수 있습니다. Hibernate는 JPA의 표준 사양을 구현한 구현체이며 라이브러리 중 하나입니다. 따라서 JPA의 모든 기능을 Hibernate에서도 사용할 수 있습니다.Hibernate는 JPA기능 외에도, Lazy Loading, Caching, Dirty Checking 등..

Spring Data 2023.09.02

ORM이란 무엇인가요?

ORM은 Object Relational Mapping의 약자로, 객체 지향 프로그래밍과 관계형 데이터베이스 관리 시스템(RDBMS) 사이의 데이터를 매핑하는 프로그래밍 기술입니다.즉, ORM은 데이터베이스의 테이블과 프로그래밍 언어의 클래스 간의 매핑을 담당하며, 이를 통해 개발자가 SQL 쿼리 없이도 데이터베이스 작업을 쉽게 수행할 수 있게 해줍니다. ORM의 주요 기능은 다음과 같습니다.객체 생성과 테이블 레코드의 생성을 연결객체 필드와 테이블 컬럼 사이의 매핑객체 연산과 SQL 쿼리의 자동 변환ORM의 장담점은 다음과 같습니다.장점개발 속도 향상 : SQL 쿼리를 직접 작성하지 않아도 되므로 개발 과정이 빨라집니다.코드의 가독성과 유지보수 : 데이터베이스 관련 코드가 객체 지향적으로 작성되므로, ..

Spring Data 2023.09.02

JPA가 무엇인가요?

JPA는 Java Persistence API의 약자로, Java 어플리케이션에서 관계형 데이터베이스의 데이터를 쉽게 관리할 수 있게 해주는 프로그래밍 인터페이스입니다. 이것은 Java EE 표준의 일부이며, 자바 객체와 데이터베이스 테이블 간의 매핑을 담당합니다. JPA는 다음과 같은 기능을 제공합니다.Object Relational Mapping : ORM이라고도 불리며, 객체와 테이블을 매핑해서, 코드 내에서 데이터베이스를 객체처럼 다룰 수 있습니다.Java Persistence Query Language : JPQL이라고도 불리며 SQL과 유사한 문법을 가진 쿼리 언어를 제공합니다.캐시 시능 : 자주 사용되는 데이터를 캐시에 저장하여 성능을 향상시킬 수 있습니다.1차 캐시 : EntityMange..

Spring Data 2023.09.02

TCP 통신과 Keep-alive로 통신 효율 최적화: 실무에서 경험한 Connection Timeout 해결 사례

먼저 Keep-alive 에 앞서 TCP 통신부터 보겠습니다. 클라이언트와 서버의 TCP 통신을 하기 위해서는 여러 준비 과정이 필요합니다.Three-way handshakeSlow Start데이터 압축 등Three-way handshake란?Three-way handshake는 TCP 통신을 시작하기 전에 클라이언트와 서버가 통신 가능한 상태인지 확인하는 절차입니다.예를 들어, 구글의 메인 페이지에 접속한다고 생각해봅시다.사용자가 브라우저에 www.google.com을 입력하고 엔터를 누르면 시작됩니다.사용자(클라이언트)는 구글(서버)에게 sync 패킷을 전송합니다.구글은 이를 수신하고 사용자에게 ack 패킷과 함께 자신의 sync 패킷을 전송합니다.사용자는 마지막으로 ack 패킷을 구글에게 보내, T..

카테고리 없음 2023.08.14

JVM 메모리 덤프 생성 및 분석

JVM이 동작하는 프로세스의 메모리 덤프를 생성하는 방법을 살펴보겠습니다.먼저, 현재 실행 중인 JVM 프로세스들을 확인합니다. $ jps -l 여러 프로세스가 있습니다. 다양한 프로세스들이 보이겠지만, 저는 spring-batch 프로젝트에 대한 덤프를 미리 생성해두었습니다.만약 kafka와 같은 다른 프로세스에 대해 덤프를 생성하고자 한다면 다음 명령어를 사용하면 됩니다: $ jmap -dump:format=b,file=/path/file.hprof 2501  여기서 format은 binary를 의미하며, 2501은 프로세스 ID입니다. jmap은 JDK에서 제공하는 유용한 도구입니다. 주의사항 - 덤프를 생성하는 도중에는 성능 저하가 발생할 수 있습니다. - 생성된 덤프 파일의 크기는 JVM이 사용..

효율적인 데이터 분산 저장 전략: 샤딩과 리밸런싱의 이해

해당 내용은 샤딩에 대한 내용으로 비유적인 설명이 많습니다.이해를 위해서만 봐주시고, 더 궁금하신 내용은 댓글을 남겨주세요.     위에처럼 노트북을 보관해 주는 회사가 있고, 노트북을 1000대 보관할 수 있는 창고가 있습니다. 1. 데이터 분산 저장을 위한 새로운 창고의 추가 (샤딩)보관해야 할 1000대의 노트북이 추가로 들어와서 창고 B를 만들었습니다.창고 A와 B는 모두 노트북이 들어온 순서대로 보관을 하고 있습니다. 만약 고객이 창고에 들어와 노트북을 찾으려면 2000대의 노트북을 하나씩 확인해야만 합니다. 2. 최적화 전략 개발 (샤딩 키 구성)노트북을 찾는 시간이 너무 오래걸려, 시리얼 번호를 기준으로 분류합니다. 시리얼 번호는 한번 정해지면 변경되지 않는 값이므로시리얼 번호가 홀수로 끝나..

Architecture 2023.08.11

Kafka의 고가용성: 장애 대응 및 데이터 손실 방지

Kafka의 안전성과 복구 전략Apache Kafka는 대용량의 실시간 데이터 스트림 처리를 위한 분산 메시징 시스템입니다. Kafka의 안정성과 높은 가용성을 위해 여러 가지 전략과 구성 요소가 사용됩니다. 본 글에서는 Kafka의 주요 안전성 및 복구 전략에 대해 알아보겠습니다. 1. 데이터 복제Kafka는 데이터의 내구성을 보장하기 위해 각 Topic의 파티션을 여러 개의 복제본으로 구성합니다. 각 파티션은 주 브로커(리더)와 여러 팔로워 브로커(복제본)으로 구성됩니다.Producer가 데이터를 전송하면, 해당 데이터는 주 브로커에 저장되고, 주 브로커는 복제본 브로커들에게 데이터를 복제하여 저장합니다. 이렇게 복제된 데이터는 클러스터 내에 여러 브로커에 분산 저장되므로, 하나의 브로커가 장애가 발..

Architecture 2023.08.08

Kafka의 EOS 보장 및 성능 최적화 전략: Producer, Consumer, Broker 설정

1. EOS의 개념과 중요성EOS (Exactly Once Semantics)는 메시지 전송에서 메시지가 한 번만 전송되고 처리되는 것을 보장하는 전송 보증입니다. 다시 말해, 송신자와 수신자 사이에 데이터의 중복 또는 손실 없이 데이터가 한 번만 전송되는 것을 의미합니다. EOS의 중요성:데이터 중복성 제거: 중복된 메시지는 데이터의 무결성을 해칠 수 있습니다. EOS는 이를 방지하여 데이터의 정확성을 보장합니다.데이터 손실 방지: 손실된 메시지는 시스템의 안정성을 위협합니다. EOS는 모든 메시지가 제대로 전달되도록 보장합니다.자원 효율성: 중복 메시지를 처리하는 데 필요한 자원을 절약하여 시스템의 효율성을 높입니다.  2. Kafka에서 EOS를 어떻게 구현하는지Apache Kafka는 0.11.0..

DevOps 2023.08.08