//Skip to content
- 데이터베이스를 많이 사용하는 사이트는 어떤 곳일까?
- 정적 데이터(사진사이트)
- 비지니스 로직(은행)
- 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 단계에서는 읽고 쓰기가 가능하다.
레이지 로딩 사용하려고 필터단계에서 트랜잭션이 시작된다.
0 개의 댓글:
댓글 쓰기