1. Search
- #ThingsYouCanβtAskCoworkers #WhatYouMissed
- Donβt hesitateβask Knock!
- Posts highly related to your query are quickly retrieved using morpheme analysis and importance ranking.
2. Security
- #InternalDocuments #SecurityIsKey
- Each company has its own Admin, and only the Admin can register Members.
- Read/edit permissions can be assigned based on employee rank.
3. Community
- Categorize and manage documents by use case.
- Easily check the edit status of a post, and receive notifications once a colleague finishes editing.
- Foster a collaborative work environment through comments and edit logs!
4. D.I.Y
- #YourWay #CustomizeFreely #DocumentDecorNotPlannerDecor
- Use the favorites feature to save posts into your own folders, organized just the way you want!
- Favorite folders are private, so you can save freely with peace of mind.
| Name | Github | |
|---|---|---|
| BE Lead | Yeowon Kim | https://github.com/YeowonKIM |
| BE Member | Nahyun Kim | https://github.com/hunny-A |
| BE Member | Jaeyong Park | https://github.com/jyparkDev |
| BE Member | Sunyeon Jeong | https://github.com/sunyeon-Jeong |
-
- Search Performance: Fast and accurate results using morpheme analysis
- Edit Status Notifications: Show editing status and notify when edits are complete
- Personal Document Management: Manage your own posts and organize internal documents in folders
- Post Sharing Community: Comment-based communication and access to edit history
- Log Functionality: View past and current versions of edited posts
-
- Search and category-based filtering
- Post detail page
- My Page and Favorites
- Admin page (managing companies, employees, categories, etc.)
- Comments and edit logs
-
- 2023.03.10 ~ 2023.04.21
| Admin Page | Comments & Edit Logs |
|---|---|
| - Manage employee roles and permissions - Manage document categories |
- Communicate via comments - Compare before/after versions via logs |
π‘ For details, data, and statistics, check the links under each toggle.
Improving Search Performance
(1) [STEP1] Identifying and addressing performance issues
- Problem: Speed and performance varied by environment (Local, EC2).
- Cause: Inefficient library usage and redundant queries
- Solution: Introduced JMeter for load testing and AOP Execution Timer for performance tracking π https://www.notion.so/STEP1-fad9129c662e44859f1ff7d4df0dd75f
(2) [STEP2] Optimizing morpheme analysis settings
- Issue: Komoran library was too slow and used excessive memory
- Solution: Adjusted settings to optimize memory usage
- Result: Load threads increased 10x (40 β 400); execution time reduced to 1/10 (1.5s β 0.5s) π https://www.notion.so/STEP2-4bd04dd85a6e4edb9b5e8dc47f6fcc27
(3) [STEP3] Query optimization with QueryDSL
- Problem: Still slow (500ms) even with a lighter library
- Cause: Inefficient queries for keyword/category search
- Fix: Combined separate queries into a single dynamic query
- Result: Load capacity increased (700 β 2500 threads); time reduced to ~300ms π https://www.notion.so/STEP3-Query-DSL-939026377148406f93c7a571b767cd42
(4) [STEP4] Improving sorting query performance
- Problem: Poor query structure when applying filters
- Fix: Used dynamic queries with OrderSpecifier for sorting (e.g., by interest, views, comments, date)
- Result: Execution time reduced to <100ms, stable under 2500 threads π https://www.notion.so/STEP4-Query-b142f6187b964433a73e4118458bc35c
SSE
(1) Needed real-time edit status notifications without frequent API calls
(2) Used SSE for one-way, persistent communication from server to client
π https://www.notion.so/SSE-d46754926bdd4ba2a69be6a6e94405a2
Temporary Auth Code Storage
(1) Needed short-term storage for password recovery codes
(2) Used Redis due to its in-memory efficiency and automatic expiration
π https://www.notion.so/Redis-5f74e46c591d47108d4bf692b29ba3aa
CI / CD
- Issue: Docker image failed to run from Github Actions on EC2
- Cause: SSH connection to Knock EC2 server was refused
- Fix: Resolved by adjusting `secrets` settings in Github Actions (pem.key and EC2 password)
π https://www.notion.so/CI-CD-78da8d9f7b4f4f6bba947b7e7ffda2b1
