Day_10 ( 트랜잭션 및 2주차 종료 )

HD.Y·2023년 11월 10일
0

한화시스템 BEYOND SW

목록 보기
11/58
post-thumbnail

트랜잭션(Transaction) 기초

  • 트랜잭션이란? 쉽게 말해서 데이터베이스에서 수행하는 하나의 작업 단위로 보면된다. MySQL에서는 기본적으로 SQL 쿼리문 한 줄이 하나의 작업 단위로 설정되어 있다.

  • 트랜잭션의 특징 : ACID
    1) 원자성(Atomicity) : 트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 모두
                반영되지 않아야 한다.
      ➡ 예를 들어, 3개의 쿼리문이 하나의 트랜잭션으로 구성이 되어 있다고 하자.
        쿼리문에 오류가 없다면 3개의 쿼리문 모두 적용이 되어야 한다. 만약, 3개의
        쿼리문 중 1개라도 오류가 발생하면 3개 모두 다 적용되면 안되는 것이다.

    2) 일관성(Consistency) : 트랜잭션 작업 처리 결과가 항상 일관성이 있어야 한다.
      ➡ 예를 들어, 1개의 데이터베이스에서 작업을 하고 있을 때, 데이터베이스에 문제가
        발생하거나 변경되더라도 작업하고 있던 데이터는 해당 데이터베이스에서 끝까지
        처리를 해야 한다는 것이다. 데이터베이스를 변경하려고 한다면 해당 작업을
        끝내고 변경해야된다.

    3) 독립성(Isolation) : 어떤 트랜잭션이라도 다른 트랜잭션의 연산 중간에 끼어들 수 없다.

    4) 영속성(Durability) : 트랜잭션이 완료되면 영구적으로 반영되어야 한다.


  • 트랜잭션의 상태
    1) 활성 상태 : 트랜잭션이 정상적으로 실행중인 상태
    2) 부분 완료 상태 : 모든 작업이 다 수행된 상태, 단 적용은 아직 안됨
    3) 완료 상태 : 적용까지 완료 한 상태
    4) 실패 상태 : 트랜잭션 수행 중 오류가 발생하여 중단된 상태
    5) 철회 상태 : 트랜잭션의 모든 작업을 다시 취소한 상태

트랜잭션 실습하기

  • 실습에 앞서, MySQL은 쿼리문을 입력하면 자동으로 적용되는 기능인 AUTOCOMMIT 기능이 있는데 이 기능을 꺼주겠다.
    ➡ 명령어 : SET AUTOCOMMIT=FALSE;
    ➡ 다시 켜주고 싶을때 : SET AUTOCOMMIT=TRUE;

  • 트랜잭션 기본 명령어 : COMMICT / ROLLBACK


  • 위의 그림을 보면 emp_no=10001 인 데이터의 gender 값을 F로 설정해준것을 볼수 있다.

  • 하지만, 만약 여기서 ROLLBACK; 을 실행시키면 어떻게 될까?
  • 위와 같이 gender 값을 "F" 로 설정해줬지만 ROLLBACK 되면서 다시 원래의 값 "M" 으로 돌아온것을 볼수 있다.

  • 그렇기 때문에 우리는 COMMIT 을 사용하여 쿼리문을 적용시킬 수 있는 것이다.
  • 이처럼 COMMIT으로 적용을 시키면 ROLLBACK 해도 원래의 값으로 돌아가지 않고 변경된 값으로 그대로 출력된다.

  • 마지막으로, SAVEPOINT 를 설정하여 저장 포인트를 설정할 수도 있다.

  • 위의 쿼리문을 보면 emp_no 가 '10001' 인 행의 first_name 을 'abc' 로 변경한 뒤 SAVEPOINT를 실행하여 A 로 지정하였고,

  • 그 뒤에 last_name 을 'def' 로 변경한 뒤 ROLLBACK 하여 SAVEPOINT 지점으로 돌아가도록 했다.

  • 그 결과, 보는바와 같이 SAVEPOINT 를 실행하기 전까지 변경내용은 정상적으로 적용되어 출력되었으나, 그 뒤의 쿼리문은 적용되지 않은 것을 볼 수 있다.


