db 9

[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

[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

[AWS] AWS EC2 인스턴스에서 MySQL DB생성 및 DBeaver 연결 (RDS 사용 X)

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 AWS에서 인스턴스를 생성한 후에, RDS를 사용하지 않고 DB를 구축 및 연결하는 법에 대해서 알아보도록 한다. AWS에서 인스턴스를 새로 생성하는 것은 인터넷에 널리고 널려서 따로 포스팅 하지는 않겠다. 이 포스팅은 AWS에서 인스턴스를 생성한 상태라는걸 가정하에 설명한다. RDS를 사용하는 방법은 많은데, 지금 진행중인 프로젝트에서 RDS신청하려면 또 귀찮기도 하고, 규모가 크지 않아서 서버 자체에 MYSQL을 설치하고, DB관리하는 방법을 포스팅하도록 한다. DBeaver는 인기가없나... 정보가 참 없는것같다. 영어로 검색하니까 좀 나오더라. 세상 모든 정보를 10으로 가정했을때, 한국어로 얻을수 있는 정보가 2이라면 영어로 얻을수있..

DevOps/AWS 2020.08.12

[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

[Python, MySQL] txt파일 csv파일 변환 및 데이터 가공 (feat. db 연동)

이 글은 Notion에서 작성 후 재편집한 포스트입니다. 개요 한국어 감성사전에 등재되있는 txt파일을 csv 형태로 가공하고, 이를 파이썬을 통해 DB로 연결 후, 삽입해보는 과정을 진행하고자 한다. 진행 과정 1. 번잡한 txt파일을 csv형태로 넣기 쉽게 데이터 가공하기 먼저 기존의 txt파일의 형태를 봐보자, 다음과 같다. 뭐.. 엄청 많지만 윗부분만 따로 떼온것이다. 그런데 우리는 csv파일을 만들어서 db에 넣을것이다. 그게 더 사후관리도 편할것이고, 한눈에 보기도 좋기 때문일것. 문제를 살펴보면 제약 조건은 다음과 같다. 단어, 어근, 감성이라는 단어는 지워져야 한다. 중간중간 단어 한 세트간의 공백도 지워져야 한다. 감성: ~~ 라인엔 마지막에 ,(콤마) 가 붙지 않고, 개행처리를 해줘야한..

[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

[Mysql] 문자열 붙이기, 문자열 자르기, 문자열 추가하기

개요 db를 사용하다보면 기존에 등록되어 있던 데이터의 문자열에 추가하거나, 잘라야 하는 경우가 가끔 생긴다. 한두개면 손으로 하겠는데, 수십 수백개가 있으니 쿼리문을 알아두도록 하자 오늘의 주제 문자열 합치기, CONCAT 함수 문자열 자르기, SUBSTRING 함수 진행 과정 1. 문자열 합치기, concat 생각보다 간단하다. Item 이라는 테이블 구조는 다음과 같다고 하자 index target 0 안녕하세요 1 이이잉 만약 내가 target의 컬럼 값과 원하는 문자열값을 이어서 표시하고싶다면? UPDATE Item SET target = CONCAT(target, '

Backend/DB 2020.02.13

[DB] 여러개의 테이블 값 참조하기

개요 크롤링 모니터링 페이지를 만들다가 결국 완성해서 이렇게 적어본다. php랑 db랑 카테고리를 어디로 할까 하다가 ㅇㅅㅇ.. db가 좀더 핵심적인 부분같아서 db카테고리에 넣었따 오늘의 주제 핵심 과정이었던 여러개의 테이블에서 값 참조하는 것. 사실 알고나면 별로 안어렵다. 내가 몰랐던 거라 어려웠음 참고 https://lightblog.tistory.com/84 [MySQL] 다른 테이블에서 데이터 참조하기 JOIN (vlookup) 다음과 같은 데이터가 있다고 하자. 어떤 유저가 언제 어떤 물건을 샀는지 기록해 놓은 자료다. 짐작하다시피, product는 이전에 등장했던 product_data 테이블의 product_id 열과 대응된다. 저 유저가 산 품목.. lightblog.tistory.co..

Backend/DB 2020.01.13