Node.js 심화

김지혜·2023년 7월 14일
1

Node.js

목록 보기
8/13
post-custom-banner

트랜잭션(Transaction)

트랜잭션:

  • 작업의 완전성을 보장해주기 위해 사용되는 개념
    • 특정한 작업 전부 처리 or 전부 실패 => 데이터의 일관성을 보장해 주는 기술

왜 사용하는가?:

  • 작업의 단위를 하나의 쿼리 종속 X => 하나의 작업 단위로 그룹화하여 처리

    • EX. 대부분의 데이터 베이스가 트랜잭션의 특징을 이용
      AWS DynamoDB, MongoDB, CockroachDB
  • 부분 업데이트(Partial Update)와 같은 상황을 방지하기 위해 트랜잭션(Transaction)이라는 개념을 도입
    => EX. 작업한 내역을 저장하는 로깅작업, 영화관의 예매 시스템, 은행의 결제 시스템 등 데이터의 일관성을 유지해야하는 다양한 상황에서 사용

  • 트랜잭션(Transaction)을 이용 =>
    • 사용자가 항상 프로그램 실행을 완료하도록 구성하고,
    • 만약 실행을 중단할 만한 치명적인 오류가 발생하더라도,
      => DB에 피해가 가지않아 더욱 안전하게 구성할 수 있게 됩

트랜잭션 4가지 특징_AICD

트랜잭션의 특징(ACID):
데이터베이스 트랜잭션이 안전하게 수행된다는 것을 보장하기 위한 특징들을 나열해 놓은 개념

  • 원자성(Atomicity)
  • 일관성(Consistency)
  • 격리성(Isolation)
  • 지속성(Durability)

원자성(Atomicity)

원자성(Atomicity):

  • 트랜잭션 내에서 실행되는 명령들을 하나의 묶음으로 처리 =>
    내부에서 실행된 명령들이 전부 성공하거나 or 모두 실패해야한다는 특징

  • 가장 대표적인 특징
    => 실행되는 쿼리마다 하나의 작업 단위로 보지않고,
    여러개의 작업들을 묶어 하나의 작업단위로 보게됨

일관성(Consistency)

일관성(Consistency):

  • 트랜잭션 내부에서 처리되는 데이터의 일관성을 유지해야하는 특징

  • 만약 작업이 성공할 경우 아무런 문제가 발생하지 않고,
    실패하더라도 작업을 진행하던 도중 실패한 상태로 데이터를 방치하지 않는 특징

=> 트랜잭션 내의 데이터는 일관되어야하며, 에러가 발생하더라도 데이터의 문제가 발생하면 안된다는 특징

  • EX
  • 첫번째 테이블에 데이터 생성 성공, 두번째 테이블에서 데이터 생성 실패
    => ROLLBACK이 실행
    -> 첫번째 테이블과 강의 두번째 테이블에서 트랜잭션에서 조작한 데이터가 아무것도 존재하지 않는 상태

= 데이터 자체가 생성되지 않거나 / 모든 데이터가 생성되는 상황이 발생하여야 데이터 베이스로 작업 실행 가능

격리성(Isolation)

격리성(Isolation):
트랜잭션의 경우 실행 전이나 실행 후의 데이터를 외부에서 참조 가능
-> 트랜잭션을 수행하는 중간 상태를 보거나 변경할 수 없도록 구성

EX.
MySQL에서는 사용중인 DB 오브젝트에 락(Lock)을 걸어 격리성을 구현하게 함

락(Lock):
DB에 접속한 또다른 클라이언트가 해당하는 DB 오브젝트를 읽거나, 사용할 수 없도록 만든다는 개념

동시성(Concurrency)과 격리 수준(Isolation Level)라는 개념이 나타남

  • 동시성(Concurrency):
    여러명의 클라이언트가 하나의 데이터를 동시에 사용및 공유
    EX. 동시성 문제:
    하나의 자원을 여러명이 사용하여 발생하는 문제

  • 격리 수준(Isolation Level):
    트랜잭션끼리 얼마나 서로 고립되어 있는지를 나타내는 수준

지속성(Durability)

  • 지속성(Durability):
    • 트랜잭션을 성공적으로 수행 -> 수정된 데이터를 시스템에 영구적으로 적용

    • 트랜잭션의 중간 결과가 아니라 완성된 결과만 저장,
      데이터베이스에 이상이 생기더라도 자동 복구

      EX. DB가 재시작, 트랜잭션의 변경사항을 다시 반영

객체 지향 프로그래밍

객체 지향:

  • 책임과 권한을 가진 객체들 ->
    서로 메시지를 주고받으며 협력해서 필요한 기능을 수행하도록 시스템을 개발하는 것
    • 크고 복잡한 시스템을 효과적으로 분해하고 구성, 손쉽게 이해하고 효율적으로 다룰 수 있게 도와주는 방법
      = 지금은 가장 인기 있는 프로그래밍 패러다임
  • 장점:

    • 코드 재사용이 용이
    • 유지보수가 쉬움
  • 단점:

    • 처리속도가 상대적으로 느림
    • 객체가 많으면 -> 용량이 커짐
    • 설계시 많은 시간과 노력이 필요

조건:
1. 캡슐화, 다형성, 클래스 상속을 지원하는가?
2. 데이터 접근 제한을 걸 수 있는가?

캡슐화 (Encapsulation)

캡슐화:

  • 개념적이나 물리적으로 객체 내부의 세부적인 사항을 감추는 것

  • 목적:

  1. 변경하기 쉬운 객체 생성
  2. 정보은닉
  • 정보은닉:
    객체에 대한 중요한 정보를 외부로 노출시키지 않도록 하기 위한 기법

객체 지향 설계 5원칙(SOLID)

3 Layer Architecture

도메인 (Domain)

도메인:

  • 개발자 -> 비즈니스 프로세스를 개선하거나 자동화하기 위해 일함.
    => 이런 프로세스가 지원하는 활동을 의미

EX. 판매 회사 -> 구매 및 조달, 제품설계, 물류 및 배달

아키텍처 패턴 (Architecture Pattern)

아키텍처 패턴 (Architecture Pattern):
소프트웨어의 구조를 구성하기위한 가장 기본적인 토대를 제시

계층형 아키텍처 패턴 (Layered Architecture Pattern)

계층형 아키텍처 패턴 (Layered Architecture Pattern):
계층을 분리해서 관리하는 아키텍처 패턴,
현재 가장 흔하게 사용되고 있는 아키텍처 패턴 중 하나

Layer 역할

Controller:
사용자의 요청을 처리한 후 지정된 뷰에 모델 객체를 넘겨주는 역할

Service:
비즈니스 로직을 수행. DB에 접근하는 DAO를 이용해서 결과값을 받아온다.
(DAO: Mysql 서버에 접근, SQL 문 실행 객체)

Repository Layer:
DB 구조 생성 후 CRUD를 어떻게 할 것인지 정의하는 계층

post-custom-banner

0개의 댓글