2023.12.26(화)
오늘은 송아 강사님께서 실시간 강의를 해주셨다. CS 과목 중에서는 다음 내용 정도를 우선적으로 공부하고 생각해보면 좋을 것 같다고 하셨다.

OS

  • 컴파일러
  • 메모리
  • 우선순위 프로세스
  • 스레드

Network

  • http
  • DNS(Domain Name System)
  • osi 7계층
  • tcp/ip

Algorithm

  • 리스트(스택, 큐, …)
  • 맵(해시)

소프트웨어 공학

  • 에자일/폭포수
  • CI/CD (Continuous Integration/Continuous Delivery)
  • 클라우드 환경
  • DDD(Domain Driven Design) 개발 방법론
  • 객체 지향

Database

다음 질문 정도 생각해 보라고 하셨다.

Q1. FK는 무조건 다른 테이블의 PK여야 하는가?

이전에 FK에 대해 공부했었던 자료에 따르면 MariaDB 공식 문서에 다음과 같이 FK는 다른 테이블의 PK여야 한다고 나와있다.

You already know that a relationship between two tables is created by assigning a common field to the two tables. This common field must be a primary key to one table.

다만 직접 테이블을 생성해서 실험해본 결과 부모 테이블에서 UNIQUE KEY로 지정된 column도 자식 테이블에서 FK로 사용 가능했다. 당연하지만 자식 테이블에서 FK로 사용할 column과 참조할 부모 table의 column은 동일한 data type을 가져야 하며 테이블의 엔진도 동일해야 한다. UNIQUE하지 않은 column은 FK로 사용 불가능하다. 즉, 일반적으로 부모 테이블의 PK를 FK로 사용하지만 반드시 PK가 아니어도 PK를 비롯한 UNIQUE한 속성을 가진 column은 FK로 사용 가능하다는 것이 내 결론이다.

Q2. DB transaction이란 무엇이고 어떤 상황에 사용할까?

Transaction은 "데이터베이스의 상태를 변화시키기 위해 수행하는 여러 작업들을 묶어서 하나의 논리적 단위로 다루는 것"이다.

데이터베이스의 상태를 변화시킨다는 것은 INSERT, SELECT, UPDATE, DELETE와 같은 SQL문을 사용하는 것을 의미한다.
이런 transaction은 Commit(저장)되거나 Rollback(철회)될 수 있다.

  • Commit: 모든 부분작업이 정상적으로 완료하면 이 변경사항을 한꺼번에 DB에 반영
  • Rollback: 부분 작업이 실패하면 transaction 실행 전으로 되돌림

Transaction의 4가지 특징 (ACID)

  1. 원자성(Atomicity)
    트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 된다.
  2. 일관성(Consistency)
    트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.
  3. 독립성(Isolation)
    둘 이상의 트랜잭션이 동시에 병행 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 없다.
  4. 지속성(Durability)
    트랜잭션이 성공적으로 완료되었으면, 결과는 영구적으로 반영되어야 한다.

트랜잭션은 주로 다음과 같은 상황에서 사용된다 (Feat. ChatGPT)

  • 여러 쿼리의 논리적인 단위로서: 여러 쿼리를 하나의 트랜잭션으로 묶어서 원자성을 보장
  • 일관성 유지: 여러 데이터 변경 작업을 동시에 수행할 때, 일관성을 유지하고 데이터베이스를 안정적인 상태로 유지하는 데 사용
  • 에러 처리: 트랜잭션 내에서 에러가 발생하면 롤백하여 데이터베이스를 이전 상태로 되돌림

트랜잭션은 데이터 무결성과 안정성을 유지하며 데이터베이스 조작을 안전하게 수행하는 데 중요한 역할을 한다.

처음 들어보는 개념도 있는데 나중에 위에서 언급한 CS 내용들을 따로 공부하고 정리해보아야겠다.

profile
이것저것 관심 많은 개발자👩‍💻

0개의 댓글