Java & Spring
-
6장) 6.1 트랜잭션 코드의 분리 ~ 6.2 고립된 단위 테스트Java & Spring/토비의 스프링 3.1 2021. 7. 11. 17:32
6장 AOP 스프링에 적용된 가장 인기있는 AOP 적용 대상은 선언적 트랜잭션 기능 6.1 트랜잭션 코드의 분리 메소드 분리 기존에 작성했던 UserService는 트랜잭션 경계설정 코드와 비즈니스 로직 코드 간에 서로 주고받는 정보가 없음 비즈니스 로직 코드에서 직접 DB를 사용하지 않기 때문 upgradeLevels 메소드에서 시작된 트랜잭션 정보는 트랜잭션 동기화 방법을 통해 DAO가 알아서 활용 완벽하게 독립된 코드 DI를 이용한 클래스의 분리 DI 적용을 이용한 트랜잭션 분리 DI는 실제 사용할 오브젝트 클래스 정체를 감추고 인터페이스로 간접 접근하도록 사용 구현 클래스를 외부에서 변경 가능 UserService를 인터페이스로 만들고 기존 코드를 구현 클래스로 수정 클라이언트와 결합이 약해지고 ..
-
5장) 5.3 서비스 추상화와 단일 책임 원칙 ~ 5.5 정리Java & Spring/토비의 스프링 3.1 2021. 7. 2. 14:11
5장 서비스 추상화 5.3 서비스 추상화와 단일 책임 원칙 수직, 수평 계층구조와 의존관계 기술과 서비스에 대해 추상화 기법 적용 UserDao와 UserService가 각각 담당하는 코드의 기능적인 관심에 따라 분리, 독자적으로 확장이 가능하도록 작업 같은 계층에서 수평적인 분리 트랜잭션 추상화 비즈니스 로직과 그 하위에서 동작하는 로우레벨의 트랜잭션 기술이라는 아예 다른 계층의 특성을 갖는 코드를 분리 단일 책임 원칙 하나의 모듈은 한가지 책임을 가져야함 == 하나의 모듈이 바뀌는 이유는 한 가지여야함 UserService 예시 JDBC Connection 메소드를 직접 사용하는 트랜잭션 코드가 있던 경우 두 가지의 책임을 가짐 사용자 레벨을 어떻게 관리할 것인가 트랜잭션을 어떻게 관리할 것인가 단일..
-
5장) 5.2 트랜잭션 서비스 추상화Java & Spring/토비의 스프링 3.1 2021. 6. 26. 18:12
5장 서비스 추상화 5.2 트랜잭션 서비스 추상화 트랜잭션 더 이상 나눌 수 없는 단위 작업 트랜잭션 커밋 모든 SQL 수행 작업이 다 성공적으로 마무리됐다고 DB에 알려줘서 작업을 확정시키는 작업 변경 내용이 DB에 반영되도록 설정하는 작업 트랜잭션 롤백 SQL 수행 작업 중 뒤 차례의 수행에 문제가 발생한 경우에 앞에서 처리한 SQL 수행 작업도 취소시키는 작업 DB에 변경 내용을 변경 이전으로 되돌리는 작업 트랜잭션 경계 설정 트랜잭션 경계 트랜잭션이 시작되고 끝나는 위치 transaction 시작 선언 이후, commit() or rollback() 으로 트랜잭션을 종료하는 작업 JDBC 트랜잭션의 트랜잭션 경계 설정 하나의 Connection을 사용하다가 닫는 사이에 일어남 트랜잭션의 시작과 종..
-
5장) 5.1 사용자 레벨 관리 기능 추가Java & Spring/토비의 스프링 3.1 2021. 6. 26. 18:11
5장 서비스 추상화 지금까지 만든 DAO에 트랜잭션을 적용하면서 스프링이 어떻게 성격이 비슷한 여러 종류의 기술을 추상화하고 일관된 방법으로 사용하도록 지원하는지 살펴보기 5.1 사용자 레벨 관리 기능 추가 지금까지 만든 UserDao는 비즈니스 로직을 가지고 있지 않다. 사용자 관리 기능을 넣어 활동 내역을 참고한 레벨 조정 기능을 추가 사용자 레벨 BASIC, SILVER, GOLD 처음 가입 시, BASIC 등급, 활동에 따라 한 단계씩 업그레이드 가입 후 50회 이상 로그인 ~> SILVER SILVER 레벨이면서 30번 이상 추천 ~> GOLD 사용자 레벨은 일정한 주기를 가지고 일괄 진행 변경 작업 전에는 조건을 충족해도 변경이 일어나지 않음 필드 추가 LEVEL 이늄 3 단계기 때문에 DB에..
-
Spring Batch 기초 정리Java & Spring/Spring Batch 2021. 6. 22. 17:44
Spring Batch Batch Application 데이터에 대한 일괄 처리 작업을 사람 개입 없이 자동으로 지원해주는 Application Batch : 일괄처리 Scheduler : 일정 시간마다 실행시키는 역할 Quartz? Spring Batch? Quartz : Job Scheduling Library Quartz는 스케쥴러의 역할이지 Batch와 같이 대용량 데이터 배치 처리에 대한 기능 지원 X Quartz외에도 Spring Scheduler, Jenkins, Cron 등이 존재 Spring Batch : Bach Framework Spring Batch는 스케쥴링 프레임워크가 아님 Batch는 Quartz의 스케쥴링 기능 지원 X 보통 Quartz + Spring Batch로 사용하면서..
-
4장) 4.2 예외 전환 ~ 4.3 정리Java & Spring/토비의 스프링 3.1 2021. 6. 21. 14:29
4장 예외 4.2 예외 전환 예외 전환의 목적 런타임 예외로 포장 불필요한 catch / throws 없애기 의미있고 추상화된 예외로 바꿔 던지기 JdbcTemplate의 DataAccessException이 런타임 예외로 SQLException을 포장 대부분 복구가 불가능한 예외인 SQLException을 Application 레벨에서 신경쓰지 않고, 상세한 예외 정보 전달의 목적 JDBC의 한계 DB 종류에 상관없이 사용할 수 있는 데이터 엑세스 코드를 작성하는 일이 쉽지 않음 유연한 코드를 보장 못하는 두 가지 비표준 SQL 최적화 기법, 페이지 처리 등 비표준 SQL이 폭넓게 사용됨 비표준 SQL은 DAO에 들어가게되고, 해당 DAO는 특정 DB에 종속적인 코드가 됨 해결책 DAO를 DB별로 만들..
-
4장) 4.1 예외Java & Spring/토비의 스프링 3.1 2021. 6. 17. 17:11
4장 예외 4.1 사라진 SQLException 스프링의 JdbcTemplate을 적용하면서 throws SQLException 선언이 적용 후에 사라졌다. 초난감 예외처리 예외가 발생하면 catch 블록을 써서 잡는 것은 좋지만 아무 것도 하지 않고 넘어가는 것은 위험 프로그램 실행 중 어디에서 오류가 있는지 모른채 무시하고 계속 진행하기 때문 조치를 취할 방법이 없다면 잡지 말고 throws를 메소드 밖으로 던지고 자신을 호출한 코드에 예외처리 책임을 전가하는 것이 차라리 낫다 실행 창에 로그나 메시지로 남기는 경우 다른 수많은 로그나 메시지에 금방 묻힘 예외 처리 시, 반드시 지켜야할 핵심 원칙 복구되든지 작업을 중단시키고 운영자 or 개발자에게 분명하게 통보돼야함 무의미하고 무책임한 throws ..
-
3장) 3.6 스프링의 JdbcTemplate~ 3.7 정리Java & Spring/토비의 스프링 3.1 2021. 6. 17. 17:10
3장 템플릿 3.6 스프링의 JdbcTemplate 스프링 제공 템플릿/콜백 JdbcContext를 JdbcTemplate로 수정 update() 메소드 createPreapredStatement() 메소드와 대응되는 메소드로, SQL 문장만 파라메터 전달함으로써 사용 add 메소드와 대응되는 콜백으로 사용하는 경우, 바인딩할 파라미터를 순서대로 전달 queryForInt() 메소드 ResultSetExtractor는 PreparedStatement 쿼리를 실행해서 얻은 ResultSet을 전달받는 콜백 콜백을 만들고 익명 내부 클래스를 복잡하게 설정 JdbcTemplate에서 제공하는 queryForInt 메소드를 사용 스프링에서 제공하는 클래스지만 DI 컨테이너를 필요로 하지 않음 queryForOb..