전체 글
[MySQL] Explain으로 성능 개선 포인트 찾기
[MySQL] Explain으로 성능 개선 포인트 찾기
2024.11.17들어가기 전 이번 포스팅에서는 성능 개선 포인트를 찾기 전에 Explain의 컬럼인 Type에 따른 스캔방식에 대해서 알아보고 성능 개선하는 방법에 대해서 알아보겠습니다.아래에서 설명할 내용들은 대부분 인덱스를 활용하는 내용입니다. 인덱스가 적용 안 되는 케이스에 대해서 궁금하신 분들은 아래 포스팅을 참고하시는 것을 추천드립니다.https://hoestory.tistory.com/80 [MySQL] 인덱스 적용안되고 풀스캔이 적용되는 패턴들어가기 전이번 포스팅에서는 인덱스를 설정을 하고 인덱스 스캔방식을 원했지만 풀스캔이 쿼리 패턴에 대해서 알아보겠습니다.Mysql에서 지원해 주는 Explain이라는 키워드를 사용하여 스캔방hoestory.tistory.com Explain에 대해서 알아보기 전 포스..
[Spring Boot] 트랜잭션 전파과정에 대하여
[Spring Boot] 트랜잭션 전파과정에 대하여
2024.11.10들어가기 전이번 포스팅에서는 트랜잭션 전파과정에 대해서 알아보겠습니다.트랜잭션 격리 수준에 대해서 궁금하신 분은 아래 포스팅을 참고하시는 것을 추천드리겠습니다. https://hoestory.tistory.com/86 [MySQL] 트랜잭션 격리 수준들어가기 전 이번 포스팅에서는 데이터베이스 트랜잭션의 격리 수준에 대해서 알아보겠습니다. 트랜잭션 격리 수준트랜잭션 격리 수준은 여러 트랜잭션이 동시에 실행되는 상황에서 특정 트hoestory.tistory.com 트랜잭션 전파과정이란?트랜잭션 전파과정은 하나의 트랜잭션이 다른 트랜잭션과 상호작용 하는 것을 의미합니다. 설정에 따라 하나의 트랜잭션이 다른 트랜잭션에 합류하거나, 새로운 트랜잭션을 생성하는 등 다른 트랜잭션과 상호작용을 합니다. 트랜잭션 전..
[MySQL] 데드락 및 데이터베이스 Lock(Shared Lock, Exclusive Lock, Record Lock)에 대하여 -1
[MySQL] 데드락 및 데이터베이스 Lock(Shared Lock, Exclusive Lock, Record Lock)에 대하여 -1
2024.10.20들어가기 전 이번 포스팅에서는 데드락과 데이터베이스 Lock에 대해서 알아보겠습니다.트랜잭션 격리 수준에 대한 내용은 아래 포스팅을 참고하시면 됩니다. https://hoestory.tistory.com/86 [MySQL] 트랜잭션 격리 수준들어가기 전 이번 포스팅에서는 데이터베이스 트랜잭션의 격리 수준에 대해서 알아보겠습니다. 트랜잭션 격리 수준트랜잭션 격리 수준은 여러 트랜잭션이 동시에 실행되는 상황에서 특정 트hoestory.tistory.com 데드락이란?데드락은 교착상태를 의미하고 두 개 이상의 작업이 서로 상대방의 작업이 끝나기 만을 무한정 기다리고 있기 때문에 결과적으로 아무것도 완료되지 못하는 상태를 의미합니다. 위의 이미지를 보면 R1(자원 1)은 P1(프로세스 1)을 점유하고 있는 상태..
[MySQL] 트랜잭션 격리 수준
[MySQL] 트랜잭션 격리 수준
2024.10.06들어가기 전 이번 포스팅에서는 데이터베이스 트랜잭션의 격리 수준에 대해서 알아보겠습니다. 트랜잭션 격리 수준트랜잭션 격리 수준은 여러 트랜잭션이 동시에 실행되는 상황에서 특정 트랜잭션이 다른 트랜잭션에서 변경하거나 조회하는 데이터를 볼 수 있게 허용할지 말지 정하는 것입니다. 트랜잭션 격리 수준의 종류는 아래와 같습니다.READ_COMMITTED : 다른 트랜잭션에서 커밋된 내용을 참조 가능READ_UNCOMMITTED : 다른 트랜잭션에서 커밋되지 않은 내용 참조 가능REPEATABLE_READ : 트랜잭션 진입 이전에 커밋된 내용만 참조 가능SERIALIZABLE : 트랜잭션에 진입하게 되면 락을 걸어 다른 트랜잭션에서 참조 불가능Oracle의 기본 격리 수준은 READ_COMMITTED, MySQ..
[RabbitMQ] RabbitMQ 개념 및 Spring 연동
[RabbitMQ] RabbitMQ 개념 및 Spring 연동
2024.09.18들어가기 전이번 포스팅에서는 RabbitMQ에 대해서 알아보고 RabbitMQ와 Spring을 연동하는 방법에 대해서 알아보겠습니다. RabbitMQRabbitMQ는 클라우드 환경, 온프레미스에 쉽게 배포할 수 있는 안정적인 메시징 및 스토리밍 브로커입니다.메시지 큐*(Message Queue)를 통해 여러 애플리케이션에 데이터를 주고받을 수 있도록 해주기 위한 AMQP*의 구현체입니다. AMQP란?Advanced Message Queuing Protocol의 약자로 생산자(Producer)와 수신자(Consumer) 사이에서 메시지를 안전하게 교환하는 메시지 지향 미들웨어 개방형 프로토콜입니다.메시지 큐(Message Queue)란?프로세스 또는 프로그램 간에 데이터를 교환할 때 사용하는 통신방법으로..
[Java] 동기화 기법에 대하여(뮤텍스, 세마포어) - 1
[Java] 동기화 기법에 대하여(뮤텍스, 세마포어) - 1
2024.08.20들어가기 전동기화를 하지 않으면 동시성 이슈로 인해 예상치 못한 문제를 겪을 수 있어 동기화를 하여 이와 같은 문제를 방지해야 합니다. 그래서 이번 포스팅에서는 동시성 이슈를 방지하기 위한 동기화 기법에 대해 알아보겠습니다. 동시성 이슈로 인한 문제는 아래 포스팅을 참고하시는 것을 추천드립니다.https://hoestory.tistory.com/83 [Java] 동시성 이슈 개념과 발생하는 동작 과정들어가기 전이번 포스팅에서는 동시성 이슈에 대해 알아보겠습니다. 동시성 이슈를 알아보기 전에 싱글 스레드와 멀티 스레드 환경에 대해서 알아보겠습니다. 싱글스레드와 멀티스레드 싱글hoestory.tistory.com 동기화란?동기화는 여러 스레드가 동시에 임계 영역*에 접근을 하려고 할 때 하나의 스레드만 접..
[Java] 동시성 이슈 개념과 발생하는 동작 과정
[Java] 동시성 이슈 개념과 발생하는 동작 과정
2024.07.26들어가기 전이번 포스팅에서는 동시성 이슈에 대해 알아보겠습니다. 동시성 이슈를 알아보기 전에 싱글 스레드와 멀티 스레드 환경에 대해서 알아보겠습니다. 싱글스레드와 멀티스레드 싱글 스레드(Single Thread) 싱글 스레드는 애플리케이션이 스레드 하나로만 실행되는 것을 의미합니다.아래와 같이 자바 애플리케이션을 실행하면 싱글 스레드로 동작을 합니다. public class SingleThread { public static void main(String[] args) { System.out.println("싱글 스레드 실행");} 싱글 스레드는 작업을 순차적으로 실행시킵니다.멀티 스레드(Multi Thread)멀티 스레드는 싱글 스레드와 달리 애플리케이션이 여러 개의 스레드로 실행되는..
[Java] 스레드의 상태와 생명주기
[Java] 스레드의 상태와 생명주기
2024.07.23들어가기 전이번 포스팅에서는 스레드의 상태와 생명주기에 대해서 알아보겠습니다.해당 내용을 알아보면서 "사용자 수준 스레드"와 "커널 수준 스레드"라는 단어가 나오는데 해당 단어들이 무엇을 의미하는지 아래 포스팅을 통해 알게 되고 난 뒤에 이번 내용을 읽으시는 것을 추천드립니다. https://hoestory.tistory.com/81 [Java] 멀티 스레드 모델에 대해서들어가기 전 이번 포스팅에서는 멀티스레드 모델에 대해 알아보겠습니다. 스레드 모델에는 일대일, 일대다, 다대다가 있습니다. 프로세스와 스레드의 차이점에 대해 궁금하신 분은 아래 포스hoestory.tistory.com 먼저 스레드의 상태에 무엇이 있는지 알아보고 스레드의 생명주기에 대해서 알아보겠습니다. 스레드의 상태에서는 간략하게 무..
[Java] 멀티 스레드 모델에 대해서
[Java] 멀티 스레드 모델에 대해서
2024.07.14들어가기 전 이번 포스팅에서는 멀티스레드 모델에 대해 알아보겠습니다. 스레드 모델에는 일대일, 일대다, 다대다가 있습니다. 프로세스와 스레드의 차이점에 대해 궁금하신 분은 아래 포스팅을 보시는 것을 추천드립니다. https://hoestory.tistory.com/73 [운영체제] 프로세스 & 스레드에 대하여프로세스 운영체제에 의해 파일 시스템에 설치되어 있는 파일을 프로그램이라고 부릅니다. 프로세스는 프로그램의 실제 실행의 의미하며 프로그램 파일을 실행함으로써 프로그램 데이터들이hoestory.tistory.com 멀티스레드 모델에 대해서 설명하기 전에 사용자 수준 스레드와 커널 수준 스레드에 대해 먼저 알아보겠습니다. 사용자 수준 스레드 사용자 수준 스레드는 JVM에서 생성하고 관리하는 스레드입니다...
[MySQL] 인덱스 적용안되고 풀스캔이 적용되는 패턴
[MySQL] 인덱스 적용안되고 풀스캔이 적용되는 패턴
2024.06.30들어가기 전이번 포스팅에서는 인덱스를 설정을 하고 인덱스 스캔방식을 원했지만 풀스캔이 쿼리 패턴에 대해서 알아보겠습니다.Mysql에서 지원해 주는 Explain이라는 키워드를 사용하여 스캔방식을 파악할 것입니다. 테이블 구조 및 데이터 삽입 테이블 생성 create table member( id bigInt primary key auto_increment, name varchar(255) not null, age int not null, login_count bigint default 0, created_at datetime not null default now()); 인덱스 생성 CREATE INDEX idx_login_count ON member(login_count); 더미..
[Spring] Checked Exception, Unchecked Exception의 트랜잭션 처리 방식
[Spring] Checked Exception, Unchecked Exception의 트랜잭션 처리 방식
2024.06.26들어가기 전이번 포스팅에서는 체크드 익셉션(Checked Exception), 언체크드 익셉션(Unchecked Exception)에서의 트랜잭션을 어떻게 처리하는지에 대해 알아보겠습니다. 그리고 @Transactional의 속성인 noRollbackFor, rollbackFor 속성에 대해서도 알아보겠습니다. 체크드 익셉션(Checked Exception)RuntimeException을 제외한 Exception과 하위 예외를 모두 컴파일러가 체크하고 애플리케이션 로직에서 사용할 수 있는 최상위 예외입니다.try-catch 또는 throws를 이용하여 예외를 처리해야 합니다.그리고 체크드 익셉션 같은 경우는 언체크드 익셉션과 달리 예외가 발생하면 롤백이 되지 않고 커밋이 된다는 특성이 있습니다.커밋이 ..
[JPA] Fetch Join의 양면성
[JPA] Fetch Join의 양면성
2024.05.28들어가기 전저는 Fetch Join이 장점만 존재한다고 생각을 하였었습니다. 그런데 모든 기술에는 장점만 존재하지 않다는 것을 다시 한번 깨닫게 되었습니다.그래서 이번 포스팅에서는 N+1 문제를 해결하기 위해 사용하는 Fetch Join의 양면성에 대해서 다뤄보겠습니다. N+1이 무엇인지 정확하게 모르시는 분은 아래 포스팅을 읽고 이번 포스팅을 읽으시는 것을 추천드리겠습니다. https://hoestory.tistory.com/45 [JPA] N+1 원인 및 해결방법들어가기 전 이번 글에서는 N+1이 무엇이고 발생 원인과 N+1을 방지하기 위한 임시방편, 해결방법에 대해 알아보겠습니다. 그리고 예시로 Person, House 엔티티가 있습니다. Person(N) : House(1) 관계로 이hoestor..