728x90 전체 글46 [MySQL] Deadlock(교착 상태) 원인 Deadlock(교착 상태) 원인 MySQL에서 Deadlock(교착 상태)는 두 개 이상의 트랜잭션이 서로가 필요로 하는 자원을 서로 잠금하고 있어 두 개 트랜잭션이 모두 완료하지 못하고 Rollback(롤백)이 되는 상태를 말한다. 일반적으로 Deadlock은 여러 트랜잭션이 동시에 데이터베이스 자원(행, 테이블 등)을 접근할 때 발생할 수 있으며 발생되는 원인에 대해 알아보자. 1. 교차 락(Cross Locking) 두 개 이상의 트랜잭션이 서로의 필요로 하는 자원을 잠그고, 상대방이 소유한 락을 기다리며 발생하는 상황이다.트랜잭션 A가 id = 1인 행을 배타적 락을 건다.트랜잭션 B가 id = 2인 행을 배타적 락을 건다.트랜잭션 A가 id = 2인 행을 배타적 락을 걸기 위해 트랜잭션 B가 .. 2024. 10. 27. [Mysql] Lock Type Lock Type1. Share Lock(공유락) 공유 락(Share Lock)은 다른 트랜잭션이 읽기는 가능하지만, 쓰기는 제한하는 락이다. 여러 트랜잭션이 동시에 공유 락을 걸 수 있으므로 동시에 데이터를 읽을 수 있지만, 데이터를 변경하는 작업은 허용하지 않는다. 즉, 데이터를 읽을 동안 데이터 변경을 반지해야 하는 경우에 사용된다.-- id = 1인 행을 읽기가 완료될 때까지 수정이 불가하다.SELECT * FROM my_table WHERE id = 1 LOCK IN SHARE MODE; 2. Exclusive Lock(배타적 락) 배타적 락(Exclusive Lock)은 다른 트랜잭션이 해당 데이터에 대해 읽기와 쓰기 모두 접근하지 못하게 완전히 잠그는 락이다. 한 트랜잭션이 배타적 락을 설.. 2024. 10. 27. [Spring Batch][공식문서 번역] 5.1 변경 사항(What's New in Spring Batch 5.1) Spring Batch 5.1 변경 사항가상 스레드 지원 Spring Batch 5.1의 주요 주제 중 하나는 JDK 21 LTS를 수용하는 것이며, 특히 Project Loom의 가상 스레드 지원에 초점을 맞추고 있습니다. 이번 릴리스에서는 가상 스레드를 프레임워크의 모든 영역에서 사용할 수 있으며, 가상 스레드를 사용하여 동시에 스텝을 실행하거나 여러 스텝을 병렬로 실행할 수 있습니다. Spring Batch의 잘 설계된 관심사 분리 덕분에, 스레드는 직접 관리되지 않습니다. 스레드 관리는 대신 Spring Framework의 TaskExecutor 구현체에 위임됩니다. 이 인터페이스 기반의 접근 방식 덕분에 TaskExecutor 구현체 간을 투명하고 유연하게 전환할 수 있습니다. Spring .. 2024. 10. 21. [MySQL] index 생성 시 고려할 점 MySQL 사용 시 고려할 점과 튜닝 방법(241027 최신 업데이트)EXPLAN을 이용하여 조회 시 사용된 INDEX 확인 EXPLAN을 사용하여 데이터를 읽을 때 어떻게 읽는지 type을 통해 데이터를 읽는 방법(접근 방식)을 보고, 쿼리 성능을 분석 및 최적화하는 것이 좋다.# 예시explainselect * from test1 where id = 1;+--+-----------+-----+----------+-----+-------------+-------+-------+-----+----+--------+-----+|id|select_type|table|partitions|type |possible_keys|key |key_len|ref |rows|filtered|Extra|+--+---.. 2024. 10. 20. [Spring Batch 5] Meta 테이블 Meta 테이블Spring Batch는 대량 데이터 처리를 위한 프레임워크로, 여러 단계(Job, Step)를 거쳐 작업을 실행할 수 있습니다. Meta 테이블은 Spring Batch에서 주로 사용하는 테이블로 배치 작업의 실행 상태를 기록 및 관리하는데 사용되므로 각 테이블과 테이블에 저장되는 컬럼들에 대해 파악하는 것은 중요합니다. Dependency 추가implementation 'org.springframework.boot:spring-boot-starter-batch' Meta 테이블 생성 쿼리 Meta 테이블 생성 쿼리는 Spring Batch Dependency 추가하게 되면 아래 경로에 해당 Schema가 있습니다. 현재 사용중인 DB에 맞게 해당 Schema를 찾아 쿼리를 실행하면 됩.. 2024. 10. 13. 불필요한 객체 생성을 막는 방법: PRIVATE 생성자 활용하기 불필요한 객체 생성을 막는 방법: PRIVATE 생성자 활용하기 자바에서는 클래스의 인스턴스화를 막기 위해 `private` 생성자를 사용할 수 있습니다. 이렇게 함으로써 해당 클래스의 인스턴스를 직접 생성하지 못하도록 제한할 수 있습니다. 이러한 기법은 주로 유틸리티 클래스나 상수 클래스와 같이 인스턴스화할 필요가 없는 클래스에서 사용됩니다. 인스턴스화를 막으면 다음과 같은 이점을 얻을 수 있습니다. 불필요한 객체 생성 방지 클래스가 인스턴스화되지 않으면 해당 클래스의 객체를 생성할 필요가 없어집니다. 이는 자원 낭비를 방지하고 성능을 향상시킵니다. 상속을 방지 클래스를 final로 선언하지 않아도 인스턴스화를 막음으로써 상속을 통한 오버라이딩을 방지할 수 있습니다. 코드의 명확성 생성자를 privat.. 2024. 1. 27. 이전 1 2 3 4 5 6 7 8 다음 728x90