개발공부/DB(5)
-
Transaction
Transaction 트랜잭션이란 무엇일까요? DB에 조회든 생성/수정이든 요청을 보내는 한번의 통신을 트랜잭션이라고 생각했습니다. 조금 더 자세한 정의를 찾아보고자 글로 정리해보았습니다. techopedia에는 이렇게 정의해두었습니다. 트랜잭션은, 데이터베이스란 문맥 상에선 독립적으로 데이터를 조회하고 업데이트 하기 위해 실행되는 논리 단위라고 합니다. 그리고 전문가들은 데이터베이스 트랜잭션을 데이터베이스 디자인 환경 내에서 얻을 수 있는 "작업 단위"라고 얘기합니다. 그리고 트랜잭션은 COMMIT으로 시작돼 ROLLBACK SQL로 끝이나며 완성됩니다. ACID는 트랜잭의 특징들을 정의합니다. Atomicity(원자성) : 트랜잭션은 완결성을 충족시켜야 합니다. 커밋이 완료돼 DB에 저장이 되든, 롤..
2022.06.04 -
[MySql] mysql timestamp 서버 UTC 타임존
mysql timestamp 서버 타임존 mysql 서버에 설정된 타임존을 기준으로 timestamp가 표출됩니다. DateTime은 존 정보를 담고 있지 않는 것과 대비되기에 시간은 TimeStamp로 설정하는 것이 권장됩니다. UTC를 코드에 적용시켜주고 있는데, mysql 서버 time.zone 설정을 +00:00으로 해주면 자동으로 UTC 저장이 됩니다. 단, UTC로 미리 변환해 mysql에 저장할 경우 서버 로컬 타임존으로 인식해 UTC 타임 오프셋이 설정될 수 있기 때문에, 한 가지 UTC 변환 방식을 선택해야 될 듯 보입니다. 그리고 session.time_zone과 global.time_zone의 차이는 session은 db 커넥션 off 기준으로 리셋된다는 것입니다. mysql> SET..
2021.10.27 -
[JPA] 복합 식별키를 update 해야할 때
복합 식별키를 update 해야할 때 A, C가 다대다로 연결되어 있고 B는 두 엔티티를 매핑해주는 매핑 엔티티 입니다. 이 때 한 A 엔티티의 데이터가 연관된 C 엔티티 데이터와의 관계를 끊고, 다른 C 엔티티 데이터에 관계를 맺는다 하면(말은 어렵지만 fk가 바뀐다고 이해하시면 됩니다) 기존 복합키는 삭제해야할까요? 실무에서 직접 나온 고민입니다. 평소대로라면 DB 데이터 안정성과 로그용도로 DeletedTime을 남기고 실제 row를 삭제하진 않았지만, 다대다 관계의 매핑 테이블로만 사용되는 테이블의 데이터를 남겨둘 필요가 없다라는 관점에서 생각해봤습니다. 먼저 실제 row를 삭제하지 않는 이유는 데이터가 오류로 인해 소실되는 부분을 방지하기 위함이거나, 데이터를 남겨 나중에 확인할 가치가 있는 것..
2021.10.20 -
[SQL] 특정 조건의 sum을 select에 포함하고 싶을 때
특정 조건의 sum을 select에 포함하고 싶을 때 select w.*, sum(case when h.type in ('MEMBER_10', 'MEMBER_20') then amount end + case when h.type in ('MEMBER_10', 'MEMBER_20') then tax end) total from Wallet w left join Member m on w.memberId = m.id left join Wallet h on h.walletId = w.id where m.type='MEMBER_ADMIN' group by w.id; 이런 식으로 case when을 붙여서 사용할 수 있습니다. 참고자료: sta..
2021.10.07 -
(1) MariaDB 로컬 사용자 추가
회사 DB를 로컬로 다뤄보려고 코드 내 사용자/패스워드와 로컬 DB(localhost) 연동, DB파일 로컬 export 두 가지 과정을 진행했습니다. DB는 MariaDB 기준입니다. 1. localhost 사용자 추가 혼자서 프로젝트를 만들 땐 root 사용자만 있어도 충분했기 때문에 사용자를 추가해본 적이 없었지만, 회사에 들어오니 필수가 되었습니다. 사용 툴은 DB 툴, 윈도우 기준 cmd(커맨드 프롬프트) 입니다. 저는 MariaDB를 사용했는데 MySQL Workbench와 HeidiSQL 두 가지 툴을 사용했습니다. 제가 볼 땐 큰 차이는 없습니다. DB 툴을 사용하면서 cmd까지 사용하는 이유는 root 권한 때문입니다. 새로운 사용자를 추가할 때 root 권한이 필요한 경우 (grant ..
2021.06.08