Skip to content

Redis를 활용한 교실 소통 플랫폼, Claksion 👨🏻‍🏫

Notifications You must be signed in to change notification settings

hyerimmy/Claksion

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Claksion 💥🚗💨

표지

Index


⚡️ 프로젝트 정보


🔥 작업 기간

  • 2024.04.26 - 2024.05.10

📌 프로젝트 및 기능 소개

Redis를 활용한 교실 소통 플랫폼

학급 내 친구들과 함께 소통할 수 있는 플랫폼, Claksion입니다.

  • 💬 친구들의 접속 현황을 실시간으로 확인하고, 단체 채팅방으로 소통할 수 있습니다.
  • 💺 빈번하게 진행하는 교실의 자리 배치를 웹에서 빠르고 간편하게 정할 수도 있습니다.
  • ✅ 학급 내 투표하고 싶은 것이 있다면, 투표를 올려 결과를 확인해보세요! 익명도 가능합니다.

➊ 회원가입 및 소셜 로그인

회원가입
회원가입
소셜 로그인 시, 등록되지 않은 계정일 경우 회원가입 절차가 진행됩니다.
카카오 로그인 네이버 로그인
카카오 로그인 네이버 로그인
카카오 소셜 로그인이 가능합니다. 네이버 소셜 로그인이 가능합니다.

➋ 실시간 접속 유저 리스트

실시간 접속 유저 리스트
실시간 접속 유저 리스트
같은 학급 내 친구들의 접속 현황이 실시간으로 반영됩니다.
👀 point. '황오복' 로그인 시 ACTIVE, 로그아웃 시 INACTIVE로 즉각 변경됩니다.

➌ 선착순 자리 선택

B2 자리 선택 [유저1 : ✅성공] B2 자리 선택 [유저2 : ❌실패]
선착순 자리 선택 성공 선착순 자리 선택 실패
빈 자리를 동시에 선택할 경우, 밀리초 단위로 더 빨리 선택한 유저가 성공합니다.

➍ 선착순 자리 선택 결과

자리 선택 결과 화면 참고 다량의 요청 발생 시 트래픽 처리 가능
선착순 자리 선택 결과
자리를 클릭하면, 해당 자리를 선택한 유저 리스트가 조회됩니다. 많은 인원이 요청할 경우, 밀리단위초로 우선순위가 결정됩니다.

➎ 자리 배치도 초기화

자리 배치도 초기화 [선생님 : ✅가능] 자리 배치도 초기화 [학생 : ❌불가능]
자리 배치도 초기화 가능 자리 배치도 초기화 불가능
선생님만 자리 배치도 초기화가 가능하며, 기존의 자리 주인이 모두 초기화됩니다. 학생은 자리 배치도 초기화가 불가능 합니다.

➏ 단체 채팅

단체 채팅 [유저1] 단체 채팅 [유저2]
단체 채팅 유저1 단체 채팅 유저2

➐ 실시간 투표

투표 생성
투표생성
제목, 항목, 익명유무, 마감일 등을 설정하여 투표를 생성할 수 있습니다.
투표 [유저1] 투표 [유저2]
단체 채팅 유저1 단체 채팅 유저2
투표 후 실시간 투표 현황을 확인할 수 있습니다.

🌳 탐구 목표

🧙 교실 속 필요한 다양한 소통에 Redis의 장점을 활용하며 탐구

  • Redis의 Sorted Set과 AOP의 Around를 활용해 부하를 줄인 '선착순 자리선택'기능을 개발한다.
  • Redis의 Pub/Sub 패턴Socket을 활용해 '실시간 채팅'기능을 개발한다.
  • Redis를 Session Storage로 사용함으로써 빠른 응답속도의 장점을 취하고, 현재 서비스에 로그인돼 있는 클라이언트 정보를 출력한다.

🏕️ 아키텍처

추가예정입니다.


🛠️ 기술 스택

Environment

Development

DataBase

Communication


📚 프로젝트 구조

