우주먼지
article thumbnail
선언형 트랜잭션
Framework/Spring 2022. 11. 4. 20:08

💡 Transaction ACID 원칙 1. 원자성 (Atomicity) All or Nothing 보장 2. 일관성 (Consistency) 어떤 값 증가시 연관된 값 일관성있게 증가 3. 격리성 (Isolation) 각 트랜잭션 당 각각 독립적 실행 4. 지속성 (Durability) 트랜잭션 완료 후 결과 지속 보장 트랜잭션 커밋 & 롤백 Commit 완료된 작업 최종 DB 반영 - 트랜잭션 종료 RollBack 작업중 문제 발생 시 수행작업 취소 -> 원상태 복귀 조회 메소드에는 @Transaction의 Attr을 readOnly=true 로 설정함으로써 성능 최적화 과정을 거치도록 한다 트랜잭션 전파 (Transaction Propagation) @Transactional의Attribute Pr..

article thumbnail
JPA & Hibernate (Java Persistence API)
Framework/Spring 2022. 11. 1. 15:00

💡 JPA Memo JPA 란? 객체와 테이블의 패러다임 불일치 해결을 위한 영속성(Persistence) ORM 프레임워크 Persistence Context에 객체와 DB테이블의 매핑정보를 저장 이렇게 보관된 엔티티정보는 DB 테이블에 CRUD를 위해 사용됨 동작원리 요약 begin() 트랜잭션 시작 객체를 persist로 영속성 컨텍스트에 저장하면 (1차캐시, 지연sql저장소에 등록) commit을 하면 지연 sql 저장소에 자동으로 변환되있던 (대기중인) sql문 실행으로 인해 db 등록 수정 - setter 사용 제거 - remove() 사용 (DB가 아닌 영속성 컨텍스트에서 제거) //i 1. 영속성 컨텍스트에만 엔티티 저장 private void example01() { //i ex01 Me..

Spring Data JDBC 기반 도메인 엔티티 & 테이블 설계
Framework/Spring 2022. 10. 27. 16:00

💡 Aggregate 비슷한 업무 도메인들의 집합 Aggregate Root = 각각의 도메인 대표, root의 key를 다른 도메인이 foreign키로 가지고 있음 Aggregate Root 선정 기준 = 다른 도메인과 연관성이 있는 도메인 (1:N) 설계중 Aggregate Root역할을 할 엔티티 클래스를 잘 선정해야함 엔티티 설계 1:N의 관계에서 1은 N의 객체를 참조할 수 있도록 List를 멤버변수로 가진다 N:N의 관계에서, 1:N - N:1로 변환하도록 N쪽의 객체를 참조하도록 1쪽에서 List를 멤버 변수로 가짐 ex) private AggregateReference userId; 객체 참조 = 테이블에서의 외래키 참조 테이블 설계 각 테이블의 컬럼은 엔티티의 멤버변수와 1:1 매핑됨 테..

Spring JDBC
Framework/Spring 2022. 10. 27. 12:28

💡 JDBC JDCB API 동작 흐름 JDBC 드라이버 로딩 - DriveManager 클래스 통해서 로딩 Connection 객체 생성 - DriverManagerfmf 통해 DB와 연결되는 세션인 객체 생성 Statement 객체 생성 - 작성된 쿼리문을 실행하기 위한 객체로, 객체 생성 후 정적 퀴리 문자열을 입력으로 가짐 쿼리 실행 - 생성된 Statement 객체를 이용해서 쿼리 실행 ResultSet 객체로부터 데이터 조회 - 실행된 쿼리문에 대한 데이터 Set ResultSet -> Statement -> Connection 순으로 객체 Close Connection Pool (DBCP) Connection 객체 생성은 리소스를 많이 요구한다. 그래서, 미리 Connection 객체를 생성..

article thumbnail
RestControllerAdvice (Exception 공통화)
Framework/Spring 2022. 10. 25. 21:40

💡 Throw Exception 예외의 구분 어플리케이션의 발생예외는 크게 체크예외, 언체크예외로 구분 체크예외 : 발생한 예외를 잡고(catch) 체크 후, 예외 복구&회피 등 구체적인 처리 필요 ex: ClassNotFoundException 언체크예외 : 예외를 잡고(catch) 따로 처리가 필요하지 않음 ex: NullPointerException, ArrayIndexOutOfBoundsException 휴먼에러로 인해 발생하는 오류는 전부 RuntimeException을 상속한 예외들임 자바는 많은 RuntimeException을 지원하지만 직접 예외를 만들어야 하는 경우도 있음 의도적으로 예외 throw & catch 하기 Custom Exception(enum) 생성 특정 계층에서 사용할 클..

article thumbnail
Exception Handler -> RestControllerAdvice
Framework/Spring 2022. 10. 25. 14:08

💡 Exception Handler 예외 발생 가능성이 있는 상황 클라이언트 요청 데이터에 대한 유효성 검증에서 발생하는 예외 서비스 계층의 비즈니스 로직에서 던져지는 의도된 예외 런타임 예외 UserController에 Exception Handler 적용 RequestBody에 유효하지않은 데이터 요청이 오면, 유효성 검증에 실패 유효성 검증에 실패시 내부적으로 던져진 예외인 MethoddArgumentNotValidException을 handleException() 이 받음 그 후, MethodArgumentNotValidException 개체에서 getBindingResult(), getFieldErrors() 를 통해, 발생한 에러 정보를 리스트로 확인 가능 객체에서 얻은 정보인 filedErr..

article thumbnail
Web MVC Service Layer
Framework/Spring 2022. 10. 24. 14:07

💡 API Service 연동 실습 API 계층에서 전달받은 DTO 객체를 서비스 계층의 도메인 엔티티 객체로 변환 1. 계층별 관심사 분리 2. 코드 구성의 단순화 3. Rest API 스펙의 독립성 확보 리팩터링 포인트 1. 컨트롤러의 핸들러가 DTO를 엔티티로 변환하는 작업까지 하고있다 DTO를 엔티티로 변환하는 작업을 다른 클래스에게 변환 위임 = membermapper 컨트롤러는 이제 두 클래스의 변환작업을 안함 (역할 분리) 2. 엔티티 클래스의 객체를 클라이언트의 응답으로 전송함으로써 계층간 분리 X 클라이언트 응답을 엔티티 클래스로 전송하지말고, 엔티티의 객체를 DTO의 객체로 바꿔줌 membermapper가 엔티티를 dto로 변환해줌으로써 서비스에있는 엔티티를 apu에서 직접 사용하는 문..

검색 태그