본문 바로가기

분류 전체보기255

페이지네이션 최적화 - 01. 페이지네이션이란 많은 양의 데이터를 어떻게 노출시킬 것인가? 다음 페이지 vs 스크롤 다음 페이지를 넘기는 방식 : 페이지네이션 페이지를 넘기지 않고 내리는 방식 : 스크롤 클라이언트가 원하는 페이지의 원하는 사이즈를 서버에게 요청 서버는 페이지와 사이즈에 따라 적절한 데이터를 스캔 (요청 내용 : page 0, size 2 → size를 2개로 나눴을 때 가장 첫번째 page를 요청하는것) 사이즈를 2로 나눴을 때 첫번째 데이터 2개를 찾아 해당하는 데이터를 반환 여기서는 6을 2개씩 나누면 3 → 첫번째 데이터는 1~2번 게시물 : 반환하는 것 대부분 서버는 전체페이지(totalPages) 혹은 전체 개수(totalElements)를 준다. (UI 상에서 마지막 페이지를 알아야 더보기 화살표를 표시하지 않기 때문) .. 2023. 6. 6.
local에 docker 설치하기 docker engine 설치를 고집하다가.. 결국에는 docker desktop 설치......... 삽질 중... OS : Windows 11 확인을 누르면 다시 시작(재부팅) 창이 뜬다. 다시시작을 해줘야 적용이 완료됨 WSL 관련 기능 활성화 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart입력 dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart 입력 WSL Linux 커널 업데이트 wsl --set-default-version 2 입력 Microsoft Store에서 ubunt.. 2023. 6. 4.
docker - 이미지를 다루는 다양한 옵션 docker image 주요 명령 docker image 관련 명령 docker 설치 docker image 다운로드 다운로드 받은 image로 docker container 생성 및 실행 모든 docker 명령은 CLI(Command Line Interface)로 키보드로 직접 명령을 작성하는 형태로 수행 docker 명령 옵션 선택자(이미지ID/컨테이너 등) docker는 image와 container 명령이 각각 별도로 존재 다음과 같이 image를 다루는지, container를 다루는지를 명시적으로 이해하기 위해, docker 다음에 image 또는 container를 기재해줌 명령어는 어차피 다르므로(image에서 사용하는 명령어와 container에서 사용하는 명령어가 다름), 굳이 image.. 2023. 6. 4.
도커에 대한 기본 이해 Docker란? 다양한 운영체제와 시스템 환경 상에서, 서버 셋업을 위한 작업이 각각 다르고 복잡함. 도커는 컨테이너 기반의 가상화 플랫폼으로, 컨테이너 상에 서버를 셋업해놓을 수 있음. 따라서 기반 환경이 다르더라도, 언제든 해당 컨테이너를 실행만 하면, 동일한 서버 셋업이 가능함. Docker Internals docker는 리눅스 컨테이너부터 시작된 기술임. 내부 기술에 대해 가볍게라도 이해하면 훨씬 깊은 레벨의 이해가 가능함 LXC(LinuX Containers) 단일 컴퓨팅 시스템에 설치된 리눅스 운영체제 상에서, 다른 영역과 완전히 분리된 별도의 리눅스 시스템을 운영할 수 있는 리눅스 커널 기술 리눅스 운영체제 레벨에서 영역과 자원 할당 (CPU, 메모리, 네트워크) 등을 분리하여, 마치 별도.. 2023. 6. 4.
조회 최적화를 위한 인덱스 이해하기 - 08. 인덱스를 다룰 때 주의해야 할 점 1. 인덱스 필드 가공 인덱스 필드에 가공이 들어가면 인덱스로 찾을 수 없음 // age는 int 타입 SELECT * FROM Member WHERE age*10 = 1 // 10을 곱하면 검색이 안됨 // age는 int 타입 SELECT * FROM Member WHERE age = '1' // type을 잘못 넣어준 경우 2. 복합 인덱스 왼쪽처럼 1개의 인덱스가 아닌 오른쪽처럼 복합 인덱스가 되면? 우선적으로 과일 컬럼이 정렬 과일 컬럼이 정렬되면 그 안에서 원산지 컬럼이 정렬됨 따라서 복합 인덱스에서 중요한 것은 선두 컬럼이다. 데이터의 식별 정도가 높은 값이 선두에 있는 것이 좋음 3. 하나의 쿼리에는 하나의 인덱스만 하나의 쿼리에는 하나의 인덱스만 탄다. 여러 인덱스 테이블을 동시에 탐색하.. 2023. 6. 4.
조회 최적화를 위한 인덱스 이해하기 - 04. 클러스터 인덱스 클러스터 인덱스 3줄 요약 클러스터 인덱스는 데이터 위치를 결정하는 키 값 MySQL의 PK는 클러스터 인덱스 MySQL에서 PK를 제외한 모든 인덱스는 PK를 가지고 있음 클러스터 인덱스는 데이터 위치를 결정 클러스터 키의 중요한 핵심 : 정렬을 이루고 정렬된 순서에 따라서 데이터의 주소가 결정되는 것 클러스터 키 4번이 Insert 정리 클러스터 키의 위치에 따라 데이터의 주소가 결정됨 클러스터 키 순서에 따라서 데이터 저장 위치가 변경된다 → 클러스터 키 삽입/갱신시에 성능이슈 발생 MySQL의 PK는 클러스터 인덱스 PK 순서에 따라서 데이터 저장 위치가 변경됨 → PK 키 삽입/갱신 시에 성능 이슈 발생 PK로 Auto Increment vs UUID 찾아보기 MySQL에서 PK를 제외한 모든 .. 2023. 6. 4.
조회 최적화를 위한 인덱스 이해하기 - 03. 인덱스 자료구조 인덱스의 핵심 : 탐색(검색) 범위를 최소화 하는 것 검색이 빠른 자료구조들은 어떤 것이 있을까? Hash Map, List, Binary Search Tree Hash Map 단건 검색 속도 O(1) 그러나 범위 탐색은 O(N) 전방 일치 탐색 불가 ex) like ‘AB%’ → hash map은 꺼내서 일일이 다 비교해보아야 함 List 졍렬되지 않은 리스트의 탐색은 O(N) 정렬된 리스트의 탐색은 O(logN) 정렬되지 않은 리스트의 정렬 시간 복잡도는 O(N) ~ O(N*logN) 삽입 / 삭제 비용이 매우 높음 → 중간 값을 삭제하기 위해서는 뒤에 있는 것을 모두 옮겨야 함 Tree 트리 높이에 따라 시간 복잡도가 결정됨 트리의 높이를 최소화하는 것이 중요! 한쪽으로 노드가 치우치지 않도록 균형.. 2023. 6. 4.
조회 최적화를 위한 인덱스 이해하기 - 02. 인덱스 기본동작 인덱스 정렬된 자료구조, 이를 통해 탐색 범위를 최소화 예시 첫번째 column : id(pk) 나이가 가장 어린 사람의 데이터를 찾고 싶다. index가 없을 때 : 순차적으로 컬럼들의 데이터를 처음부터 끝까지 살펴봄 (이름→성별→나이 → 직업) 전체테이블을 살펴보게 된다. 인덱스가 있다면? 나이에 관한 정렬된 테이블이 하나 생기게 됨 → 여기서 찾은 후 전체 테이블에 해당 데이터를 찾게 됨 (데이터가 나이순으로 정렬되어 있기 때문에 하나만 조회하면 됨) 인덱스도 테이블이다. 인덱스의 핵심은 탐색(검색) 범위를 최소화 하는 것 2023 KAKAO Tech Campus_BackEnd 필수 과정 DB(MySQL) 강의 정리 내용입니다. 2023. 6. 4.
조회 최적화를 위한 인덱스 이해하기 - 01. 데이터베이스 성능 핵심 컴퓨터 구조 CPU가 디스크나 네트워크 카드 등에 접근을 하기 위해서는 I/O 버스를 거쳐야 함 데이터를 저장하기 위한 용도 → 메모리, 디스크 메모리 vs 디스크 메모리 속도 : 빠름 영속성 : 전원이 공급되지 않으면 휘발 가격 : 비쌈 디스크 속도 : 느림 영속성 : 영속성이 있음 가격 : 저렴함 데이터베이스의 데이터는 결국 디스크에 저장됨 하지만, 디스크는 메모리에 비해 훨씬 느리다. → 데이터베이스 성능의 핵심은 디스크 I/O(접근)을 최소화 하는 것 디스크 접근은 어떻게 줄일 수 있을까? 메모리에 올라온 데이터로 최대한 요청을 처리하는 것 → 메모리 캐시 히트율을 높이는 것 심지어 쓰기도 곧바로 디스크에 쓰지 않고 메모리에 쓴다. → 메모리에 데이터 유실을 고려해 WAL(Write Ahead L.. 2023. 6. 4.
SNS 모델링으로 배우는 정규화 / 비정규화 - 07. 실무에서의 정규화 비정규화에 대한 고민들 실무에서는 어떤 고민들을 할까? 테이블을 만들 때면 항상 고민 중복된 데이터이면 반드시 정규화를 해야할까? 사실 그렇지 않음 실무에서 중복 데이터면 기계적으로 정규화를 하는 분이 종종 있음 정규화는 비용 → 읽기 비용을 지불하고 쓰기 비용을 줄이는 것 정규화시 고려해야 하는 것 얼마나 빠르게 데이터의 최신성을 보장해야 하는가? 히스토리성 데이터(데이터의 최신성을 보장하지 않음 → 과거의 데이터를 가지고 있어야함)는 오히려 정규화를 하지 않아야 한다. 데이터 변경 주기와 조회 주기는 어떻게 되는가? → 만약 변경주기가 조회주기보다 빈번하다면 정규화하기에 유리하다. (쓰기의 이점을 가져가야 함. 반대의 경우에는 조회의 이점을 가져야함 ) 객체(테이블) 탐색 깊이가 얼마나 깊은가? 객체(테이블) 탐색 깊이가 .. 2023. 6. 4.
SNS 모델링으로 배우는 정규화 / 비정규화 - 01. 정규화 - 비정규화 핵심 이론 정규화 중복을 최소화하게 데이터를 구조화하는 프로세스 중복을 제거하고 한 곳에서만 데이터를 관리하겠다는 의미 → 데이터 정합성(어떤 데이터들이 값이 서로 일치하는 상태) 유지가 쉬움 읽을 때는 항상 원본 데이터를 참조 → 읽기시 참조 발생 테이블 설계 관점에서 조회와 쓰기 사이의 트레이드 오프 → 둘 중 어떤 것에 중점을 두어서 어떻게 설계하느냐에 따라 데이터나 아키텍처의 모습이 많이 달라짐 조회와 쓰기에서 서로 다른 최적화 기법들이 적용됨 따라서 조회와 쓰기를 분리해서 보는 습관이 좋음 비정규화(반정규화) 중복을 허용 데이터 정합성 유지가 어려움 참조 없이 읽기 가능 2023 KAKAO Tech Campus_BackEnd 필수 과정 DB(MySQL) 강의 정리 내용입니다. 2023. 6. 4.
MySQL 소개 - 02. MySQL 아키텍처 소개 3 Tier 아키텍처 클라이언트는 서버에 데이터를 요청 → 서버는 데이터베이스에게 데이터를 요청 데이터베이스 데이터베이스는 파일을 관리하는 서버 클라이언트는 json을 통해서 서버에게 데이터를 요청 → 서버는 SQL을 통해서 MySQL 서버에 데이터를 요청 (MySQL 입장에서 본다면 서버는 클라이언트와 같은 역할) MySQL 서버 MySQL 내부에서는 MySQL 엔진 → 스토리지 엔진 → 운영체제 → 디스크를 거쳐 데이터를 탐색하고 그 결과를 돌려줌 MySQL 엔진 : 판단과 명령을 하는 두뇌 스토리지 엔진 : 판단을 수행하는 역할 MySQL 엔진 MySQL 엔진은 쿼리 파서, 전처리기, 옵티마이저, 쿼리 실행기로 이루어져 있음 쿼리 파서 : SQL을 파싱하여 Syntax Tree를 만듦 → 이 과정에.. 2023. 6. 4.