이번 포스팅은 FCM Push Notification 개발과 개발하면서 겪은 문제 해결에 관한 글입니다. 1. 커스텀 푸시 알림 개발 요청사항이 들어오다.하루냥에서 알림 발송은 기존에 Flutter에서 매일 지정된 시간에 메세지를 발송하는 FCM 푸시 알림을 사용하고 있었다. 하지만 여러 BM을 만들면서 매일 보내는 알림과는 별개로 관리자의 입맛에 맞게 보내는 커스텀 알림 메세지가 필요한 시점이 와버렸다!앱으로, 무료로 푸시 알림을 보내기에 FCM을 사용하지 않을 수 없었고 클라이언트에서 보내는 알림과 별개로 서버에서 개발하게 되었다. 이번 푸시 알림의 개발 요구사항은 다음과 같다.발송 대상을 설정하여 원하는 사용자를 지정할 수 있다. (전체 사용자/그룹 사용자)발송 타입에 따라 원하는 시간에 알림..
IoC (Inversion of Control) IoC는 "제어의 역전"이라는 의미로, 애플리케이션의 흐름 제어를 개발자가 아닌 프레임워크나 컨테이너가 담당하게 되는 디자인 원칙이다. 전통적인 프로그래밍에서는 개발자가 직접 객체를 생성하고, 해당 객체의 생명 주기를 관리했지만, IoC를 적용하면, 제어와 관리의 책임이 프레임워크나 컨테이너로 이동하게 됩니다. Spring에서는 IoC 컨테이너가 객체의 생명 주기 및 의존성 관리한다. 이처럼 IoC 는 클래스 내부가 아니라, 클래스 외부에서 제어권을 갖도록 하는 것을 말한다. 클래스 내부에서 객체를 생성하기 때문에 변경이 자유롭지 못하던 객체가, IoC 를 적용함으로써 외부에서 인자를 받아 변경이 자유로워졌음을 알 수 있다. 객체지향적 관점에서 보자면, I..
JwtTokenProvider 토큰 생성하고, 토큰을 복호화 해서 정보를 추출하고, 유효성을 검증하는 클래스입니다. jwt 토큰 구현 방식으로는 access Token, refresh Token 두가지 토큰을 사용하고, 인증 타입으로는 Bearer를 사용하였습니다. 최종 구현 코드 @Slf4j @Component // spring bean 등록 public class JwtTokenProvider { private final String key; private final Key jwtKey; private static final String BEARER_TYPE = "Bearer"; private static final String CLAIM_JWT_TYPE_KEY = "type"; private sta..
Spring Security를 적용하기 위해서는 @Configuration 어노테이션이 달린 설정 클래스를 구현해야 하고, 이 클래스에서 SecurityFilterChain을 생성하여 보안 필터 체인을 구성합니다. 이때 보안 필터 체인에서 사용할 Filter 클래스 중 하나로 OncePerRequestFilter 클래스를 선택하여 구현할 수 있습니다. OncePerRequestFilter 클래스를 본격적으로 살펴보기에 앞서서, Spring Security에서 Filter를 구성하기 위해 앞서 정의해야할 것들이 있어 이해를 위해 순서대로 차례로 정리해보겠습니다. @Configuration : 시큐리티 구성을 위한 클래스 기존 방식으로 @configuration 어노테이션이 달린 설정 클래스는 아래와 같이 ..
회원 정보 조회하는 경우, 탈퇴처리된 상태의 회원은 조회가 안되도록 예외처리를 해야하는 상황이 있었다. 당시 controller-service의 역할에 대한 개념이 불명확해서 어디서 예외처리를 해줘야하는지 고민을 한참 했었다.(ㅎㅎ..하하) 그러다가 나와 비슷한 고민을 하는 분의 질문에서 프로그래밍 로직을 이렇게 한다는 답변을 보게 되었다. " view -> validation logic -> business logic -> dao " 보통의 view는 controller에서 처리하고, 여기서 예외처리는 validation logic에 해당하므로 service에 넣어주는게 맞다고 생각했다. 그리고 아주 단적으로 controller가 없더라도 API 로직은 정상적으로 돌아가야한다는 김영한님의 답을 어디선가..
스프링부트는 스프링 프레임워크를 이용해서 더 쉽고, 빠르게 개발할 수 있는 도구입니다. 본격 시작하기 앞서 스프링부트를 개발 환경을 세팅해야합니다. 💡해야 할 일 1. InteliJ를 이용해서 스프링부트 설정하기 2. MariaDB 설치 먼저 InteliJ를 설치하고 프로젝트 세팅해보도록 하겠습니다! 1. InteliJ를 이용해서 스프링부트 설정하기 1. InteliJ 다운로드 하기 https://www.jetbrains.com/ko-kr/ JetBrains: 소프트웨어 개발자 및 팀을 위한 필수 도구 www.jetbrains.com InteliJ는 Ultimate버전, Community버전으로 나뉘어져 있습니다. 둘의 차이점은 단연 무료버전 유료버전이지만 더 자세히 살펴보자면 이러합니다. Ultimat..
- Total
- Today
- Yesterday
- redisson 분산락
- array
- ChatGPT
- jvm warm-up 전략
- bucket4j
- dto 클래스 생성자
- checkout
- Kotlin
- 오블완
- MultipleBagFetchException
- FetchJoin
- JPA
- 배열
- Cannot construct instance of
- MongoDB
- Linux
- 추상클래스
- Spring Security
- 스프링오류
- Java
- Git
- 스프링 스케줄링
- spring boot 3
- 티스토리챌린지
- junit5
- port
- QueryDSL
- addFilterBefore
- n+1
- 자바 어플리케이션 실행 과정
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |