본문 바로가기

분류 전체보기143

[mySQL] 인덱스 종류와 커버링 인덱스 (2) 지난 블로그에 인덱스와 복합인덱스에 대해서 기록해보았다. 오늘은 인덱스 종류와 커버링 인덱스에 관해서 이야기해볼예정이다. Explain type, extra 설명 앞선 내용을 설명하기 전에 인덱스를 확인할때바다 type과 extra를 봤다. 이에 관해서 조금 이야기를 나눠보자. 이에 대해서 간단하게 정리해둔 블로그가 있다. 여기서는 주요키워드만 볼 것이다. 1. type all을 빼고는 인덱스를 탄다는 것알 알면된다. index -> index full scan : 수직적 탐색 없이 인덱스 리프 블록 처음부터 끝까지 수평적으로 탐색한다 데이터 검색을 위한 최적의 인덱스가 없을때 차선으로 선택됨 예를 들어 인덱스 선두 칼럼이 조건절에 없으면 옵티마이저는 먼저 Table full scan을 하고자하지만 대용.. 2024. 3. 7.
[mySQL] 인덱스 개념과 복합 인덱스 (1) 인덱스란 지정한 컬럼들을 기준으로 메모리 영역에 일종의 목차를 생성하는 것이다. insert, update, delete의 성능이 좀 느려질 수 있지만 select 성능을 향상 시킬 수있다. 인덱스는 B-tree라는 구조를 사용하는데 이와 관련해서는 이 블로그를 참고 바란다.!(그림으로 잘 설명되어있음) 인덱스는 한마디로 쿼리 결과값을 빠르게 하고 싶어서 생성한 것이다. 그럼 인덱스는 어떤 칼럼으로 생성해야하는데?? 인덱스 칼럼 생성 일반적으로는 카디널리티가 높은 것을 잡아야한다고 한다. 카디널리티란 해당 컬럼 데이터의 중복된 수치를 말하는데 예를 들어 학번 과 성별의 카디널리티를 비교하면 학번이 당연히 높다. 카디널리티 높은 것로 잡는 이유는 필터링이다. 최대한 많은 부분을 걸러내기 위해서이다. 그럼 .. 2024. 3. 7.
[개인프로젝트] 검색기능에 대한 생각 및 회고 (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.
2024-03-03 일주일 회고록 내가 왜 서합이 되도 불안한가.. 저번 서합되서 코테 봤는데 떨어졌다. 사실 떨어진건 큰 문제가 아니다. 아마 면접에서 떨어졌을거다. 코테보기도전에 나느 긴장했다. 만약 면접가면 어쩌지... 왜 이런 고민을 했나면 나는 내 기술에 대한 질문을 받았을때 과연 만족할 만한 답변을 말할 수 있을까?? 를 고민했던거같다. 고민에 끝에는 아니다. 였다. 그래서 더 긴장이 되었고 서합이 되도 그냥 마음이 힘들었다... 이번주에도 서합 하나가 되었다. 자주 사용했봤던 기업이라 서합된게 기분이 좋았다. 근데도 불안했다.. 앞서 말한 질문에 대한 불안감, cs에 대한 불안감... 그래서 멘토링을 받았다 사실 부트캠프에서 멘토링을 받을 수 있지만 나느 좀더 여러 개발자분들한테 멘토링을 받아보고 싶었다. 왜냐면 일단 개발자.. 2024. 3. 3.
프록시??? 스프링 AOP?? 트랜젝션?? (2) 지난 블로그에서 프록시와 프록시 패턴에 대해서 알아보았다. 간단하게 정리해보자면 프록시를 사용하는 이유는 원본 객체를 수정할 수 없는 상황을 극복하기 위해서였다. 예를 들어 A라는 클래스를 수정할 수 없다고 해보자. 근데 A라는 클래스 앞에 x라는 기능을 넣고 싶다. 이럴때 프록시라는 것을 통해 A수정없이 x라는 기능을 추가할 수 있다. 그러니까 프록시를 이용해 부가적인 기능을 부여(트랜젝션, 시간측정등), 또는 타깃에 대한 접근방법 제어(지연로딩)일때 사용된다. 다만 프록시 패턴을 사용하면 - 인터페이스를 구현해서 프록시 객체를 생성해야하는 코드 복잡도 증가 - 모든 메서드에 부가기능 구현 해야하는 중복코드 발생 과 같은 단점이 존재한다. 그래서 나온게 동적 프록시이다 동적 프록시 프록시의 단점 해결하.. 2024. 3. 2.
728x90