TIL

TIL_20221104

번잔중 2022. 11. 4. 22:23

오늘 할 일

🎊 코드 스테이츠 52일차

[Spring MVC] 트랜잭션

  • Daily Coding
  • 트랜잭션 개요
  • Spring Framework에서의 트랜잭션 처리

다른거

  • 1일 1커밋
  • 복습

오늘 배운 것

😼 [Spring MVC] 트랜잭션

트랜잭션 개요

  • 트랜잭션은 여러 개의 작업을 하나의 그룹으로 묶어서 처리하는 처리 단위이다. 여러 개의 작업 중 하나라도 실패해서는 안되기 때문에 전부 성공하거나 전부 실패하거나 둘 중 하나로만 처리되어야 한다. (All or Nothing)
  • ACID 원칙
    • Atomicity(원자성): 작업을 더 이상 쪼갤 수 없음을 의미한다. 여러 개의 작업을 큰 덩어리 하나로 인식하여 성공하거나 실패하거나 둘 중 하나로만 처리될 것을 보장해야 한다.
    • Consistency(일관성): 트랜잭션이 성공적으로 종료되는 경우, 비즈니스 로직에서 의도하는대로 일관성 있게 저장되거나 변경되어야 한다.
    • Isolation(격리성): 트랜잭션은 각각 독립적으로 실행되어야 함을 의미한다. 서로 영향을 미치지 않아야 한다는 의미이다.
    • Durability(지속성): 트랜잭션이 완료되면 그 결과는 지속되어야 함을 의미한다. 데이터베이스가 종료된다고 해도 물리적인 저장소에 데이터는 유지되어야 한다는 뜻이다.
  • 커밋과 롤백(Commit & Rollback)
    • 커밋: 모든 작업을 최종적으로 데이터베이스에 반영하는 명령어이다. commit 명령어를 수행하면 변경된 내용이 데이터베이스에 영구적으로 저장된다.
    • 롤백: 작업 중 문제가 발생했을 경우, 트랜잭션 내에서 수행된 작업들을 취소한다. 트랜잭션 시작 이전의 상태로 돌아가는 것이다.
  • JPA 기술을 사용한 데이터베이스와의 인터랙션은 내부적으로 JDBC API를 통해서 이루어진다.

선언형 방식의 트랜잭션 적용

  • Spring에서 선언형 방식으로 트랜잭션을 적용하는 방법
    1. 작성한 비즈니스 로직에 애너테이션을 추가하는 방식
    2. AOP 방식을 이용해서 비즈니스 로직에서 아예 트랜잭션 적용 코드 자체를 감추는 방식
  • 애너테이션 방식의 트랜잭션 적용
    • @Transactional 애너테이션을 트랜잭션이 필요한 영역에 추가해준다. 
    • 클래스 레벨에만 @Transactional 애너테이션이 적용되면 클래스 내부에 존재하는 메서드에 일괄 적용된다.
    • 클래스 레벨과 메서드 레벨에 함께 적용된 경우는 메서드 레벨에 @Transactional 애너테이션이 적용되고, 메서드 레벨에 @Transactional 애너테이션이 적용되지 않았다면 클래스 레벨의 @Transactional 애너테이션이 적용된다.
    • @Transactional 애너테이션의 애트리뷰트로 propagation = Propagation.REQUIRED를 propagation 애트리뷰트 값으로 지정해주면 현재 진행중인 트랜잭션이 존재하면 해당 트랜잭션을 사용하고, 존재하지 않으면 새 트랜잭션을 생성하도록 해준다.

⭐️ 오늘은 여기까지만 학습해서 나머지는 내일 이어가도록 하겠음!

다른거

- 1일 1커밋

프로그래머스에서 Lv.0 이진수 더하기를 풀었습니다. 십진수를 이진수로 변환하는 메서드를 자꾸 까먹어서 이번 기회에 정리하려고 합니다. 처음에는 문자열을 자리마다 비교해줘야 하나 했는데, 이진수와 십진수를 번갈아가면서 메서드를 사용해주면 되겠다 싶어 찾아보고 사용했습니다.

 

Programmers 이진수 더하기

 

GitHub - chaning49/algorithm: 코딩테스트를 위한 알고리즘 공부

코딩테스트를 위한 알고리즘 공부. Contribute to chaning49/algorithm development by creating an account on GitHub.

github.com

이진수 → 십진수

Integer.valueOf(String str, int radix)
Integer.parseInt(String str, int radix)

 

 

십진수 → 이진수

Integer.toBinaryString(int i)

 

- 복습

오늘은 복습이라기보단 실습을 순차적으로 따라해보았습니다. JPA 실습보다는 나은 것 같은데, 주말에 배운 내용들 하나씩 다 해봐야 알 것 같습니다.

느낀점

  • 트랜잭션 파트는 비교적 학습 자체는 수월했다고 느낀다. 물론 또 실습을 하게 되면 어떻게 흘러갈지 모르지만 일단은 해봐야 아는 것이니까 더 열심히 해봐야겠다. 
  • 주말에는 이번주 내용을 전체적으로 한번 더 보고 코드 내용을 비교해보면서 디테일하게 동작 순서 같은 것들을 정리해야겠다. 일단은 따라가보는게 중요하니까...
  • 알고리즘 문제를 풀 때, 시간이 점점 더 많이 소요되는 느낌이 든다. 실력이 잘 늘지 않아서 걱정된다. 책이라도 하나 사서 따라가볼지 고민중!

내일 할 일

  • 1일 1커밋
  • 복습
  • 운동

'TIL' 카테고리의 다른 글

TIL_20221106  (0) 2022.11.06
TIL_20221105  (0) 2022.11.05
TIL_20221103  (3) 2022.11.03
TIL_20221102  (0) 2022.11.02
TIL_20221101  (0) 2022.11.01