1. Search
- #동료에게물어보기힘든것 #내가놓친것
- 고민하지 말고 Knock에 물어보자!
- 헝태소 분석과 중요도 계산으로 연관성이 높은 게시글이 빠르게 검색 돼요!
2. Security
- #사내문서 #보안이생명
- 각 회사별 Admin이 있고, Admin을 통해서만 Member를 등록할 수 있어요.
- 읽기/수정하기 권한을 직급별로 부여할 수 있어요!
3. Community
- 카테고리를 나누어, 용도별로 관리해요!
- 게시글의 편집 상태를 확인할 수 있고, 동료가 편집이 끝나면 알림을 받을 수 있어요.
- 댓글과 편집 로그를 통해 소통이 활발한 사내분위기를 만들어요!
4. D.I.Y
- #내가원하는대로 #내맘대로 #다꾸아닌문꾸
- 즐겨찾기 기능이 있어, 내가 원하는 글을 원하는 폴더에 넣어 꾸밀 수 있어요!
- 즐겨찾기 폴더는 나만 볼 수 있으니, 안심하고 넣을 수 있어요!
이름 | 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
문서 검색 및 유형별 조회 기능 | 편집상태 조회 기능 |
---|---|
- 제목, 내용, 키워드 조회를 통한 우수한 검색 성능 - 카테고리별 검색 - 검색 필터(연관순, 댓글순, 조회순, 최신순) 제공 |
- 게시글 편집 상태 조회 - 편집 완료된 경우 수정을 원하는 사용자에게 알림 |
관리자 페이지 기능 | 댓글 및 로그 기능 |
---|---|
- 직원의 직급 및 권한 관리 - 사내 게시글의 카테고리 등록 및 관리 |
- 댓글로 커뮤니티 기능 - 로그를 통해 이전과 이후 게시글 비교 가능 |
💡 자세한 사항과 수치 및 통계자료는 토글 아래 링크를 통해 확인해 주세요.
검색 성능 개선
(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