톰캣 이란was의 역활 jakarta EE 표준 스펙을 완벽하게 구현하고 있지는 않음 완벽한 was는 x서블릿 컨테이너이지만 was도 가능 스피링 부트가 톰 캣을 내장한 이유최소한의 설정으로 스프링 기반의 애플리케이션을 독립 실행할 수 있또록 톰캣을 내장spring-boot-starter-web에 내장되있음 이전 톰캣 설치 방법 스프링 부트의 톰캣 실행 과정createApplicationContext() => ConfigureableWebServerApllication인스턴스 생성 => 컨텍스트 메서드 생성 => ServletWebServerApplicationContext => createWebServer()=> TomcatServletWebServerFactory => getWebServer() 톰 ..
전체 글
읽기 쉬운 코드를 짜기 위해 노력합니다. 좋은 코드는 단순하고 이해하기 쉬워야 한다고 생각합니다.키워드 정리실행 단위: cpu core에 실행하는 하나의 단위로 프로세스와 스레드를 포괄하는 개념프로세스: 하나의 스레드만 가지고 있는 단일 스레드 프로세스동시성: 한 순간에 여러가지 일이 아니라, 짧은 전환으로 여러가지 일을 동시에 처리하는 것 처럼 보이는 것 메모리:code: 실행 명령을 포함하는 코드들Data: Static 변수 혹은 Global 변수Heap: 동적 메모리 영역Stack: 지역 변수, 매개변수, 반환 값 등 일시적인 데이터 Context Switching: 짧은 시분할로 프로세스 들을 바꿔치기Thread의 Context Swtich은: 공유 되는 자원이 있음 Multi-process & Multi-Thread: 한 어플리 케이션에 대한 처리 방식Multi-process로그인을 예시로..
동시성 제어데이터 무결성을 침해하지 않고 동시에 트랜잭션을 처리할 때 이를 제어하는 방법을 총칭 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..
카카오 모빌리티 코테 1차와 토스 next 챌린지 코테를 친 한주가 지나왔다토스는 아직 갈 수준이 아닌 것 같다는게 확실히 느껴졌고 카카오 모빌은 1차 코테가 너무 쉬웠는데 불합격을 통보 받았다.분명 쉬웠고 문제를 전부 풀었기 때문에 불합격한 이유를 잘 모르겠었는데 오늘 흑백 요리사를 보다 보니 이유를 알 것 같다. 흑백 요리사를 보면 와 한번 먹어보고 싶다. 그리고 다음 요리가 어떨지 기대가 된다. 이런 생각이 들었는데 내가 제출했던 그리고 평소에 만드는 코드를 보면 기대가 되는 코드인가 생각해보면 아니였다.또한 나는 코테 마무리를 하면서 한번 더 이쁘고 더 다른 방법이 없는지 열정과 섬세함을 챙기지 못한 것 같다. 물론 다른 분야이지만 발전하기 위해서는 이러한 부분이 필요하다고 생각된다. 또 느낀점은..
AssertJ는 JUnit과 함께 사용해 검증문의 가독성을 확 높여주는 라이브러리 입니다.윗 쪽 보다 아래쪽 가독성이 더 좋습니다.Assertions.assertEquals(a+b, sum);assertThat(a+b).isEqualTo(sum); 메서드 목록 isEqualTo(A) A와 값이 같은지 검증isNotEqualTo(A) A와 값이 다른지 검증contains(A) A 값을 포함하는지 검증doesNotContain(A) A 값을 포함하는지 않는지 검증startsWith(A) 접두사가 A인지 검증endsWith(A) 접미사가 A인지 검증isEmpty() 비어있는 값인지 검증isNotEmpty() 비어있는 않은 값인지 검증isPositive() 양수인지 검증isNegative() 음수인지 검증is..
제어의 역전과 의존성 주입스프링은 모든 기능의 기반을 제어의 역전IoC와 의존성 주입DI에 두고 있습니다. Inversion of Control외부에서 관리하는 객체를 가져옴, 스프링 컨테이너가 객체를 관리, 제공하는 역활을 한다.public class A { b = new B();}//클래스 A 에서 new 키워드로 클래스 B 의 객체를 생성 Dependency Injection어떤 클래스가 다른 클래스에 의존한다.public class A{ @Autowired B b;} 빈과 스프링 컨테이너스프링 컨테이너: 빈을 생성하고 관리, 빈의 생명주기를 관리함빈: 스프링 컨테이너가 생성하고 관리하는 객체빈을 스프링 컨테이너에 등록하기 위해 XML 파일 설정 애너테이션 추가 등 여러가지 방법을 제공MyB..
APACHE요청이 들어오면 커넥션을 형성하기 위해 프로세스 생성 (계속해서 새로운 프로세스가 만들어짐)PREFORK를 통해 미리 프로세스를 생성해서 요청이 들어오면 대응하는 방식으로 바뀜=> 개발하기 쉽다, 확장성이 좋다, 안정성이 높다 시간이 지나 C10k 에러 발생=> 동시에 연결된 커넥션 수 증가 (요청을 처리하기 위해 서버가 얼마나 많은 클라이언트와 연결 가능한가)1. 커넥션이 많아져 프로세스가 많아짐2. 메모리 부족으로 이어짐3. CPU 부하(컨텍스트 스위칭 증가) Nginx(event 기반 서버)미스터 프로세스 워커 프로세스의 구조로 이루어져있다 시간이 오래는 작업은 Thread Pool을 만들어서 처리하게 함(워커 프로세스에서 넘겨줌)cpu 코어 갯수만큼 worker process 만듬단점..