반응형

개발/java 11

SQS SDK의 Acknowledgment에 대하여

Amazon SQS Acknowledgment의 종류 Amazon SQS(Simple Queue Service)에서 Acknowledgment(확인 응답)은 메시지를 처리한 후 메시지의 상태를 표시하고 해당 메시지를 안전하게 삭제하기 위해 사용됩니다. SQS는 다양한 Acknowledgment 유형을 제공하여 메시지 처리의 유연성과 안정성을 보장합니다. 이 글에서는 Amazon SQS에서 제공하는 Acknowledgment의 주요 종류를 살펴보겠습니다. @SqsListener(value = "${sqs.name.s3}", deletionPolicy = SqsMessageDeletionPolicy.NEVER) public void s3Consumer(EventRequestDTO message, Acknow..

개발/java 2023.05.23

Spring Boot 에 AWS SQS 적용하기

Amazon SQS(Simple Queue Service)란? Amazon SQS(Simple Queue Service)는 아마존 웹 서비스(Amazon Web Services, AWS)의 메시지 대기열 서비스입니다. SQS를 사용하면 분산 시스템 간에 안정적이고 확장 가능한 방식으로 메시지를 전달할 수 있습니다. SQS는 복잡한 메시지 큐 관리를 간소화하여 개발자가 응용 프로그램에 대해 신속하게 메시지 기반 아키텍처를 구현할 수 있도록 도와줍니다. SQS의 장점 신뢰성: SQS는 메시지를 전달하기 위해 내구성과 복제를 제공합니다. 메시지는 중복되거나 손실되지 않고 안전하게 보관되며, 필요한 경우 재시도 메커니즘을 통해 처리할 수 있습니다. 확장성: SQS는 많은 수의 메시지를 처리하기 위해 높은 확장성..

개발/java 2023.05.22

Spring Data JPA란?

JPA(Java Persistence API)란? JPA(Java Persistence API)는 Java에서 ORM(Object-Relational Mapping)을 구현하기 위한 표준 인터페이스입니다. JPA를 사용하면 객체와 데이터베이스 간의 매핑을 편리하게 처리할 수 있습니다. ORM은 객체 지향 프로그래밍과 관계형 데이터베이스 간의 간격을 좁히고, 객체를 직접적으로 다룰 수 있게 해줍니다. JPA의 장점 생산성 향상: JPA는 반복적이고 번거로운 SQL 쿼리 작성을 줄여주어 개발 생산성을 향상시킵니다. 데이터베이스 관련 작업을 직접 다루지 않고 객체에 집중할 수 있습니다. 객체 지향적인 데이터베이스 접근: JPA는 객체와 데이터베이스 간의 매핑을 통해 객체 지향적인 데이터베이스 접근을 제공합니다..

개발/java 2023.05.21

Spring Data JPA 관계 매핑하기

JPA를 이용하기 위해서는 도메인 영역에 해당하는 엔티티를 정의해야 합니다. 이 엔티티는 테이블에 종속될 수도 혹은 분리해서 정의할 수도 있습니다. 엔티티 활용법에 대해서는 다음에 다시 알아보고 이번에는 관계 매핑에 대해서 알아보겠습니다. JPA의 관계 매핑은 아래와 같은 종류가 있습니다. ManyToOne OneToMany OneToOne 또한 관계 매핑된 엔티티들은 상호 관계를 모두 설정해 주어야 합니다. 예를 들어 A와 B가 ManyToOne이면 B와 A는 OneToMany 이므로 추가로 설정해 주는 방식입니다. 각 관계들의 설정 방법을 한눈에 파악할 수 있도록 예제를 만들었습니다. @Data @Entity @Builder @NoArgsConstructor @AllArgsConstructor @Ta..

개발/java 2023.05.20

QueryDsl SpringBoot JPA 레포지토리 만들기

querydsl은 JPA 쿼리를 동적 코드로써 작성할 수 있도록 도와주는 ORM 프레임워크입니다. JPA에서 기본적으로 JPQL을 사용하여 레포지토리를 정의할 수 있습니다. @Repository public class ProductRepositoryImpl implements ProductRepository { @PersistenceContext private EntityManager entityManager; @Override public List findByName(String name) { String jpql = "SELECT p FROM Product p WHERE p.name = :name"; return entityManager.createQuery(jpql, Product.class) .s..

개발/java 2023.05.19

JPA 데이터 소스 여러개 적용하기

JPA에 데이터 소스를 여러개 적용하여 DB를 2개 이상 연결할 수 있습니다. 우선 설정 클래스 정의가 필요 합니다. 메인으로 사용하는 Primay 데이터 소스를 설정 한 후 그 외 데이터 소스들을 지정해 주도록 합시다. @Primay 어노테이션으로 메인 설정이 가능합니다. @Configuration @EnableTransactionManagement @EnableJpaRepositories( entityManagerFactoryRef = "firstEntityManagerFactory", transactionManagerRef = "firstTransactionManager", basePackages = { "com.hanainu.test.repository.first" } ) public class ..

개발/java 2023.05.18

Github Action으로 Spring Boot Docker 이미지 배포하기

목적 Github는 Github Action이라는 레포지토리를 연동한 CI/CD를 제공합니다. Github에서 제공하는 Runner를 이용하여 코드 배포시 도커 이미지를 만들어 서버에 배포하는작업을 자동화 하고자 합니다. 방법 Github Action으로 CI/CD를 하기 위해서는 .github/workflows 내에 yml 파일을 만들어야 합니다. 1. 조건 설정 우선 적당한 이름으로 yml 파일을 만들어 준뒤 이름과 조건을 설정합니다. 이번 예제에서는 workflow.yml로 하였습니다. name: Docker Build and Deploy on: # Workflow Manual workflow_dispatch: inputs: isRequiredRemoteDeploy: type: boolean des..

개발/java 2023.05.03

actuator사용시 Swagger 3.0과 충돌하는 현상 해결법

현상 Spring Boot 2.6.x 이상 버전에서 swagger 를 사용하고자 할 시 "failed to start bean 'documentationpluginsbootstrapper'; nested exception is java.lang.nullpointerexception" 에러가 발생하며 스프링 부트 기동이 불가능한 현상이 발생함. 원인 Springfox는 Spring MVC가 경로를 찾게 하기 위하여 Ant-based Path Macther를 사용하도록 하고 있습니다. 2.6.x 이상의 버전부터 해당 matcher를 Path Pattern-based Macther로 변경하여 필요한 클래스를 찾지 못하게 되어 발생하는 현상 입니다. 인터넷을 찾아보면 아래의 코드를 application.yml에..

개발/java 2023.05.03

gradle 빌드시 plain .jar파일 제외하기

gradle 빌드시 plain.jar 파일이 같이 나오는 경우가 있는데, 이런 경우에는 application.xml 파일에 아래와 같은 코드를 추가해 주면 생성을 방지 할 수 있습니다. jar { enabled = false } 그렇다면 plain.jar 파일은 무엇이며 왜 생성되는 것일까요? plain.jar 파일은 의존성을 모두 제외하고 실제 작성한 클래스 및 리소스 파일만 포함된 파일입니다. 그러므로 실제 plain.jar 파일을 이용하여 실행하면 의존성 에러가 발생하게 됩니다.

개발/java 2023.05.03

스프링부트 CORS 클래스 설정 방법

Spring boot에서 CORS를 설정하고 싶을 경우 아래 처럼 설정 클래스를 정의하면 됩니다. Mapping 옵션으로 상세 설정을 할 수 있으며, origin은 String 배열 형태로 복수 지정 가능합니다. import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; /** * Web 설정 ..

개발/java 2023.05.03
반응형