JVM 80

JDBC 쿼리 및 메서드 실행 로깅

1. JDBC 쿼리 로그 활성화애플리케이션이 실행하는 SQL 쿼리와 그 실행 시간을 로그로 기록하려면, JVM 옵션에서 로그 레벨을 설정해야 한다. 아래는 이를 설정하는 방법이다:-Dlogging.level.jdbc.sqlonly=off # SQL 쿼리만 로깅하지 않음 -Dlogging.level.jdbc.sqltiming=info # SQL 쿼리 실행 시간을 info 레벨로 로깅 -Dlogging.level.jdbc.resultsettable=info # 쿼리 결과를 info 레벨로 로깅 -Dlogging.level.jdbc.audit=off # JDBC audit 로그 비활성화 -Dlogging.level.jdbc.resultset=info # JDBC 결과 셋을 로깅 -Dlogging.level.j..

JVM 2024.08.17

Jackson의 ObjectMapper: 객체 생성 방식과 필드 바인딩

Jackson과 ObjectMapperJackson은 Java에서 가장 널리 사용되는 JSON 처리 라이브러리 중 하나이다.ObjectMapper는 Jackson 라이브러리의 핵심 클래스 중 하나로, JSON 데이터를 Java 객체로 변환하거나 Java 객체를 JSON으로 직렬화할 때 사용된다. ObjectMapper의 객체 생성 방식1. 기본 생성자의 필요성ObjectMapper는 JSON 데이터를 Java 객체로 변환할 때 기본 생성자를 사용하여 객체를 생성한다.기본 생성자가 없으면 ObjectMapper는 객체를 생성할 수 없으므로, 기본 생성자를 추가해야 한다.2. 매개변수가 있는 생성자 사용매개변수가 있는 생성자를 사용해 객체를 생성하고자 할 때는 @JsonCreator를 사용해 ObjectMa..

JVM 2024.08.10

스프링 이벤트 시스템

스프링 이벤트 시스템은 애플리케이션 내부에서 이벤트를 발행하고, 이를 처리하는 리스너에게 비동기 또는 동기적으로 전달함으로써 결합도를 낮추고 유연한 아키텍처를 제공하는 메커니즘이다. 특정 이벤트가 발생했을 때 이를 감지하고, 적절한 리스너에게 알림을 보내는 방식으로 동작한다. 이벤트를 발행하는 컴포넌트와 이를 처리하는 리스너는 서로 독립적으로 동작한다.  스프링 이벤트의 장점 및 주의점느슨한 결합: 이벤트 발행자와 리스너 간의 의존성이 없기 때문에 모듈 간 결합도를 낮출 수 있다.확장성: 새로운 이벤트 리스너를 추가하는 것이 매우 쉽다.유연성: 필요에 따라 동기 또는 비동기 방식으로 이벤트를 처리할 수 있다.비동기 처리 시 주의: 비동기 처리를 사용할 때는 스레드 풀 설정이나 예외 처리 등에 신경 써야 ..

JVM/SpringMVC 2024.08.10

MockServer

