Skip to content

jyparkDev/Knock

 
 

Repository files navigation


image



Knock 🚪

B2B SaaS 사내문서 검색서비스


1. Search

  • #동료에게물어보기힘든것 #내가놓친것
  • 고민하지 말고 Knock에 물어보자!
  • 헝태소 분석과 중요도 계산으로 연관성이 높은 게시글이 빠르게 검색 돼요!

2. Security

  • #사내문서 #보안이생명
  • 각 회사별 Admin이 있고, Admin을 통해서만 Member를 등록할 수 있어요.
  • 읽기/수정하기 권한을 직급별로 부여할 수 있어요!

3. Community

  • 카테고리를 나누어, 용도별로 관리해요!
  • 게시글의 편집 상태를 확인할 수 있고, 동료가 편집이 끝나면 알림을 받을 수 있어요.
  • 댓글과 편집 로그를 통해 소통이 활발한 사내분위기를 만들어요!

4. D.I.Y

  • #내가원하는대로 #내맘대로 #다꾸아닌문꾸
  • 즐겨찾기 기능이 있어, 내가 원하는 글을 원하는 폴더에 넣어 꾸밀 수 있어요!
  • 즐겨찾기 폴더는 나만 볼 수 있으니, 안심하고 넣을 수 있어요!



Knock Backend Team

이름 Github
BE 팀장 김여원 https://github.com/YeowonKIM
BE 팀원 김나현 https://github.com/hunny-A
BE 팀원 박재용 https://github.com/jyparkDev
BE 팀원 정선연 https://github.com/sunyeon-Jeong



프로젝트 세부사항

  • 구현 영상

  • 구현목표

    • 검색 성능 : 형태소 분석을 통한 정확하고 빠른 검색 결과 제공
    • 편집상태 알림 : 게시글의 편집상태를 보여주고, 편집이 완료되면 알림 제공
    • 개인별 문서 관리 : 자신이 작성한 문서를 관리하고, 필요한 사내 문서들은 폴더로 관리
    • 게시글 공유 커뮤니티 : 댓글을 통해 소통하고, 편집 로그를 확인하여 다른 직원들의 편집 내역을 조회 가능
    • 로그 기능 : 게시글이 편집되어 왔던 기록을 과거와 현재로 모두 열람 가능
  • 구현기능

    • 검색 및 유형별 조회 기능
    • 게시물 상세페이지 기능
    • 마이페이지, 즐겨찾기 기능
    • 관리자 페이지 기능 (회사, 사원, 카테고리 등 관리)
    • 댓글, 로그 기능
  • 기간 :

    • 2023.03.10 ~ 2023.04.21




Tech Stack











Service Architecture

🛠️ image


ERD

ERD 펼쳐보기

image



API 명세서

📂 Swagger 바로가기
📂 API 바로가기



주요 기능

문서 검색 및 유형별 조회 기능 편집상태 조회 기능
검색 조회 편집상태
- 제목, 내용, 키워드 조회를 통한 우수한 검색 성능
- 카테고리별 검색
- 검색 필터(연관순, 댓글순, 조회순, 최신순) 제공
- 게시글 편집 상태 조회
- 편집 완료된 경우 수정을 원하는 사용자에게 알림
관리자 페이지 기능 댓글 및 로그 기능
관리자 댓글로그
- 직원의 직급 및 권한 관리
- 사내 게시글의 카테고리 등록 및 관리
- 댓글로 커뮤니티 기능
- 로그를 통해 이전과 이후 게시글 비교 가능



Trouble Shooting

💡 자세한 사항과 수치 및 통계자료는 토글 아래 링크를 통해 확인해 주세요.

검색 성능 개선

(1) [STEP1]  검색 성능 문제와 원인 분석, 개선방향

  • 문제 : 실행환경(Local, EC2 서버 등)에 따라 속도와 성능 차이가 큼.
              검색 조회, 특히 키워드 검색 부분의 속도가 현저히 느림.
  • 원인 : 라이브러리의 비효율적인 사용, 불필요한 쿼리
  • 개선방향 : Jmeter(부하테스트)와 AOP Execution Timer(실행시간 측정) 도입
                    ➡︎ 단계별로 향상된 성능과 실행 속도를 측정해 나감.
    👉 https://www.notion.so/STEP1-fad9129c662e44859f1ff7d4df0dd75f

