P-jeong-hee / Coala

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Co-ala 코딩! 알려주라image


🤷 프로젝트 소개

co-ala 코딩! 알려주라

안녕하세요! 항해99 5기 8조 "코알라” 팀입니다
“코알라”는 코딩 관련하여 질문 사항이 있는 사람이 채팅과 게시글을 통해 질문 하고 응답을 받을 수 있는 사이트입니다.

이런 분에게 좋아요!👍🏻

“빠르게 해결하고 싶은데 답변이 안달려 답답해요”😮‍💨
“에러가 발생했는데 어떻게 해결해야할지 모르겠어요”🥲
“자료는 많은데 어떻게 해결 방법을 적용해야할지 복잡해요”😵‍💫
당신이 직면한 문제! 당신만의 문제가 아닙니다. 공유하고 함께 해결해요! 코딩! 알려주라~

👉🏻Web Site : https://www.co-ala.com

(d2drmli0uyajuu.cloudfront.net , 도메인 연결 전 주소입니다. 도메인 접속이 불가하시면 이쪽 주소로 접근바랍니다)


📌 Co-ala의 핵심 기능

  • 메인 페이지 및 게시글 페이지 별 실시간 채팅 구현 ✨

  • 채팅 별 접속 인원수 표기 🔢

  • 답변 채택 및 답변 작성 알람 기능🗨️

  • 채택에 따른 포인트 획득 및 종합, 월간, 주간 랭킹 시스템👑

🎥 시연 영상

바로가기 -> https://youtu.be/Vwd4n9a205M

👩🏻‍💻 개발기간 및 팀원소개 🧑🏻‍💻

기간: 2022.02.25 ~ 2022.04.08

Front-end

Back-end


🔨 사용한 기술 스택 🔨

Front-end

Back-end


Tool


🏷 API Table 🏷

아키텍처

image

ERD

image

API

image image image image image


⚽ Trouble Shooting

(1) 채팅 비속어 필터링 1. 문제 발생 : 처음 비속어 필터링을 구현할 때 매 채팅 시마다 DB에 저장한 비속어들을 리스트로 받아서 반복문을 통해 비속어 감지하여 속도 저하

image 2. 원인 : 비속어 DB는 자주 변하는 것이 아니고, DB를 계속해서 조회
3. 해결 : 인메모리 디비를 활용할 수 있다고 생각하여 비속어 디비에서 레디스로 내려받아 저장을 하였고, 데이터 구조를 리스트가 아닌 해쉬맵으로 받아 containsValue 메소드를 통해 비속어를 감지하여 반복작업 감소

image

(2) 채팅 참여 인원수 확인 1. 문제 발생 : 채팅 참여 인원은 정상적으로 카운팅이 되었지만 채팅 퇴장 인원은 정상적으로 카운팅이 안되는 문제 발생
스크린샷 2022-04-07 오후 7 19 02
  1. 원인 : 연결이 끊어지는 경우 구독 정보를 리턴해주지 않아 유저가 채팅방 퇴장 시 정상적으로 카운팅이 되지 않음
  • 해당 채팅을 구독하면 Message Header의 destination정보를 키값으로 유저 카운팅을 했지만 연결이 끊기면 Message Header에 destination정보가 없어 채팅 참여 인원수 카운팅을 할 수 없는 원인을 찾음
  1. 해결 : 유저가 구독한 채팅방 정보와 유저 SessionId를 매핑하여 저장
    • 유저가 채팅방을 구독한 경우와 연결을 끊었을 경우 Message Header(메시지 헤더)에서 어떤 정보를 return해주는지 로그를 남겼고 모두 SessionId를 return 해주는 것을 확인했습니다. 유저가 구독한 채팅방 정보와 SessionId를 매핑하여 저장하였고 퇴장 시 해당 SessionId로 매핑해두었던 채팅방 정보를 조회하여 해당 키값에서 유저 카운팅을 했습니다.
스크린샷 2022-04-07 오후 7 18 01
(3) EC2 램 초과로 인한 서버 다운 1. 문제 발생 : CI/CD -> 무중단 배포를 시도하면서 깃 허브 푸쉬 후 서버 다운 현상이 생김
  1. 원인 : 무중단 배포를 하면서 스프링부트 서버가 2개가 돌아가는 과정에서 서버 램 부하로 인한 다운 현상이 발생을 확인

  2. 해결 : 리눅스 스와핑을 통한 가상메모리 생성 및 사용

    • 리눅스는 하드디스크를 가상 메모리로 전환시켜 사용할 수 있음을 확인하여 이를 토대로 가상메모리 생성하여 사용하기로 함
    • AWS 권장사양에 따라 RAM이 2GB이하 일 때 권장 스왑 공간은 RAM 용량의 2배인 2GM로 선정
    • 스왑 파일 생성 및 권한을 주어 실행하여 기존 RAM 초과 시 스와핑을 통해 추가 RAM 사용 image

About


Languages

Language:Java 97.3%Language:Shell 2.7%