반응형

전체 글 169

[Kotlin] Spring-Batch QuerydslPagingItemReader 개선편

들어가기 전에 Spring-Batch 에서 Chunk 개념을 이용하려면 ItemReader를 사용합니다. ItemWriter에서 ItemReader에서 사용한 쿼리에 영향을 미치는 상태값을 변경할 경우가 있습니다. 이와 같은 경우 필요한 기능을 정리한 글입니다. ItemReader를 사용한 Query ItemReader는 Query에 offset과 limit을 사용합니다. // 1 select id, address, name from person where state = 'STUDY' limit 5 // 2 select id, address, name from person where state = 'STUDY' offset 5 limit 5 // 3 select id, address, name from ..

[kotlin] Spring-Batch Alert 처리 ( Logback을 이용한 Slack 연동 )

이번 글에서는 Spring-Batch에서 오류가 났을 경우 에러를 Alert처리하는 글을 정리하겠습니다. 모든 소스는 Github에 올려두었습니다. Alert처리하는 방법은 여러가지 종류가 있습니다. Prometheus, Alert-Manager를 이용한 방법 Slack을 이용한 Webhook 방법 그 외 등등.. 이번 글에서는 Slack을 이용한 Webhook 방법에 대해서 정리하겠습니다. Prometheus, Alert-Manager를 이용한 방법은 추 후에 작성예정입니다. Prometheus, Alert-Manager 구현 방법에 대해서는 여기 를 참조해주시기 바랍니다. 적용 방법 Logback을 적용하여 Error 로그가 작성된 경우 Slack으로 Webhook을 날리는 방식입니다. Slack C..

[Kotlin] Spring-Batch (JPA 적용) Junit5를 이용한 Test Code 작성

