본문 바로가기

Proj/구구모

(8)
FCM 알림 구현 1. 개요이전 게시글에서 sse 대신 FCM으로 알림을 구현하고자 하였다. 이 게시글에서는 어떤 논리를 가지고 FCM을 구현했는지 작성해보고자 한다.2. ERDFCM을 사용하기 위해서는 서버 측에서 FCM token을 관리해야 한다. 따라서 fcm_notification_token을 member와 1:n 관계로 연결하였다. 이 프로젝트에서 FCM으로 알림을 보내는 것 뿐 아니라 알림 내용을 웹사이트에서 확인해야 하므로 custom_noti 테이블을 만들어 member와 1:n으로 연결하였다.3. 토큰 관리이 프로젝트에서는 회의를 통해 토큰을 다음과 같이 관리하기로 했다.토큰은 클라이언트에서 로그인 시 요청한다.같은 디바이스에서 다른 계정으로의 로그인이 발생할 경우 토큰의 주인을 바꾼다이미 존재하는 토큰의..
Trouble Shooting: @RequestBody에서 데이터를 꺼내는 데 null 1. 개요 현재 프로젝트에서 댓글 알림을 위한 FCM 토큰 저장 기능에서 발생한 문제이다. body는 다음과 같다.@Getterpublic class FcmTokenDto { private String FCMToken;}  이를 호출하는 컨트롤러 로직은 다음과 같다. @PostMapping("/subscribe") public ApiResponse subscribe(@AuthenticationPrincipal CustomUserDetails principal, @RequestBody FcmTokenDto fcmTokenDto) { fcmNotificationTokenService.subscribe(prin..
댓글 알림 구현(feat. sse) 1. 개요 댓글 알림을 구현해야 했다. 누군가가 댓글을 작성하면 해당 댓글의 게시글 작성자에게 push 알림을 보내는 기능을 구현하고자 한다. 이 프로젝트는 댓글과 부모 댓글에 대한 대댓글로만 구현했으므로 회의를 통해 게시글 작성자에게만 댓글 알림을 보내도록 요구사항을 잡았다. 2. SSE 구현 코드2-1. Entity@Entity@Getter@Builder@AllArgsConstructor@NoArgsConstructor(access = AccessLevel.PROTECTED)public class Notification { @Id @GeneratedValue @Column(name = "notification_id") private Long id; private String..
EC2 한국 시간으로 변경 1. 개요 이전 게시글에서 cron 표현식을 사용하여 매일 자정에 마감이 지난 모임 정보를 모집마감 상태로 바꾸는 기능을 구현하였다. 그러나 이를 배포한다면 문제가 생길 거라 생각했다. ec2의 컴퓨터는 기본적으로 UTC로 시간과 날짜가 기본 설정되어있다. 이는 한국과 9시간 차이가 나는 시간대로 이대로 배포를 진행하면 의도하지 않은 시간에 스케쥴러가 실행될 것이다. 이를 해결하기 위해 ec2에서 시간대를 바꾸어보기로 했다.2. 절차 일단 인터넷에서 찾은 대로 아래 명령어를 입력해주었다.$ sudo rm /etc/localtime$ sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime  우선 기존에 있던 localtim을 삭제한다. 그 후 /usr/shar..
스프링 스케쥴러를 이용한 게시글 마감 처리 1. 개요구구모 프로젝트를 진행하던 중 게시글 마감시간을 처리해야 했다. 내용은 다음과 같다.모집 마감일, 모임 날짜(단기 모임)을 과거의 날짜로 입력하지 못하도록 제약매일 자정이 지나면 게시글의 마감 날짜가 지난 모임의 모임 상태를 모집마감으로 변경첫번째 이슈는 spring validation으로 처리했는데, 두번째 이슈는 구현 방법을 찾아야 했다. 그렇게 선택한 것이 스프링 스케쥴러이다.2. Spring scheduler vs Quartz scheduler스프링부트 프로젝트에서 가장 많이 사용하는 두 스케쥴러이다. 이 중 하나를 선택하여 사용해야 했다.2-1 Quartz scheduler자바에서 사용할 수 있는 오픈 Job Scheduling 라이브러리이다. 스프링 스케쥴러에 비해 스케쥴러의 세부적인..
추천 게시글 기능 구현 1. 개요 추천 게시글 기능이다. 우리 팀은 회의 결과 회원가입에서 선호 종목을 받고, 다음 규칙에 따라 게시글을 추천하기로 했다선호 종목이 있는 회원은 선호 종목 내에서 무작위 순서로 게시글 조회선호 종목이 없거나 로그인하지 않은 회원은 모든 게시글에서 무작위 순서로 게시글 조회추천 게시글은 총 8개 조회위 규칙에 맞춰 구현해보자.2. ERD 회원에 선호 종목을 일대다 관계로 잇고, 종목을 받았다. 3. 구현  3-1 Service public List findRecommendPost(CustomUserDetails principal) { //토큰에서 Member member; if (principal == null) { member = ..
댓글 및 대댓글 기능 구현 1. 개요 간단한 MVP 기능을 구현하고 1차 기능으로 다음의 기능들이 선정되었다댓글 및 대댓글 기능댓글 알림 기능추천 게시글 기능회원가입 시 이메일 인증소셜 로그인 기능 이 중 위의 3개 기능을 맡았고, 하나씩 해보려한다.  2. ERD이 기능의 관건은 대댓글의 구현이었다. 팀원분들과 상의한 결과 UI 등의 문제로 일단은 대댓글까지만 구현하기로 했다. 한 개의 댓글에서 여러 개의 대댓글이 나올 수 있으므로 다음과 같이 ERD를 설계하였다.  사용자는 게시글과 댓글을 작성할 수 있으며, 하나의 게시글에는 여러 개의 댓글이 귀속된다. 또, 한 개의 댓글로부터 여러 개의 대댓글이 연결될 수 있다. 이를 바탕으로 구현을 하였다. 3. 구현  3-1. Entitypackage sideproject.gugumo...
AWS EC2를 이용한 배포 AWS EC2를 이용한 스프링부트 프로젝트 배포는 다음과 같은 과정을 거친다.1. 자바 애플리케이션 jar 파일 생성2. EC2를 이용한 배포  하나씩 해보자.1. jar 파일 생성intellij idea를 사용하고 있다면 간단하다. 다음 버튼을 클릭해보자  성공적으로 완료되었다면 해당 프로젝트 경로/build/libs/proj.jar이 생성됨을 확인할 수 있다.2. EC2를 이용한 배포이후 AWS 콘솔에 로그인 후 EC2->인스턴스(실행 중) 을 들어가면 다음과 같은 창이 뜬다  여기서 인스턴스 시작을 누르면 aws의 컴퓨터를 하나 빌릴 수 있다. OS 이미지와 인스턴스 유형을 선택하고 그 아래에서 인스턴스에 연결하기 위해 필요한 키를 발급받을 수 있다.  이후 간단한 설정을 하고 나면 컴퓨터를 성공적..