이번 포스팅은 FCM Push Notification 개발과 개발하면서 겪은 문제 해결에 관한 글입니다. 1. 커스텀 푸시 알림 개발 요청사항이 들어오다.하루냥에서 알림 발송은 기존에 Flutter에서 매일 지정된 시간에 메세지를 발송하는 FCM 푸시 알림을 사용하고 있었다. 하지만 여러 BM을 만들면서 매일 보내는 알림과는 별개로 관리자의 입맛에 맞게 보내는 커스텀 알림 메세지가 필요한 시점이 와버렸다!앱으로, 무료로 푸시 알림을 보내기에 FCM을 사용하지 않을 수 없었고 클라이언트에서 보내는 알림과 별개로 서버에서 개발하게 되었다. 이번 푸시 알림의 개발 요구사항은 다음과 같다.발송 대상을 설정하여 원하는 사용자를 지정할 수 있다. (전체 사용자/그룹 사용자)발송 타입에 따라 원하는 시간에 알림..
IoC (Inversion of Control) IoC는 "제어의 역전"이라는 의미로, 애플리케이션의 흐름 제어를 개발자가 아닌 프레임워크나 컨테이너가 담당하게 되는 디자인 원칙이다. 전통적인 프로그래밍에서는 개발자가 직접 객체를 생성하고, 해당 객체의 생명 주기를 관리했지만, IoC를 적용하면, 제어와 관리의 책임이 프레임워크나 컨테이너로 이동하게 됩니다. Spring에서는 IoC 컨테이너가 객체의 생명 주기 및 의존성 관리한다. 이처럼 IoC 는 클래스 내부가 아니라, 클래스 외부에서 제어권을 갖도록 하는 것을 말한다. 클래스 내부에서 객체를 생성하기 때문에 변경이 자유롭지 못하던 객체가, IoC 를 적용함으로써 외부에서 인자를 받아 변경이 자유로워졌음을 알 수 있다. 객체지향적 관점에서 보자면, I..
유닉스 시그널 목록 확인 아래 명령어를 입력하면 유닉스에서 지원하는 시그널 목록을 확인할 수 있다. kill -l 유닉스 시그널 1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL 5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE 9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2 13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT 17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP 21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU 25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH ..
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..
개발 환경 IDE : IntelliJ Framework : Spring Boot 3.0.5 JDK -version : openjdk 17 Gradle : Groovy 검색하면 많이 나오는 설정들이 대부분 plugin에 querydsl 설정을 추가하는데 Spring Boot 3 버전 이상부터는 plugin에 querydsl 을 사용하면 제대로 작동되지 않습니다. 반드시 plugins에서 제거해주고 dependencies 에만 라이브러리 추가해주세요. build.gradle plugins { id 'java' id 'org.springframework.boot' version '3.0.5' id 'io.spring.dependency-management' version '1.1.0' //plugins 에서 ..
Spring Security를 적용하기 위해서는 @Configuration 어노테이션이 달린 설정 클래스를 구현해야 하고, 이 클래스에서 SecurityFilterChain을 생성하여 보안 필터 체인을 구성합니다. 이때 보안 필터 체인에서 사용할 Filter 클래스 중 하나로 OncePerRequestFilter 클래스를 선택하여 구현할 수 있습니다. OncePerRequestFilter 클래스를 본격적으로 살펴보기에 앞서서, Spring Security에서 Filter를 구성하기 위해 앞서 정의해야할 것들이 있어 이해를 위해 순서대로 차례로 정리해보겠습니다. @Configuration : 시큐리티 구성을 위한 클래스 기존 방식으로 @configuration 어노테이션이 달린 설정 클래스는 아래와 같이 ..
@BatchSize 연관된 엔티티를 조회할 때 지정한 size 만큼 where 조건의 in 절으로 조회한다. 1:N 관계의 Entity 정의 정의 조건 : 1명의 멤버는 여러 개의 주문을 가질 수 있다. Members (1) : Orders (N) * 부모 class : Members @Entity class Members( @Column(nullable = false, length = 50) var email: String, @Column(nullable = false, length = 20) var name: String, ) { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) var id: Long? = null @OneToMany(mappedBy..
사건의 발단 로그인 API가 안된다는 프론트엔드 팀원님의 갑작스런 메세지..... 보고 현기증나기 시작했다.ㅎ 왜냐면 함께 하던 백엔드 팀원님이 나가셔서 이제 내가 무조건 처리해야하기 때문에.. (처리 못하면 죽음뿐 ^^) 문제 상황 * Database server 접속 안됨 (MySQL Cannot Connect to Database Server) 디비 데이터 모두 초기화됨 * domain 접속 안됨 해결 방법 데이터베이스 도커 컨테이너 재기동 서버가 네이버 클라우드로 돌아가고 있는데 프로젝트 기간이 얼마 남지 않은 시점이라 처음에 크레딧 소멸을 의심했다. 다행히 아직 크레딧은 남아 있어서 클라우드에서 서버가 내려간건 아니었다. 그렇다면 디비 서버만 연결이 안된다는 건데, 여기서 클라우드 서버와 디비 ..
- Total
- Today
- Yesterday
- Linux
- Java
- 스프링오류
- port
- ChatGPT
- 자바 어플리케이션 실행 과정
- bucket4j
- junit5
- FetchJoin
- Git
- checkout
- 추상클래스
- MongoDB
- QueryDSL
- 스프링 스케줄링
- jvm warm-up 전략
- Cannot construct instance of
- Kotlin
- array
- redisson 분산락
- spring boot 3
- MultipleBagFetchException
- 배열
- 티스토리챌린지
- JPA
- addFilterBefore
- dto 클래스 생성자
- 오블완
- n+1
- Spring Security
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |