[Spring] 헥사고날 아키텍처
·
Spring MSA
지금까지 내가 헥사고날 아키텍처를 설계해 보며 배운 점을 정리해 봤다.📌 서론지금까지 3번 정도 헥사고날 아키텍처를 적용시켜서 프로젝트를 만들어봤다. 첫 번째 설계에서는 왜 port 같은 것을 사용해서 이렇게 복잡하고 어렵게 설계하는 거지? 이런 생각이 많이 들었다. 원리를 이해하지 못하고 단순히 이게 좋다니까 해봐야겠다! 이런 생각을 하면서 개발을 진행했었던 것 같다. 관련된 자료를 열심히 찾아보기도 했지만 사실 제대로 알지 못하고 개발을 진행했다.이렇게 원리를 잘 모르고 일단 개발해 보자는 마인드로 개발을 진행한 후 다시 한번 돌아보니 도메인 내부에 비즈니스 로직을 넣어두는 중요성을 놓치고 있었다. 그래서 서비스의 로직이 엄청 커지고 패키지도 많고 클래스도 많다 보니 오히려 이전과 큰 차이는 없으면..
[gRPC] SpringBoot3 gRPC 예외 인터셉터 적용
·
gRPC
스프링부트 3.x.x에 gRPC 예외 처리 인터셉터를 적용시켜 보자📌 서론저번 포스트에서 SpringBoot3.3.1에 gRPC를 적용시켰다. 완전히 최신 버전을 사용해보고자 했기에 java, gradle, protobuf, spring 버전에 따른 오류도 조금씩 있었는데 아직 이 부분은 조금씩 진행하면서 코드를 개선하는 중이다. (계속 업데이트해서 올릴 예정)이번 포스트에서 소개할 내용은 gRPC의 예외처리 방법이다. http에서는 예외가 발생하면 @RestControllerAdvice를 사용해서 전역 예외처리를 하곤 한다. 그럼 gRPC도 예외처리를 하는 방법이 있지 않을까? 당연히 예외처리가 가능하다.검색을 해보니 SpringBoot에서는 gRPC의 예외처리를 인터셉터를 통해 처리한다는 것을 알아..
[gRPC] SpringBoot3.3.1에 gRPC 적용하기
·
gRPC
SpringBoot3.3.1에 gRPC를 적용시켜 보자📌 서론개인적인 공부를 하면서 MSA 프로젝트를 구성할 때 유저(Client)의 기본적인 요청에 대해서 먼저 http로 받아서 처리하고 만약 서버 간 소통이 필요하다면 그때는 gRPC를 사용하도록 하기 위해 gRPC를 도입해보고자 했다. 아무것도 모르는 상태에서 공부를 시작했고 일단 도입해 보면서 발전시켜 가자는 목표로 코드에 1차 적용을 시켰다. 막상 적용시켜보니 버전에 대해서 이슈가 조금 있어서 생각보다 오래 걸렸지만 잘 동작하는 것을 보니 매우 뿌듯했다.혹시나 gRPC를 도입하고자 하는 분들을 위해 적용방법을 남기고 가능하면 조금 더 좋은 방법이 있다면 도움을 받고싶다.코드는 아래 Repo에 넣어두었습니다! GitHub - wlsdks/grpc..
[kafka] 스프링부트와 kafka를 이용한 slack 예외알림 구현
·
Apache Kafka
SpringBoot에서 kafka를 통해 슬랙에 에러 알림을 보내보자 📌 서론 이번 포스트를 읽기 전 2가지 사항을 모두 완료했는지 확인해 보자 1. Kafka 세팅 2. 슬랙 webhook 세팅 이번 포스트에서는 아래와 같은 작업을 하는 코드를 알아볼 것이다. 1. 예외가 발생하면 SpringBoot에서 kafka로 메시지를 produce 한다. (이전 포스트에서 확인가능) 2. SpringBoot내부에 작성한 kafkaListener코드를 통해 이 예외 메시지를 consume 한다. 3. kafkaListener에서는 slack의 webhook url로 메시지를 보내서 알림이 울리도록 한다. 1. 먼저 SpringBoot에 kafka를 연동하자 [Kafka] SpringBoot3.x.x에서 Kafka..
Spring JPA - 데이터 영속화란?
·
Spring Data JPA
문득 JPA를 사용하다 영속화란 단어를 계속보는데 궁금증이 들었다. 데이터 영속화가 뭔지 알아보자 1. 데이터의 영속화가 무슨 의미인가? 데이터의 영속화는 데이터를 장기적으로 보존하는 과정을 의미한다. 이는 일시적인 메모리 저장이 아닌, 데이터베이스와 같은 영구 저장 매체에 데이터를 저장하는 것을 포함한다. 이로 인해 시스템이 종료되거나 장애가 발생해도 데이터는 안전하게 보존된다. 데이터의 영속화는 데이터가 손실되지 않도록 보장하고, 데이터를 효율적으로 검색하고 처리할 수 있도록 한다. 2. 데이터 영속화의 장점 데이터의 영속화에는 다음과 같은 장점이 있다. 데이터 손실 방지: 데이터를 안정적인 저장 매체에 보존함으로써, 시스템 장애나 다른 문제로 인한 데이터 손실을 방지한다. 효율적인 검색 및 처리: ..
Spring 환경설정: Xml과 @Configuration의 차이점
·
Spring 기초/Spring 설정
이번 포스팅에서는 스프링에서 환경설정을 위해 사용하는 xml작성방식과 @Configuration 방식에 대해 알아보자 1. Xml을 사용한 Spring 환경설정 xml을 사용한 환경설정 Spring Framework는 SpringBoot가 나오기 이전부터 사용되어 온 대표적인 Java 기반의 엔터프라이즈 애플리케이션 개발 프레임워크이다. 전통적인 Spring Framework에서는 설정을 위해 XML 파일을 주로 사용했다. 이 XML 파일에는 Bean의 정의, 의존성 정보, 각종 설정 등이 포함되어 있었다. 작성예시 위의 예시에서 beans 태그는 루트 엘리먼트이고 내부의 bean 태그는 Spring에서 관리하는 객체인 빈(bean)을 정의하는 것이다. bean 태그 안의 id는 빈의 식별자이며, cla..
Spring Boot 폼 데이터 바인딩: @ModelAttribute 활용법
·
Spring 기초/Spring 기초 지식
이번 포스트에서는 @ModelAttribute를 활용한 데이터 바인딩 방식에 대해 알아보자 1. modelAttribute 방식으로 폼을 작성하고 전송하는 장점 데이터 바인딩의 용이성: modelAttribute 속성을 사용하여 폼 데이터를 모델 객체에 자동으로 바인딩할 수 있다. 이를 통해 컨트롤러에서 해당 모델 객체를 매개변수로 받아 데이터를 쉽게 처리할 수 있다. form 필드의 이름과 model 객체의 필드 이름이 일치하면 자동으로 데이터가 매핑되어 컨트롤러에서 별도의 데이터 추출 및 변환 과정 없이 데이터를 사용할 수 있다. 유효성 검증의 편의성: Spring MVC는 @Valid 어노테이션을 통해 데이터의 유효성을 검증할 수 있다. modelAttribute 방식을 사용하면 모델 객체에 @Va..
Spring JPA [SpringBoot3.1] - Querydsl 사용
·
Spring Data JPA
이전 포스팅에서 querydsl적용을 했고 이번에는 repository를 만들어서 사용해 보겠다. 1. QuerydslConfig라는 클래스를 만들고 JPAQueryFactory Bean설정을 해준다. import com.querydsl.jpa.impl.JPAQueryFactory; import jakarta.persistence.EntityManager; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration @RequiredArgsConstructor publi..