-
Notifications
You must be signed in to change notification settings - Fork 8
프론트엔드 라이브러리 기술 검토
MYONG JAEWI edited this page Aug 20, 2024
·
10 revisions
코드 업로드를 위한 에디터로 @uiw/react-codemirror 라이브러리를 선정하고자 합니다.
코드 에디터 - @uiw/react-codemirror
- 코드를 주요 콘텐츠로 다루는 서비스이기 때문에 코드 하이라이팅에 대한 고민을 하게 되었다. 처음에는 코드 에디터를 단순한
textarea
로 하고, 좀 더 가벼운 코드 하이라이팅 기능만 가진 뷰어를 도입할지 고민이 있었다. 하지만 주요 고객 타겟층이 개발자인만큼 코드를 올리는 과정에서도 하이라이팅이 되는 것이 UX가 좋다고 판단하여 에디터를 도입하기로 결정했다.
- 코드 문법에 맞는 하이라이팅이 될 것
- 기본
textarea
나markdown
에디터보다 '코드'에만 집중 가능한 에디터일 것 - 커스텀 스타일 가능할 것
- react의 Controled, Uncontroled 형식으로 사용 가능할 것
- 여러 이벤트 (onChange, onBlur,,) 처리가 가능할 것
- 가능하다면 코드 에디터의 부가기능 사용 가능할 것 (단축키, 검색 등)
- 비교 대상 라이브러리보다 요구 사항을 모두 충족하며 특히 커스텀하고 쓸 수 있는 옵션이 많음
- 공식 문서가 자세하며 찾을 수 있는 use case가 많음, 학습 곡선 적어 빠른 도입이 가능
- 에디터가 직접 개발하기에 공수가 많이 드는 작업이 많은데, 다른 주요 기능과 UI/UX에 시간을 더 쓸 수 있음 (해당 프로젝트의 주요 기능은 코드 에디터가 아니라고 판단)
- 적용 가능한 다양한 테마
- 다양한 문법 하이라이팅 지원 가능
- 오픈소스이며 여러 Issue와 유지보수가 진행중.
![스크린샷 2024-08-20 오전 11 22 06](https://private-user-images.githubusercontent.com/78201530/359314791-646e95e3-000f-4350-ae42-c3a5de310632.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk4MTU1MzksIm5iZiI6MTczOTgxNTIzOSwicGF0aCI6Ii83ODIwMTUzMC8zNTkzMTQ3OTEtNjQ2ZTk1ZTMtMDAwZi00MzUwLWFlNDItYzNhNWRlMzEwNjMyLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE3VDE4MDAzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWM3YTU5YjZiNjhmMzFmODUwNTAzZDk4ZjA5ZGQ1NDNjMWVmY2ZkMzQzMjJhOWJiOWE4OThjYjE2MTA4YTJmNDgmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.t_R0dF6UzIimN2Zk3y7mvSh4_Qao7dH-lYRdLUP3y5w)
![스크린샷 2024-08-20 오전 11 25 54](https://private-user-images.githubusercontent.com/78201530/359315513-eec9f28b-037e-4033-a03f-17eb68cb8ab3.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzk4MTU1MzksIm5iZiI6MTczOTgxNTIzOSwicGF0aCI6Ii83ODIwMTUzMC8zNTkzMTU1MTMtZWVjOWYyOGItMDM3ZS00MDMzLWEwM2YtMTdlYjY4Y2I4YWIzLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNTAyMTclMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjUwMjE3VDE4MDAzOVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTMwM2QzNTdiMzY3MDVhNjcwNTQwOGY5NzQzYmRlOWRiZDNjMzJkZjkzYTc0MzE3NDI3YjA2NzllYjUzNDZjYTAmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0In0.u5W2m53vd8sxr1same5Q7mkm_iYb7HAg0QcpBp0LJDs)
-
다양한 코드 문법 하이라이팅을 지원하다보니 무거운 라이브러리
주요 비교 대상이었던 react-ace와는 bundle.js 기준 0.6mb 차이가 났음 (minzipped size는 codemirror가 더 작음)
추후 bundle 사이즈를 줄이는 방안이나 시간을 갖고 다른 라이브러리를 검토해볼 예정. -
해당 라이브러리에서만 지원하는 부가기능에 대한 의존성(테마, 단축키 등)
- react-simple-code-editor
-
react-ace
: theme과 문법 하이라이팅 적용이 제한적이거나 불편, codemirror보다 레퍼런스가 적음. - monaco editor
-
react-md-editor
: 코드에 집중된 에디터가 아닌 마크다운 에디터
- 백엔드 코드 컨벤션
- 백엔드 기술 스택 및 선정 이유
- 각종 인스턴스 설정 파일 및 구성 위치 가이드
- ERD
- 백엔드 CI CD 동작 프로세스
- 로컬 DB 환경 설정
- 백엔드 로깅 전략
- 백엔드 로그 모니터링 구성도
- 스프링 메트릭 모니터링 구성도
- Flyway 로 스키마 관리
- 코드잽 서버 구성도
- Git Submodule 사용 메뉴얼
- 프론트엔드 코드 컨벤션
- 프론트엔드 기술 스택 및 선정 이유
- 프론트엔드 서비스 타겟 환경 및 브라우저 지원 범위 선정
- 프론트엔드 모니터링 및 디버깅 환경 구축
- 프론트엔드 테스트 목록
- 프론트엔드 라이브러리 기술 검토
- 프론트엔드 개발서버, 운영서버 빌드 및 배포 환경 구분
- 목표했던 타겟 환경과 디바이스에서 서비스 핵심 기능 동작 확인
- 프론트엔드 접근성 개선 보고서
- EC2 로그 확인 방법
- VSCode를 통한 EC2 인스턴스 SSH 연결 방법
- 터미널을 통한 EC2 인스턴스 SSH 연결 방법
- NGINX 설정 파일 접근 및 적용 방법
- DB 접속 및 백업 방법
- [QA] 배포 전 체크리스트
- CI 파이프라인 구축
- CD 파이프라인 구축
- 백엔드 CI CD 트러블슈팅
- Lombok Annotation Processor 의존성을 추가한 이유
- 2차 스프린트 기준 ERD
- DTO 검증하기
- ProblemDetail
- Fork된 레포지토리 PR에서 CI Secrets 접근 문제 해결
- AWS CloudWatch 모니터링
- 스프링 메트릭 모니터링 구축 방법
- 로깅과 Logback에 대해 알아보아요.
- Logback MDC로 쉽게 요청 추적하기 (+ Grafana로 추적 더더 쉽게!)
- 백엔드 CD 파이프라인 Ver.2
- 요청, 응답 로그에 correlationId 를 추가하자!
- 3차 스프린트 기준 ERD
- 더미데이터 생성하고 실행하기
- 쿼리 성능 개선 결과
- 테이블별 인덱스 설정 목록
- 사용자 증가 시 발생할 수 있는 문제 상황과 개선 방안
- k6를 사용한 서버 부하 테스트
- 6차 스프린트 기준 ERD
- TestExecutionListenr 간의 충돌 문제에 대해 알아보아요
- Query Performance Improvement Results
- 테스트 전략 및 CI 설정
- CI CD 구조
- 배포 전, 로컬에서 로그인 기능 포함 테스트해보는 법
- stylelint 적용기
- 내 작업 브랜치 중간에 Merge된 동료의 작업물을 넣고 싶다면 pull vs rebase
- [TS] Webpack config
- [TS] Webpack 환경에서 MSW v2 이슈
- [TS] webpack에서 react‐router‐dom 적용 안됨