이번 글에서는 JPA를 적용한 Spring Batch Job을 테스트하는 글을 작성하겠습니다. 모든 소스는 Github에 올려두었습니다. 들어가기 전에 테스트 환경에서의 데이터베이스는 H2, Test Docker Container, Local 환경에 Database 띄우기 등 다양한 방법으로 테스트할 수 있습니다. 하지만 이번 글에서는 실제 DB에 붙었을 경우 테스트 데이터를 생성 삭제하기 위해서는 어떻게 하는지에 대해 작성했습니다. Job 먼저 JOB을 살펴보겠습니다. @Configuration class SimpleJobConfiguration( val jobBuilderFactory: JobBuilderFactory, val stepBuilderFactory: StepBuilderFactory, v..

[JPA] deleteAll() vs deleteAllInBatch()

이번 글은 본인이 프로젝트하던 중 크게 착각하여 데이터를 깔끔하게 지워버린 경험을 토대로 작성합니다. ( 팀원분들 다 죄송합니다.... 그나마 개발 DB여서 천만 다행이었습니다. ) 절대 저와 같은 실수를 하지 않기를 바라면서 작성합니다. 먼저 결론부터 작성하자면 deleteAll(), deleteAllInBatch()는 되도록이면 쓰지말자. 두 메서드 모두 Repository와 매핑되어있는 테이블의 데이터를 깔끔하게 지우는 명령입니다. 두 메서드가 어떻게 다른지 구현 코드를 살펴보겠습니다. deleteAll() @Repository @Transactional(readOnly = true) public class SimpleJpaRepository implements JpaRepositoryImpleme..

Daily Develop 2021.07.28

스트레스 해소 방법

스트레스!!! 사회에 뛰어든지 8년차가 되어갑니다. 다양한 경험을 해보았고 좋은 시간도 많았습니다. 하지만 스트레스 받는 시간도 많았습니다. 스트레스는 다양하게 찾아옵니다. 사회 초년생때에는 스트레스를 풀지 못해 탈모, 체중 증가로 몸 상태가 급격히 나빠졌었습니다. 몸이 아파 병원을 찾아가면 병원에서는 스트레스를 줄이라고 합니다. 스트레스는 가장 쉽게 접할 수 있으면서도 떼어내기 힘듭니다. 이러한 스트레스를 풀지 못하면 저처럼 몸 건강이 나빠질 것 입니다. 그래서 이번 글에서는 제가 스트레스를 푸는 방법에 대해서 적어보려 합니다. 해소법 제 기준으론 스트레스는 2가지 종류가 있다고 생각합니다. 스트레스를 해소하는 방법도 종류에 맞게 풀어야한다고 생각합니다. 분노 스트레스 스트레스를 받고 분노하는 경우입니..

MindControl 2021.07.19

[HttpStatus] API 처리 별 HttpStatus 리턴 코드 정리

단일 리소스 Method HttpStatus Code Description GET 200 OK GET 404 NOT FOUND 조회 시 데이터 없을 경우 POST 201 CREATED POST 400 BAD REQUEST 생성 요청 시 데이터가 올바르지 않음 PUT 202 ACCEPTED 데이터 전체 변경 PUT 404 NOT FOUND 고객 정보 업데이트 요청했으나 고객 정보를 찾을 수 없음 PATCH 202 ACCEPTED 데이터 일부 변경 PATCH 404 NOT FOUND 고객 정보 업데이트 요청했으나 고객 정보를 찾을 수 없음 DELETE 200 OK DELETE 404 NOT FOUND 고객 정보 삭제를 요청했으나 고객 정보를 찾을 수 없음 Collection Method HttpStatus ..

Daily Develop 2021.07.13

MongoDB 특징과 쉘 사용에 대해서 알아보자 - 2

이 글은 2개의 글로 이루어져 있습니다. 이전글을 보고 싶으시면 아래의 링크를 참조해주세요. 이전글 : MongoDB 특징과 쉘 사용에 대해서 알아보자 -1 반환받을 키 지정 모든 데이터를 항상 가져오면 네트워크상의 데이터 전송량과 클라이언트 ㅋ측에서 도큐먼트를 디코딩하는 데 드는 시간과 메모리를 줄여준다. db.users.find()를 하면 항상 _id는 반환된다. 만약 키를 쓰지 않는다면 fatal_weakness를 선언한다. > db.users.find() { "_id" : ObjectId("606d61ac67fe246be00de3ba"), "enemies" : 2, "relationships" : { "friends" : 32, "enemies" : 2 }, "username" : "joe" } ..

카테고리 없음 2021.07.12

Kotlin: Cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option

문제 기존에 진행하던 프로젝트에 메모리 문제가 있어 지우고 새로 받아 테스트 코드를 돌렸는데 에러 발생 Kotlin: Cannot inline bytecode built with JVM target 11 into bytecode that is being built with JVM target 1.8. Please specify proper '-jvm-target' option 원인 JVM 11로 컴파일했는데 1.8로 컴파일을 하면 안된다!! 원인은 intellij 설정에서 JVM 11 로 설정이 되있지 않아서 해당 문제가 발생하였습니다. 해결 Project Structure 진입 방법: file > project Structure 1. project 에서 sdk 설정을 버전에 맞게 설정합니다. 2. Mo..

TroubleShooting 2021.07.05

[코틀린] 한글 깨질 때 인코딩처리

외부 API를 사용할 때 흔히 겪는 문제 중 하나로 한글깨지는 문제가 있습니다. 현재는 대부분 utf-8로 사용하지만 생성된지 오래된 경우에는 다양한 인코딩이 적용되어 한글이 깨져서 골머리 썩은 경험이 많을 것입니다. getMsg() 메소드를 이용하여 한글이 안깨지는 인코딩 방식을 사용합니다. private fun getMsg(msg: String) { println("utf-8 -> euc-kr : " + String(msg.toByteArray(Charset.forName("utf-8")), Charset.forName("euc-kr"))) println("utf-8 -> ksc5601 : " + String(msg.toByteArray(Charset.forName("utf-8")), Charset...

Daily Develop 2021.07.02

[코틀린 프로그래밍] Chapter.16 비동기 프로그래밍

코루틴은 논블로킹 호출을 구현하기 위한 훌륭한 방법입니다. 코루틴을 이용하면 작업을 동시 실행으로 할 수 있고 다른 코루틴 컨텍스트를 사용해서 병렬로 실행할 수 있습니다. 이번 글에서는 코루틴의 개념을 바탕으로 비동기 프로그래밍을 만들어보겠습니다. 비동기 프로그래밍 코루틴은 비차단방식을 사용합니다. 사용 용도로는 리모트 서비스 호출, DB 업데이터, 검색 등 즉시 수행되지 않는 행위들의 효율성을 높이기 위해 사용됩니다. 순차적으로 시작하기 날씨 정보를 가지고 오는 예제로 살펴보겠습니다. 먼저 외부 통신으로 가져온 데이터를 JSON으로 파싱하기 위해서 Klaxon 라이브러리를 추가합니다. implementation("com.beust:klaxon:5.5") 데이터를 가지고 있을 Airport 클래스와 온도..

Study/kotlin 2021.07.01

[코틀린 프로그래밍] Chapter.15 코루틴 탐험하기

이번 글에서는 코루틴의 기본에 대해 작성하고 코루틴을 순차적으로 또는 동시성으로 실행하는 방법을 알아보고 스레드와 코르틴의 관계를 이해하고 스레드 실행의 제어와 코루틴을 디버깅하는 법을 작성하겠습니다. 코루틴과 동시 실행 코루틴은 모든 경우에 사용되는 것은 아닙니다. 로직에 있어 순차적 로직이 필수적일 경우에는 코루틴은 비효율적입니다. 코루틴의 동시 실행은 병령 실행과 다릅니다. 병렬 실행과 동시실행의 차이점을 명확히 이해하여야합니다. 왜냐하면 머맅 코어 프로세서의 멀티 스레드는 일반적으로 병렬로 실행되고 코루틴은 일반적으로 병렬실행보다는 동시실행에 더 많이 사용됩니다. 병렬 vs 동시성 하나의 예를 들어보겠습니다. 사람1이 사람2에게 말을 하고 있습니다. 사람1은 말을 하고 사람2는 말을 듣습니다. 이..

Study/kotlin 2021.06.22

[Post] application/x-www-form-urlencoded 데이터 받는 방법, inputStream 주의

프로젝트를 진행하던 중 개인인증 관련하여 외부연동하던 중 발생했던 이슈를 정리해보겠습니다. Callback 을 전송하는 타입은 아래와 같습니다. Method : Post Content-Type: application/x-www-form-urlencoded 대부분은 Post 일 경우는 RequestBody로 데이터를 전달받습니다. (application/json) 하지만 위와 같이 content-type이 application/x-www-form-urlencoded 일 경우 Body로 데이터가 전달되지 않습니다. 그리하여 @RequestBody가 아닌 @RequestParam 이나 @ModelAttribute로 받아야합니다. @RequestParam으로 받을 경우 Controller에 파라미터별로 설정을 ..

Daily Develop 2021.06.18

[코틀린 프로그래밍] Chapter.14 재귀 프로그래밍과 메모이제이션 프로그래밍

이번 챕터에서는 재귀 프로그래밍에 대해서 작성해보겠습니다. 재귀는 쿨한 프로그래밍 기법이지만 잘못 사용한다면 런타임 스택 오버플로에 빠져서 효율성이 떨어지는 문제가 있습니다. 꼬리호출 최적화라고 불리는 테크닉을 이용하면 이 문제를 해결할 수 있습니다. 데이터를 저장하는 알고리즘을 사용하면 성능은 향상됩니다. 코틀린은 빌트인 메모이제이션을 지원해주지는 않지만 지금까지 배운 기술들을 사용하면 표현력이 강한 메모이제이션 기능을 쉽게 만들 수 있습니다. 재귀의 강점과 위험성 재귀를 사용하면 분할정복기법을 사용할 수 있습니다. 예제로 살펴보자. // 분할정복기법 문제를 해결할 때 문제를 작게 쪼개서 각 부분의 솔루션을 구현한 후 각 결과를 합쳐서 해결하는 기법 fun sort(numbers: List): List..

Study/kotlin 2021.06.16

MongoDB 특징과 쉘 사용에 대해서 알아보자 - 1

이 글은 몽고의 특징과 쉘 사용법에 대해서 작성할 글입니다. 2개의 글로 작성되있습니다. 다음글 : MongoDB 특징과 쉘 사용에 대해서 알아보자 - 2 글의 내용이 많으므로 찾으시는 목차를 검색하여 글에서 검색하면 빠르게 찾으실 수 있습니다. 목차 find find(), findOne() findOneAndUpdate() update updateOne(), updateMany() $set 제한자 갱신 연산자($inc) 배열 연산자($push) $push에 $each 제한자 $push에 $slice $sort 제한자를 $push 작업에 적용 배열을 집합으로 사용하기($ne) 요소 제거 배열의 위치 기반 변경 배열 필터를 이용한 갱신 갱신 입력 $setOnInsert 다중 도큐먼트 갱신 갱신한 도큐먼트 ..

Study 2021.06.08
728x90
반응형