인덱스란?인덱스는 테이블안의 데이터를 더 빠르게 찾기 위해 사용하는 자료구조이다.특정 컬럼을 기준으로 정렬된 별도의 자료구조를 만들어서, WHERE 조건이나 검색 같은 쿼리를 훨씬 빠르게 만든다.적용 대상은 테이블의 특정 컬럼이며 자주 사용되는 컬럼에 적용되면 좋다.인덱스를 만들어도, 평소처럼 쿼리 날리면 된다. DB가 내부적으로 인덱스를 자동으로 활용해서 Full table scan이 아니라 인덱스를 따라서 빠르게 찾아간다.인덱스를 사용 못하는 경우LIKE “%abc” : 앞에 와일드카드 붙은 경우WHERE LOWER(email) = ‘abc’ : 함수를 감싸면 인덱스를 못 쓴다.OR 여러 개 묶인 복잡한 WHERE 절⇒ 이런 경우에는 인덱스 무시하고 그냥 Full table scan 쓸 수도 있음 그..
webDriverWait기능 : 페이지 로딩 후, 특정 요소가 조건을 만족할 때까지 기다림타이밍 : 페이지는 이미 떴고, 그 안에 있는 버튼, 텍스트박스, 태그 이런 거 기다릴 때조건 만족하면 바로 넘어감. 안 되면 시간 다 될 때까지 기다리다가 TimeoutException이 발생한다.new WebDriverWait(driver, Duration.ofSeconds(10)); pageLoadTimeout기능 : 페이지 전체가 로딩되는 시간 제한타이밍 : driver.get(url) 했을 때, 페이지가 너무 오래 걸리면 죽임 driver.set_page_load_timeout(10)driver.get("https://example.com") => pageLoadTimeout과 webDriverWait은 ..
OOM Score란?리눅스 시스템에서 메모리가 부족할 때 어떤 프로세스를 먼저 종료시킬지를 결정하는 점수.이 점수는 /proc/[PID]/oom_score 경로에서 확인할 수 있다./proc 경로란? 리눅스에서 가상 파일 시스템을 말한다.실제 파일이 아니라 커널이 메모리 상에서 실시간으로 만들어주는 시스템 정보현재 실행중인 프로세스 정보, CPU, 메모리 사용량 등.PID 란? 프로세스 ID를 의미한다. (= 프로세스 식별 번호)커널이란? 운영체제의 핵심부분으로 하드웨어와 소프트웨어 사이를 중계해주는 역할을 한다.앱이 CPU 쓰겠다고 하면 커널이 알겠다고 하면서 CPU랑 연결해주는 역할점수가 높을수록 OOM Killer가 먼저 죽일 확률이 높다.해당 점수는 0 ~ 1000 사이이다. 1000이면 메모리 ..
인증이란?요청 보낸 사람이 진짜 로그인 한 유저인지 확인하는 절차이다.스프링 시큐리티에서는 Authentication 객체로 이걸 관리한다.이 객체에는 유저, 이름, 인증되었는지에 대해 담겨있다. SecurityContext/ SecurityContextHolderSecurityContext : 현재 로그인 한 사용자의 인증 정보를 담고 있다.SecurityContextHolder: 이 SecurityContext를 저장하는 static 클래스이다.SecurityContextHolder는 내부적으로 ThreadLocal을 쓴다.→ ThreadLocal은 각 스레드가 자기만의 변수를 가질 수 있도록 하는 자바 클래스이다. 스프링 시큐리티는 여기에 SecurityContext를 저장한다. 그래서 동시적으로 ..
1. Docker 볼륨도커에서 컨테이너는 일종의 가상환경인데, 이 컨테이너는 기본적으로 데이터를 휘발성으로 저장한다. 즉 컨테이너를 삭제하면, 그 안의 데이터도 삭제되는데 이를 방지하기 위해 Docker 볼륨을 사용한다.Docker 볼륨 : 컨테이너 밖에 별도로 데이터를 저장하는 방식이다.따라서 컨테이너가 꺼지거나 삭제되어도 데이터가 살아있음보통 EC2의 특정 폴더에 저장됨. Docker은 스스로 저장공간을 가지는게 아니라, 호스트 컴퓨터의 파일 시스템 위에서 작동된다. 2. EBS 볼륨EBS는 AWS에서 제공하는 블록 스토리지 서비스이다.블록 스토리지 서비스란? 하드디스크처럼 데이터를 일정한 크기의 블록 단위로 저장하고 관리할 수 있게 해주는 저장소 쉽게 말해서 EC2 인스턴스에 외장 SSD를 붙인 것..
CI/CDContinuous Integration : 지속적인 통합, 코드 변경 사항을 자동으로 병합.Continuous Deployment : 지속적인 배포(배포 자동화)⇒ 개발자들이 작업한 코드를 develop 브랜치에 pr 하면, 서버에 자동 배포되도록 했다. 배포 알림 채널로 슬랙을 선택한 계기현재 프론트엔드와 백엔드 개발자는 하나의 공용 개발 서버에서 작업을 하고 있다. 이 서버는 백엔드에서 develop 브랜치에 코드를 머지하면, 자동으로 배포가 진행되는데 이 때 서버는 잠시동안 응답을 못하게 된다.이로 인해 프론트엔드 개발자는 자신이 보낸 API 요청이 잘못된 건지, 아니면 백엔드에서 배포중이어서, 서버가 잠시 내려간건지, 아니면 백엔드 API 자체가 잘못된 건지 판단하기가 어렵다. 물론 ..