FCM 푸시 알림, SQS + Lambda로 리팩토링
·
Spring
기존 FCM 서비스 로직 흐름알림 생성 요청: 스케줄러나 특정 이벤트에 의해 FCM 푸시 알림을 전송할 필요가 있을 때, FcmService에서 푸시 알림 전송 로직이 호출됩니다.FCM 메시지 생성: FcmService에서 FCM 푸시 알림을 전송하기 위해 메시지를 생성합니다. 이 메시지는 FirebaseMessaging 객체를 통해 전송됩니다.멀티캐스트 전송: FcmService는 여러 개의 FCM 토큰을 한 번에 전송할 수 있는 multiSendMessage 메서드를 사용하여 배치로 푸시 알림을 전송합니다. 이 과정에서 Firebase Admin SDK가 사용되며, FCM 서버와 직접 통신하여 푸시 알림을 전송합니다.결과 처리: 전송된 푸시 알림에 대한 결과를 받아 성공 여부를 확인합니다. 기존 코드..
정적 팩토리 메서드 패턴의 중요성
·
Spring
정적 팩토리 메서드 패턴은 개발자가 구성한 Static Method를 통해 간접적으로 생성자를 호출하는 객체를 생성하는 디자인 패턴이다. 우리는 지금까지 객체를 인스턴스화 할때 직접적으로 생성자(Constructor)를 호출하여 생성하였는데, 별도의 객체 생성의 역할을 하는 클래스 메서드를 통해 간접적으로 객체 생성을 유도하는 것이다. 이 패턴은 다양한 이점이 있어 많이 사용되는데, 그 특징과 장점은 다음과 같다. 특징 정적 메서드 사용: 객체 생성을 위해 정적 메서드를 사용합니다. 이 메서드는 일반적으로 new 키워드를 사용하여 객체를 생성하는 생성자와 달리 클래스 자체의 메서드로 호출됩니다.명명 가능: 메서드 이름을 통해 객체 생성의 의도를 명확하게 할 수 있습니다. 예를 들어, from 또는 of ..
Error creating bean with name 'jpaAuditingHandler' 에러 해결
·
Spring
스프링부트 테스트관련 코드에서 테스트코드를 실행했더니 Error creating bean with name 'jpaAuditingHandler' 이와 같은 오류가 발생했다. Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'jpaAuditingHandler': Cannot resolve reference to bean 'jpaMappingContext' while setting constructor argument at app//org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReferenc..
멀티모듈 서비스 레이어 분리
·
Spring
멀티모듈의 패키지 구성요소에 따라서 서비스 레이어를 분리해서 서비스 계층의 책임을 재분배하는 리팩토링을 거칠려고한다. 그 전에는 필요한 의존성만 가져와서 써야하는데 계층의 책임이 맞지 않게 가져다 사용해서 여러 문제가 발생했다.. 우선 CustomOAuth2UserService 부터 변경해보자. 기존 코드는 package sellyourunhappiness.core.user.application; import static sellyourunhappiness.core.user.domain.enums.SocialType.*; import java.util.Collections; import java.util.Map; import org.springframework.security.core.authority...
ApplicationTests > contextLoads() FAILED 에러 해결
·
Spring
SellyourunhappinessApiApplicationTests > contextLoads() FAILED java.lang.IllegalStateException at DefaultCacheAwareContextLoaderDelegate.java:180 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:802 Caused by: org.springframework.beans.factory.UnsatisfiedDependencyException at ConstructorResolver.java:802 Caused by: org.springframework.beans..
메세지 큐를 활용한 트랜잭션 관리 - 기술적 챌린지
·
Spring
크래프톤 정글 2기의 마지막 커리큘럼인 "나만의 무기 갖기" 단계에서 개발하면서 겪었던 기술적 챌린지를 정리하려고 합니다. 우선 우리의 서비스는 개발자의 GitHub 활동을 분석하여 개인화된 이력서 템플릿을 제공하며, 기업과 개발자 간의 채용 과정을 간편하고 효율적으로 만들어주는 시스템입니다. 개발자의 GitHub를 분석해야 하다 보니 많은 API 호출 및 GPT API를 호출하는 과정이 발생합니다. 처음에는 기능만 목표로 구현을 했기 때문에 동기적으로 데이터를 호출하고 데이터 베이스에 저장했습니다. 하지만 GitHub계정을 분석하는데 시간이 너무 오래 걸렸기 때문에 이 속도를 줄이기 위해 리액티브 프로그래밍인 Flux와 Mono를 사용해서 비동기 호출로 코드를 변경하였습니다. 아래는 관련 코드들 중 하..
웹 애플리케이션 이해
·
Spring
1️⃣ 웹 서버(Web Server) HTTP 기반으로 동작 정적 리소스 제공, 기타 부가기능 정적(파일) HTML, CSS, JS, 이미지, 영상 예) NGINX, APACHE 웹 애플리케이션 서버(WAS - Web Application Server) HTTP 기반으로 동작 웹 서버 기능 포함 + (정적 리소스 제공 가능) 프로그램 코드를 실행해서 애플리케이션 로직 수행 동적 HTML, HTTP API(JSON) 서블릿, JSP, 스프링 MVC 예) 톰캣(Tomcat) Jetty, Undertow 웹 서버, 웹 애플리케이션 서버의 차이점 웹 서버는 정적 리소스(파일), WAS는 애플리케이션 로직 사실은 둘의 용어도 경계도 모호함 웹 서버도 프로그램을 실행하는 기능을 포함하기도 함 웹 애플리케이션 서버도..
객체 지향 설계와 스프링
·
Spring
스프링이란? 스프링 부트 스프링 Rest Docs, 스프링 시큐리티 핵심 개념 - 이 기술을 왜 만들었는가 / 이 기술의 핵심 컨셉은 ? : 스프링은 자바 언어 기반의 프레임워크, 스프링은 객체 지향 언어가 가장 강력한 특징을 살려내는 프레임워크, 스프링은 좋은 객체 지향 애플리케이션을 개발할 수 있게 도와주는 프레임워크 좋은 객체 지향 프로그래밍이란? - 객체 지향 프로그래밍은 프로그램을 유연하고 변경이 용이하게 만들기 때문에 대규모 소프트웨어 개발에 많이 사용된다. 다형성(Polymorphism) 실세계와 객체 지향을 1:1로 매핑X 그래도 실세계의 비유로 이해하기에는 좋음 역할과 구현으로 세상을 구분 자동차가 바껴도 운전을 할 수 있다 -> 새로운 자동차가 나와도 클라이언트는 새로운 걸 안배워도 되..
yunchan^.^
'Spring' 카테고리의 글 목록