Releases: boostcampwm-2024/refactor-web39-OctoDocs
Releases · boostcampwm-2024/refactor-web39-OctoDocs
v1.3.1
🫶🏻 사용성 개선에 힘썼습니다.
백스페이스 문서 삭제 기능 개선
- 캔버스 내에서 백스페이스 시 문서는 사라지지만 실제 적용되지 않는 문제 해결
- react flow에서 처리하는 remove 이벤트 없애고 프로젝트에서 진행하는 로직이 실행되도록 변경
- 모달 생성 후 삭제
- 코드 구조 일부 수정
- useNoteList -> shared로 이동
- RemoveNoteModal -> feature/canvas/ui로 이동
🛠️ 버그를 수정했습니다.
카카오 소셜 로그인 버그 수정
- client id와 client secret 수정
- JWT secret이 일치하지 않아 토큰 인증 되지 않던 문제 해결
What's Changed
- v1.3.0 배포 by @ezcolin2 in #101
- JWT secret 환경 변수에서 조회 by @ezcolin2 in #103
- 노드 백스페이스 삭제 기능 개선 by @pkh0106 in #104
- v1.3.1 버전 배포 by @ezcolin2 in #105
Full Changelog: v1.3.0...v1.3.1
v1.3.0
⚙️ 새로운 기능을 개발했습니다.
LLM 응답 중단 기능 개발
- 버튼 클릭 시 응답을 받는 reader를 cancel하여 즉시 중단 #95
- 응답 중단 요청 API 연동 #99
- AbortController로 Open AI API 강제 중단 #97
- 사용자 요청이 들어오면 nginx request id를 key로 Map에 AbortController 저장
- LLM API와 AbortSignal 연동
- 응답 스트리밍 API에서 AbortError를 감지하면 응답 즉시 중단
🫶🏻 사용성 개선에 힘썼습니다.
RAG 질문 history 구현 #91
- 이전 질문 내역을 관리하는 상태 추가
- zustand를 사용하여 상태 관리
- 최신 질문과 이전 질문 목록을 분리하여 관리
- 최신 순으로 구현
- QnA 컴포넌트 분리 및 디자인 변경
- 스크롤 이동 시 애니메이션 추가
useEffect: 최신 질문 변화 감지scrollIntoView: 최신 질의 컴포넌트로 스크롤 이동
키워드 기반 검색 및 hybrid 검색 성능 개선 #93
- 한국어 형태소 분석기 mecab 설치 후 postgres와 연동
- tsvector 저장할 때 mecab 사용하여 키워드 저장
- 검색할 때 문서 내용보다 문서 제목에 높은 가중치
- 문서를 구분하지 못 하는 이슈가 있어 검색한 문서를 prompt에 넣어줄 때 구분자 추가
API 서버의 스케줄러를 별도 서버로 분리 #90
- 원격 서버에 GPU가 없어 임베딩을 CPU로 수행
- 여러 문서에 대한 임베딩 수행 시 Nest 메인 스레드가 블록킹 되어 API 요청이 늦어지는 이슈 발생
- 임베딩 로직을 별도의 프로세스로 분리하여 임베딩 수행 도중 API 요청 가능
DB 모듈 분리 #90
- backend 서버와 scheduler를 별도의 workspace로 분리하면서 DB 로직 중복
- Nest library 기능 활용하여 DB 로직 library로 분리
What's Changed
- Refactor be #37 by @ezcolin2 in #88
- API 서버의 스케줄러를 별도 서버로 분리 by @ezcolin2 in #90
- RAG 질문 history 구현 by @pkh0106 in #91
- 키워드 기반 검색 및 hybrid 검색 성능 개선 by @ezcolin2 in #93
- 응답 생성 중단 기능 구현 by @pkh0106 in #95
- LLM 응답 중단 기능 개발 by @ezcolin2 in #97
- 스트리밍 응답 중단 API 연동 by @pkh0106 in #99
- RAG 답안 react-markdown 적용 by @pkh0106 in #100
Full Changelog: v1.2.1...v1.3.0
v1.2.1
🫶🏻 사용성 개선에 힘썼습니다.
스트리밍을 통한 RAG 실시간 답변 생성 #75
- LLM streaming 기능으로 응답을 chunk 단위로 수신
- text/event-stream으로 실시간 chunk 전달
- POST 요청을 이용하여 event-stream 연결
- 스트림 응답을 처리할 수 있도록
ReadableStream인터페이스를 제공하는 fetch API 사용 - LLM 호출 API의 경우 스트리밍을 위해 Nginx buffering 옵션 OFF
- 스트리밍을 통해 가져온 답변의 띄어쓰기가 이상하게 출력되는 이슈 발생 #78
- 클라이언트 데이터 파싱 과정에서
\n문자 제거
- 클라이언트 데이터 파싱 과정에서
문서 유사도 검색 성능 향상 #85
- 키워드 기반 Full Text Search 구현
- document를 tsvector로 변환하는 Stored Generated Column 생성
- tsvector 컬럼에 GIN 인덱스 적용
- FTS와 Vector 유사도로 RRF 구현
- 키워드 기반 FTS의 순위와 vector 기반 유사도 검색 순위를 통해 RRF 적용
로컬 임베딩 모델로 변경 #79
- 로컬 cpu로 동작할 수 있는HuggingFaceTransformersEmbeddings 모델로 변경하여 API 사용 횟수 감소
- node alpine 이미지를 node slim 이미지로 변경하여 C 표준 라이브러리를 glibc로 변경
UI/UX 개선 #78
- RAG 패널을 닫고 열어도 질문이 유지되도록 개선
- zustand를 활용하여 전역에서 관리하여 유지
- functional update를 적용하여 답변 실시간 갱신
- 질문과 답변 사이 구분선이 최대 가로 값을 가지도록 개선
w-full설정
- 디바이스 배율 별 크기가 다른 문제 개선
- px → vw
- 예시 질문 컴포넌트 추가 #82
- 사용자가 기능 사용에 도움이 되도록 컴포넌트 추가
- 클릭하면 질문을 하는 등의 이벤트는 없음
- 워크스페이스마다 기반이 되는 문서가 다르기 때문
What's Changed
- refactor: HTTP POST 방식으로 SSE 구현하여 스트리밍 적용 by @ezcolin2 in #75
- refactor : RAG 기능 FE 개선 by @pkh0106 in #78
- 임베딩 모델 로컬로 변경 by @ezcolin2 in #79
- fix: postgres vector extension 활성화 by @ezcolin2 in #81
- feat : 예시 질문 컴포넌트 구현 by @pkh0106 in #82
- 유사한 문서 검색 성능 개선 by @ezcolin2 in #85
- v1.2.1 배포 by @ezcolin2 in #86
Full Changelog: v1.2.0...v1.2.1
v1.2.0
New Features
RAG 기능
- RAG API 구현
- vector store 구축
- postgres에 pgvector extension 설치
- OpenAI의 text-embedding-3-small 모델 활용하여 임베딩
- PGVector vector store 사용하여 document 테이블에 vector 정보 저장
- document 테이블에서 유사도 기반 문서 검색
- migrate 함수에서 변경 사항 반영할 때 벡터 값도 변경
- RAG 컴포넌트 구현과 API 연동
- 좌측 상단에 AI 기능 활성화 버튼 컴포넌트 구현
- 활성화 버튼 클릭 시 AI 질문 패널 컴포넌트 열고 닫힘
- 질문 입력 길이에 따라 컴포넌트 높이 유동적으로 변경
- API 연동
- 응답을 기다리는 동안 로딩 컴포넌트 출력
- 응답 완료 시 답변 출력
- 좌측 상단에 AI 기능 활성화 버튼 컴포넌트 구현
Bug Fixes
- novel editor schema에 bold, italic, underline, link, code가 없어서 초기 페이지 세팅 안 되는 이슈 해결
What's Changed
- RAG 기본 기능 구현 by @ezcolin2 in #69
- RAG 컴포넌트 및 기능 구현 by @pkh0106 in #70
- Docs : 리드미 수정 by @pkh0106 in #68
- V1.2.0 배포 by @ezcolin2 in #71
- fix: 이전 자동 배포 파이프라인 삭제 by @ezcolin2 in #72
- hotfix: 이전 배포 파이프라인 삭제 by @ezcolin2 in #73
Full Changelog: v1.1.1...v1.2.0
v1.1.1
Improvements
불필요한 리렌더링 개선
useCurrentWorkspace훅이snowflakeId변화를 참조하며 불필요한 렌더링을 유발.useGetUser훅에서 403 오류가 캐싱되지 않아 반복 호출 발생.
useGetUserStatus훅을 도입해 로그인 상태(loggedIn)를 관리하고, 403 오류 참조 대신 캐싱 활용.- 불필요한 렌더링 제거, 페이지 리스트 확장 시 추가 렌더링 방지
- API 호출 최적화
- 렌더링 시간 10.5ms 감소 (React Profiler 기준)
What's Changed
- docker .env bind mount 제거 by @ezcolin2 in #46
- Refactor : 워크스페이스 리스트 버튼 클릭 렌더링 개선 by @pkh0106 in #50
- refactor: page 조회 기능 query builder로 수정 by @ezcolin2 in #53
- docker 자동 배포 pipeline 시간 단축 by @ezcolin2 in #54
- 엣지 생성, 삭제 api로 작업 위임 by @summersummerwhy in #51
- 에러 해결, 필요없는 코드 정리 by @summersummerwhy in #55
- 1.1.1 버전 배포 by @ezcolin2 in #64
Full Changelog: v1.1.0...v1.1.1
v1.1.0
Improvements
lighthouse 수치 개선
- Performance (90->99)
- JS 파일 크기 줄이기
- 중복 코드 제거
- deprecated 된 기능의 코드 제거
- lazy loading 적용
- React.lazy 및 Suspense 활용으로 초기 로딩 시간 개선
- JS 파일 크기 줄이기
- Accesssibility (83→100)
- aria-label 추가
<button>태그에 접근 가능한 이름을 부여하여 스크린 리더 사용자 경험 개선
- 이미지 alt 속성 추가
<img>요소에 대체 텍스트를 제공하여 이미지 설명 강화
- 텍스트 대비율 개선
- 포그라운드와 백그라운드 색상 대비율을 조정하여 가독성 향상
- aria-label 추가
- SEO(75→100)
- 메타 설명 추가
<meta name="description">요소를 추가하여 검색 결과에서 페이지 요약 제공
- 유효한 robots.txt 파일 작성
- 검색 엔진 크롤러의 접근 제어를 위해 유효한
robots.txt파일 구성
- 검색 엔진 크롤러의 접근 제어를 위해 유효한
- 메타 설명 추가
| 개선전 | 개선후 | |
|---|---|---|
| Performance | 90 | 99 |
| Accessibility | 83 | 100 |
| SEO | 75 | 100 |
| FCP | 1.1s | 0.6s |
| LCP | 1.3s | 0.8s |
| total blocking time | 160ms | 30ms |
| speed index | 1.2s | 0.8s |
docker image 용량 축소
- yarn 호이스팅을 통해 중복 node 패키지 최소화
- node 패키지만 가지고 있는 이미지를 base로 api 서버 이미지와 websocket 서버 이미지 생성하여 패키지 공유
- 멀티 스테이지 빌드 적용하여 상용 서버에 필요한 파일만 빌드
- docker image 용량 44% 감소 (4.5GB → 2.5GB)
docker 배포 환경 변경
- 패키지 docker volume 제거
- 리액트 정적 파일 bind mount 제거
- 패키지 설치 및 정적 파일 삽입을 이미지 빌드 시점에 진행
redis 낙관적 락 적용
- red lock 알고리즘을 제거, 단일 인스턴스 redis 분산 락 적용
- redis에 있는 리소스를 데이터베이스인 postgres로 migrate하는 과정에서 해당 key에 접근을 막는 red lock 알고리즘을 사용하였으나, 단일 redis instance를 사용해서 오버 엔지니어링이라고 판단
- redis의 자체 기능을 사용하여 분산 락을 구현
- redis 분산 락 제거, watch 사용 낙관적 락 적용
- migrate 과정에서 redis의 key에 대한 충돌이 생각보다 적어 현재의 비관적 락은 비효율적이라는 결론을 내림
- 현재 migrate 과정에 있는 key를 redis의 watch 기능을 사용하여 감시, 해당 key에 대한 접근이 충돌이 생겼을 때만 막는 낙관적 락 사용하게 변경
자동 배포 구현
- 로컬에서 이미지 빌드 후 docker hub에 업로드
- 원격 서버에서 이미지 가져와서 docker-compose로 container 실행
Bug Fixes
docker container에 추가된 패키지 반영되지 않는 이슈 해결
- 이전 패키지를 저장하고 있는 docker volume이 그대로 연결된 이슈
- 이미지 빌드 시점에 패키지 설치하는 방식으로 해결
What's Changed
- Refactor be #4 by @ezcolin2 in #10
- refactor: 도커 최적화 - 중복되는 볼륨 처리 by @ezcolin2 in #11
- FCP 개선을 위한 사용하지 않는 js 코드 삭제 by @baegyeong in #6
- lazy loading 적용 by @baegyeong in #12
- refactor: red lock 제거 by @ezcolin2 in #14
- red lock 알고리즘 제거 후 단일 인스턴스 redis 분산 락 직접 구현 by @ezcolin2 in #16
- refactor: LCP 개선을 위한 Suspense 적용 by @pkh0106 in #20
- lighthouse 접근성 개선 by @baegyeong in #19
- Best Practice 개선 by @pkh0106 in #24
- SEO 수치 개선 by @baegyeong in #23
- lighthouse 추가 개선 by @pkh0106 in #28
- node_modules를 가진 base 이미지로 서버 이미지 빌드 by @ezcolin2 in #29
- isLoading 상태 제거, 사용하지 않는 파일 삭제 by @baegyeong in #31
- hotfix: lint 오류 수정 by @ezcolin2 in #32
- docker 자동 배포 구현 by @ezcolin2 in #36
- redis 분산 락 제거 후 watch를 사용한 낙관적 락으로 변경 by @ezcolin2 in #41
- 로그인 여부 체크 api 구현 by @summersummerwhy in #43
- v1.1.0 release 배포 by @ezcolin2 in #44
New Contributors
- @baegyeong made their first contribution in #6
- @pkh0106 made their first contribution in #20
- @summersummerwhy made their first contribution in #43
Full Changelog: v1.0.0...v1.1.0
v1.0.0
Release Notes Template
Based off https://palantir.quip.com/pzRwAVr1bpzf
Pro-tip: look through the github diff between the previous release to see what's changed. The commit titles should give an outline of what's happened.
Upgrade Steps
- List out, as concretely as possible, any steps users have to take when they upgrade beyond just dumping the dependency.
- Write pseudocode that highlights what code should change and how.
- Call out if users are recommended to upgrade because of known problems with older releases.
- Preferably, there's nothing here.
Breaking Changes
- A complete list of breaking changes (preferably there are none, unless this is a major version).
New Features
- Describe the new feature and when/why to use it. Add some pictures! Call out any caveats/warnings? Is it a beta feature?
Bug Fixes
- Call out any existing feature/functionality that now works as intended or expected.
Improvements
- Improvements/enhancements to a workflow, performance, logging, error messaging, or user experience
Other Changes
- Other miscellaneous changes that don't fit into any of the above categories. Try to leave this empty - ideally, all changes fit into the categories above
Copy and paste this template
## [0.0.2](https://github.com/andreasonny83/twilio-remote-cli/compare/v0.0.1...v0.0.2) (2019-07-21)
> Description
### Upgrade Steps
* [ACTION REQUIRED]
*
### Breaking Changes
*
*
### New Features
*
*
### Bug Fixes
*
*
### Performance Improvements
*
*
### Other Changes
*
* Example:
## [0.5.2](https://github.com/andreasonny83/twilio-remote-cli/compare/v0.5.1...v0.5.2) (2019-07-21)
### Performance Improvements
* **dependencies:** Bump dependencies 4a4ee13
### Other Changes
* **chore(conventionalChangelog):** Add Conventional Changelog aafcdd9
* **docs(CHANGELOG):** Add changelog e2c7435