(2) [STEP2]  형태소 분석 라이브러리의 설정 변경

  • 문제 및 원인 : Komoran 라이브러리 자체의 실행속도가 느림. (실행 속도의 2/3이상을 차지)
                         해당 라이브러리의 메모리 사용 문제.
  • 해결 : 형태소 분석에 사용하는 설정을 변경함으로써 메모리 최적화.
  • 결과 : 부하테스트 쓰레드 10배 정도 증가 가능(40 -> 400)
              실행속도 1/10 (1.5초 -> 0.5초대로 개선)
    👉 https://www.notion.so/STEP2-4bd04dd85a6e4edb9b5e8dc47f6fcc27

(3) [STEP3]  키워드 검색시 쿼리 개선 (Query DSL 적용)

  • 문제 : 라이브러리를 light한 버전으로 바꾸었지만 느린 검색 속도 (500ms 정도)
  • 원인 : 키워드와 카테고리 검색 시, 비효율적인 쿼리문 (contain, join 등)
  • 해결 : 제목, 내용, 키워드마다 반복적으로 나가던 쿼리를 한 번의 동적 쿼리로 처리.
  • 결과 : 부하테스트 쓰레드 700->2500으로 증가
              실행시간은 400~500ms에서 300ms 정도로 단축됨.
    👉 https://www.notion.so/STEP3-Query-DSL-939026377148406f93c7a571b767cd42

(4) [STEP4]  검색 결과 정렬 시 쿼리 개선

  • 문제 및 원인 : 검색 필터 적용 시, 쿼리의 부적절한 사용
  • 해결 : ‘관심도, 조회수, 댓글수, 생성일자’ 등 검색 결과 정렬 시 동적쿼리로 한 번에 처리 (OrderSpecifier를 사용한 메서드)
  • 결과 : 실행속도 200~300ms -> 100ms 이하로 단축
              부하테스트 결과는 thread 2500정도로 비슷하게 유지.
    👉 https://www.notion.so/STEP4-Query-b142f6187b964433a73e4118458bc35c
SSE

(1) 편집 상태를 알고, 편집이 완료 되면 알림을 보내는 기능을 위해 API call 대신 다른 방식을 고민함.
(2) SSE는 서버- 클라이언트의 단방향 통신으로 지속적인 연결을 통해, 서버의 데이터를 실시간으로 클라이언트로 보낸다는 점과
    처음 한 번 맺은 HTTP 연결을 통해 서버는 클라이언트로 지속적으로 데이터 전송이 가능하다는 점에서 사용함.
👉 https://www.notion.so/SSE-d46754926bdd4ba2a69be6a6e94405a2
임시 인증코드 저장

(1) 아이디와 비밀번호를 잊었을 때 확인할 수 있는 인증코드를 발급받을 경우, 일정 시간동안 임시로 인증코드를 어떻게 유지할지 고민함.
(2) 임시 인증코드는 오래 저장할 필요가 없기도 하고, 중요하지 않은 데이터를 찾을 때 발생하는 시간과 부담을 줄이기 위해 Redis를 선택함.
(In-memory 형태로 운영중인 웹 서버에서 I/O가 빈번히 발생할때 주로 사용한다는 점과 만료일을 지정하면 만료된 데이터는 캐시처럼 사라진다는 점에서 도입)
👉 https://www.notion.so/Redis-5f74e46c591d47108d4bf692b29ba3aa
CI / CD

  • 문제 상황 : Github Actions 스크립트 파일 중 EC2 서버에서 Docker Image 실행 실패 에러.
  • 원인 : SSH로 Knock EC2 서버를 연결하려 할 때 거부됨.
  • 해결 : Github-Actions의 secrets의 key 설정을 pem.key와 ec2의 password 두 방법으로 해 보고 해결됨.
    👉 https://www.notion.so/CI-CD-78da8d9f7b4f4f6bba947b7e7ffda2b1




header

About

항해12기 실전 프로젝트

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Java 98.8%
  • HTML 1.1%
  • Dockerfile 0.1%