Spring

· Spring
⬜ 섹션11 스프링 트랜잭션 전파2 - 활용◼️ 예제 프로젝트 만들기실습을 위해 간단한 코드를 짜보자.만드는 프로그램은 아주 간단한 상품주문 프로젝트이다. Controller→Service →Repository 흐름을 가졌다.@Repository@RequiredArgsConstructorpublic class OrderRepositoryV0 { public void save(String itemId) { //저장 로직 if (itemId.equals("ex")) { throw new IllegalStateException("예외 발생!"); } sleep(1000); } private void sleep(int mill..
· Spring
⬜ 섹션11 스프링 트랜잭션 전파2 - 활용◼️ 예제 프로젝트 시작▪️비즈니스 요구사항회원을 등록하고 조회회원 변경 이력 추적을 위해 회원 데이터 변경시 변경 이력을 DB LOG 테이블에 남긴다.(여기서는 예제 단순화를 위해 회원 등록시에만 DB LOG에 남김) ▪️베이스 실습 코드실습을 위해 Member,MemberRepository,Log,LogRepository,MemberService를 만들어주었다.각 레포지토리에는 save(), find() 함수를 만들었다.이때, 실습을 위해 아래 코드처럼 로그레포지토리에는 "로그예외" 단어를 포함하면 런타임예외를 발생시킨다.🔵CASE 1 : 서비스 계층에 트랜잭션 없을 때 - 커밋@Slf4j@Repository@RequiredArgsConstructorpub..
· Spring
⬜ 섹션10 스프링 트랜잭션 전파1 - 기본◼️ 스프링 트랜잭션 전파1 - 커밋, 롤백@Slf4j@SpringBootTestpublic class BasicTxTest { @Autowired PlatformTransactionManager txManager; @TestConfiguration static class Config { @Bean public PlatformTransactionManager transactionManager(DataSource dataSource) { return new DataSourceTransactionManager(dataSource); } } @Test void commit(..
· Spring
⬜ 섹션9 스프링 트랜잭션 이해◼️ 스프링 트랜잭션 소개라고 하고 복습이라 읽는...복습을 위한 나를 위한 정리 🟢트랜잭션 추상화기술마다 다른 트랜잭션 사용 코드(JPA,JDBC...)PlatformTransactionManager라는 인터페이스를 통해 트랜잭션을 추상화스프링은 트랜잭션 추상화, 매니저 구현체 모두 제공우리는 필요한 구현체를 스프링 빈으로 등록하고 주입 받아서 사용하기만 하면 된다. 🟢선언적 트랜잭션과 AOP보통 선언적 트랜잭션 ( @Transactional ) 을 사용한다.@Transactional 애노테이션만 붙으면 AOP는 이를 인식해 트랜잭션 처리 프록시를 적용해준다.◼️ 트랜잭션 적용 확인@Transactional 애노테이션이 특정 클래스나 메서드에 하나라도 있으면 트랜잭션 ..
· Spring
⬜ 섹션8 데이터 접근 기술 - 활용 방안◼️ 스프링 데이터 JPA 예제와 트레이드 오프중간에 JpaItemRepository가 어뎁터 역할을 해준다.ItemService가 사용하는 인터페이스(ItemRepository)를 그대로 유지할 수 있다.클라이언트인 ItemService 코드를 변경하지 않아도된다.하지만...전체 구조가 복잡하고 사용클래스도 많아졌다!!!위처럼 ItemService에서 직접 스프링데이터JPA 리포지토리를 직접참조할 수 있다.하지만 이경우 ItemService 코드를 변경해야 한다. 🟢 트레이드 오프안정성: DI, OCP를 지키기 위해 어댑터를 도입하고, 더 많은 코드를 유지한다.개발 편리성: 어댑터를 제거하고 구조를 단순하게 가져가지만, DI, OCP를 포기하고, ItemSer..
· Spring
[Spring] 스프링 DB 2편 - 데이터 접근 활용 기술 섹션6 데이터 접근 기술 - Querydsl⬜ 섹션6 데이터 접근 기술 - Querydsl💡 강의 플로우 요약기존방식문제점: JPA에서 JPQL로 쿼리작성,하지만 type-safe하지않음! type-safe하게 만들면 이용법 개복잡해짐...해결책: QueryDsl 등장! type-safe,컴파일에러,이용쉬움! JPQL로 변환되어 SQL 쿼리 생성!◼️ 기존방식 문제점query는 문자이므로, type-check 불가능하다. 즉, 실행하기 전까지 작동여부 확인 불가. 🧐만약 SQL이 클래스처럼 타입이 있고, 자바 코드로 작성할 수 있다면 type-safe! * JPA에서 Query 방법JPQL(HQL)장점: SQL QUERY와 비슷단점: typ..
· Spring
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 스프링 DB 1편 - 데이터 접근 핵심 원리 섹션5,6 예외 & 스프링과 문제 해결 - 예외 처리, 반복⬜ 섹션5 예외 자바 예외 이해◼️ 체크 예외 활용기본적으로 언체크(런타임) 예외를 사용하자.예외를 잡아서 반드시 처리해야 하는 문제일 때만 체크 예외를 사용하자. 🟢 체크 예외 문제점복구 불가능한 예외: 대부분 예외는 복구가 불가능하다. 따라서 복구불가능한 예외는 오류 로그를 남기고, 스프링 ControllerAdvice를 사용해 깔끔히 공통으로 해결한다.의존 관계에 대한 문제: 체크 예외는 처리할 수 없으면 어쩔 수 없이 throws를 통해 던지는 예외를 필수로 선언해야 한다.이때 JDBC→JPA로 바뀐다면 예외도 바뀌기 때문에 예외 의..
· Spring
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 섹션4 스프링과 문제 해결 - 트랜잭션◼️ 문제점들 🟢 순수한 서비스 계층가장 중요한 곳은 핵심 비즈니스 로직이 들어있는 서비스 계층이다. 비즈니스 로직은 최대한 변경없이 유지되어야 한다.서비스 계층을 특정기술에 종속적이지 않게 개발해야 한다. 하지만 트랜잭션을 적용한 MemberServiceV2를 보면, 핵심 비즈니스 로직과 JDBC 기술이 섞여 있어서 유지보수 하기 어렵다. public void accountTransfer(String fromId, String toId, int money) throws SQLException { Connection con = dataSource.getConnection(); // 트랜잭..
· Spring
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 섹션3 트랜잭션 이해◼️ 트랜잭션커밋(Commit): 모든 작업이 성공해서 DB에 정상 반영하는 것롤백(Rollback): 작업 중 하나라도 실패해서 거래 이전으로 되돌리는 것 🟢트랜잭션 ACID원자성(Atomicity) : 트랜잭션 내에서 실행한 작업들은 하나의 작업인 것처럼 모두 성공 or 모두 실패해야한다.일관성(Consistency) : DB에서 정한 무결성 제약 조건을 항상 만족해야 한다.격리성(Isolation) : 동시실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 격리한다. 예를 들어 동시에 같은 데이터 를 수정하지 못하도록 해야 한다. 격리성은 동시성과 관련된 성능 이슈로 인해 트랜잭션 격리 수준(Isolation leve..
· Spring
[Spring] 스프링 DB 1편 - 데이터 접근 핵심 원리 섹션2 커넥션풀과 데이터소스 이해◼️ 커넥션 풀 이해🟢DB 커넥션 획득 과정애플리케이션 로직은 DB 드라이버를 통해 커넥션을 조회DB 드라이버는 DB와 TCP/IP 커넥션을 연결.(이 과정에서 3 way handshake 같은 TCP/IP 연결 을 위한 네트워크 동작 발생.)DB 드라이버는 TCP/IP 커넥션이 연결되면 ID, PW와 기타 부가정보를 DB에 전달DB는 ID, PW를 통해 내부 인증을 완료하고, 내부에 DB 세션을 생성DB는 커넥션 생성이 완료되었다는 응답을 보낸다.DB 드라이버는 커넥션 객체를 생성해서 클라이언트에 반환😥커넥션을 새로 만드는 것은 과정도 복잡하고 시간이 많이 소모된다.😉이런 문제를 해결하기 위해 커넥션을 미..
고쩡이
'Spring' 카테고리의 글 목록 (2 Page)