본문 바로가기

전체 글314

[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.
[Spring] Transactional 어노테이션 이해 및 사용하기 다양한 옵션들을 잘 모르고 @Transactional 을 사용하다 보니 다양한 상황을 고려하지 못하고 개발하는 경우가 있다. 무작정 사용하지 말고, 이해하고 사용하도록 하자! 트랜잭션 비즈니스 로직에서 쪼개질 수 없는 하나의 작업 단위. 원자성(Atomicity) 한 트랜잭션 내에서 실행한 작업들은 하나로 간주. (모두 성공 or 모두 실패) 일관성(Consistency) 트랜잭션은 일관성 있는 데이터베이스 상태를 유지. 격리성(Isolation) 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않게 격리. 영속성(Durability) 트랜잭션을 성공적으로 마치면, 결과가 항상 영속적으로 보관되어야 함. Spring에서 트랜잭션 처리 보통 @Transactional 어노테이션을 선언하여 사용한다. 동작방.. 2021. 8. 3.
두고 두고 볼만한 자주 쓰는 명령어 모음 - Linux, SecureCRT 등 (+추가중) 필요할 때 바로바로 머릿 속에서 꺼낼 수 있게 잘 기억해두자. *자주 쓰는 명령어가 있다면 언제든 댓글로 공유 부탁드립니다. Linux tail 명령어 파일의 내용을 뒤에서부터 출력해주는 명령어. 특정 프로세스나 파일의 로그를 볼 때 주로 사용. //자주 사용하는 명령어 tail -f -n 1000 log-output-2021-08-02.log n 옵션 하위 n개의 줄 출력 f 옵션 파일 입력 시 실시간으로 확인 가능한 옵션. 실시간으로 log를 봐야할 때 가장 많이 쓴다. grep 명령어 tail -f input.log | grep -v "제외될 문자" tail -f input.log | grep -ev "제외될 문자|제외될 문자|제외될 문자"v 옵션 제외될 문자 입력 시, 해당 문자열을 포함한 라인 .. 2021. 8. 2.
[Java] Java에서 날짜, 시간(Date, Time) 다루기 일할 때 굉~장히 많이 사용하는 날짜와 시간. 책 언저리에서 보고 이렇게 쓰면 되겠지 하고 넘겼다가 한참을 삽질하여 포스팅까지 하게 되었다. 뭐든 대충하면 안된다. 정확히 알고 넘어가야지. 목표 타임존과 국제 표준 이해 날짜, 시간 API 종류 파악 사용 방법 유용한 메서드 타임존 타임존은 동일한 로컬 시간을 따르는 지역을 의미한다. 보통 국가별로 고유 타임존을 사용하며, 면적이 넓은 나라는 지역별로 다른 타임존을 사용한다. 시스템과 플랫폼 간의 의사소통을 하는 API의 대중화, 서비스 지역의 세계화로 인해 타임존 정보를 적절하게 가공하는 것이 중요해졌다. 타임존의 종류 브라우저에 따라 기본 설정이 다를 수 있다. 차이는 1초 미만이라 신경쓰지 않아도 된다. GMT(GreenWich Mean Time) .. 2021. 7. 31.
[SQL] INDEX (인덱스) SQL Server에서 사용하는 INDEX에 대해 공부해보려한다. 데이터가 많을수록 쿼리를 잘 짜는 것도 중요하지만, 기본 개념을 잘 숙지하고 있도록 하자! 페이지(PAGE) 인덱스에 대해 알기 전, 페이지를 알아야 한다. 데이터 INSERT 시, 페이지에 들어가게 되고 그 페이지에서 SELECT를 한다. 대부분 Data로 구성되어 있지만, 일부 페이지는 인덱스(데이터 위치), 텍스트/이미지 등으로 구성되어 있다. SQL Server의 기본 저장 단위 (8KB) 1MB에는 128Pages가 존재 데이터를 읽을 때 페이지의 모든 행이 읽어짐 (참고 : https://laigo.kr/41, https://jungwoong.tistory.com/32) 힙(heap)? 인덱스를 알기 전, 인덱스가 적용되지 않은.. 2021. 7. 27.