일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 마이바티스 트랜잭션
- spring reactive programming
- JSONArray 분할
- 무시하기
- 스테이지에 올리기
- JobExecutionAlreadyRunningException
- jar 소스보기
- 폐기하기
- 마리아디비
- JSON 분해
- ChainedTransactionManager #분산데이터베이스 #Spring Boot #MyBatis
- org.json
- date_format
- 스프링 배치 메타 테이블
- multi update
- 문자형을 날짜형으로
- git stage
- JSONObject 분할
- 스프링 웹플럭스
- str_to_date
- 스프링 배치 공식문서
- JSON 분리
- Meta Table
- nonblocking
- 성능개선
- 날짜형을 문자형으로
- spring webflux
- JSON 분할
- 스프링 리액티브 프로그래밍
- batchInsert
- Today
- Total
목록HANDS-ON (6)
ebson
JPA 개발자들이 스프링 프레임웍을 함께 사용하는 이유 중 하나가 스프링에서는 트랜잭션 관리를 해주기 때문이라고 한다. 내가 실무에서 만난 프로젝트도 스프링 프레임웍 기반의 프로젝트였고 트랜잭션 설정 파일이 있었다. 서비스 메서드를 호출한 후 트랜잭션을 처리하도록 하되 insert, update, delete 으로 시작하는 서비스 메서드에서 예외가 발생하는 경우에 트랜잭션을 롤백하도록 설정할 수 있었다. 트랜잭션 과다 생성으로 인한 성능저하 그런데 서비스 메서드를 호출할 때 적용되는 트랜잭션 설정과 어울리지 않는 일부 소스에서 성능저하를 일으키는 경우가 있었다. 서비스단에서 모아서 처리해야 할 트랜잭션 작업을 컨트롤러에서 for문을 돌면서 개별적으로 요청하고 같은 쿼리를 여러번 호출했기 때문이다. .....
외부 API ENDPOINT 으로 JSON, FORM DATA 등의 데이터셋을 POST 요청하여 성공/실패 응답을 받고 처리하는 것 만큼이나 GET 요청을 통해 데이터셋을 받아 정제하고 사용하는 것도 실무에서 만날 수 있는 흔한 요구사항이다. 그리고 GET 요청을 통해 받는 데이터셋이 JSON 포맷인 경우도 많다. 그래서 외부 API ENDPOINT으로 HTTP GET 요청을 효율적으로 실행하며 결과 JSON 데이터셋을 용도에 맞게 수집, 정제, 활용하는 작업이 필요할 수 있다. 내가 실무에서 만난 작업은 데이터베이스의 특정 테이블의 정보를 바탕으로 brightcove 에서 제공하는 비디오정보 데이터셋을 특정 기간내 조회하여 데이터베이스의 특정 테이블에 해당 비디오정보의 상태정보를 업데이트 하는 배치 잡..
실무에서 JSON 데이터를 외부 API ENDPOINT로 POST 전송하는 것은 흔한 요구사항이다. XML 포맷에 비해 JSON 포맷을 사용할 때의 이점은 최소한의 용량으로 가독성이 더 좋은 데이터를 주고 받을 수 있다는 것이다. 내 경우는 기존 XML파일로 생성하던 데이터들을 JSON 방식으로 변환해 전송하는 요구사항과 데이터베이스 등에 적재된 데이터들을 검색 페이지에 사용하기 위한 용도로 JSON 방식으로 전송하는 요구사항이 있었다. 두 요구사항 모두 외부 API ENDPOINT 으로 JSON을 POST 요청하는 요구사항이다. 첫번째 요구사항에 대해 유틸 클래스를 개발해본 경험에 대한 내용은 다른 글에서 정리하도록 하겠다. 이 글에서는 최소한의 용량으로 압축한 JSON 포맷의 데이터마저 API END..
대형 서비스에서 데이터베이스를 여러대로 분산해 효용성을 높이고 규모를 조절하는 것은 일반적인 방법이다. 그리고 데이터베이스당 트랜잭션 처리가 이루어지는 특성상 한 기능단위에서 2개 이상 데이터 소스에 접근하고자 할 때 스프링에서 별도의 작업을 취하지 않으면, 한개의 데이터 소스로만 commit 되고 다른 데이터 소스에 대한 commit이 누락될 수 있다. 즉 A 데이터 소스와 B 데이터 소스에 대한 스프링의 트랜잭션 매니저들 중 하나만 동작한다는 것이다. 이때는 스프링에서 제공하는 ChainedTransactionManager를 적용해 A, B 데이터 소스에 대한 트랜잭션이 모두 동작하도록 할 수 있다. 위 클래스의 동작 방식은 공식 문서에 따르면, 생성자의 인자로 전달받은 트랜잭션 매니저를 순서대로 처..
스프링 부트 배치 개발 중에 org.springframework.dao.TransientDataAccessResourceException: Cannot change the ExecutorType when there is an existing transaction 예외가 발생했다. MyBatisItemReader로 읽은 데이터를 ItemProcessor가 처리하면서 마이바티스 매퍼를 사용하고자 할 때 발생하는 것으로 추적되었다. 원인을 분석해보니, MyBatisItemReader는 트랜잭션을 생성할 때, ExecuteType.BATCH로 생성하는 반면, Mybatis의 트랜잭션 생성 기본 전략은 ExecuteType.SIMPLE 인 것이 문제였다. 동일한 트랜잭션에서 ExecuteType을 변경하여 쿼리를..
HTTP POST 요청이나 FTP 를 사용해 외부로 데이터를 전송, 전달하는 것은 실무에서 만날 수 있는 흔한 요구사항이다. 이때 사용되는 데이터 포맷은 JSON과 XML 포맷이 있다. HTTP POST 요청으로 데이터를 전달하는 WEB API의 경우에는 XML보다 JSON 형식이 선호된다. FTP로 파일을 업로드할 때는 XML 파일을 사용할 수 있을 것이다. 내가 만난 실무 요구사항의 경우에도 기존에 XML 파일로 특정 위치에 업로드해두던 데이터들을 JSON 형식으로 변환해 제공된 WEB API ENDPOINT으로 HTTP POST 전송하도록 전환하는 것이었다. 기존 소스에서 스프링에서 제공하는 문서 생성 라이브러리를 사용하거나 스트림을 사용해 파일을 생성했기 때문에 어느 위치에서 XML파일이 생성 완..