[SSA] 서버 SSE 기능 구현
·
SSA/Back
SSA의 알림 시스템 설계: SSE + FCMSSA는 오프라인 강의 일정 스케줄링 서비스입니다. 강사가 강의 일정을 등록하거나 수정하면, 학생은 전체 강의 목록 또는 강사 이름, 강의명을 통해 강의를 검색하고 수강 신청할 수 있습니다.이후, 강사는 수강 신청 알림을 받게 되고, 신청을 수락 또는 거절할 수 있습니다.이 과정에서 학생 역시 수락/거절 결과에 대한 알림을 받게 됩니다. SSE 란 ?Server-Sent-Event의 약자로, 서버에서 클라이언트로 실시간 이벤트를 전달하는 웹 기술입니다.연결 시작:클라이언트에서 HTTP 프로토콜을 통해 요청서버는 text/event-stream 이라는 content-type으로 응답이후 client / server 간 데이터 파이프라인이 형성되어 연결서버에서..
[SSA] 서버 FCM 기능 구현
·
SSA/Back
간단하게 알림 서비스 기능에 대해서 정리해 봤습니다.이것보다 더 자세한 내용은 각각을 찾아 보도록 하겠습니다.기술설명장점단점사용 사례폴링 (Polling)클라이언트가 일정 주기로 서버에 데이터 요청구현이 간단네트워크 트래픽 증가, 실시간성 떨어짐간단한 상태 체크롱 폴링 (Long Polling)요청이 도착할 때까지 서버가 응답을 대기실시간성 향상연결이 많아지면 서버 부하 증가Slack의 알림, 일부 AJAX 채팅SSE (Server-Sent Events)서버가 클라이언트로 지속적인 단방향 메시지 전송브라우저 지원, 단방향 푸시에 적합양방향 통신 불가, 브라우저 한정실시간 알림WebSocket서버-클라이언트 간 양방향 통신실시간성, 양방향 모두 지원복잡한 인프라 구성 필요채팅, 게임, 협업 앱FCM (Fi..
[SSA] 클라이언트 FCM 기능 구현
·
SSA/Front
안드로이드 앱 이용을 가정하고 학생이 강의를 둘러 보다가 수강 신청을 할 경우,강사는 앱을 이용하고 있지 않더라도 수강 신청에 대한 요청을 확인할 수 있도록 하고 싶었습니다. 안드로이드 스튜디오를 써서 FCM 라이브러리로 푸시 알림을 구현하려고 하였는데,코틀린은 물론 안드로이드 자체도 완전 처음이어서 너무 어려웠습니다 ..코틀린 빌드부터 그냥 문제가 너무너무 많았습니다. 시간을 오래 써서 콘솔로만 확인한 내용입니다. 우선 프로젝트 빌드입니다.// Top-level build file where you can add configuration options common to all sub-projects/modules.plugins { alias(libs.plugins.android.applicat..
[SSA] 강의 도메인
·
SSA/Back
강의와 관련한 기능이 핵심인 서비스인 만큼 강의 도메인을 보여 드리겠습니다 .. 우선 강사와 학생이 메인이지만 학부모가 강사에게 면담을 신청할 수도 있도록 구성해 봤습니다.그런데 강의와 면담 간에 동일한 필드가 존재함을 인지하고 정규화를 시도했습니다. @SQLRestriction("deleted_at is null")@SQLDelete(sql = "UPDATE schedule SET deleted_at = CURRENT_TIMESTAMP WHERE id = ?")@Inheritance(strategy = InheritanceType.JOINED)@DiscriminatorColumn(name = "type")@Table(name = "schedule")@NoArgsConstructor(access = A..
[SSA] 회원 도메인
·
SSA/Back
회원가입을 하게 되면 강사, 학생, 학부모로 나뉘어서 진행하게 됩니다. 기본적으로 공통 필드를 가진 Member로 묶어냅니다.Member의 모든 하위 클래스는 Member 클래스와 조인 전략을 사용합니다. - 조인 전략을 사용하게 되면 모든 Member의 id를 하나의 테이블에서 관리할 수 있어 회원 간 구분이 용이합니다.- 다만 하위 테이블에서 조회를 하게 되면 Member와 조인을 하게 되어 성능이 다소 떨어질 수 있습니다. 싱글 테이블 전략을 사용하지 않은 이유는- 테이블 간 메모리를 효율적으로 사용하고- 불필요하게 가지고 있는 컬럼을 제거하기 위함입니다 클래스마다 테이블 전략을 사용하지 않은 이유는- 회원 간 id가 겹칠 수도 있고- 여러 테이블을 함께 조회할 때 UNION을 사용하기 때문에 성능..
[Spring Boot] 스프링 부트를 실행하면 ?
·
Framework/Spring
스프링 부트를 실행하면 어떤 일이 발생할까 ?지금까지 {프로젝트명}Application 클래스의 static 메서드인 main을 실행하기만 했지 도대체 어떻게 동작하는지는 제대로 공부해 본 적이 없는 것 같아서 지금이야말로 공부해야겠다고 마음 먹었습니다.최대한 깊게 파 보고자 하니 혹시라도 누군가 이 글을 읽으시게 된다면 글이 항상 수정될 수 있다는 점 양해 부탁드립니다 ! 예시로 제가 만든 간단한 개인 프로젝트 코드를 가져 오겠습니다.package com.example.simplescheduleappback;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootAppl..
[Log] log4j, logback, log4j2 및 slf4j 등 .. 에러 핸들링
·
Framework/Spring
로그를 남기는 방법에는 여러 가지가 있습니다.여러분들은 로그를 남기는 이유가 무엇인가요 ?아마 대부분 로그를 통해 에러 핸들링이나 상황 추적을 하기 위함일 것입니다.저 또한 프로젝트를 진행하면서 상당한 에러를 마주하였고, 에러가 아니더라도 부작용이죠, 사이드 이펙트가 발생해서 고생 좀 했습니다.이때 필요한 여러 비용을 줄이기 위해서라도 로그를 잘 남기는 것이 중요합니다.제가 설정한 logback과 그에 관련한 로깅 프레임워크에 대해서 공부한 글을 작성해 보려고 합니다.글은 언제나 수정될 수 있으며 추가 또한 될 수 있다는 점 알아 주시기 바랍니다.그럼 시작하겠습니다. 먼저 제가 설정한 logback-spring.xml 부터 보여 드리겠습니다. ..
[SSA] 기능 설계
·
SSA/기획
간단한 과외 스케줄링 앱을 만들려고 합니다. 서비스 예상 이용자는 다음과 같습니다.강사학생학부모 필요한 기능은 다음과 같습니다.# 강사강사 회원 가입이름, 휴대폰 번호, 아이디, 비밀번호, 경력 기간을 설정합니다.강사 조회등록되어 있는 강사 정보를 확인합니다.강사 정보 수정이름, 휴대폰 번호, 아이디, 비밀번호를 수정할 수 있습니다.수업 등록수업 시작 시간 및 종료 시간을 설정합니다.짧은 메모를 추가할 수 있습니다.수업 조회일정 목록에서 확인할 수 있습니다.캘린더상에서 확인할 수 있습니다.수업 수정수업 시작 시간을 수정할 수 있습니다.수업 종료 시간을 수정할 수 있습니다.메모를 수정할 수 있습니다.수업 삭제수업 정보를 약삭제 합니다.면담 등록면담 시작 시간 및 종료 시간을 설정합니다.짧은 메모를 추가..