2018년 5월 8일 화요일

패스트 캠퍼스 JAVA 웹 프로그래밍 마스터 25일차(JPA, Valid)

  • 데이터베이스를 많이 사용하는 사이트는 어떤 곳일까?
    • 정적 데이터(사진사이트)
    • 비지니스 로직(은행)
    • DATA
  • 비지니스 로직이 많을때 여러개의 WAS를 사용
    • L4스위치를 통해 하나의 WAS를 통해 사용가능하게 할 수 있다.(비싸다)
    • 브라우저와 WAS사이에 nginx, 웹서버를 두어서 라운드 로빈방식으로 구현
      • 요청이 올때마다 하나의 WAS에 연결해준다.
      • 세션은 WAS남기 떄문에 문제가 있다. 그래서 세션정보를 공유하는부분을 만들어야한다.
      • Spring Session을 통해 Redis에 저장할 수 있다.
      • Nginx는 재시작을 해도 기존 사용자가 있다면 프로세스를 다 쓸때까지 종료되지 않는다. 새로 추가된 Nginx는 추가된 WAS에 연결되고 사용자가 사용하던 Nginx는 기존사용 종료후 재시작 되서 추가된 WAS와 연결된다. 무중단으로 서비스가 가능하다.
  • 값 검증
    • @Valid가 선언된객체에 설정을 바탕으로 검사후 BindingResult에 담아준다.
    • BindingResult.hasErrors : 에러가 있는지 검사한다.
    • 에러를 발생하려면 FieldError객체를 만들어서 BindingResult에 넣어준다.
    • dispatcherservlet이 메소드안에 선언된 객체를 만들어주고 값을 넣어준다.
    • 태그에서 object에 담긴 객체의 프로퍼티를 filed *{필드이름} 형식으로 사용한다
    • errors는 BindingResult에 있는 에러값을 출력해준다.
  • JPA
    • EntityManager가 제일 중요하다.
    • 영속성 상태일때만 작업이 일어난다.
    • 영속성을 부여하면 1차 캐시에 저장된다. 그리고 따로 스냅샷을(복사본) 만든다. 
    • 영속성 상태일때 @Id와 엔티티가 키가되고 엔티티가 값이된다.
    • ID를 자동생성으로 셋팅하면 DB에 insert가 먼저 일어나고 키를 얻어온다. 자동생성 하지 않으면 DB에 INSET하지 않고 ID를 가지고 1차캐시에 저장된다.
    • 1차캐시와 스냅샷이 서로 다를떄 UPDATE가 실행된다. 
    • EntityManager가 트랜잭션이 커밋될때 모아둔 SQL을 최적으로 실행한다.
    • EntityManager은 캐시에 데이터가 있으면 DB를 이용하지 않고 캐시에 있는것을 반환한다.
    • 비영속 : 객체만 생성한 단계
    • persist : 영속성 상태가 된다. insert가 작동하는것은 아니다. 조회를 할때도 영속성을 가진다.
    • detach : 비영속 상태가 된다.
    • 준영속상태 : 아이디를 가지고 있는 상태, 영속상태로 변경할 수있다.(merge)
    • @Transactional이 없으면 EntityManager를 관리하지 못한다.
    • 스프링 부트에서는 필터(OSIV) - DS - C - S - R - DB
      필터(OSIV) - DS - C 에서는 트랜잭션이 ReadOnly이다.
      S - R - DB 단계에서는 읽고 쓰기가 가능하다.
      레이지 로딩 사용하려고 필터단계에서 트랜잭션이 시작된다.
  • QueryDSL
    • JPQL을 오류나지않게 생성해주는 도구
  • JOOQ
    • natavie SQL을 사용하게 해주는 도구
  • 공부목록
    • Spring Session
Share:

0 개의 댓글:

댓글 쓰기