-
Notifications
You must be signed in to change notification settings - Fork 0
조희승 5주차 학습 일지
huiseung edited this page Jul 29, 2024
·
2 revisions
- 다운로드 페이지
- 실행(맥)
- tar 압축 해제후
- bin/startup.sh 실행
- 종료(맥)
- bin/shutdown.sh 실행
- tomcat 10은 javax.servlet 이 호환 되지 않아 @WebServlet 을 인식 못함
-
implementation 'jakarta.servlet:jakarta.servlet-api:5.0.0' 을 사용
-
- 로그 보는 법
- logs/catalina.out
- 더미 데이터 csv 파일을 만든다
- /var/lib/mysql-files 폴더 밑으로 csv 파일을 옮긴다
- 테이블을 만들어 두고 다음 쿼리 실행
- 인덱스가 있는 컬럼은 insert 시 인덱스 자료구조에 추가 오버헤드가 있기에, 데이터를 다 넣고 인덱스를 생성하는게 좋다
- 인덱스 설정 쿼리 실행
LOAD DATA INFILE 'filename.csv'
INTO TABLE table_name
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;
- Mysql 8 부터 root password 를 사용하지 않고 아니라 sudo mysql 로 접속한다
- auth socket 인증 플러그인 사용
- 보다 작다 조건
- 인덱스 시작 지점 부터 조건 범위 넘어갈 때 까지 스캔
- 보다 크다 조건
- 조건을 만족하는 첫 값을 찾은 후 인덱스 끝까지 모든 값을 검사해야 하기 때문에 잠재적으로 모든 값을 스캔할 수 있기에 옵티마이저는 이를 비효율이라 판단해 테이블 전체 스캔을 선택할 수 도 있다
- sum & 보다 크다 조건
- 커버링 인덱스
- sum의 대상과 where의 대상이 같은 인덱스를 쓰는 컬럼일 경우 디스크 페이지에 접근하지 않고 인덱스 만으로 계산 가능합니다.
- 커버링 인덱스
- 데이터베이스는 폴더
- mysql은 /var/lib/mysql/데이터베이스 이름
- 테이블은 파일(ibd 확장자)
- innoDb는 인덱스 자료구조와 데이터가 합쳐져 하나의 파일에 저장
- where 절 컬럼(pk가 아닌 컬럼)에 인덱스(세컨드 인덱스)가 있을 경우 탐색
- 세컨드 인덱스는 키를 컬럼값, 리프값으로 프라이머리 키를 갖습니다
- 프라이머리 인덱스는 키를 pk, 리프값으로 데이터 페이지 주소를 갖습니다
- jsp 는 예약어로 session 변수가 있다
- header를 빼는 작업을 해보자
- concurrent hashmap key 단위 락
- compute 활용
-
서브 파티
- 외부 시스템
- 보험, 실명확인, 본인인증, 운전면허 검증, 계좌 검증
-
외부 연동을 도입하는건 컨틀롤 할 수 없는 기술을 도입하는 행위
-
과거
- 라이더가 운전면허 입력시 운영자가 경찰청 사이트에서 운전면허를 확인 후 사내 서비스에 기입하는 로직
- api 가 제공되지 않았음
-
현제
- api 가 제공되어 자동화
-
배민 -> 도로교통 공단, 토큰 요청
-
도로교통 공단 -> 배민, 약속된 api 를 호출, 요청에 토큰을 담아 준다
-
배민, 토큰 레디스에 저장, 토큰 유효시간 보다 작은 시간 살아남게 저장
-
배민 -> 도로교통 공단, 운전면허 검증 요청
-
도로교통 공단 -> 경찰청, 운전면허 검증 요청
-
경찰청 -> 도로교통 공단, 검증 결과 응답
-
도로교통 공단 -> 배민, 검증 결과 응답
-
과제
- 영향 최소화
- 내부 시스템에 "면허 상태를 요청하면 응답하는 서버" 와 "" 를 둔다,
- 리소스 절약
- 서킷 브레이커 패턴
- 영향 최소화
- 발표자 이영민
- mysql 의 default isolation level
- iso 표준은 repeatable read 단계에서 phantom read 가 발생하지만, mysql은 mvcc를 이용해 막을 때도 있다
- select fro update/share 는 가장 최신걸 읽는다
- consistency non locking read
- mvcc 를 이용해 락 없이 트랜잭션 동안 동일 쿼리 결과를 보장
- trnasaction id 와 undo log 활용
- 발표자 지찬우
- 쉐어락
- 락을 얻지 못한 트랜잭션도 락이 잡힌 데이터를 읽을 수는 있게 허락
- 쉐어 락이 얻은 데이터는 배제 락을 걸 수 없다
- select for share
- 락을 얻지 못한 트랜잭션도 락이 잡힌 데이터를 읽을 수는 있게 허락
- 배제 락
- 락을 얻지 못한 트랜잭션은 락이 잡힌 데이터에 대해 읽지도 변경도 못하게 한다
- 배제락이 얻은 데이터는 다른 트랜잭션이 쉐어락/배제락 혹은 락이 해제 될때 까지 대기한다
- select for update
- 락을 얻지 못한 트랜잭션은 락이 잡힌 데이터에 대해 읽지도 변경도 못하게 한다
- 데드락 발생
- 왜래키 제약 조건
- 4가지 조건
- 비관적 락
- 쿼리 순서 변경
- PBEKey 비밀번호 byte[] 생성 결과를 문자열로 저장하고 싶을 땐 new String 이 아니라 Base64 인코딩을 써야 한다
- String은 아스키코드 범위안의 값만 변환하고 아닌 값은 무시한다
- 범위 밖의 값이 byte[] 안에 있다는 확인이 없다면 Base64 쓰자
- 스프링과 유사하게 서블릿을 하나 두고 controller를 만드신 분을 봤습니다. 스프링은 디스패처서블릿을 왜 도입했는가 고민해 본적이 있어서 이야기를 나눌 수 있는 좋은 시간이였습니다
- page scope
- 페이지 실행시 생성, 페이지 처리 끝나면 파괴
- 기본값
- request scope
- 하나의 요청이 올때 생성, 응답시 파괴
- session scope
- 브라우저와 연결시 생성, 닫힐 때 파괴/세션 유효 시간이 끝나면 파괴
- 같은 브라우저 요청에 대해 공유
- application scope
- 서버 시작시 생성, 서버 종료시 파괴