Skip to content

조희승 5주차 학습 일지

huiseung edited this page Jul 29, 2024 · 2 revisions

Tomcat

issue

  • tomcat 10은 javax.servlet 이 호환 되지 않아 @WebServlet 을 인식 못함
    • implementation 'jakarta.servlet:jakarta.servlet-api:5.0.0' 을 사용
      
  • 로그 보는 법
    • logs/catalina.out

mysql bulk insert, csv 파일 활용

  • 더미 데이터 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;

sudo mysql

  • Mysql 8 부터 root password 를 사용하지 않고 아니라 sudo mysql 로 접속한다
  • auth socket 인증 플러그인 사용

where 조건에 따른 인덱스 활용

  • 보다 작다 조건
    • 인덱스 시작 지점 부터 조건 범위 넘어갈 때 까지 스캔
  • 보다 크다 조건
    • 조건을 만족하는 첫 값을 찾은 후 인덱스 끝까지 모든 값을 검사해야 하기 때문에 잠재적으로 모든 값을 스캔할 수 있기에 옵티마이저는 이를 비효율이라 판단해 테이블 전체 스캔을 선택할 수 도 있다
  • sum & 보다 크다 조건
    • 커버링 인덱스
      • sum의 대상과 where의 대상이 같은 인덱스를 쓰는 컬럼일 경우 디스크 페이지에 접근하지 않고 인덱스 만으로 계산 가능합니다.

데이터베이스, 테이블, 데이터는 어디 저장되어 있니?

  • 데이터베이스는 폴더
    • mysql은 /var/lib/mysql/데이터베이스 이름
  • 테이블은 파일(ibd 확장자)
    • innoDb는 인덱스 자료구조와 데이터가 합쳐져 하나의 파일에 저장

select 수행시 물리적 동작

  • where 절 컬럼(pk가 아닌 컬럼)에 인덱스(세컨드 인덱스)가 있을 경우 탐색
    • 세컨드 인덱스는 키를 컬럼값, 리프값으로 프라이머리 키를 갖습니다
    • 프라이머리 인덱스는 키를 pk, 리프값으로 데이터 페이지 주소를 갖습니다

리뷰

  • jsp 는 예약어로 session 변수가 있다
  • header를 빼는 작업을 해보자
  • concurrent hashmap key 단위 락
    • compute 활용

우아콘 2023, 서드파티와 동행 믿을 만한 서버 구축하기

  • 서브 파티

    • 외부 시스템
    • 보험, 실명확인, 본인인증, 운전면허 검증, 계좌 검증
  • 외부 연동을 도입하는건 컨틀롤 할 수 없는 기술을 도입하는 행위

  • 과거

    • 라이더가 운전면허 입력시 운영자가 경찰청 사이트에서 운전면허를 확인 후 사내 서비스에 기입하는 로직
    • api 가 제공되지 않았음
  • 현제

    • api 가 제공되어 자동화
  • 배민 -> 도로교통 공단, 토큰 요청

  • 도로교통 공단 -> 배민, 약속된 api 를 호출, 요청에 토큰을 담아 준다

  • 배민, 토큰 레디스에 저장, 토큰 유효시간 보다 작은 시간 살아남게 저장

  • 배민 -> 도로교통 공단, 운전면허 검증 요청

  • 도로교통 공단 -> 경찰청, 운전면허 검증 요청

  • 경찰청 -> 도로교통 공단, 검증 결과 응답

  • 도로교통 공단 -> 배민, 검증 결과 응답

  • 과제

    • 영향 최소화
      • 내부 시스템에 "면허 상태를 요청하면 응답하는 서버" 와 "" 를 둔다,
    • 리소스 절약
    • 서킷 브레이커 패턴

mysql repeatable read

  • 발표자 이영민
  • mysql 의 default isolation level
  • iso 표준은 repeatable read 단계에서 phantom read 가 발생하지만, mysql은 mvcc를 이용해 막을 때도 있다
  • select fro update/share 는 가장 최신걸 읽는다

mvcc

  • 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를 만드신 분을 봤습니다. 스프링은 디스패처서블릿을 왜 도입했는가 고민해 본적이 있어서 이야기를 나눌 수 있는 좋은 시간이였습니다

jsp 객체 scope

  • page scope
    • 페이지 실행시 생성, 페이지 처리 끝나면 파괴
    • 기본값
  • request scope
    • 하나의 요청이 올때 생성, 응답시 파괴
  • session scope
    • 브라우저와 연결시 생성, 닫힐 때 파괴/세션 유효 시간이 끝나면 파괴
    • 같은 브라우저 요청에 대해 공유
  • application scope
    • 서버 시작시 생성, 서버 종료시 파괴

👼 개인 활동을 기록합시다.

개인 활동 페이지

🧑‍🧑‍🧒‍🧒 그룹 활동을 기록합시다.

그룹 활동 페이지

🎤 미니 세미나

미니 세미나

🤔 기술 블로그 활동

기술 블로그 활동

📚 도서를 추천해주세요

추천 도서 목록

🎸 기타

기타 유용한 학습 링크

Clone this wiki locally