Тёмный

최근 해결한 프론트 성능 최적화 문제. 같이 한번 고민해봐요. 아이가 자고 있어서 조용조용 이야기했습니다. 볼륨이 작으니 조금 높여주세요. 

Подписаться
Просмотров 1,2 тыс.
% 16

최근에 지역 데이터 기반 프롭테크 서비스를 출시하며 기능을 구현하기 위해 해결한 기술적 문제에 대해 이야기 해봤습니다.
목소리가 작으니 조금 볼륨을 높여주세요.

Наука

Опубликовано:

 

5 июн 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 16   
@배부른곰이
@배부른곰이 4 месяца назад
## 지역 필터 설정 기능 ### 비슷하게 해본거 - 데이터 테이블이나 검색필터에서 전체 체크박스 사용하는 부분이 많음 (parent- child 체크박스 구현 때 사용) - 쇼핑몰 카테고리 4depth 까지 해봐서 비슷해보였는데, 데이터따라서 depth가 늘어날 수 있다는 부분은 해봐야 알듯 ### 구현시 고려사항 - 체크/언체크 이벤트시 지역에 칩버튼 관리하는 부분은 컴포넌트 depth가 깊으니까 전역상태 관리(redux) 로 이벤트를 처리 -- 선택사항 - 칩 처리시 하위가 상위로 합쳐지고 나눠지는 부분을 처리를 쉽게 해야함 데이터에 값을 하나 추가하면 편할 것 같음 >> 데이터에 id를 만들 때 depth 마다 코드를 하나씩 추가하면서 id를 만들기 >> 서울 01 부산 02 대구 03, >> 서울_종로구 0101 서울_중구 0102 >> {name: '서울' id: '01'} ## 검색기능 ### 구현시 고려사항 - parent가 검색에 걸리면 child 검색 제외 - 검색된 결과를 보여줄 때 검색된 결과 + 상위 위계를 다 보여줘야하므로 펼침여부와 보여주는 여부 상태값 관리가 필요함 >> {name: '서울' id: '01', fold: true, show: true} - '클릭시 펼쳐지고, 접히는 것' + '필터여부와 상관없음' 위에 상태 값 같이 컨트롤해주면 됨 ## UI 수정 필요한 부분 - parent가 펼침상태일 때 > 아이콘이 v로 변경되어야함
@KyuvinKim
@KyuvinKim 4 месяца назад
음.. DB단에서 코드 기준으로 hierarchy한 컬럼을 구성하면 될 거 같아보이는데.. 체계가 있으니까요 시군구 컬럼은 분리해버리고요! 저는 지역 통계쪽에 관심이 많아서 비슷한 고민을 해봤었네요
@Kkk-ul2hl
@Kkk-ul2hl 4 месяца назад
1초가 차이 날 정도면 뭐가 문제였을지 기존 코드도 궁금하고, 어떤 방식으로 해결하셨는지도 궁금하네요 ! 검색과 관련해서는 디바운싱 & 트리 구조로 검색 결과물 알고리즘 시간 복잡도 줄이는 방식 채택하는 기존 현업에서 사용하는 정형화된 방식밖에 안 떠오르네요
@개발하는약사
@개발하는약사 4 месяца назад
디바운싱과 쓰로틀링은 묘하게 사용성을 떨어뜨려서 쓰지 않았습니다. 기본적으로 트리구조를 사용했는데요, 이슈가 됐던 건 상태변화가 부모 방향과 자식방향으로 양방향으로 순차적으로 전파되어야 한다는 것이었습니다. 순차적으로, 단계를 밟아 상태변화가 전파되지 않으면 의도한 UI상의 변화와 검색 필터 반영이 되지 않아 그 부분이 가장 애를 먹었습니다. 단방향의 상태 변화 전파(부모->자식)는 간단한데 양방향 전파(자식->부모까지 포함)가 알고리즘이나 성능최적화 부분에서 고려할 부분이 많더군요.
@quew9b
@quew9b 4 месяца назад
Trie 자료구조로 하면 될 거 같은데, 만약 용산동을 '산동'이라고 검색하는 경우도 용산동을 찾아야한다면 안될 지도. xx시 yy동 이런 상황에서 xx나 yy를 제대로 prefix 검색을 하는 상황이라면 될 지도. 해보려고 했는데 코드를 짜도 제대로 짰을까하는 의문이 들어 해보진 않았네요 답 알려주세여
@quew9b
@quew9b 4 месяца назад
2100여개의 지역명이 나열되어 있는 텍스트 파일이 있는건가요? 그럼 워커 사용해서 얘를 백그라운드에서 해시맵 으로 미리 저장해두기? (유저가 웹에 막 들어왔을 때 눈치 못채게)
@quew9b
@quew9b 4 месяца назад
초보라 몰라요 알려주세용
@개발하는약사
@개발하는약사 4 месяца назад
좋은 발상이세요. 다만 지역 데이터를 담은 json이나 텍스트 파일을 다운로드 받는 과정이 성능 병목이 되지는 않을 것 같습니다. 한글자당 3바이트, 한지역명당 평균6글자 정도라고 가정하면 2100*6*3바이트가 나올 텐데요 37800 바이트, 약 36kb가 나옵니다. 이정도면 1Mbps의 속도면 0.03초, 일반 가정인터넷인 100Mbps의 경우 0.0003초가 걸리게 됩니다. 브라우저에 할당된 메모리에도 36kb 보다 조금 더 많은 메모리 공간을 차지하겠죠. 아이콘 하나보다 작은 메모리 공간입니다. 따라서 해당 데이터의 용량이 성능 병목이 될 것 같지는 않아보입니다. 접근 방법은 좋으시고 칭찬드리고 싶습니다!
@개발하는약사
@개발하는약사 4 месяца назад
웹워커를 이용해서 백그라운드로 돌리는 걸 생각하신 것도 훌륭하시다고 생각합니다. 제가 감히 누구를 평가하기는 어렵지만 신입 개발자 분들 중에 웹워커를 어떻게 쓸지 생각을 못하시는 분들도 많은 것 같습니다
@quew9b
@quew9b 4 месяца назад
@@개발하는약사 답이 아니군요. 이 정도는 딱히 병목이 안되는군요. 흠... 그럼 뭐가 느렸을까
@sungkang99
@sungkang99 4 месяца назад
좋은영상 감사합니다
@yowon8986
@yowon8986 4 месяца назад
어떤 사이트인지 궁금한데, 공유가능하신가요 ?
@개발하는약사
@개발하는약사 4 месяца назад
기본적으로 폐쇄적인 서비스이긴 하지만, 보안 관련 점검 후 공개하도록 하겠습니다. 감사합니다.