- 디지털 하나로 2기 개발반 1차 프로젝트
- 2024.04.26 - 2024.05.10
Redis를 활용한 교실 소통 플랫폼
학급 내 친구들과 함께 소통할 수 있는 플랫폼, Claksion입니다.
- 💬 친구들의 접속 현황을 실시간으로 확인하고, 단체 채팅방으로 소통할 수 있습니다.
- 💺 빈번하게 진행하는 교실의 자리 배치를 웹에서 빠르고 간편하게 정할 수도 있습니다.
- ✅ 학급 내 투표하고 싶은 것이 있다면, 투표를 올려 결과를 확인해보세요! 익명도 가능합니다.
회원가입 |
---|
소셜 로그인 시, 등록되지 않은 계정일 경우 회원가입 절차가 진행됩니다. |
카카오 로그인 | 네이버 로그인 |
---|---|
카카오 소셜 로그인이 가능합니다. | 네이버 소셜 로그인이 가능합니다. |
실시간 접속 유저 리스트 |
---|
같은 학급 내 친구들의 접속 현황이 실시간으로 반영됩니다. 👀 point. '황오복' 로그인 시 ACTIVE, 로그아웃 시 INACTIVE로 즉각 변경됩니다. |
B2 자리 선택 [유저1 : ✅성공] | B2 자리 선택 [유저2 : ❌실패] |
---|---|
빈 자리를 동시에 선택할 경우, 밀리초 단위로 더 빨리 선택한 유저가 성공합니다. |
자리 선택 결과 화면 | 참고 다량의 요청 발생 시 트래픽 처리 가능 |
---|---|
자리를 클릭하면, 해당 자리를 선택한 유저 리스트가 조회됩니다. | 많은 인원이 요청할 경우, 밀리단위초로 우선순위가 결정됩니다. |
자리 배치도 초기화 [선생님 : ✅가능] | 자리 배치도 초기화 [학생 : ❌불가능] |
---|---|
선생님만 자리 배치도 초기화가 가능하며, 기존의 자리 주인이 모두 초기화됩니다. | 학생은 자리 배치도 초기화가 불가능 합니다. |
단체 채팅 [유저1] | 단체 채팅 [유저2] |
---|---|
투표 생성 |
---|
제목, 항목, 익명유무, 마감일 등을 설정하여 투표를 생성할 수 있습니다. |
투표 [유저1] | 투표 [유저2] |
---|---|
투표 후 실시간 투표 현황을 확인할 수 있습니다. |
🧙 교실 속 필요한 다양한 소통에 Redis의 장점을 활용하며 탐구
- Redis의 Sorted Set과 AOP의 Around를 활용해 부하를 줄인 '선착순 자리선택'기능을 개발한다.
- Redis의 Pub/Sub 패턴과 Socket을 활용해 '실시간 채팅'기능을 개발한다.
- Redis를 Session Storage로 사용함으로써 빠른 응답속도의 장점을 취하고, 현재 서비스에 로그인돼 있는 클라이언트 정보를 출력한다.
추가예정입니다.
파일트리
📦
└─ 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 자리 선착순 선택 및 결과 확인 |