Backend/DB 12

[DB] 조회 시 트랜잭션을 걸어야 하는 이유? (Feat. 트랜잭션 격리수준)

서론면접에서 아래와 같은 이야기를 주고 받았다. (요즘 면접을 많이 다니기도 하고, 면접을 하면서 고민해볼 거리가 많이 나오는 것 같다.)(프로젝트 이야기와 조회 로직에 트랜잭션을 붙이지 않았다는 이야기를 했음)면접관 : 몇 가지 데이터 구조에 따라 다르긴 하겠지만, 조회 로직에 트랜잭션을 걸지 않았을 때 문제가 발생할 수 있을 것 같은데, 어떤 문제가 발생할 수 있을지 생각해보시겠어요?트랜잭션은 업데이트에만 적용해놨었는데, 관련된 질문이 들어왔었다. 트랜잭션은 보통 동시성 이슈와 밀접한 연관이 있기 때문인데, 해당 질문엔 계좌 잔액 조회를 예시로 들어서 설명했다.그러나 면접관이 원하는 대답은 아니었던 것 같았다. 조회엔 걸지 않는게 일반적인 걸로 알고있었는데.. 잘못된 거였구나. 라는 것을 깨닫고, 관..

Backend/DB 2024.06.26

[Oracle] 오라클 시퀀스가 동시성 이슈를 보장해주는 이유

서론이전 회사에서 오라클 시퀀스를 활용해 선착순 이벤트 처리를 한 경험에 대해 복기하던 도중, 오라클 시퀀스가 어떻게 그걸 보장해주는지가 궁금해졌다.오라클을 사용하지 않는다면 Redis를 사용해서 동시성 이슈를 제어하거나, 자바 단에서 thread, callback 등을 통해서 제어하는 방식이 있을텐데, 오라클에서 제공하는 기능을 활용해 훨씬 간단하게 업무를 처리한 기억이 있다.아마 이런식으로 업무처리하신 분이 나 말고도 있을 것 같은데, 그게 어떻게 가능한건지 알아보도록 하자. 간단한 포스팅이니 이해가 쉬울듯.시퀀스가 뭔지, 이런것들에 대한 내용은 다른 블로그를 참고하도록 하자.참고https://velog.io/@norighthere/Oracle-%EC%98%A4%EB%9D%BC%ED%81%B4-%EC..

Backend/DB 2024.06.11

[MySQL, JPA] Schema-validation: missing column [컬럼명] in table [테이블명]

목차 문제 사항 JPA + MySQL 환경에서 작업을 진행하는 도중, 다음과 같은 에러가 발생했다. Error creating bean with name 'entityManagerFactory' defined in class path resource [org/springframework/boot/autoconfigure/orm/jpa/HibernateJpaConfiguration.class]: Invocation of init method failed; nested exception is javax.persistence.PersistenceException: [PersistenceUnit: default] Unable to build Hibernate SessionFactory; nested except..

Backend/DB 2023.10.26

[ORACLE] TRUNC 함수 사용법

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 목차 개요 TRUNC 함수에 대해 알아보자. 시간이나 숫자를 절사할 때 쓰는 함수로, 시간의 경우 TO_DATE 함수를 쓰면 귀찮아지니.. 사용가능하다면 이걸 잘 활용해주도록 하자. 참고 www.w3resource.com/oracle/datetime-functions/oracle-trunc(date)-function.php Oracle TRUNC (date) function - w3resource Oracle TRUNC (date) function: The TRUNC (date) function returns the date with the time portion of the day truncated to a specific unit of meas..

Backend/DB 2021.01.21

[Oracle] ORA-01790: expression must have same datatype as corresponding expression

목차 문제 사항 원인 분석 union을 하면서 발생하는 문제이다. 한마디로, 데이터 타입이 맞지않아서 생기는 문제임 해결 방법 예시 SELECT 1 FROM DUAL UNION SELECT '1' FROM DUAL 이런식이다. 상호간 데이터 타입을 다음과 같이 맞춰주면 해결된다. SELECT '1' FROM DUAL UNION SELECT '1' FROM DUAL // OR SELECT 1 FROM DUAL UNION SELECT 1 FROM DUAL 참고 withthisclue.tistory.com/entry/Oracle-%EC%97%90%EB%9F%AC-%ED%95%B4%EA%B2%B0-ORA-01790-expression-must-have-same-datatype-as-corresponding-ex..

Backend/DB 2020.12.07

[Oracle] ORA-02437: cannot validate (~~) - primary key violated

문제 사항 원인 분석 기존에 있던 PK를 변경해야되서 삭제 후 다시 설정하려고했는데, 이런 에러가 났다. 검색해보니까 중복된 값이 존재해서라고 한다. 해결 방법 1. 직접..지우기 이거는 뭐.. 어쩔수가없다. 어떤 내용을 지워야되고 어떤걸 남겨야되는지는 사람이 판단해야 하기때문에.. PK속성을 가지고있던 컬럼들이 어떤게 중복되는지 봐야한다. 필요하다면 SELECT 문으로 뽑아내서 구별 한 뒤에 삭제하던지. 그렇게해야지. 다음은 중복되는 row를 삭제하는 쿼리다. 참고참고~ 만약 기본키가 여러개라면 PARTITION BY 컬럼명 1 -- num의 값이 1초과인 데이터들만 삭제 ) ); 참고 m.blog.naver.com/PostView.nhn?blogId=yka21&logNo=70019484646&prox..

Backend/DB 2020.10.06

[Oracle] date 타입 컬럼 String으로 가져오기

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 date형식으로 db에 저장되어있는 값을 String으로 입맛대로 변환시켜 불러보자! 참고 https://enzycut.tistory.com/entry/%EC%98%A4%EB%9D%BC%ED%81%B4-DATE-%EB%82%A0%EC%A7%9C-%ED%83%80%EC%9E%85 [오라클] DATE 날짜 타입 [오라클] 날짜 타입 String으로 변환하기 오라클에서 날짜를 가지고 오는 방법 예제 SELECT SYSDATE FROM DUAL; 2017-12-10 00:00:00 위와 같이 년월일 시분초순으로 나타난다. 다음을 String형식으로 변환하면... enzycut.tistory.com 진행 과정 1. date타입에 대하여 기본적으로 YY..

Backend/DB 2020.07.30

[DBeaver] 설치하기 및 DB연결

개요 프로젝트 관련해서 회사 놋북에 DB 툴을 깔려고 했는데, 기존에 쓰던 HeidiSQL을 쓰려고 했지만, 더 좋은게 없나 찾아보던 도중, DBeaver라는 무료 툴이 있다는 것을 알게됐다. 그래서 한번 알아봤는데.. 평도 압도적이었다. 도대체 얼마나 좋길래? 직접 깔아보았다. DBeaver의 장점 1. 무료다. 2. 여러 DB를 지원한다. 기존에 쓰던 HeidiSQL은 Mysql만 지원한다. 그래서 오라클Oracle, MS-SQL, MySQL, PostgreSQL, MariaDB, 몽고 DB 등의 다른 db는 따로 설정을 해줘야 하는데, DBeaver는 기본으로 지원해준다. 진행 과정 1. 다운로드 및 설치 https://dbeaver.io/download/ Download | DBeaver Comm..

Backend/DB 2020.07.21