안녕하세요, Brad입니다. 오늘 수업시간에 배운 내용들을 정리해볼게요!
Q&A
SpringBoot에서는 xml파일 어떻게 설정할까요?
- xml 설정을 추가로 할 수도 있습니다.
- 만약 Bean 설정이라면
@Configuration
내@Bean
안에 설정할 수 있습니다.
공부의 범위, level별 역량
level2
- 프로그래밍 언어를 하나 가지고 무언가를 구현하는 능력(필수) + 설계역량(TDD, Refactoring, 클린코드 등)
- 신입으로 클린코드나 TDD를 할 수 있는 역량을 가진 사람이 많진 않기 때문입니다.
level3
Java Web Programming 능력(필수) + CS지식
물론 level2의 능력도 필수적입니다.
CS지식은 시간을 투자한만큼 반드시 성과가 나오기 때문에 스터디를 통해 익혀나갈 것을 곧 추천합니다.
다음 CS은 필수입니다. 중요한 포인트는 면접 때 나오는 질문 위주로 잡아나가면 됩니다.
DB
- table설계, CRUD, Join, 가짜 데이터를 만들고 특정 데이터를 가져올 능력
- 인덱스, 성능 튜닝(여력이 된다면)
네트워크
- HTTP
- TCP/IP(여력이 된다면)
운영체제
- 프로세스와 스레드의 차이
- 멀티스레드와 싱글스레드의 차이
- Stack메모리와 Heap메모리의 차이
시스템 아키텍처
- 대용량 트래픽 관리
스프링 프레임워크에 대한 이해
이후에 저희 과정 중 Spring MVC와 비슷한 미션을 통해 어떻게 돌아가는지 익혀나갈 수 있습니다.
공부 단계
- 사용 방법을 익힙니다.
- 그리고 해당 기술이 어떻게 돌아가는지 이해합니다. 사용을 한다면 왜 사용하는지 이유을 알아야합니다.
TDD를 왜하는지, JPA를 왜 사용하는지 그 이유를 알아야합니다. 기술을 많이 쓰는 것이 중요한 것이 아니라 하나를 쓰더라도 경험을 통해 왜 사용하는지 깨달아야합니다. 전문 용어를 사용하지 않더라도 경험적으로, 대략적이라도 얘기하는 것이 좋습니다.
Transaction @Transactional (Resian 발표)
선언적 트랜잭션(↔︎ 프로그래밍적 트랜잭션)
- XML 기반 트랜잭션 설정하는 것을 말합니다.
- 설정을 통해 트랜잭션을 하나로 할 것인지, 분리할 것인지 결정해야 합니다. 이로써 트랙잭션을 제대로 사용하는 것입니다.
ACID
- 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability)
- 지속성과 영속성은 유사합니다.
전달 행위와 격리 레벨
전달 행위 : 이미 진행 중인 트랙잭션 유무에 따라 어떻게 작동할 것인지 결정하는 방식을 말합니다. 실행 중인 트랜잭션 안에 들어갈 수도 있겠죠.
종류
- PROPAGATION_REQUIRES_NEW : 하나의 행동에 여러 트랜잭션을 두어서 하나가 오류나도 다른 트랙잭션에 영향을 주지 않게 하는 것을 말합니다.
- PROPAGATION_REQUIRED(기본으로 설정되는 값)
- 등등 여러 전달 행위가 있습ㄴ디ㅏ.
격리 레벨
트랙잭션을 동시에 진행시키면서 하나의 트랙잭션 변경이 다른 트랙잭션에 영향을 미치게 할 것인가 유무를 결정하는 것을 말합니다.
종류
- Dirty Read : Commit을 하지 않은 상태에서 다른 transaction에 영향을 미칩니다.
- NonRepeatable Read(Fuzzy Read) - Update, Delete
- Phantom Read - Insert
Isolation Level에 따른 Read
- SERIALIZABLE : 엄청 좋은 것만 같지만 동시에 실행되지 않기 때문에 성능이 느리다는 단점이 있습니다.
- READ_UNCOMMITTED
- 등등 여러 Read가 있습니다.
@Transactional(isolation = Isolation.SERIALIZABLE)
와 같이 사용할 수 있습니다.성능에 따라 격리 레벨을 결정할 수 있습니다.
Transaction과
@Transactional
과의 차이점- Transaction은 바로 데이터베이스에 적용됩니다.
- 하지만 @Transactional의 경우 영속성 컨텍스트에 1차 캐시에 작업 후 DB에 저장한다는 점에서 차이가 있습니다. 그리고 사용하는 범위 설정(클래스, 메서드 등)도 가능합니다.
@Transactional
의 장점동일 아이디로 쿼리 재요청시 영속성 컨텍스트에 있는 Entity로 재사용 가능합니다.
화면마다 쿼리를 안 만들어도 된다? 리팩토링이 쉽다?
- 쿼리를 안 만들어도 되니 리팩토링이 쉽습니다.
ROLLBACK
- Spring 프레임워크의 트랜잭션 기본은 RuntimeException 발생할 때만 Rollback 됩니다.
- 만약 작동되게 하려면 명시적으로 설정할 수 있습니다.
그냥
@Transaction
만 사용할 것이 아니라 다양한 설정을 사용해볼 것을 추천합니다!!
'TIL' 카테고리의 다른 글
Today's Dev Notes(2018-12-20) (0) | 2018.12.20 |
---|---|
Today's Dev Notes(2018-12-19) (0) | 2018.12.19 |
Today's Dev Notes(2018-12-16) (0) | 2018.12.16 |
Today's Dev Notes(2018-12-13) (0) | 2018.12.14 |
Today's Dev Notes(2018-12-12) (0) | 2018.12.12 |