전체 글
-
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..
-
3장) 3.4 컨텍스트와 DI ~ 3.5 템플릿과 콜백Java & Spring/토비의 스프링 3.1 2021. 6. 11. 16:44
3장 템플릿 3.4 컨텍스트와 DI JdbcContext의 분리 전략 패턴 구조 UserDao의 메소드가 클라이언트 익명 내부 클래스로 만들어진 것이 개별적인 전략 jdbcContextWithStatementStrategy 메소드가 Context JDBC의 일반적인 작업 흐름을 가지고 있는 컨텍스는 다른 DAO에서도 사용 가능 ~> 분리 시켜보자 클래스 분리 JdbcContext가 DataSource에 의존 ~> DataSource 타입 빈을 DI 받게 변경 생성자를 통해 DataSource 주입 빈 의존관계 변경 클래스 분리로 인해 UserDao는 JdbcContext에 의존하고 있지만, JdbcContext는 구체 클래스 스프링 DI는 인터페이스를 사이에 두고 의존 클래스를 바꿔 사용하는게 목적 하지..
-
3장) 3.1 다시 보는 초난감 DAO ~ 3.3 JDBC 전략 패턴의 최적화Java & Spring/토비의 스프링 3.1 2021. 6. 11. 16:43
3장 템플릿 개방 폐쇄 원칙 확장에는 자유롭게 열려 있고 변경에는 굳게 닫혀 있다. 3.1 다시 보는 초난감 DAO 2장에서 Test와 관련해서 DB 연결과 관련된 여러 개선 작업을 진행했지만, 예외상황 처리 부분이 미흡하다. 이를 개선해보자. 예외처리 기능을 갖춘 DAO JDBC는 예외가 발생한 경우에도 리소스를 반드시 반환해야함 Connection Pool에서 리소스를 받아와 사용하기 때문에, 반환을 제대로 해주지 않은 리소스가 많아져서 connection pool에서 리소스가 부족하다는 치명적인 Exception이 발생할 수 있음 public void deleteAll() throws SQLException { try (Connection c = dataSource.getConnection(); P..
-
리눅스 파일 편집 관련 명령어(grep, sed)Linux 2021. 6. 4. 14:01
문자열 찾기 grep 텍스트 검색 기능을 가진 명령어 grep [Options..] PATTERN [File...] 옵션 명령어 설명 -E PATTERN을 확장 정규 표현식(Extended RegEx)으로 해석. -F PATTERN을 정규 표현식(RegEx)이 아닌 일반 문자열로 해석. -G PATTERN을 기본 정규 표현식(Basic RegEx)으로 해석. -P PATTERN을 Perl 정규 표현식(Perl RegEx)으로 해석. -e 매칭을 위한 PATTERN 전달. -f 파일에 기록된 내용을 PATTERN으로 사용. -i 대/소문자 무시. -v 매칭되는 PATTERN이 존재하지 않는 라인 선택. -w 단어(word) 단위로 매칭. -x 라인(line) 단위로 매칭. -z 라인을 newline(\n)..
-
2.4 스프링 테스트 적용 ~ 2.6 정리Java & Spring/토비의 스프링 3.1 2021. 6. 3. 14:32
2장 테스트 2.4 스프링 테스트 적용 앞서 작성한 테스트 코드에서 @Before(Junit5는 BeforeEach)로 인해 Application Context가 테스트 메소드 개수만큼 생성되는 문제점이 존재 Application Context 생성에는 많은 시간과 자원이 소모 테스트 전체가 공유하는 오브젝트로 수정 빈은 싱글톤으로 만들었기 때문에 무상태성 UserDao 빈을 가져다 메소드를 사용한다고 해서 상태가 바뀌지 않음 @Before(Junit5 -> @BeforeEach)를 @BeforeClass(Junit5 -> @BeforeAll)로 수정 테스트 클래스 전체에 걸쳐 딱 한번만 실행 테스트를 위한 Application Context 관리 Junit을 이용하는 테스트 컨텍스트 프레임워크를 제공 ..