반응형

에디 135

[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

[코틀린 프로그래밍] 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

[코틀린 프로그래밍] Chapter.13 내부 DSL 만들기

DSL은 도메인 특화언어입니다. ( Domain-Specific languages ) DSL은 에러를 줄이는데 도움을 주는 동시에 프로그래머에게 유연성을 제공합니다. 이번 글에서는 DSL을 설계하는 방법에 대해서 작성해보겠습니다. DSL의 타입과 특징 외부 DSL vs 내부 DSL 외부 DSL은 높은 자유도를 얻을 수 있지만 DSL을 파싱하고 처리할 파서를 만들어야만 합니다. 파서를 만드는 데는 많은 리소스가 필요합니다. 외부 DSL의 예로는 CSS, ANT 빌드파일, Make 빌드파일 등이 있습니다. 하지만 이번 글에서는 내부 DSL에 초점을 맞출 것입니다. 내부 DSL을 위한 코틀린 DSL을 디자인할 때 도움이 되어줄 코틀린의 기능을 살펴보겠습니다. 생략 가능한 세미콜론 코틀린은 세미콜론을 강요하지 ..

Study/kotlin 2021.06.07

[코틀린 프로그래밍] Chapter.12 코틀린에서 구현하는 유창성

먼저 정리하기에 앞서 이 책에서 가장 기억에 남는 문장 "죄송합니다. 편지를 짧게 쓸 여유가 없어서 길게 씁니다" - 블레즈 파스칼 - 개발을 하면 위 문장이 어떤 의미인지 이해할 수 있을 것입니다. 중복 코드 제거, 하나의 클래스 혹은 메서드에 모든 로직을 다 작성, 이중 삼중 if문(for문) 등등 다양한 이유로 코드는 길어집니다. 하지만 고민과 시간을 들이면 코드는 점점 줄어들 것 입니다. 이번 장에서는 어떻게 코틀린 코드를 잘 쓰고, 표현력 있게 쓰고 간결하게 쓰는 지를 작성할 것입니다. 연산자 오버로딩 코틀린은 연산자를 오버로딩하여 사용할 수 있습니다. 즉 기능을 확장시킬 수 있습니다. 예제를 살펴보겠습니다. val one = BigInteger("1") val two = BigInteger("..

Study/kotlin 2021.06.01

[코틀린 프로그래밍] Chapter.11 내부 반복과 지연 연산

외부 반복자가 눈에 띄는 명령형 스타일과는 다르게 함수형 프로그래밍은 내부 반복자를 사용한다. 개발자는 반복에 집중하는 것이 아니라 콜렉션이나 범위에 있는 각 요소에 집중하게 한다. 또한 내부 반복자는 명시적 뮤터빌리티을 피하게 해주기 때문에 경쟁조건의 위험없이 반복을 쉽게 병렬화할 수 있다. 코틀린의 내부 반복자는 편리하고 표현력이 강하고 외부 반복자와 비교했을 때 복잡성을 낮춰준다. 하지만 퍼포먼스가 안 좋을 수 있다. 내부 반복자는 외부 반복자와 비교해 봤을 때 연산을 약간 더 많이 한다. 콜렉션의 요소의 크기가 수백개 정도로 비교적 작은 경우엔 영향이 없지만 수천 개를 다루는 아주 큰 데이터의 콜렉션을 다루는 경우에는 오버헤드가 이슈가 될 수 있습니다. 이럴 때 바로 코틀린의 시퀀스가 필요합니다...

Study/kotlin 2021.05.25

[코틀린 프로그래밍] Chapter.10 람다를 사용한 함수형 프로그래밍

함수형 프로그래밍은 본질적으로 복잡성이 낮습니다. 개발자는 적은 코드로 기능을 구현하고 코드가 더 읽기 쉽고, 이해하기 쉽고, 유지보수하기 쉽게 만들 수 있습니다. Java 같은 언어는 명령형 스타일과 객체지향 스타일의 조합을 제안했습니다. 객체지향 프로그래밍은 추상화와 캡슐화 개념에서 유용했습니다. 함수형 프로그래밍의 목적은 객체지향형 프로그래밍을 대체하는 것이 아니라 복잡성을 낮추는 것입니다. 코틀린은 태생부터 명령형, 함수형, 객체지향형 패러다임을 지원했습니다. 이번 글에서는 함수형 프로그래밍의 장점에 대해서 정리해보겠습니다. 또한 람다 표현식을 만들고 사용하는 법과 람다를 사용하는 경우에 대해서 알아보겠습니다. 함수형 스타일 함수형 스타일은 선언적 스타일에서 태어났습니다. 선언적 스타일의 핵심은 ..

Study/kotlin 2021.05.18

[Kotlin] Application 설정값 가져오는 방법 - ConfigurationProperties로 구성

이번 글에서는 Kotlin에서 아래의 application.yml의 설정값을 읽어오는 방법을 정리해보겠습니다. 이 글에서 사용하는 설정방법은 SpringBoot 2.2.1 이상 버전부터 지원가능한 방법입니다. 모든 소스는 Github에 올려두었습니다. Application.yml sample: kotlin: language: kotlin study-days: 30 java: language: java study-days: 90 test: javaTest build.gradle.kts 아래의 디펜던시가 추가되있어야 ConfigurationProperties를 사용할 수 있습니다. dependencies { annotationProcessor("org.springframework.boot:spring-boo..

Develop/kotlin 2021.05.17
728x90
반응형