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