이번 스프린트는 비빔밥 스프린트다. 4개의 에픽을 진행했다.
순번 | 구분 | 에픽 | 시작 스프린트 | 에픽 완료 여부 |
1 | 웹사이트 | 1일 ?개 알고리즘 문제 풀기 | 1회차 | |
2 | 스터디 | 회사 스터디 | 1회차 | |
3 | 책 | Real MySQL 8.0 1권 | 13회차 | |
4 | 인프런 | 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch | 12회차 |
1. 1일 ?개 알고리즘 문제 풀기
총 7개 문제를 풀었다. 백준 문제만 풀었는데 특별히 기억에 남는 문제는 없다. 난이도가 낮은 문제 위주로 풀고 있는데, 파이썬에 익숙해지는 데는 도움이 되는 것 같다.
2. 회사 스터디 & 3. Real MySQL 8.0 1권
Real MySQL 8.0 (1권) - YES24
『Real MySQL 8.0』은 『Real MySQL』을 정제해서 꼭 필요한 내용으로 압축하고, MySQL 8.0의 GTID와 InnoDB 클러스터 기능들과 소프트웨어 업계 트렌드를 반영한 GIS 및 전문 검색 등의 확장 기능들을 추가로
www.yes24.com
이번 스프린트에서는 7장부터 8.3장까지 학습하고 스터디를 진행했다. 다음 스프린트에 8장 나머지 부분을 학습하고 스터디할 예정이다.
스터디를 진행하면서 각자 학습한 내용을 바탕으로 책을 돌아봤고, 이 과정에서 서로 궁금한 내용을 물어보는 시간을 가졌다. 아래 목록은 내가 7장부터 8.3장까지 학습하면서 정리한 내용 중 일부다.
- MySQL 서버는 데이터 암호화를 위해 마스터 키와 테이블스페이스 키를 가진다. 테이블스페이스키는 프라이빗 키라고도 한다.
- MySQL 서버는 암호화된 데이터가 저장된 디스크로부터 한 번 읽은 데이터 페이지를 복호화한 후에 InnoDB의 버퍼 풀에 적재한다. 따라서 데이터 페이지가 한 번 메모리에 적재되면 암호화되지 않은 테이블과 동일한 성능을 보인다.
- 데이터베이스가 아닌 애플리케이션에서 데이터를 암호화하여 MySQL 서버에 저장하는 경우가 있다. 이때 MySQL 서버는 저장되는 데이터가 이미 암호화된 것인지를 알 수 없다. 따라서 MySQL 서버가 지원하는 인덱스 기능을 100% 활용할 수 없다.
- MyISAM, MEMORY 스토리지 엔진을 사용하는 테이블에서 INSERT 문장을 실행하면 새로운 키 값을 즉시 B-Tree 인덱스에 반영한다. 이와 달리 InnoDB 스토리지 엔진은 필요하다면 인덱스 키 추가 작업을 지연시켜 나중에 처리할 수 있다. 하지만 PK나 유니크 인덱스의 경우 중복 체크가 필요하므로 즉시 B-Tree에 추가한다(MySQL 5.5 이상 버전에서는 인덱스 키 삭제 작업도 지연 처리될 수 있다).
- 인덱스 키 값의 길이가 길어지면 전체적인 인덱스의 크기가 커진다. 하지만 인덱스를 보관하는 InnoDB의 버퍼 풀은 크기가 제한적이므로 하나의 레코드를 위한 인덱스 크기가 커질수록 메모리에 캐시해 둘 수 있는 레코드 수는 줄어든다. 이에 따라 메모리 효율도 감소하게 된다.
- 일반적인 DBMS의 옵티마이저는 읽어야 할 레코드의 건수가 전체 테이블의 20~25%를 넘어서면 인덱스를 이용하지 않고 테이블을 모두 직접 읽어서 필요한 레코드만 필터링하는 방식으로 처리한다(힌트에 따라 다를 수 있음).
- 인덱스는 생성될 때 설정된 정렬 규칙에 따라 오름차순 또는 내림차순으로 정렬되어 생성된다. 이러한 인덱스를 어느 방향으로 읽을지는 쿼리에 따라 옵티마이저가 실시간으로 만들어내는 실행 계획에 따라 결정된다.
- B-Tree 인덱스는 다음의 조건에서는 작업 범위 결정 조건(책에서 설명하는 조건으로 쿼리 작업의 범위를 결정하는 조건을 말한다)으로 사용될 수 없다. 때에 따라서는 체크 조건으로는 사용될 수 있다.
- NOT-EQUAL로 비교된 경우. e.g. "<>", "NOT IN", "NOT BETWEEN", "IS NOT NULL")
- 앞부분 문자열 패턴이 비교된 경우. e.g. LIKE '%??'
- 스토어드 함수나 다른 연산자로 인덱스 칼럼이 변형된 후 비교된 경우 e.g. WHERE SUBSTRING(column, 1, 1) = 'X'
- NOT-DETERMINISTIC 속성의 스토어드 함수가 비교 조건에 사용된 경우. e.g. WHERE column = deterministic_function()
- 데이터 타입이 서로 다른 경우. e.g. WHERE char_column = 10
- 문자열 데이터 타입의 콜레이션이 다른 경우. e.g. WHERE utf8_bin_char_column = euckr_bin_char_column
내가 만든 퀴즈
1. 작업 범위 결정 조건으로 인덱스를 사용하지 못하는 경우와 사용하는 경우를 구분하세요(정답은 책에서 가져왔습니다).
- 작업 범위 결정 조건으로 인덱스를 사용하지 못하는 경우
- column_1 칼럼에 대한 조건이 없는 경우
- column_1 칼럼의 비교 조건이 위의 인덱스 사용 불가 조건 중 하나인 경우
- 작업 범위 결정 조건으로 인덱스를 사용하는 경우(i는 2보다 크고 n보다 작은 임의의 값을 의미)
- column_1 ~ column_(i-1) 칼럼까지 동등 비교 형태(”=” 또는 “IN”)로 비교
- column_i 칼럼에 대해 다음 연산자 중 하나로 비교
- 동등 비교(”=” 또는 “IN”)
- 크다 작다 형태(”>” 또는 “<”)
- LIKE로 좌측 일치 패턴(LIKE ‘승환%’)
4. 스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch
스프링 배치 - Spring Boot 기반으로 개발하는 Spring Batch - 인프런 | 강의
초급에서 중~고급에 이르기까지 스프링 배치의 기본 개념부터 API 사용법과 내부 아키텍처 구조를 심도있게 다룹니다. 그리고 스프링 배치 각 기능의 흐름과 원리를 학습하게 되고 이를 바탕으
www.inflearn.com
이번 스프린트에서는 섹션 6을 들었다.
FlowJob, Transition, SimpleFlow, FlowStep, JobScope, StepScope 등 Flow에 관한 전반적인 내용을 학습하고 실습을 진행했다.
- 이번 주에 토이 프로젝트를 통해 어떠한 서비스를 만들어볼지 결정했다. 토이 프로젝트를 진행하면서 현재 학습하고 있는 MySQL, Spring Batch, Angular 등을 사용해 볼 수 있을 것 같다.
'후기 & 회고' 카테고리의 다른 글
1주 1스프린트 17회차 회고 (0) | 2023.04.01 |
---|---|
1주 1스프린트 16회차 회고 (0) | 2023.03.25 |
1주 1스프린트 14회차 회고 (0) | 2023.03.11 |
1주 1스프린트 13회차 회고 (0) | 2023.03.04 |
1주 1스프린트 12회차 회고 (0) | 2023.02.25 |
댓글