분류 전체보기

    Spring MVC, DispatcherServlet

    WebApplicationContext Servlet이란? 자바 VM에게 main() 메소드를 가진 클래스를 시작시켜 달라고 요청할 수 있는 독립 자바 프로그램과는 다르게, 웹 환경에서는 자바 VM에게 main() 메소드를 호출할 방법이 없다. 또한 여러 명의 사용자가 동시에 웹 애플리케이션을 이용한다. 그래서 웹 환경에서는 main() 메소드 대신 서블릿 컨테이너가 HTTP 요청을 받아서, 해당 요청에 매핑되어 있는 서블릿을 실행해주는 방식으로 동작한다. main() 메소드 역할을 하는 서블릿을 만들어두고, 미리 애플리케이션 컨텍스트를 생성해 둔 다음, 요청이 서블릿으로 들어올 때마다 getBean()으로 필요한 빈을 가져와서 정해진 메소드를 실행하는 방식으로 동작한다. WebApplicationCon..

    대규모 서비스를 위한 고려 사항 (2)

    6. 무상태(Stateless) 웹 계층 웹 계층을 수평적으로 확장하기 위해서는 사용자 세션 정보와 같은 상태 정보를 웹 계층에서 제거해야 한다. 바람직한 전략은 상태 정보를 관계형 데이터베이스나 NoSQL과 같은 지속성 저장소에 보관하고, 필요할 때 가져오도록 하는 것이다. 이렇게 구성된 웹 계층을 무상태 웹 계층이라고 한다. 상태 정보 의존적인 아키텍처 예를 들어서 사용자 A의 세션 정보나 프로파일 이미지와 같은 상태 정보는 서버 1에 저장된다. 이때의 문제는 사용자 A를 인증하기 위해서 HTTP 요청은 반드시 서버 1로 전송되어야 한다는 것이다. 만약 서버 2로 요청하면, 서버 2에는 사용자 A에 대한 상태 정보가 저장되어 있지 않아 인증이 실패할 것이다. Sticky Session 이러한 문제를 ..

    대규모 서비스를 위한 고려 사항 (1)

    1. 데이터베이스 RDBMS vs NoSQL RDBMS 관계형 데이터베이스는 자료를 테이블과 열, 칼럼으로 표현하고, SQL을 사용하면 여러 테이블에 있는 데이터를 관계에 따라 조인하여 합칠 수 있다. NoSQL 비 관계형 데이터베이스는 크게 4가지 부류로 나눌 수 있다. Key-Value Store Graph Store Column Store Document Store 이러한 비 관계형 데이터베이스는 일반적으로 조인 연산을 지원하지 않는다. 대부분의 경우에는 관계형 데이터베이스가 좋은 선택지가 될 것인데, 경우에 따라 구축하려는 시스템에 적합하지 않은 경우 관계형 데이터베이스 이외의 저장소도 살펴봐야 한다. NoSQL 데이터베이스를 도입할 상황 아주 낮은 응답 지연시간 (latency)가 요구됨. 데이..

    [Real MySQL] 10장 파티션

    파티션 개요 파티션이란? MySQL 서버의 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만, 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 솔루션. 일반적으로 DBMS의 파티션은 하나의 서버에서 테이블을 분산하는 것이며, 원격 서버 간에 분산을 지원하는 것은 아니다. 파티션을 사용하는 이유 테이블의 데이터가 많아진다고 해서 무조건 파티션을 적용하는 것이 효율적인 것은 아니다. 하나의 테이블이 너무 커서 인덱스의 크기가 물리적인 메모리보다 훨씬 크거나, 데이터 특성상 주기적인 삭제 작업이 필요한 경우 등이 파티션이 필요한 대표적인 예라고 할 수 있다. 단일 INSERT와 단일 또는 범위 SELECT의 빠른 처리 데이터베이스에서 인덱스는 일반적으로 SELECT를 위한 것으..

    InnoDB 개념 정리

    InnoDB 개요 클라이언트의 데이터 읽고 쓰기 요청에 대한 응답은 모두 데이터베이스 캐시(버퍼 풀)를 통해 일어나며, 참조 또는 변경하는 데이터가 버퍼 풀에 없으면 데이터베이스에서 해당 데이터를 패치한다. 클라이언트의 요청이 데이터 변경인 경우 데이터의 변경 작업은 모두 버퍼 풀에서 일어나며, 데이터베이스에 바로 쓰지는 않는다. 참고로, 데이터의 정합성을 보증하기 위해서는 데이터베이스보다 로그를 먼저 갱신해야만 한다. 이러한 이유로 일단 COMMIT을 수행한 데이터는 분실하면 안 되므로 COMMIT이 완료되기 까지 로그 버퍼를 통해 변경 내용을 로그에 기록한다. Dirty Data 버퍼 풀에 존재하지만 데이터베이스에는 아직 쓰이지 않는 데이터, 즉 Dirty Data는 백그라운드에서 순차적으로 데이터베..