본문 바로가기

👨‍💻 프로그래밍/Spring Data, JPA, DB3

JDBC, 필요한 만큼만 알아보기 JDBC, 뭐 하는 거야?JDBC (Java Database Connectivity)는 Java에서 DB에 연결하기 위한 API입니다. 조금이라도 복잡하고 유용한 Application을 만들려면 DB에 연결하는게 필수인데 이를 위해서는 크게 다음과 같은 과정을 따릅니다.DB와 연결 (TCP/IP를 맺고, 암호화 정보 전달하고 등)SQL문 전달(필요하다면) Transaction 처리결과를 받아서 처리 문제는 이 과정이 DB 마다 모두 조금씩 다르다는 겁니다... 새로운 DB를 쓸 때 마다 각 DB의 특성을 공부해서 이 과정을 진행해야 한다면 지옥이 따로 없겠죠? 그렇기 때문에 JDBC라는 표준 API를 제공하고, 각 DB가 이 JDBC를 구현해서 개발자는 JDBC의 사용법만 알면 Application에서 .. 2024. 5. 5.
무중단, 카나리 배포 환경에서 DB Schema 수정하기 문제 상황 자주 있는 상황은 아니지만 DB의 Column을 수정해야 할 일이 있습니다. 굳이 왜 수정해야 하나? 어차피 이름만 다른거 아니야? 하실 수 있지만 이름과 사용 용도가 다르면 장기적으로는 인지 비용이 높아져 팀 전체의 자원이 더 많이 들게 됩니다. 무중단의 핵심은 이 작업으로 인해 에러를 만나는 유저가 1명도 없어야 한다는 것입니다. 그럼 가장 먼저 떠올리는게 DB Column 변경과 배포를 딸깍딸깍 동시에 진행하면 되지 않을까 생각할 수 있습니다. 솔직히, 팀 리소스가 부족한 상황에서는 좋은 해결책이라 생각합니다. 새벽 시간 트레픽이 없을 때를 틈타 작업하면 큰 문제가 없을 수도 있습니다. 하지만 서비스의 중요도가 높거나 카나리 배포를 하고 있는 환경에서는 이것도 어렵습니다. 이 상황에서 정.. 2024. 2. 25.
트랜잭션 격리수준 (Transaction Isolation)에 따른 데이터 불일치 현상 Trasnaction 격리수준을 왜 다르게 해야 할까? 성능 때문에 Transaction은 여러개의 작업을 하나의 작업으로 묶는 역할을 합니다. 흔히 ACID라고 줄여 부르는 특징을 가지고 있습니다. 애플리케이션이 복잡해 지면 Transaction이 길어지고, 자연스럽게 같은 데이터를 여러 Transaction이 써야 할 일이 생기게 됩니다. 직관적으로는 Transaction이 데이터를 사용중이면 다른 Transaction은 사용할 수 없도록 Lock을 걸면 되지만 그렇게 하면 데이터가 필요한 다른 모든 Transaction이 그 시간동안 대기해야 합니다. 그래서 한 Transaction이 데이터를 사용중일때, 다른 Transaction이 어떻게 처리할지에 관한 전략을 격리수준 (Isolation Lev.. 2023. 7. 18.