TIL(2021-03-04)

roach·2021년 3월 4일
0

코드스쿼드

호눅스가 오늘 WAS WEB 하고 AWS 수업을 해줬다. 옛날에 아마존 수업을 학부시절에 아마존에서 강사가 와서 직접 해준적이 있었는데, 아마 아마존 제품을 파시는 분이였던것 같다. 그분도 잘 가르쳐주셨는데 까먹고 있었는데, 오늘 호눅스의 수업을 들으면서 더 잘이해간것 같다. 어떤 개념들이 모여서 생기게 됬는지? 그런걸 배운 느낌이였다. 그래서 같이 공부하는 친구한테 REDIS 가 인-메모리 디비식이면 어떻게 쓸수 있을까? 라는 말을 해봤는데 뭐 장바구니 등등 세션과 비슷하게 굳이 저장되지 않아도 될것들에 쓰이면 좋을 것 같다는 공부도 할 수 있었다. 아무래도 캐싱이되서 훨씬 빠를테니 말이다.

호눅스의 강의는 이번주 부터 조금조금씩 듣고 정리해봐야겠다.

데이터베이스 개론 2판

  • 내생각에 아주 명저이다. 진짜 데이터베이스 첫걸음으로 입문하고 지금 이책을 보는데 정리가 되지않던 이론들을 한번에 딱 모아준 느낌이다. 이제 거의 끝나가니 이거 끝나면 무지개 곰돌이 책을 들어가보려고 한다. 요즘 토비의 스프링을 읽는 중이라, DB 에는 잘 시간을 못내는것 같다.

토비의 스프링

  • 예전에 1~4장까지 코드스쿼드 자바 과정동안 한번했었는데 이번에 1~4장 훑고 정리하면서 5장까지 부랴부랴왔다. 5장을 읽다보니 잘 읽히는것 같다. 어려운 개념들도 있지만 코드스쿼드 과정내에서 스프링을 더 배우고 하면서 토비스프링을 다시읽으면 다시또 이해가지 않던 부분들도 이해가 갈 것이라고 생각한다. 친구는 7장을 읽는 중이라고 하는데, 신경쓰지않고 내 템포에 맞춰 공부하는게 중요하니까 중요한 부분들을 최대한 디버거로 이해안가더라도 보려고한다.

주의 : 막적어서 알아보기 힘듬 (안읽는것을 추천.. 기록저장용)

PlatformTransactionalManger

  • 현재 활성화된 트랜잭션 또는 새롭게 생긴 하나의 지정된 전파 동작에 따라 트랜잭션을 리턴한다.
  • 격리 수준 또는 시간 초과와 같은 매개 변수는 새 트랜잭션에만 적용되므로 활성화된 트랜잭션에 참여할때는 무시됩니다. 또한 모든 트랜잭션 관리자가 모든 트랜잭션 정의 설정을 지원하는 것이 아닙니다.
  • 지원되지 않는 설정이 발견되면 적절한 트랜잭션 관리자 구현에서 예외를 적용해야 합니다.

뭐 이렇게 적혀있는데 아직은 깊숙히 볼레벨은 아닌거 같고..

구현체들을 보니까 JDBC 를 이용할때는 DataSourceTransactionManager 뭐 h2 일때는 HibernateTransactionManager 이런걸 쓰는 것 같다. HibernateTransactionManager 생성자를 보니까 SessionFactory 라는 걸 쓰는데 , 이런걸 보면 일시적인 유지관계를 만드는걸 보통 Session 이라고 표현하는 건가 라고 싶다. 웹 Session 도 그런 의미니까.

HibernatTransactionManger

doGetTransaction 이란 곳에서 Transaction 을 얻는것 같다.

그리고 isExistingTransaction 을 통해서 Transaction 이 존재하는지를 확인하는 것 같다.

doCommit doRollback 도 있는데 지금 breakPoint 를 찍어놨다.

아 지금 보니까 h2 는 JtaPlatformInitiator 를 사용하는것 같다?

JtaPlatfromInitiator 를 계속해서 따라가다보면 기본 전략을 설정하는 란이 나온다.

거기서 이제 내가 사용하고 있는 데이터베이스에 대한 기본전략이 나오는것 같은데

hibernate 엔진에 관한 것이 기본전략으로 생성된다.

어우 보려했는데 너무어렵다.. 그냥 나중에 보자!

기록용

보니까 Spring-data-jpa 를 써서 그런지 여기서 걸린다. 나중에 트랜잭션과정을 한번 살펴보자!
개인적으로 빨리 호눅스의 어노테이션 수업을 듣고싶다..

Spring Start Up 과정 살펴보기

AnnotationConfigApplicationContext 내부로 들어가보자

코드를 살펴보면 아마 아래 코드에서 Bean 읽어와서 생성하는 것 같다..?

StartupStep createAnnotatedBeanDefReader = this.getApplicationStartup().start("spring.context.annotated-bean-reader.create");

뭐 그래서 타고타고 가보면 getApplicationStartupDefaultApplicationStartup 전략을 사용하는 것을 알 수 있다. 이런 내용도 어디 spring.properties 에 저장되어 있지않을까 싶은데, 아직 찾지는 못했다.

ApplicationStartup DEFAULT = new DefaultApplicationStartup();

계속 쑥 들어가다보면 recorded 라는 boolean 형태의 변수 하나가 있는데 , 뭐 일단 봐서는 Beankey-value 형태로 Tagging 을 하는거 같은데 아마 Map 같은 곳에 key-value 로 빈을 저장하고.. 정리중이다! 일단 막적어봤다..

토비 스프링 명언 매일 코드칠때 떠올리기

계속해서 해야할 질문

  1. 코드에 중복된 부분은 없는가 ?
  2. 코드가 무엇을 하는것인지 이해하기 불편하지 않은가?
  3. 코드가 자신이 있어야 할 자리에 있는가?
  4. 앞으로 변경이 일어난다면 어떤 것이 있을 수 있고, 그 변화에 쉽게 대응할 수 있게 작성되어 있는가?
profile
모든 기술에는 고민을

0개의 댓글