MockServer는 Java 애플리케이션에서 HTTP 서버를 모킹(Mocking)할 수 있는 도구이다. 이를 통해 테스트 시 외부 API 호출을 모킹 하여 일관된 응답을 제공하고, 테스트의 안정성과 재현성을 높일 수 있다MockServer 설정dependencies { implementation("org.springframework.boot:spring-boot-starter-web") testImplementation("org.springframework.boot:spring-boot-starter-test") testImplementation("org.mock-server:mockserver-netty:5.13.2") testImplementation("org.mock-serv..

JVM 2024.07.29

BDDMockito

BDDMockito는 Behavior-Driven Development (BDD) 스타일의 단위 테스트를 작성하기 위해 Mockito 프레임워크를 확장한 것이다. BDDMockito는 주로 Java 애플리케이션에서 사용되며, 테스트 코드가 더 읽기 쉽고 명확하게 작성되도록 도와준다.BDDMockito의 장점가독성 향상: BDD 스타일의 테스트는 테스트 코드의 가독성을 높여, 테스트 목적을 더 명확하게 표현할 수 있다.행동 중심: Given-When-Then 패턴을 통해, 테스트 케이스를 시스템의 동작과 일치시킬 수 있다.명확한 의도 표현: BDD 스타일의 테스트는 코드의 의도를 더 명확하게 표현하여, 테스트 케이스를 이해하고 유지보수하기 쉽게 만든다.BDDMockito의 주요 메서드given: 테스트 준..

JVM 2024.07.28

JUnit

JUnit은 JVM 생태계에서 가장 널리 사용되는 테스트 프레임워크로, 주로 단위 테스트를 위한 도구를 제공하지만, 통합 테스트에도 활용할 수 있다.JUnit의 주요 특징은 어노테이션 기반 테스트 지원, 단정문(Assert)을 통한 테스트 결과 검증이 있다.통합 테스트여러 컴포넌트를 조합하여 전체 비즈니스 로직을 검증한다. @SpringBootTest를 주로 사용하지만, 대규모 프로젝트에서는 실행 시간이 길어질 수 있다.단위 테스트단위 테스트는 코드의 특정 모듈이 의도한 대로 동작하는지 각 함수와 메소드에 대한 개별 테스트 케이스를 작성하여 검증합니다.FIRST 원칙효과적인 단위 테스트를 위한 5가지 원칙을 FIRST 원칙이라고 한다.Fast: 테스트는 빠르게 실행되어야 한다.Independent: 각 ..

JVM 2024.07.28

테스트 커버리지와 JaCoCo

테스트 커버리지란 소프트웨어의 테스트 수준이 충분한지 표현할 수 있는 지표 중 하나이다.많은 코드 커버리지 도구가 있으며, 가장 보편적으로 사용되는 Jacoco에 대해 다루도록 한다. JaCoCo 개요JaCoCo(Java Code Coverage)는 Java 애플리케이션의 코드 커버리지를 측정하기 위한 도구이다. 코드 커버리지는 테스트된 코드의 비율을 나타내며, 소프트웨어 테스트의 효율성을 평가하는 중요한 지표이다.JaCoCo의 주요 기능커버리지 측정: 테스트 코드 실행 시 실행된 코드 라인, 분기, 메소드 등을 측정한다.리포트 생성: HTML, XML, CSV 형식으로 커버리지 리포트를 생성하여 시각화된 데이터를 제공한다.검증 규칙 설정: 특정 커버리지 목표를 설정하고 이를 충족하는지 확인할 수 있다...

JVM 2024.07.27

StringBuffer vs StringBuilder

StringBuffer와 StringBuilder는 둘 다 문자열을 다루기 위해 자바에서 제공하는 클래스이다. 하지만 몇 가지 중요한 차이점이 있다.공통점:가변성 (Mutability): 둘 다 문자열을 변경할 수 있다. String은 불변(immutable)이지만, StringBuffer와 StringBuilder는 변경 가능한 문자열을 다룬다.메서드: 대부분의 메서드가 동일하다. 예를 들어, append(), insert(), delete(), reverse() 등.차이점:동기화 (Synchronization):StringBuffer는 모든 메서드가 동기화(synchronized)되어 있다. 즉, 멀티쓰레드 환경에서 안전하다(thread-safe).StringBuilder는 동기화가 되어 있지 않다...

JVM 2024.07.22

java.security.invalidKeyException: Illegal Key Size

암호화와 Illega key size 에러AES-256 암호화 등과 같이 128bit를 초과하는 암호화를 사용하려 할 때, 이러한 문제를 마주칠 수 있다. 이 문제는 미국의 수출 규제에 따른 것으로 과거에는 미국의 수출 규제로 인해 강력한 암호화 키를 포함하는 암호화 소프트웨어를 수출하는 것에 제한이 있었다. Java는 기본적으로 JCE 정책을 제공하는데 이 정책은 128 bit로 키 길이가 제한되어 있어서 이를 초과하는 경우에 에러가 발생하는 것이다. 이 정책은 ${JAVA_HOME}/jre/lib/security/local_policy.jar의 default_local.policy 파일에서 확인할 수 있다.// Some countries have import limits on crypto streng..

JVM 2024.05.04

빈 스코프: 빈의 생명 주기와 활용

스프링 빈 스코프란 무엇일까?스프링 빈 스코프는 스프링 컨테이너에서 관리되는 빈의 생명 주기와 활용 범위를 정의하는 개념이다. 빈 스코프는 빈이 생성되는 시점, 빈이 사용되는 범위, 빈이 소멸되는 시점 등을 결정한다. 스프링 빈 스코프 종류싱글톤기본 스코프, 스프링 컨테이너의 시작과 종료까지 유지되는 가장 넓은 범위의 스코프이다.싱글톤 스코프의 빈을 조회하면 스프링 컨테이너는 항상 같은 인스턴스의 스프링 빈을 반환한다.프로토타입스프링 컨테이너는 프로토타입 빈의 생성과 의존관계 주입까지만 관여하고 더는 관리하지 않는 매우 짧은 범위의 스코프이다.프로토타입 스코프를 스프링 컨테이너에 조회하면 스프링 컨테이너는 항상 새로운 인스턴스를 생성해서 반환한다.프로토타입 빈을 관리할 책임은 프로토타입 빈을 받은 클라이..

JVM/SpringMVC 2024.03.09