Java 15

Spring Boot AutoConfiguration: 작동 원리와 성능 최적화 방법

AutoConfiguration을 사용하는 Class는 다음과 같은 것들이 있습니다.DataSource, TransactionManager, jdbcTemplate 등우리가 흔이 사용하는 것들이죠? 이 글에서는 AutoConfiguration의 작동 원리에 대해 배우고, 이를 사용해 개발 과정을 어떻게 최적화할 수 있는지에 대해 다루겠습니다. 글 순서AutoConfiguration 등록 순서AutoConfiguration 작동 원리AutoConfiguration 활용하기(라이브러리 제작)AutoConfiguration 성능 최적화AutoConfiguration 사용 시 주의사항1. AutoConfiguration 등록 순서우선, Spring Boot는 애플리케이션 시작 시 @ComponentScan이 실..

Spring 2023.07.30

Offline 개발을 위한 .jar 파일 변환 및 활용 방법

offline 개발을 할 때 사용하기 좋은 기능입니다.현재 사용중인 라이브러리들을 모두 .jar 파일로 변환하는 기능이에요. build.gradle 파일에서 아래 코드를 넣어놓고 실행해주시면 task copyDependencies(type: Copy) { from configurations.runtimeClasspath into 'offline-libs'} {project root}/offline-libs안에 사용중인 library들이 다운로드 됩니다. 사용하시려면 원하는 저장소에 넣어놓고 사용하시거나, {project root}/libs/ 라는 디렉토리를 생성해서 그 안에 .jar파일을 넣고build.gradle에 libs dir에 있는 .jar파일을 implementation한다고 적어주시..

Maven & Gradle 2023.07.26

Lock과 Double Check Lock: 동시성 문제 해결을 위한 효율적 패턴

Lock을 사용하는 이유는 여러 Thread가 하나의 메서드에 동시 접근했을 때 발생할 수 있는 동시성 문제를 해결하기 위해 사용합니다. 예를 들어 private int count = 0; public void addCount() { count = count + 1; }이러한 로직이 있으며 아래 순서대로 쓰레드 2개가 해당 메서드를 호출합니다.[Thread-1] A 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-2] B 쓰레드가 addCount()에 접근하여 count:0 에 1을 더합니다.[Thread-1] A 쓰레드가 0+1 의 결과값인 1을 count에 입력합니다.[Thread-2] B 쓰레드가 0+1 의 결과값인 1을 count에..

Java & Kotlin 2023.07.11

Java Functional Interface로 API 테스트 모듈 간결하게 만들기: 적용 사례와 코드 개선

회사 API 테스트 모듈을 개발하다가 Functional Interface의 좋은 예가 있어서, 이를 통해 개발된 모듈이 어떻게 더욱 간결하고 효과적이게 작성될 수 있었는지를 공유하고자 합니다. 먼저, Functional Interface는 Java8에 도입된 인터페이스로 단 하나의 메서드만을 가지는 인터페이스를 의미합니다.쉽게말해 인터페이스에 메서드가 하나만 있으면 Functional Interface 이죠. test() 메서드를 만들어서 점진적으로 기능을 추가해보겠습니다. 우선 응답 결과가 성공인지 실패인지 확인하는 모듈을 보시죠.protected static boolean test(Call call) { try (Response response = call.execute()) { ..

Java & Kotlin 2023.07.11

Stack Overflow Error 발생 원인과 해결 방법: 재귀 호출 피하기

Stack overflow error는 함수를 재귀 호출하거나 순환 참조하거나, 너무 많은 메소드가 실행되어 제한된 스택 메모리 용량을 초과할 경우 발생합니다. 아래는 에러 발생 예시입니다.public class StackOverflowDemo { public static void recursiveMethod() { recursiveMethod(); } public static void main(String[] args) { recursiveMethod(); }}하나의 메서드를 호출하면 하나의 스택이 쌓입니다.이게 반복되어 쌓이면 StackOverflowError가 발생합니다. 에러를 해결하기 위해 '재귀', '순환 참조'로직은 가급적 피하고, 불가피하게 사..

Java & Kotlin 2023.05.15