분류 전체보기(163)
-
인덱스 키 값의 크기가 조회에 영향을 미치는 요소
인덱스의 키 값의 크기가 조회에 어떤 영향을 끼칠 수 있을까?? 이를 알기 위해서는 아래와 같은 배경지식이 필요하다. 디스크에 데이터를 저장하는 가장 기본 단위를 페이지라고 한다. 그리고, 페이지는 디스크와 메모리에 데이터를 읽고 쓰는 작업에 최소 단위가 된다. 한 페이지를 읽을 때마다 한 번의 디스크 I/O가 발생한다. 3 페이지를 읽어야된다면, 3번의 디스크 I/O가 발생! 같은 쿼리라면, 적게 읽을 수록 효율적 💡 그렇다면, 페이지에는 데이터들이 어떻게 저장되는 걸까?? 테이블에 데이터를 삽입하거나 업데이트하면 InnoDB는 데이터를 페이지 단위로 관리하며, 데이터들은 크기가 MySQL에서 정의한 페이지 크기까지 저장되었다가 만약 그 용량을 초과하면 새로운 페이지를 만들어 거기에 저장한다. 중간 결..
2023.09.05 -
컴퓨터 구조의 큰 그림을 그려보자
공부 이유 이번 학기의 목표는 단순히 소스코드를 작성하는 것이 아니라, 내가 작성한 코드를 통해서 들어온 데이터들이 DB에 얼마만큼의 용량을 차지하는 지 성능은 어떻게 하면 향상 시킬 수 있는 지 이에 대한 비용은 어느 지점이 가장 효율적인 지를 고민하는 것이다. 그러기 위해서는 직전학기에 제대로 이해하지 못 했던 컴퓨터 구조와 운영체제를 알아야할 필요성을 느꼈고, 이에 이번 학기에 컴퓨터 구조와 운영체제를 학습하여 목표를 달성하고자 한다. 대략적인 그림 그려보기 컴퓨터가 뭐야? 컴퓨터는 주어진 데이터에 입력된 명령어에 맞는 결과를 반환하는 녀석이다. 그렇다면, 컴퓨터를 구성하는 핵심 부품들은 어떤 거야? 메인 보드 : 컴퓨터의 핵심 부품들을 부착할 수 있게 만드는 부품 메모리 : 현재 실행되는 프로그램..
2023.09.03 -
왜? 이미지가 찾아지지 않는 걸까?? - 로컬환경에서 외부 경로를 이용
도토링 프로젝트의 프로필 이미지 수정 기능을 개발하다가 아래와 같은 문제상황을 만나 의미있는 문제 상황이어서 포스팅하려 합니다. 문제 상황현재 상황은 아래와 같습니다. resources/static/files 안에 default_profile~~ 이미지가 저장되어 있습니다. 빌드후 애플리케이션을 실행한 후 해당 이미지가 저장된 경로로 조회하면, 위와 같이 이미지가 잘 조회되는 것을 확인할 수 있습니다. 하지만, 아래와 같이 새로운 이미지를 아까와 동일한 경로에 업로드하면 해당 이미지는 조회가 되지 않습니다. 아래와 같이 이미지는 잘 저장이 된 상태입니다. 그렇다면, 실행 중인 애플리케이션을 빌드 -> 실행한 후 조회를 해보면 어떨까? 놀랍게도 조회가 잘 되는 것을 확인할 수 있습니다. 문제 분석..
2023.08.21 -
IntelliJ의 Run 버튼의 의미 - Build(빌드)와 Compile(컴파일)
빌드와 컴파일 많이 들어서 익숙한 단어들이지만 정확히 어떤 뜻인지는 잘 알지 못 했다. 이번 기회를 통해서 두 단어의 차이에 대해서 알아보려고 한다!! 컴파일 컴파일의 정의는 개발자가 작성한 소스코드를 바이너리 코드로 변환해주는 것이다. 하지만, JAVA에서는 컴파일러에의해 소스파일(.java)가 목적파일(.class)로 변환될 때 가상머신(JVM)이 인식할 수 있는 바이트 코드로 변환된다! 💡 바이너리 코드란? CPU가 이해할 수 있는 언어이다.(0과 1로 구성된 이진코드) 바이트 코드란? 가상머신이 이해할 수 있는 언어이다.(0과 1로 구성된 이진 코드) 링크 컴파일이 각 소스파일(.java)들을 목적파일(.class)로 변환해주는 것이라면, 링크는 이들을 연결해주는 것이다. 개발을 할 때 다른 소스..
2023.08.20 -
Fetch Join을 여러번 했더니 MultipleBagFetchException이???
필자는 N+1 문제를 해결하기 위해 보통은 Fetch Join을 애용하고 있었다. 도토링 프로젝트를 개발하며, 여느때와 같이 Fetch Join을 여러번 사용했는 데 아래와 같은 에러를 마주했다. org.hibernate.loader.MultipleBagFetchException: cannot simultaneously fetch multiple bags: [com.theZ.dotoring.app.mento.model.Mento.memberMajors, com.theZ.dotoring.app.mento.model.Mento.desiredFields] MultipleBagFetchException이 뭘까?? 이는 이름에서도 유추할 수 있듯이 Fetch Join을 여러번 사용하면 발생할 수 있는 에러이다. ..
2023.08.16 -
QueryDSL을 사용해 통계(Count)쿼리의 결과를 사용해서 정렬하기
도토링 프로젝트를 하다가 QueryDSL을 이용해서 count 쿼리와 이 결과를 바탕으로 정렬하는 데 삽질을 하여서 이를 포스팅하고자 합니다. 요구사항 도토링 프로젝트에서는 회원가입시 멘토와 멘티가 각각 기입했던 희망 멘토링 분야를 토대로 멘티와 멘토를 추천해준다. (회원가입시에 멘토와 멘티 모두 희망 멘토링 분야는 복수 선택이 가능하다.) 이때, 멘토,멘티 정렬 방식은 멘토링 희망 분야가 많이 겹칠 수록 상위에 위치합니다. 만약 겹치는 멘토링 희망 분야의 갯수가 동일할 경우 조회가 더 많이 된 멘토 혹은 멘티가 상위에 위치합니다. 이 포스팅에서 다룰 요구사항은 멘토링 희망 분야가 많이 겹칠수록 상위에 위치한다 입니다! 위 요구사항에서 알 수 있듯이 멘토링 희망 분야가 얼마나 겹치는 지를 알아야합니다. ..
2023.08.15