트랜잭션

  • MVC 모델에서 보통 하나의 비즈니스 로직은 하나의 트랜잭션으로 동작한다.

트랜잭션의 특징

  • 원자성
    • 1~5번까지의 작업이 있는데 4번에서 오류가 났다면 1~5번까지 모두 rollback해야된다.5번까지 다 했을 때는 commit
  • 일관성
    • 작업 처리 결과가 항상 일관성이 있어야 한다.
  • 독립성
    • 둘 이상의 트랜잭션이 동시에 실행되고 있을 때 하나의 트랜잭션이 완료될 때까지 다른 트랜잭션이 끼어들 수 없다.
  • 지속성
    • 트랜잭션이 성공적으로 완료됐을 경우, 결과는 영구적으로 반영되어야 함

Spring에서 트랜잭션의 처리 방법

@EnableTransactionManagement

  • Spring Java Config파일에서 트랜잭션을 활성화 할 때 사용하는 애노테이션.
  • Java Config를 사용하게 되면 PlatformTransactionManager 구현체를 모두 찾아서 그 중에 하나를 매핑해 사용합니다.
  • 특정 트랜잭션 메니저를 사용하고자 한다면 TransactionManagementConfigurer를 Java Config파일에서 구현하고 원하는 트랜잭션 메니저를 리턴하도록 합니다.
  • 아니면, 특정 트랜잭션 메니저 객체를 생성시 @Primary 애노테이션을 지정합니다.

Connection 단위로 트랜잭션을 관리한다.

DB가 2개 있을 때 2 face commit도 나중에 할 수 있다.

어떤 DB가 됐던지 DB연동 코드를 짤 수 있다.

commit이 트랜잭션의 끝이 아니다. 반영하고 끝낼 건지,

어디까지를 트랜잭션으로 볼 것인지? ->

DAO 입장에서는 한 가지 일만 하는 단위 처리로 짜는 게 맞다. 그래서 그 단위를 관리하는 Service가 필요하다.

잘못됐다면 하나하나 고치는 게 아니라 아예 돌려놔야 한다.

완전 절대경로는 다른 곳에서 쓰일 때

경로 하이퍼링크, 브라우저가 보는 경로는 다 절대경로로 한다.

앞부분은 그대로 상대경로로 가져오고 다른 도메인으로 접근하려면 절대경로로 써야 된다.

브라우저가 바라보는 건 서버의 루트 서버에서 바라보는 건 앱의 루트

브라우저가 바라보느냐, 서버가 바라보느냐. 누구에서 의해서 처리되는지

모든 게 main.do처럼 있다고 생각하면 안 된다.