전체 글

하다보니 재미있는 AI에 빠져있는 냉면7 문의사항: ysoil8811@gmail.com
자바 리플렉션의 기초 리플렉션의 정의 자바 리플렉션은 컴파일 시점에 알 수 없는 클래스나 메서드, 필드 등에 대한 정보를 얻거나, 그 정보를 사용하여 객체를 생성하거나, 메서드를 호출하거나, 필드에 값을 설정하거나 하는 등의 작업을 할 수 있는 기능이다. 마치 거울을 통해 자신의 모습을 비추어 보는 것처럼, 객체의 내부 구조를 살펴볼 수 있다는 의미에서 "리플렉션(reflection)"이라는 이름이 붙여졌다. 리플렉션을 사용하면 다음과 같은 작업을 수행할 수 있다. 클래스 이름, 상위 클래스, 인터페이스, 생성자, 메소드, 필드 등의 정보를 얻을 수 있다. 객체를 생성하거나, 변수의 값을 변경하거나, 메소드를 호출할 수 있다. 리플렉션의 사용 예: 리플렉션은 다양한 용도로 사용될 수 있다. 다음은 몇 가..
자바와 스프링, 그리고 JPA에서의 프록시 객체 이해하기 1. 프록시의 소개 프록시 객체는 자바 프로그래밍 패러다임 내에서 매우 중요한 개념이다. 여러분이 객체 지향 프로그래밍을 배우면서 '대리인' 또는 '중개자'와 같은 역할을 하는 구조를 만났을 것이다. 프록시 객체는 바로 이 역할을 수행한다. 이 글에서는 프록시 객체가 무엇이고, 자바와 스프링, 그리고 JPA에서 어떻게 사용되는지를 한번 설명하겠다. 2. 자바에서의 프록시 객체 자바에서 프록시 객체는 실제 객체를 대신하여 클라이언트의 요청을 처리한다. 이는 주로 원격 객체나 비용이 많이 드는 객체 생성을 대신하거나, 보안상의 이유로 직접적인 객체 접근을 제한할 때 사용된다. 아래는 예시 코드들이다. Image 인터페이스 public interface..
스프링 부트 프로젝트 실행하자마자 batch job이 실행되는 이슈 매일 새벽 1시에 외부 API와 통신하면서 DB 데이터를 업데이트하는 쿼츠 스케줄러를 만들었다. 그런데 코드가 잘 돌아가는지 테스트하기 위해 로컬 환경에서 프로젝트를 실행하면 프로젝트가 실행되자마자 batch job이 실행되는 이슈가 있었다. 1. 기존 코드 나는 Java의 쿼츠 스케줄러를 사용해 매일 새벽 1시에 외부 API를 호출해 DB 데이터를 갱신하는 배치 작업을 만들었다. 그런데 코드를 테스트하기 위해 프로젝트를 새로 실행할 때마다 배치 작업이 시작돼 모든 step을 진행하는 이슈가 생겼다. 개발 단계에서는 프로젝트가 시작될 때마다 배치 작업이 실행돼도 큰 문제는 없지만, 실제 운영 환경에서는 이런 방식이 문제를 일으킬 수 있다..
Spring Batch 코드 작성 후 실행 시 Table doesn't exist 에러 해결 1. 기존 코드 매일 새벽마다 외부 Open API와 통신해 DB값을 업데이트해야 하는 배치 프로세스를 추가했다. 코드를 전부 작성하고 실행하니 아래와 같이 테이블이 존재하지 않는다는 에러 메시지가 출력됐다. 2. 문제 분석 1. Spring Batch 사용할 때 Batch용 테이블이 필요한 이유 Spring Batch를 사용할 때 Batch 관련 테이블이 중요한 역할을 하는 이유는 상태 관리, 실패한 작업의 재시도, 성능 모니터링, 일괄 처리 통계와 같은 기능들을 제공하기 때문이다. 이러한 테이블들은 Batch Job의 실행에 대한 로깅, 실행 이력, 성공/실패 상태, 현재 진행 중인 Step 정보 등을 저장한..
스프링 부트 의존성 버전문제로 인한 오류 해결 스프링 부트에서 프로젝트를 실행하는데 잘되던 의존성 주입이 갑자기 안 되는 문제가 발생했다. 1. 기존 코드 기존에 Elasticsearch와 통신하기 위해 추가한 의존성이다. plugins { id 'java' id 'org.springframework.boot' version '2.7.9' } dependencies { ... implementation 'org.springframework.data:spring-data-elasticsearch:4.4.0.RELEASE' } 2. 에러 메시지 3. 문제 해결 Spring Boot는 의존성 버전 관리를 자동으로 해주기 때문에 아래처럼 코드를 수정하면 자동으로 버전을 관리한다. //elasticsearch i..
RequestDTO로 Controller에서 요청받을 때 @RequestBody 어노테이션 작성해야 하는 경우와 작성하지 않아야 하는 경우 @RequestBody 어노테이션을 작성해야 하는 경우 JSON/XML 요청 처리: 클라이언트가 'application/json' 또는 'application/xml' 형식으로 복잡한 데이터 구조를 전송할 때, Spring은 이를 RequestDTO 객체로 매핑하기 위해 @RequestBody를 사용한다. 복잡한 데이터 구조: HTTP 요청의 본문이 복잡한 객체 구조를 가지고 있을 때, @RequestBody를 사용하여 이러한 복잡한 구조를 자동으로 Java 객체로 변환한다. @RequestBody 어노테이션을 작성하지 않아야 하는 경우 폼 데이터 처리: 클라이언트가..
ResponseDTO에 기본 생성자가 있어야 하는 이유 ResponseDTO에 기본 생성자가 필요한 이유는 JPA의 동작 방식과 DTO의 역할에 기반을 둔다. JPA는 엔티티 객체를 관리하기 위해 내부적으로 프록시 객체를 생성한다. 이 프록시 객체는 실제 객체의 상태가 필요할 때까지 데이터베이스 로드를 지연시키는 데 사용된다. 프록시 객체를 만들기 위해서는 대상 엔티티에 기본 생성자가 필요하다. 왜냐하면 JPA는 리플렉션을 통해 객체를 만들고, 리플렉션 메커니즘은 기본 생성자를 호출하여 객체의 인스턴스를 생성하기 때문이다. ResponseDTO는 일반적으로 데이터를 전송하는 데 사용되며, 이는 엔티티와는 분리된 존재다. 그럼에도 불구하고 ResponseDTO에 기본 생성자가 필요한 이유는 Spring 프..
· AWS
Spring Boot 3 버전과 SNS, SQS 연동하기 지난 포스팅에서는 SNS-SQS를 연동할 때 Amazon console을 이용했다. 이번 글에서는 Spring Boot 3 버전에서 SNS로 이벤트를 발행하고 SQSListener로 메시지를 받아보자! 1. SpringBoot 설정 (build.gradle, application.yml) 1. build.gradle 코드 추가 스프링 부트 버전 3과 호환되는 의존성으로 적어준다. // AWS implementation platform("io.awspring.cloud:spring-cloud-aws-dependencies:3.0.1") implementation 'io.awspring.cloud:spring-cloud-aws-starter-sqs' ..
평양냉면7
하다보니 재미있는 AI