워드 프레스 실습하기

  • 사전 준비사항 : 가상머신 리눅스 컴퓨터 2대 ( 1대 : 웹 서버, 1대 : DB 서버 )

  • 컴퓨터 2대 모두 IP 설정을 해준 뒤, DB 서버 컴퓨터에는 MySQL 서버를 설치해준다.

  • 2대 모두 방화벽을 끈다.
    1) setenforce 0
    2) systemctl stop firewalld

  • 다음은 웹 서버 설치 및 설정 과정이다. ( 웹 서버 컴퓨터에서 실시 )

    1) nginx 웹 서버 설치 : yum install -y nginx

    2) php 설치
    yum install -y php php-common php-cli php-fpm php-opcache php-mbstring php-xml php-xmlrpc php-gd php-pdo php-mysqlnd php-json php-soap php-odbc php-curl php-zip

    3) 워드 프레스 설치
      ➡ 다운로드 : wget https://ko.wordpress.org/latest-ko_KR.tar.gz
      ➡ 압축풀기 : tat -xvf [파일명]
      ➡ 압축 푼 디렉토리로 이동
      ➡ 압축 풀면 생성되는 wordpress 라는 디렉토리를 /var/www/html 밑으로 옮긴다.
         명령어 : mv /root/wordpress /var/www/html
      ➡ 권한 설정 : chown -R nginx:nginx /var/www/html/wordpress

    4) nginx 웹 서버 설정 : vi /etc/nginx/nginx.conf
      ➡ 줄 번호 출력 : :set nu
      ➡ 42번 째 줄 수정 : /usr/share/nginx/html; -> /var/www/html/wordpress;

    5) 설정 파일을 수정했으므로 재시작 : systemctl restart nginx


  • 다음은 DB 서버 설정 과정이다. ( DB 서버 컴퓨터에서 실시 )
    1) 새로운 DB 생성 : CREATE DATABASE [DB명];

    2) 새로운 사용자 생성 : CREATE USER '[사용자명]'@'%' IDENTIFIED BY '[비밀번호]';

    3) 생성한 DB 사용 : USE [DB명];

    3) 생성한 사용자에게 DB에 대한 모든 권한 부여
      GRANT ALL PRIVILEGES ON [DB명].* TO '[사용자명]'@'%';


  • 여기까지 정상적으로 수행되면, 설정은 끝난 것이다. 이제 웹 서버로 접속을 해보겠다.
  • 접속 주소 : [웹 서버 IP 주소:80]
    • 정상적으로 설정이 끝났다면 오류 없이 위와 같은 페이지가 나올 것이다.

  • 데이터베이스 이름 : 위에서 새로 생성해준 DB 명 입력
  • 사용자명 : 위에서 새로 생성해준 사용자명 입력
  • 비밀번호 : 생성해준 사용자의 비밀번호 입력
  • 데이터베이스 호스트 : DB 서버의 IP 주소
  • 테이블 접두어 : 변경 안함 / default 값 그대로 둠


  • 다음 페이지에서 나오는대로 "wp-config.php" 파일이 없으므로 새로 생성해준다.

    1) wordpress 디렉토리 안에 생성한다 : touch wp-config.php

    2) 생성한 파일을 열고 위에 회색 박스 안에 있는 내용을 전부 복사해서 붙여 넣고
      저장한다.
      ➡ vi /var/www/html/wordpress/wp-config.php

    3) nginx를 재시작한다 : systemctl restart nginx

  • 사이트에 로그인하기 위한 기본 정보들을 입력해준 뒤 워드프레스 설치를 눌러주면
    모든 설치가 끝난다.

  • 입력해준 정보로 로그인해주면 아래와 같은 화면이 뜰 것이고, 이제부터 워드프레스를 시작하면 된다.


