티스토리 뷰

싱글톤 패턴(singleton pattern)

  • 객체의 인스턴스가 오로지 한 개만 생성되도록 설계하는 패턴으로 private을 이용해 외부에서 인스턴스를 생성하지 못하도록 막고, static을 이용해 어느 영역에서든 접근이 가능하도록 설계한다.
  • 객체가 생성된 이후에는 호출이 되었을 때 최초로 생성된 인스턴스를 사용하기 때문에 메모리 낭비를 막을 수 있다.
  • 싱글톤 패턴은 구현 코드가 많고 내부속성 변경이 어려운 등 유연성이 떨어지며 OCP(개방폐쇄원칙, 기존의 코드를 변경하지 않으면서 기능을 추가할 수 있어야 한다)와 DIP(의존역전원칙)을 위반하기 쉬운데 이러한 단점을 해결해주는 것이 스프링 컨테이너이다.
  • 스프링 컨테이너는 싱글톤 패턴을 적용하지 않아도 객체 인스턴스를 싱글톤으로 관리하는데 이 때 객체 인스턴스를 하나로 공유하기 때문에 객체 상태가 바뀌지 않도록 무결(statefuless)하게 유지해야 한다.

DIP 의존역전 원칙이란

  • 변하기 쉬운 것에 의존하지 말고 변하지 않을 가능성이 높은 상위 클래스나 상위 인터페이스, 추상화된 클래스에 의존하라는 원칙이다.
  • 자동차가 구체적인 스노우 타이어라는 클래스에 의존하는 것보다 추상적인 타이어 인터페이스에 의존하게 함으로써 객체간 관계를 느슨하게 할 수 있다.

트랜잭션(Transaction)

  • 트랜잭션이란 DB에서 수행되는 여러 작업을 하나의 논리적 단위로 수행하는 것.
  • 거래 시스템을 예로 들면, 구매자의 계좌에서 10,000원이 출금되고 판매자의 계좌에 10,000원이 입금되는 과정을 거치는데 구매자의 계좌에서 출금이 일어난 이후 판매자 계좌에 입금이 되기 전에 오류가 생기게 된다면 데이터의 무결성이 깨지기 때문에 출금과 입금을 하나의 작업단위, 트랜잭션으로 묶어서 거래가 모두 완전하게 끝나면 commit 연산을 하고 중간에 오류가 발생하면 거래 시작 전으로 되돌리는 rollback 연산을 하여 거래의 무결성이 보장한다.
  • 트랜잭션의 중요한 개념으로는 ACID가 있다. 이것은 트랜잭션이 안전하게 수행된다는 것을 보장하는 성질을 의미하는데 각각 1. 하나의 트랜잭션 안에서 연산은 모두 성공하거나 모두 실패한다는 Atomic(원자성), 2. 데이터베이스의 상태가 일관되어야 한다는 Consistency(일관성), 3. 모든 트랜잭션은 다른 트랜잭션의 영향을 받지 않아야 한다는 Isolation(고립성), 4. 트랜잭션이 성공하면 영구적으로 DB에 반영이 되어야 한다는 Durability(지속성) 이다.
  • 이 중 고립성은 완벽하게 지킨다면 성능상 단점이 되기도 하므로 격리 수준에 따라 구분하기도 한다.
    • READ-UNCOMMITED
      • 아직 커밋되지 않은 데이터를 읽기 가능
      • Dirty Read : 다른 트랜잭션에 의해 수정되었지만 커밋되지 않은 데이터를 읽는 것
    • READ-COMMITED
      • 커밋된 데이터만 읽기 가능
      • Non-Repeatable-Read : 트랜잭션 내에서 같은 데이터를 여러번 조회할 때 서로 다른 값이 조회되는 문제
    • REPEATABLE-READ
      • 특정 데이터를 조회수 같은 값을 반환
      • Phantom Read : 트랜잭션 내에서 같은 쿼리를 수행했을 때 이전에 없던 데이터가 나타나는 현상
    • SERIALIZABLE
      • 트랜잭션이 순차적으로 실행
      • 속도는 느리지만 데이터의 일관성 보장

연관자료

반응형
댓글
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/09   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함