Git Product home page Git Product logo

notification-server's Introduction

Notification Service

logo

Kotlin Spring Boot JVM Kafka Mongodb

Kafka를 사용하여 Server Sent Event를 활용하는 알림 서비스

1. Quick Starter

해당 프로젝트를 실행하기 위해서는 반드시 Docker가 필요합니다.

#!/bin/bash

sh ./script/quick-starter.sh

notification-server's People

Contributors

kimsei1124 avatar

Forkers

kimsei1124

notification-server's Issues

사용자 인증 기능을 구현한다.

📑 개요

해당 서버에서는 사용자를 인증할 수 있는 기능이 없습니다.
그래서 인증할 수 있는 다른 서버로 요청을 보낸 후 결과를 받아 인증 여부를 확인합니다.

해당 기능을 어노테이션으로 처리하여 전송받은 값을 확인한 뒤 필요한 값을 가져오는 기능을 만듭니다.

AuthClient

🚀 상세 작업 내용


  • AuthClient 완성
  • 어노테이션 생성 및 기능 구현
  • 테스트 코드 작성

⏰ 예상 소요 시간


하루

📁 ETC


Kafka 환경 설정 클래스를 작성한다.

📑 개요

알림 서버에서 사용하는 kafka의 환경 설정을 추가합니다.

🚀 상세 작업 내용


  • Properties 환경 설정
  • 직렬화, 역직렬화 설정

⏰ 예상 소요 시간


1시간

📁 ETC


SSE Emitter 비즈니스 로직 테스트 코드를 작성한다.

📑 개요

SseEmitter 관련 테스트 코드가 존재하지 않습니다.
연결하고, 알림을 보내는 테스트 코드가 필요하다고 느껴 해당 기능에 대한 테스트 코드를 작성합니다.

Target: NotificationServiceImpl

🚀 상세 작업 내용


  • connections 테스트 코드 작성
    • sseEmitterCallback 테스트 코드 작성
  • sendMessage 테스트 코드 작성

⏰ 예상 소요 시간


4시간

📁 ETC


Local 동작환경을 구성한다.

📑 개요

로컬에서 동작할 수 있는 환경을 구성합니다.

🚀 상세 작업 내용


  • embedded redis
  • embedded mongodb
  • profile 분리
  • shell script 작성

⏰ 예상 소요 시간


3시간

📁 ETC


SSE Domain을 작성한다.

📑 개요

해당 프로젝트에서 사용하는 SSE 도메인을 작성합니다.

사용자의 닉네임이 수정될 수 있기 때문에 ~~~ 을 합니다.

🚀 상세 작업 내용


  • Custom SSE Object 생성 ( Value: 사용자의 닉네임, SSE )
  • SSE Repository 작성 ( CRUD )

⏰ 예상 소요 시간


2시간

📁 ETC


Kafka 테스트 코드를 작성한다.

📑 개요

해당 PR에서 카프카 연결 기능을 만들었습니다. 아직 재대로 동작하는지 검증하는 테스트 코드가 없습니다.
그래서 필요한 기능마다 테스트 코드를 작성합니다.

🚀 상세 작업 내용


  • Kafka 테스트 환경 구성
  • GroupKafka 테스트 코드 작성
  • ScheduleKafka 테스트 코드 작성
  • Producer 테스트 코드 작성

⏰ 예상 소요 시간


하루

📁 ETC


Java 21을 도입한다.

📑 개요

현재 코틀린으로 사용했지만 자바 21에서 나온 가상 쓰레드가 코루틴보다 더 좋다는 의견이 많아 현재 진행된 코드를 Java21로 마이그레이션합니다.

🚀 상세 작업 내용


  • Java21 프로젝트 생성
  • SSE 코드 작성
  • Kafka 코드 작성

⏰ 예상 소요 시간


2주

📁 ETC


SSE Emitter Repository 테스트 코드를 작성한다.

📑 개요

SseEmitterRepository 에 대한 테스트 코드가 존재하지 않습니다.
아래의 코드를 검증하는 테스트 코드를 작성합니다.

@Repository
class SseEmitterRepository(
    private val emitters: ConcurrentHashMap<Int, SseEmitter> = ConcurrentHashMap(),
) {
    fun save(memberId: Int, sse: SseEmitter): SseEmitter {
        emitters[memberId] = sse;
        return sse
    }

    fun findByMemberId(memberId: Int): SseEmitter? {
        return emitters[memberId]
    }

    fun deleteById(memberId: Int) {
        emitters.remove(memberId)
    }
}

🚀 상세 작업 내용


  • save 테스트 코드 작성
  • findByMemberId 테스트 코드 작성
  • deleteById 테스트 코드 작성
  • findBy와 deleteBy 의 네이밍 규칙 정하기

⏰ 예상 소요 시간


4시간

📁 ETC


findById VS findByMemberId ... 좀더 명확한 이름이 필요할 것 같습니다.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.