본문 바로가기

전체 글36

MVCC 깊게 이해하기: Undo Log 기반 다중 버전 동시 제어의 원리 InnoDB 스토리지 엔진을 사용하는 mysql 기준으로 정리한다. MVCC (Multi Version Concurrency Control) 여러 트랜잭션이 동시에 같은 데이터를 조회하거나 수정할 때 서로 간섭하지 않고도 일관된 데이터를 읽을 수 있게 해주는 동시성 제어 기술  각 트랜잭션은 자신만의 스냅샷을 유지하며, 다른 트랜잭션이 데이터를 변경하더라도 스냅샷 기준으로 데이터를 읽는다.여기서 스냅샷은 ReadView이며 구조는 다음과 같다.필드설명low_limit_idlow_limit_id 이상의 트랜잭션이 만든 변경 내용은 절대 보이면 안된다.즉 이 값은 보이지 않는 트랜잭션의 시작선이다.low_limit_id 이상이 변경한 row는 undo log로 복원하거나 무시한다.up_limit_idup_l.. 2025. 3. 29.
트랜잭션과 ACID 트랜잭션은 하나의 작업 단위를 묶은 것으로이 안에 있는 여러 작업은 모두 성공하거나 하나라도 실패하면전부 실패한 것으로 처리한다. 예를 들어 A가 B에게 10000원을 계좌 이체 한다고 할 때 A의 잔고는 10000원 감소하고 B의 잔고는 10000원 증가해야 한다. 계좌 이체는 이렇게 2가지 작업이 하나의 작업처럼 동작해야 한다. 두 작업 중 하나만 성공하면 심각한 문제가 발생된다. 트랜잭션을 사용하면 두 작업 다 성공해야 저장하고, 하나라도 실패하면 이전 상태로 돌아갈 수 있다. 모든 작업이 성공해서 데이터베이스에 정상 반영되는 것을 Commit이라 한다 작업 중 하나라도 실패해서 이전으로 되돌리는 것을 Rollback이라 한다. 트랜잭션의 특성 ACIDAtomicity 원자성트랜잭션 안의 작업은 모.. 2025. 3. 23.
커넥션 풀과 DataSource 데이터베이스와의 connection은 비용이 많이 드는 작업이다.매 요청마다 새 커넥션을 생성하면 성능 저하와 리소스 낭비가 발생한다.Connection Pool을 사용하면 미리 생성된 연결을 재사용하여 성능을 높이고 안정적인 트랜잭션 처리를 보장할 수 있다. 데이터베이스 connection을 획득할 때 다음과 같은 복잡한 과정을 거친다.1. 애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회 2. DB 드라이버는 DB와 TCP/IP 커넥션을 연결 3. DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달 4. DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성 5. DB는 커넥션 생성이 완료되었다고 응답 6. DB 드라이버는 커넥션 객체를 .. 2025. 3. 22.
JDBC 기초부터 이해하기 SQL Mapper 또는 ORM을 사용해도 결국 모든 것은 JDBC 위에서 동작한다. JDBC의 필요성애플리케이션 서버와 DB의 일반적인 사용법은 다음과 같다.TCP/IP를 사용하여 커넥션 연결커넥션을 통해 DB에 맞는 SQL 전달DB는 전달받은 SQL을 수행하고 결과를 응답 문제는 각각의 데이터베이스마다 커넥션을 연결하는 방법, SQL 전달 방법, 결과를 응답 받는 방법이 모두 다르다데이터베이스를 변경하면 애플리케이션 서버에 개발된 데이터베이스 관련 코드도 전부 변경해야한다개발자가 각각의 데이터베이스마다 커넥션 연결, SQL 전달, 결과 응답 받는 방법을 새로 학습해야한다이 문제를 해결하기 위해 JDBC라는 자바 표준이 등장한다. JDBC 표준 인터페이스JDBC(Java Database Connecti.. 2025. 3. 10.
젠킨스 플러그인 설치 실패 이슈 Jenkins가 설치된 서버가에 SSL 인증서가 설정되어 있지 않은 경우 통신에 실패하기 때문에 발생업데이트 사이트의 프로토콜을 http로 변경또는 서버 SSL 인증서 설정    Dashboard > Jenkins 관리 > Plugins   재시작sudo systemctl restart jenkins 2024. 11. 29.
ubuntu에 젠킨스 (jenkins) 설치 Jenkins는 소프트웨어 개발과 배포를 자동화하는 도구 다양한 플러그인을 통해 CI/CD(Continuous Integration/Continuous Delivery)를 구현할 수 있도록 지원  설치자바 설치sudo apt updatesudo apt install fontconfig openjdk-17-jrejava -version 젠킨스 설치sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \ https://pkg.jenkins.io/debian-stable/jenkins.io-2023.keyecho "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" \ https://pkg.jenkins.io/deb.. 2024. 11. 29.
ubuntu에 mysql 설치하기 설치sudo apt updatesudo apt install mysql-server 실행sudo systemctl start mysql 서버 재부팅 시 mysql 자동 시작 설정sudo systemctl enable mysql 포트 오픈mysql의 기본 포트는 3306보안 그룹에서 3306 포트 오픈aws같은 클라우드 환경에서 보안 그룹은 VPC 수준에서 트래픽을 제어하므로 해당 EC2 인스턴스에 도달하기 전부터 외부 트래픽을 필터링ufw 같은 로컬 방화벽이 설정되어 있지 않아도 외부로부터의 접근은 보안 그룹 설정에 의해 차단 config 설정외부 접속 허용sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf[mysqld]bind-address = 0.0.0.0기본 설정인 127... 2024. 11. 18.
apt와 apt-get의 차이 apt와 apt-get 모두 Ubuntu와 같은 Debian 기반 리눅스 시스템에서 패키지 관리를 위해 사용 apt-get1998년 도입된 오래된 명령어로 핵심 Linux 프로세스와 더 긴밀하게 통신하는 낮은 수준의 인터페이스 제공검색 대신 apt-cache 명령어를 사용apt-get upgrade 시 패키지의 이전 버전이 파일 시스템에 남음각 apt-get 명령의 기본적인 결과가 세부 정보 없이 출력apt2014년에 도입된 새로운 명령어로 apt-get의 주요 기능을 통합하여 사용 친화적이고 직관적인 명령어 제공apt-get을 대체하여 모든 Debian 기반 Linux의 기본 패키지 관리자 도구로 선정apt search 으로 패키지 검색 가능apt-upgrade 시 패키지의 이전 버전 파일 시스템 삭.. 2024. 11. 17.
apt update와 upgrade의 차이 apt update설치 가능한 패키지 목록을 최신 상태로 가져오는 명령어새로운 버전의 프로그램이 배포되었을 때, ubuntu는 이를 공식 서버에 등록하고 우리가 apt update 명령어를 실행하면 새로운 버전에 대한 정보를 가져온다.이 과정은 실제 프로그램을 업데이트하지 않고, 단지 정보만 갱신한다.대부분의 가이드에 update 후 install 하는 이유가 여기에 있다. apt upgrade현재 시스템에 설치된 패키지를 실제로 최신 버전으로 업그레이드 이미 설치된 패키지를 최신 버전으로 업그레이드한다.업그레이드를 통해 보안 배치나 성능 개선이 반영된 최신 버전이 설치된다. 2024. 11. 5.