본문으로 건너뛰기

Java Eco›Java programming

25
Java EcoJava programming

Lambda 에서만 죽는 JVM 크래시와 씨름한판

같은 JDK 버전, 같은 jar 인데 AWS Lambda 에서만 JVM 이 죽었다. 원인은 Lambda 의 Java 21 런타임이 JIT 를 C1 하나로 묶어 둘 때만 켜지는 최적화에 숨어 있던 OpenJDK 결함, JDK-8386708 이었다. AI 코딩 에이전트와 함께 이 크래시를 쫓은 기록이고, 답을 손에 쥐고도 엉뚱한 가설로 실험을 6만 번 돌린 헛걸음까지 담았다.
EngineeringJava programming

null을 던지는 구조와 Resilience4j 컨트리뷰션 후기

Resilience4j Retry에서 throw null이 만들어지는 구조: 결과 기반 재시도와 인터럽트가 만났을 때 Resilience4j의 Retry는 재시도를 트리거하는 방식이 두 가지다. 첫 번째는 예외 기반 재시도. DB 커넥션이 끊기거나 타임아웃이 발생하면 예외가 던져지고, 라이브러리는 이걸 감지해서 재시도한다. 직관적이고, 대부분의 재시도가 이 경로를 탄다. 두 번째는 결과 기반 재시도 retryOnResult. 예외는 안 났는데 응답 자체가 기대와 다른 경우, 예를 들어 파일 목록을 조회했는데 빈 리스트가 돌아온 경우
Java EcoJava programming

Java 메소드 오버라이딩과 가변인자

Java EcoJava programming

Reflection; Public constructor

Java 클래스의 생성자는 제네릭 클래스인 Constructor 의 인스턴스로 나타낸다 이 객체는 클래스 생성자의 모든 정보를 포함하고 있다. 파라미터의 수 파라미터의 타입 클래스에는 여러개의 생성자가 있을 수 있다. Class.getDeclaredConstructos() : 클래스의 모든 생성자를 반환한다. public이거나 아니거나 상관없이 모두 반환한다. Class.getConstructors() : Public 생성자만 반환한다. 특정 생성자 매개변수 유형을 알고 있는 경우 파라미터의 타입을 나타내는 타입 목록을 전달할 수
Java EcoJava programming

Reflection; Class Object

JVM 기능 런타임 동안 클래스와 객체 정보를 추출할 수 있음 Reflection API로 접근 가능 JDK에 포함된 클래스 집합 소스 코드를 수정하지 않고 새로운 프로그램 순서를 만들 수 있음. 실행하고 있는 클래스와 객체에 동적으로 코드 삽입. 실제로 사용하는 곳 로깅 프레임워크 ORM Spring Framework JUnit Jackson @Autowired @Configuration @Bean bean을 정의하고 의존성을 주입하는 과정이 reflection을 통해 이뤄짐. Reflection을 사용해 클래스를 확인하고 필드를
Java EcoJava programming

Spring의 테스트 주도 개발 스타일

TDD란 무엇인가? 를 떠나서 스프링 프로젝트에서 TDD를 어떻게 진행하는지에 대한 정리. TDD는 기본적으로 테스트 코드를 빌드업 해가면서 개발함. 즉, 이미 한참 완성된 코드를 테스트 하는건 TDD의 방향이 아님. 이런 경우는 있을까? 서비스 로직을 먼저 POJO로 만든다. 테스트 할 로직을 우선으로 만들면서 서비스 클래스, 엔티티, 영속성 클래스를 만든다. 서비스 로직에서 필요한 메서드, 클래스 등은 이너클래스로 먼저 개발 한 뒤 테스트가 완료되면 IDE를 통해 리팩토링 기능으로 꺼낸다. (IntelliJ → Move Inne
Java EcoTILJava programming

Java; Generic Methods

용법 : <T, R> R method(T t) 제네릭 메소드는 매개 타입과 리턴 타입으로 타립 파라미터를 갖는 메소드를 말한다. 제네릭 메소드를 선언하는 방법은 리턴 타입 앞에 <> 기호를 푸가하고 타립 파라미터를 기술한 다음, 리턴 타입과 매개 타입으로 타입 파라미터를 사용하면 된다. 제네릭 메소드는 두 가지 방식으로 호출 할 수 있다.
Java EcoTILJava programming

Java; Optional

Optional 개체 를 만드는 방법에는 여러 가지가 있습니다. 빈 Optional 객체 를 생성하려면 empty() 정적 메서드 를 사용하기만 하면 됩니다 . isPresent() 메서드를 사용 하여 Optional 객체 내부에 값이 있는지 확인했습니다 . 값은 null 이 아닌 값으로 Optional 을 만든 경우에만 존재 합니다. 다음 섹션에서 isPresent() 메서드를 살펴보겠습니다 . 또한 Java 11부터 isEmpty() 메서드로 반대 작업을 수행할 수 있습니다 . 다른 예시를 들어보자 이 코드 대신 아래의 코드로