파일트리
📦 
└─ src
   ├─ main
   │  ├─ java
   │  │  └─ com
   │  │     └─ claksion
   │  │        ├─ ClaksionApplication.java
   │  │        ├─ ServletInitializer.java
   │  │        ├─ app
   │  │        │  ├─ data
   │  │        │  │  ├─ dto
   │  │        │  │  │  ├─ ClassMate.java
   │  │        │  │  │  ├─ LoginUser.java
   │  │        │  │  │  ├─ OauthType.java
   │  │        │  │  │  ├─ SeatUser.java
   │  │        │  │  │  ├─ UserInfo.java
   │  │        │  │  │  ├─ enums
   │  │        │  │  │  │  └─ MessageType.java
   │  │        │  │  │  ├─ msg
   │  │        │  │  │  │  ├─ AdminMsg.java
   │  │        │  │  │  │  ├─ ChatRoom.java
   │  │        │  │  │  │  └─ Msg.java
   │  │        │  │  │  ├─ request
   │  │        │  │  │  │  ├─ ChatMessageRequest.java
   │  │        │  │  │  │  ├─ SelectSeatRequest.java
   │  │        │  │  │  │  └─ UpdateSeatUserRequest.java
   │  │        │  │  │  └─ response
   │  │        │  │  │     ├─ GetChatMessageResponse.java
   │  │        │  │  │     └─ GetSeatAndUserResponse.java
   │  │        │  │  └─ entity
   │  │        │  │     ├─ BaseEntity.java
   │  │        │  │     ├─ ClassroomEntity.java
   │  │        │  │     ├─ PollContentEntity.java
   │  │        │  │     ├─ PollEntity.java
   │  │        │  │     ├─ SeatEntity.java
   │  │        │  │     ├─ UserEntity.java
   │  │        │  │     └─ UserType.java
   │  │        │  ├─ frame
   │  │        │  │  ├─ BaseRepository.java
   │  │        │  │  └─ BaseService.java
   │  │        │  ├─ repository
   │  │        │  │  ├─ ClassroomRepository.java
   │  │        │  │  ├─ LoginUserRepository.java
   │  │        │  │  ├─ PollContentRepository.java
   │  │        │  │  ├─ PollRepository.java
   │  │        │  │  ├─ SeatRepository.java
   │  │        │  │  └─ UserRepository.java
   │  │        │  └─ service
   │  │        │     ├─ ClassroomService.java
   │  │        │     ├─ PollContentService.java
   │  │        │     ├─ PollService.java
   │  │        │     ├─ RankingService.java
   │  │        │     ├─ RedisMessageSubscriber.java
   │  │        │     ├─ SeatSelectService.java
   │  │        │     ├─ SeatService.java
   │  │        │     ├─ UserService.java
   │  │        │     ├─ WebSocketHandler.java
   │  │        │     ├─ aop
   │  │        │     │  ├─ AroundValidSeatOnRedis.java
   │  │        │     │  └─ SeatValidAop.java
   │  │        │     ├─ chat
   │  │        │     │  ├─ ChatRoomRepository.java
   │  │        │     │  ├─ MessageService.java
   │  │        │     │  ├─ RedisMessageStorage.java
   │  │        │     │  ├─ RedisPublisher.java
   │  │        │     │  ├─ RedisService.java
   │  │        │     │  └─ RedisSubscriber.java
   │  │        │     └─ oauth
   │  │        │        ├─ KakaoService.java
   │  │        │        └─ NaverService.java
   │  │        ├─ config
   │  │        │  ├─ JasyptConfig.java
   │  │        │  ├─ RedisConfig.java
   │  │        │  ├─ SecurityConfig.java
   │  │        │  └─ StomWebSocketConfig.java
   │  │        └─ controller
   │  │           ├─ ChatController.java
   │  │           ├─ ChatRoomController.java
   │  │           ├─ MainController.java
   │  │           ├─ MessageController.java
   │  │           ├─ PollController.java
   │  │           ├─ RedisController.java
   │  │           ├─ SeatController.java
   │  │           ├─ SeatRestController.java
   │  │           ├─ UserController.java
   │  │           └─ UserRestController.java
   │  ├─ resources
   │  │  ├─ application-aws.yml
   │  │  ├─ application-dev.yml
   │  │  ├─ application.yml
   │  │  ├─ log4jdbc.log4j2
   │  │  ├─ logback.properties
   │  │  ├─ mapper
   │  │  │  ├─ classroommapper.xml
   │  │  │  ├─ pollcontentmapper.xml
   │  │  │  ├─ pollmapper.xml
   │  │  │  ├─ seatmapper.xml
   │  │  │  └─ usermapper.xml
   │  └─ webapp
   │     └─ views
   │        ├─ chat.jsp
   │        ├─ chat
   │        │  ├─ room.jsp
   │        │  └─ roomdetail.jsp
   │        ├─ chatTest.jsp
   │        ├─ home.jsp
   │        ├─ index.jsp
   │        ├─ login.jsp
   │        ├─ loginother.jsp
   │        ├─ poll_creation.jsp
   │        ├─ poll_final_result.jsp
   │        ├─ poll_form.jsp
   │        ├─ poll_list.jsp
   │        ├─ poll_result.jsp
   │        ├─ register.jsp
   │        ├─ reservation.jsp
   │        ├─ seat.jsp
   │        ├─ seat_result.jsp
   │        └─ seat_select.jsp

🦸🏻‍ 팀원 및 역할

김하영 한원희 황혜림
투표 순위 및 투표 유저 관리
실시간 투표 현황
Websocket, Stomp, Redis Pub/Sub
실시간 채팅 구현
Redis 세션관리
소셜 로그인 및 Redis 세션 관리
Redis, SSE 실시간 접속 유저 현황
Redis 자리 선착순 선택 및 결과 확인

About

Redis를 활용한 교실 소통 플랫폼, Claksion 👨🏻‍🏫

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 42.7%
  • SCSS 42.2%
  • JavaScript 14.6%
  • CSS 0.5%