분류 전체보기314 [MySQL] InnoDB의 Lock 알아보기 transaction rollback 시 auto increment 이슈에 대해 포스팅을 쓰고 Transaction Isolation level 자체에 대한 지식이 부족하다고 생각되어 포스팅을 쓰게 되었다. *아주 정리가 잘 되어있는 글을 보고 공부를 하였다. Intro ACID 원칙을 철저히 지킬수록 동시성은 낮아진다. ACID 원칙을 희생하여 동시성을 얻을 수 있는데, DB엔진이 제공해주는 isolation level에 따라 다양한 locking 전략을 적용할 수 있다. 이를 적용하면, isolation 원칙에 어긋날수록 문제가 발생할 가능성은 커지지만 동시성을 높일 수 있다. Isolation level ANSI/ISO SQL standard에서 정의한 isolation level은 READ UNC.. 2021. 8. 7. [Java] ExceptionHandler를 이용한 에러 처리 에러가 발생하면 클라이언트에 error message를 전달한다. 좀 더 상세하게 전달하고 싶어 반복적으로 예외를 처리를 했는데 코드가 너무 지저분해 보였다. 이럴 때, ExceptionHandler가 굉장히 유용하다. 예외처리를 좀 더 잘해볼 수 있는 방법을 공부해보자 ! Intro 예외 처리는 굉장히 중요하지만, 놓치는 부분이 많고 어렵다. 주로 사용하는 방식은 try-catch 방식인데 비즈니스 로직에 너무 많이 들어가게 되면 코드가 아주 지저분해지고 복잡해진다. 파라미터를 잘못 전달(400 Error)하거나 알 수 없는 에러(500 Error)가 발생하는 경우는 이걸 하나 하나 다 처리를 하려니 너무 번거로웠고 지저분했다. 이때, ExceptionHandler를 이용하면 비즈니스 로직에 집중할 수.. 2021. 8. 6. [MySQL] Transaction rollback 시 Auto Increment 이슈 Intro 개발중 @Transaction을 사용하다가 insert 실패 시 rollback되는 경우가 있었다. 다음 insert문을 실행했을 때, 순차적인 값이 아닌 값이 나타났다. (1,2,3,8,13 .. 이런식으로) 원인 Transaction으로 인해 로직 자체는 rollback되었지만, 이미 테이블에 적용된 Auto Increment 값은 증가한 뒤였다. auto_increment는 transaction이 적용되지 않는다. 따라서, rollback이 적용되지 않는 것이다. 내가 겪은 원인 외에도, insert ignore int 문을 사용할 때 statement문 오류로 인한 이슈, 동시에 다수의 쿼리가 insert될 때 auto increment 필드 값이 증가될 수 있다. 어떻게 해결할까? a.. 2021. 8. 5. [MySQL] MySQL의 스토리지 엔진 비교 (InnoDB, MyISAM, Archive) 트랜잭션을 공부하다가 InnoDB가 언급되었는데 거의 이름만 아는 수준이어서 공부를 하게 되었다. 분명 예전에 배운 것 같은데, 어디다 까먹는지 참. 포스팅해놓고 두고 두고 기억하자. MySQL의 엔진 MySQL은 크게 서버 엔진과 스토리지 엔진 두 가지 구조로 되어있다. 서버 엔진 클라이언트가 Query 요청 시, 쿼리 파싱과 스토리지 엔진 데이터를 용청하는 작업을 수행한다. 스토리지 엔진 물리적 저장장치에서 데이터를 읽어온다. 우리가 자주 듣는 InnoDB, MyISAM 등이 여기에 속한다. 스토리지 엔진은 데이터를 직접 다루기 때문에 엔진 종류마다 동작 원리가 다르다. 어제 포스팅했던 트랜잭션이나 성능 이슈와 밀접하기 때문에 꼭! 잘! 알아둬야 한다. 스토리지 엔진의 종류 엔진의 종류는 8가지나 있.. 2021. 8. 4. 이전 1 2 3 4 5 6 7 8 ··· 79 다음