톰캣 이란was의 역활 jakarta EE 표준 스펙을 완벽하게 구현하고 있지는 않음 완벽한 was는 x서블릿 컨테이너이지만 was도 가능 스피링 부트가 톰 캣을 내장한 이유최소한의 설정으로 스프링 기반의 애플리케이션을 독립 실행할 수 있또록 톰캣을 내장spring-boot-starter-web에 내장되있음 이전 톰캣 설치 방법 스프링 부트의 톰캣 실행 과정createApplicationContext() => ConfigureableWebServerApllication인스턴스 생성 => 컨텍스트 메서드 생성 => ServletWebServerApplicationContext => createWebServer()=> TomcatServletWebServerFactory => getWebServer() 톰 ..
CS지식
동시성 제어데이터 무결성을 침해하지 않고 동시에 트랜잭션을 처리할 때 이를 제어하는 방법을 총칭 LOCK동시성 제어의 한 방법으로, 데이터에 잠금을 걸어 읽기/변경/삭제 등을 제한하는 수단 낙관적인 락: 락을 사용하지 않는 락 방법충돌이 발생하지 않는다고 가정Version Column을 추가(number, hash, timestamp 등)DB에서 처음 읽어온 version 기억update 시 현재 db의 version과 다르면 롤백속도 빠름 비관적인 락: 충돌이 자주 발생할 것이라고 가정TABLE or ROW에 LOCK 걸고 트랜잭션 작업다른 트랜잭션은 LOCK 획득까지 대기해당 작업 완료 시 LOCK 해제속도 느림 실전 적용:콘서트 티케팅: SECOND LOST UPDATES 일어 날 수 있음 => 비..
InnoDB란MySQL이 5.5 버전부터 기본적으로 사용하는 스토리지 엔진※ 원래는 MyISAM이 기본 엔진이였다. InnoDB의 특징외래 키 지원 => 데이터 베이스에서 참조 무결성 보장※ MyISAM은 외래키를 지원하지 않음(애플리케이션 레벨에서, 직접 수정해야함) 레코드 수준의 잠금(Row-level Locking) 지원 [record = row] (레코드 자체를 잠그는 거시 아니라, 인덱스의 레코드를 잠금)UPDATE crew SET 좋아하는 크루 = '레모네' WHERE 분야 = 'BE' (분야가 BE인 레코드 모드 잠김)만약 설정하지 않고 full scan 시 모두 잠김 => index를 잘 설계해야 한다.※ MyISAM은 테이블 수준의 잠금을 지원(동시성, 병목 현상 발생 가능성 높음) A..
APACHE요청이 들어오면 커넥션을 형성하기 위해 프로세스 생성 (계속해서 새로운 프로세스가 만들어짐)PREFORK를 통해 미리 프로세스를 생성해서 요청이 들어오면 대응하는 방식으로 바뀜=> 개발하기 쉽다, 확장성이 좋다, 안정성이 높다 시간이 지나 C10k 에러 발생=> 동시에 연결된 커넥션 수 증가 (요청을 처리하기 위해 서버가 얼마나 많은 클라이언트와 연결 가능한가)1. 커넥션이 많아져 프로세스가 많아짐2. 메모리 부족으로 이어짐3. CPU 부하(컨텍스트 스위칭 증가) Nginx(event 기반 서버)미스터 프로세스 워커 프로세스의 구조로 이루어져있다 시간이 오래는 작업은 Thread Pool을 만들어서 처리하게 함(워커 프로세스에서 넘겨줌)cpu 코어 갯수만큼 worker process 만듬단점..
Index를 쓰는 이유: 조건을 만족하는 튜플(들)을 빠르게 조회하기 위해, 정렬, 그룹핑 하기 위해 Index 만들기CREATE INDEX player_name_idx ON player(name);CREATE UNIQUE INDEX team_id_backnumber_idx ON player(team_id, backnumber);// multicolumn index, composite indexSHOW INDEX FROM player; B-tree 기반 Index 동작 방식index로 지정한 것 기준으로 Tree 구조로 만들어짐EXPLAIN SELECT*FROM player WHERE backnumber = 7;// 어떤 키를 사용하는 지 알 수 있음 직접 INDEX 고르기SELECT * FROM pla..
DB의 부하를 줄이기 위해 캐시 사용 할 수 있음캐시: 데이터나 값을 미리 복사해놓는 임시 저장소(Memcached, Redis, Local Memory cache 등 구현)활용: Dynamic Programming(이 전의 값을 저장), JPA의 영속성 컨텍스트 파레토의 법칙에 의해 자주 사용되는 내용의 20%를 캐싱해두면 성능 증가를 이룰 수 있다 Cache Hit: 캐시에 데이터가 존재, 해당 데이터를 바로 반환Cache Miss: 원하는 데이터가 존재x, db에 찾아가서 반환 캐싱 전략 패턴읽기 전략Look Aside(옆을 보다): 캐시에 데이터가 없을 때 db에 요청장점: 캐시에 문제가 생기는 경우 DB로 요청을 위임단점: 캐시와 DB의 데이터 정합성 유지 어려움, 첫 조회 시 DB 부하 발생 ..