본문 바로가기

프로젝트44

[Key Word 개발기] 친구 검색 쿼리 개선기 최근 인덱스에 대해서 공부하다가 프로젝트를 생각해보니 검색 쿼리 속도 개선을 하면 좋을 거같아서 테스트하는 도중에 좋은 개선사항이 있어 적어본다. 쿼리 수정기 해당 프로젝트에서 친구관련 리스트를 가져올때 총 3가지의 경우가 존재한다. 1. 내가 친구한테 친구를 요청한 경우 2. 친구가 나에게 요청한 경우 3. 이미 친구인 경우 1,3번의 경우 밑에 코드를 이용한다. @Query("SELECT f.friend.memberId FROM Friend f JOIN f.friend friend JOIN f.memberRequest memberRequest " + "WHERE memberRequest.memberId = :memberRequestId AND f.status = :friendStatus ORDER B.. 2024. 3. 11.
[개인프로젝트] ElasitcSearch 에 대해 좀 더 공부해보자 (2) 저번 블로그에서는 ElasticSearch 개념에 대해 알아보았고 이번에는 과정에 대해 알아볼 예정이다 색인과정 색인이란 문서를 분석하고 저장하는 과정이다. 색인과정을 간단하게 설명하자면 인덱스의 존재 유무 파악 -> 있다면 매핑정보 있는가(없다면 동적매핑) -> 매핑정보 올바른지 확인(안올바르면 에러) -> inverted index 생성 -> 프라미머리 샤드에 저장 -> 레프리카 샤드에 복사 1. 색인 과정 어떤 노드에 요청을 해도 동일한 응답을 보장하지만 여기서는 레플리카가 존재하는 노드에 요청했다고 가정하면 첫번째 노드(데이터노드)로 전달하여 프리미어 샤드에 저장되고 레플리카 노드로 다시 들어온다. 저 이미지 상황에는 문제가 있다. 1. 하나의 노드가 놀고 있다 2. 프라이머리 샤드가 노드하나에만.. 2024. 3. 11.
[개인프로젝트] ElasitcSearch 에 대해 좀 더 공부해보자 (1) 개인프로젝트에서 ElasitcSearch를 사용했다. 생각해보면 개념을 정확하게 인지하지 않은채 적용한 거같아서 좀더 공부해보았다. ElasticSearch 루씬 기반의 오픈소스 검색엔진이라고 한다. ElasticSearch의 특징은 1. 준실시간 검색 시스템 : 실시간이라 생각될 만큼 색인된 데이터가 빠르게 검색된다. 2. 고가용성을 위한 클러스터 구성 : 한대 이상의 노드로 클러스터를 구성하여 높은 수준의 안정성 달성 및 부하 분산 가능 3. 동적 스키마 생성 : 입력될 데이터들에 대해 미리 스키마를 생성하지 않아도 동적으로 생성가능 4. Rest API 기반의 인터페이스 : Rest API 기반의 인터페이스를 제공하여 비교적 사용을 위한 진입 장벽이 낮다 클러스터와 노드 컴퓨터에서의 클러스터란 여러.. 2024. 3. 11.
[개인프로젝트] 검색기능에 대한 생각 및 회고 (2) 지난 블로그를 보면 검색에 대한 생각을 적어놨다. ElasticSearch와 Mysql Index 에 대한 간단한 개인 의견을 적어놓았다. 추가적으로 캐시를 적용하면 어떻게 될까를 테스트 하기 위해 이번블로그를 적는다.저번 블로그에서 "Mysql Index + 캐시를 사용한다면 ElasticSearch 만큼의 성능이 나오지 않을까" 에 대한 고민을 했었다. 고민의 결과는 Mysql, ElasticSearch 둘다 캐시를 사용하면 검색기능이 향상된다. 왜냐하면 캐시의 개념자체가 임시 메모리에 똑같은 요청에 대한 데이터를 저장하기에 캐시를 사용하면 Mysql를 사용하던 ElasticSearch를 사용하던 임시 메모리에서 캐시 데이터를 가져온다. 그래서 Redis를 이용한 캐시를 예제를 짜보았다. Redis .. 2024. 3. 5.
[개인프로젝트] 검색기능에 대한 생각 및 회고 (1) 최근 검색기능에 대한 생각이 많아지면서 정리해보기로 한다. 개인프로젝트에서 검색기능을 구현했다. 간단하게 말하자면 위치기준, 이름 기준으로 검색하면 private Long id; private String walkerName; private Double walkerLnt; private Double walkerLat; 이렇게 반환값이 나오게했다. 다만 나는 조금더 검색을 빠르게 하고 싶었다. 그래서 어떻게 할까 생각했을때 두가지 방법이 생각이 났다. Mysql Index, ElasticSearch 두가지중 ElasticSearch를 이용했다. Index의 경우 공부해 본적이 없어서 어떤 것을 인덱스를 걸어야할지... 인덱스를 어떻게 생성해야할지 에 대한 고민이 많았다. 근데 ElasticSearch의 경.. 2024. 3. 5.
[개인프로젝트] 코드 커버리지?? 개인프로젝트때 왠만하면 진짜 꼼꼼하게 테스트 코드를 작성했다. 물론 초반에는 왜 테스트코드를 작성해야되지..? 에 대한 의문이 있었지만.. 작성하면서 느낀점은 1. 작성한 코드가 의도한 대로 작동하는지 검증할 수 있다. -> 테스트코드를 통해서 동작하는 방식과 결과가 내가 작성한 대로 나오는지 활인할 수 있다. 2. 코드를 수정할때 변경에 대한 영향도를 쉽게 파악할 수 있다. -> 아무래도 후반에 리팩토링후 테스트코드 돌릴때 에러가 나올때가 있었다. 근데 만약 내가 테스트코드 안짜놓고 어플리케이션을 돌렸다면어렵게 어디서 에러가 나오는지 찾을 수없을거같다. 즉 테스트코드 덕분에 수정으로 인한 영향력을 빠르게 파악할 수 있었다. 나의 경우 유닛 테스트코드를 많이 짰다. 개별코드 단위가 내가 의도한대로 작동하.. 2024. 2. 22.
728x90