테스트코드 작성의 어려움 테스트코드를 작성해야하는 이유는 이미 많이 알려져있기 떄문에 우리는 테스트코드를 열심히 작성하고 있습니다. 이번포스팅에서는 테스트코드를 왜 작성해야하는가 보다는 테스트코드를 어떻게 쉽게 작성할수 있을까에 대한 주제로 이야기를 해보겠습니다. 테스트코드를 작성할때 가장 어려운것이 무엇인가에대한 질문에...
DSL 먼저, 개념에 대해서 설명하자면 DSL(Domain-Specific Language)은 도메인 특화 언어로 풀이되며 말 그대로 특정 영역에 대한 연산 및 작업을 간결하게 기술 할 수 있는 언어입니다. 그냥 이해하자니 헷갈릴 수 있는데 우리가 흔히 쓰는 SQL, 정규식이...
G1 java6부터 도입되어 많은 발전을 거쳐온 G1(Garbage First Garbage Collector)는 java9 부터는 default GC로 채택되어 안정적인 성능을 보여주고 있기 때문에 현재 대부분의 실무 자바 어플리케이션에서는 G1을 사용하고, 이미 잘 알고 계실거라 생각합니다. 따라서 기본적인 개념에대해서는...
java lock 이번 포스팅의 주제인 biased-lock에 대해 이야기하기 앞서, java에서 lock이 어떻게 구현되어지고 사용되는지 먼저 알아보도록 하겠습니다. public class Sample{ public syncronized void runSample(){ // do something ... } } 일반적으로 Java객체에서 lock을 사용한다고 하면...
클로져 (Closure) 아마 자바만 다루셨던 분이라면 클로져가 조금은 생소한 개념일 수 있습니다. 주로 자바스크립트와 같이 함수를 일급객체로 다루는 언어에서 중요하게 다루는 개념인데 간단하게 짚고 넘어가보도록 하겠습니다. // ClosureDemo.js function add10(num) { var innerFunc = function...
자바의 Null 처리 아마도 자바를 다뤄보신 분 이라면, 객체의 Null을 다루는데 많은 코드라인을 소비하고 계실것이라 생각이 듭니다. 물론 Java8부터는 Optional을 통해 Null이 될 수 있는 객체를 명시적으로 타입화 시키고 비교적 간편하게 처리를 해 줄 수...
Stream 객체상태 변경하기 이른바 모던자바라 불리는 Java8이상 쓰시는 분들이라면 잘 사용하고 계실텐데요, Stream에서 요소를 다른 객체로 변환하기 위해서 map 중간연산자를 잘 사용하고 계실것이라 생각합니다. List<String> nameList = list.stream() .map(User::getName) .collect(Collectors.toList()); map 중간연산자를 통해 요소를 다른...
자바와 코틀린의 클래스, 인터페이스 비교 코틀린에서는 자바와 같이 클래스, 인터페이스를 사용 할 수 있지만, 그 사용방법에는 차이가 존재합니다. 이번 포스팅을 통해 코틀린에서 클래스와 인터페이스가 어떻게 정의되고 사용되는지 자바와의 비교를 통해 알아보도록 하겠습니다. 클래스 가장먼저 클래스를...
Kotlin function 상속 Kotlin은 함수형 프로그래밍 언어인 만큼, 일급객체로 다루어지는 function 역시 상속하여 사용이 가능합니다. 편리하게 사용 할 수 있지만 잘 알지못하면 (저포함…) 의도치 않은 결과를 얻게 될 수 있는데 아래 예제를 통해 정리해보도록 하겠습니다....
Logger에서 줄번호를 찾는 방법 log4j, logback, log4j2등 logger를 사용하실때 일반적으로 아래와 같은 패턴을 사용하여 로깅 패턴이 설정되어있는 경우가 많이 있을것 입니다. %F : 파일명 %C : 클래스명 %L : 줄번호 %M : 메서드명 Logger에서는 로그를...
Item Reader 지난 포스팅에서 잠깐 나왔듯이 청크지향 프로세싱을 하게 된다면 Iteam Reader, Item Processor, Item Writer 구성이 가능합니다. 이 중 에서도 이번 포스팅에서 다룰 Item Reader는 프로젝트에서 사용하는 다양한 Persistance framework를 지원하기 위해 다양한 구현체들을...
CPU bound, IO bound 개발을 함에 있어서 수행하는 로직이 CPU bound 작업 혹은 I/O bound 작업 이라는 말을 많이 들어보셨을 겁니다. 일반적으로 연산이 많이 필요한 로직은 CPU bound, 로컬 파일 시스템 혹은 네트워크 통신이 많은...
Chunk-oriented processing Spring batch가 제공하는 가장 큰 특징중 하나는 청크지향 프로세싱이라고 할 수 있습니다. 청크지향 프로세싱이란, 일반적으로 대용량 데이터를 처리하는 배치 프로세스의 특성상 대상 데이터들을 하나의 트랜잭션으로 처리하기에는 어려움이 있기때문에 대상 데이터를 임의의 Chunk 단위로...
Spiring boot 2.5.0 update Spring boot 2.5.0 update 사항 정리 (2021. 05. 20) 원문 : https://spring.io/blog/2021/05/20/spring-boot-2-5-is-now-ga SQL Script 초기화 re-design property 패키지가 변경 됩니다. 'spring.datasource.*' -> 'spring.sql.init.*' R2DBC에서도 사용 가능합니다. default option으로, 'data.sql' script가 hibernate...
Spring container 이번 포스팅에서는 Spring container의 주요 기능인 Bean 등록과 DI가 내부적으로 어떻게 수행되는지 알아보려고 합니다. 우선 Spring에서 설명하는 Bean과 DI (Dependency Injection)에 대해 알아보겠습니다. Bean Initializing A Spring IoC container manages one or more...