MySQL Workbench 이용 DB 접속해보기

  • 워드 프레스 로그인에 성공했다면, DB에 실제로 접속해본다.

  • 위와 같이 DB 서버의 IP 주소, DB 생성 시 생성한 사용자명을 입력해주면 정상적으로 접속되는 것을 볼 수 있다.

  • 접속하면 wordpress 라는 이름의 DB가 생성되어 있으며, DB 안에는 여러가지의 Table들이 생성되어 있다.

  • 게시글 관련 Table을 출력해보면 아래와 같이 게시글 작성과 관련된 속성들을 담은 Table이 출력된다.

  • 이처럼 워드 프레스에서 작성하는 내용들은 DB로 연동되어 데이터들이 저장되는 것이다.


2주차를 마치며 느낀점 👀

  • 부트캠프가 시작되고 벌써 2주라는 시간이 지났다...🙊 하루하루가 정말 빠르게 지나간다고 느껴진다. 처음에는 DB 하면 SQL 쿼리문 정도만 알고 전반적인 개념이나 이론 등 아무런 지식이 없었는데, 지금은 많은 내용을 배워서 머리에 각인되고 있다.

  • 리눅스 가상머신 IP 설정 부터 MySQL 서버 설치, DB 연결 등 기본적인 것들은 이제 눈감고도 할 수 있을정도이다😎

  • 특히나❗ 이번주는 DB 심화학습 개념으로 리플리케이션부터 클러스터링, 라우터 설정까지 정말 많은 내용들을 학습하였는데, 실제로 기업에서 DB 서버를 운영하는 방식들에 대해 공부하니 더 흥미롭고 관심이 가서 더욱 열심히 수업을 들었던 것 같다.

  • 다음주에는 SW공학을 배우며 깃과 깃허브 학습 후 드디어 대망의 미니프로젝트가 시작된다. 2일간의 짧은 프로젝트이지만, 나에게는 첫번째 팀 프로젝트이기에 설레임과 긴장감이 공존하는 기분이다. 열심히 노력해서 배운만큼, 좋은 결과물을 만들어 내고 싶다. 그래야 나중에 최종 프로젝트 할때도 초기 요구조건 분석부터 DB 설계까지 순서대로 착! 착! 진행되지 않을까 싶다.

  • 매일매일, 복습 겸 회고록을 빠지지 않고 쓰는 것도 어느새 10일째가 되었다. 벌써 블로그에는 하나도 없던 글들이 10개 가까이 생기고 있다.✌

  • 이렇게 매일매일 글을 쓰다보니 이제는 자연스런 하루의 마무리가 되어버렸다.
    무엇보다 시간이 오래걸릴 때는 4시간 이상도 걸리지만, 그만큼 머릿속에 오랫동안 남아있고 나중에 어? 이게 모였지? 라고할때 찾기도 쉽기 때문에 최대한 처음 보는 사람이(그게 나는 아니길...바라며😵‍💫) 봐도 따라 할 수 있도록 세세하게 쓰려고 노력중이다.

  • 이제 다음주까지 지나면, 대망의 자바 프로그래밍에 들어가게되는데 그때부터는 프로그래머스 자바 문제들을 매일 조금씩 풀어나갈 계획이다. 계획한대로만 진행되면 좋겠지만 쉽지 않을 거란걸 누구보다 잘 알고 있다.

  • 하지만 중요한 건 포기하지 않는 마음이 아닐까 싶다. 처음 먹었던 마음가짐이 흐트러지지 않고 수료하는 날까지 갈 수 있도록 이 블로그 회고글은 앞으로도 쭉❗
    매일 배운내용을 그날에 작성할 수 있도록 해보겠다.

profile
Backend Developer

0개의 댓글