본문 바로가기

웹 개발

(25)
오라클 아키텍처(Oracle Architecture) 이 글은 책 『오라클 튜닝 에센셜』의 내용을 기반으로 작성했습니다 오라클 아키텍처는 실제로 더 복잡하지만, 간단하게 보도록하자. 위와 같은 그림으로 본다고 하고 각자 하는 역할이 무엇인지 살펴보도록 하자. INSERT 쿼리 동작 과정 예시 쿼리 INSERT INTO test_table(num) VALUES 10 쿼리를 실행한다 서버프로세스가 문법이 맞는지 확인한다. test_table이 있는지 num이라는 칼럼이 있는지, 10을 저장할 수 있는지 확인한다 sql문을 실행한 계정이 test_table에 insert할 수 있는 권한을 가지고 있는지 검사한다 insert문을 재사용하기 위해 해당 쿼리를 shared pool에 저장한다 쿼리가 실행되면 10이라는 값을 Redo 로그 버퍼에 저장한다 데이터베이스 ..
리액티브 프로그래밍(Reactive Programming) 회사에서 webflux를 사용해보면서 이것이 정확히 어떤것인지 리액티브는 뭐고 어떤것인지 모르는 상태로 작업을 했다. webflux 그리고 webclient를 정확하게 이해하기 위해서 공부를 막 시작하는 단계라 내용에 오류가 있을 수도 있지만 정리를 해본다. 리액티브 시스템이란 하드웨어가 발전하고 인터넷이 발전함에 따라 하루에 수많은 데이터가 움직이고 계산되며 데이터를 다루는 시스템들은 점점 규모가 커지고있다. 수십대의 서버를 사용하고 응답대기시간이 긴 시스템들을 유지보수하려면 몇시간 혹은 몇일이 걸리는 작업이 될 수도 있다. 또한 이러한 긴 응답시간들은 사용자들의 빠른 응답 요구를 수용하지 못한다. 이러한 이유로 그만한 효율을 내기 위해 **리액티브**라는 **설계 원칙**이 제시되었다. 리액티브 특징..
블로킹(Blocking)과 논블로킹(NonBlocking) 그리고 동기(Synchronous)와 비동기(Asynchronous) 처음 블로킹(Blocking)과 논블로킹(NonBlocking)이라는 것을 들었을 때 동기(Synchronous), 비동기(Asynchronous)와 무슨 차이가 있는지를 잘 이해하지 못하였다. 알고보니 내가 알고있던 동기, 비동기가 블로킹과 논블로킹의 개념이 약간 섞여있던 것이다. 좀 더 자세히 둘을 분해해보자. 블로킹, 논블로킹 블로킹(Blocking) 함수 A가 함수 B를 호출했을 때 함수 B를 처리할 동안 함수 B가 제어권을 가지고 있어 작업이 모두 끝날 때 까지 함수 A가 대기상태가 된다. 쉽게 말해 처리해야 할 작업이 있으면 그것을 처리할동안 가만히 대기를 하고있는 것을 말한다. 직원A: 이 업무 좀 처리해주세요 직원B: 네~ (업무를 처리한다) 직원A: (직원B의 업무가 끝날때까지 다른 업무..
서블릿(Servlet) 서블릿(Servlet) 서블릿이란? 웹 애플리케이션을 만드는데 사용하는 기술이다 클래스와 인터페이스를 제공하는 인터페이스다 서블릿을 만들기 위해 구현되어야 하는 인터페이스다 서버의 요청을 수용하고 요청에 대한 응답하는 클래스다. 동적 웹 페이지를 생성하기 위해 서버에 배포된 웹 컴포넌트이다 웹-클라이언트 구조 서블릿을 이해하기 전에 클라이언트와 웹 서버가 어떻게 요청과 응답을 주고 받는지 알아야한다. 클라이언트가 웹 서버로 HTTP 요청을 보낸다 서버는 컨테이너에 있는 서블릿으로 요청에 대한 서비스를 수행한다 응답을 만들고 HTTP 응답을 클라이언트에게 보낸다. 서블릿 동작 방식 사용자가 웹 서버에 HTTP 요청을 보낸다. 웹 서버는 웹 컨테이너(서블릿 컨테이너)로 요청을 포워딩 시킨다. 웹 컨테이너는 ..
[Apache MPM] Prefork, Worker, Event Apache MPM MPM은 다중처리 모듈(Multi-Processing Module)의 약자이다. 클라이언트에서 요청이 들어올 때 어떤식으로 처리할 것인지에 대한 모듈을 말한다. 아파치에서 가장 대중적으로 사용하는 MPM은 크게 3가지의 모듈이 있다. Prefork, Worker, Event이다. 이 세가지의 특징과 차이점을 알아보자 Prefork 하나의 요청에 대해서 하나의 자식 프로세스가 하나의 스레드를 사용해서 처리하는 방식이다. 동시에 여러개의 요청이 들어온다면 생성되어있는 자식 프로세스에서 각 요청을 처리하게 된다. 각 프로세스들의 자원은 독립적이므로 다른 요청이 들어오거나 프로세스 하나에 장애가 발생하더라도 다른 요청에 영향이 가지 않는다는 이점이 있다. 하지만 프로세스가 많아진다면 프로세스..
아파치에 대한 설정 Httpd.conf Apache Httpd.conf 아파치에 대한 설정이 있는 파일이다. 여러 설정값들이 있지만 자주 사용하는 일부 설정법에 대해서만 기록한다 ServerRoot Apache 서버가 존재하는 디렉토리를 설정 다른 지시자의 상대 경로는 ServerRoot 기준으로 지정된다 Listen Apache와 통신하는 포트를 설정 Listen이 설정되어 있지 않으면 Apache가 실행되지 않음 기본포트 http : 80 https : 443 Listen 80 혹은 Listen 443으로 되어 있는 경우 웹 브라우저로 접근시 http://example.com으로의 접근은 http://example.com:80과 동일하다. 마찬가지로 https://example.com으로 접근시 https://example.com:443과..
오라클 쿼리 힌트 쿼리 힌트 SQL문 실행시 데이터를 스캐닝 하는 방법을 지시 해주는 구문으로, 오라클 옵티마이저가 아닌 개발자가 직접 최적의 실행 경로를 작성해 주는 것이다. 힌트로 할 수 있는 것 액세스 경로, 조인 순서, 병렬 및 직렬 처리, Optimizer의 목표를 변경 데이터값 정렬 드라이빙 테이블 선정 기본 사용법 쿼리 서두에 힌트를 명시한다 SELECT /*+ index_asc(e idx_myemp1_ename) */ empno, ename, sal FROM myemp1 e WHERE ename >= '가' 옵티마이저 지정 값 힌트 설명 all_rows 전체 resource 소비를 최소화 Cost-Based 접근 방식으로 all_rows를 full table scan 선호 CBO(Cost Ba..
도커 Docker Linux 컨테이너를 만들고 사용할 수 있도록 컨테이너화 하는 기술을 말한다. Docker를 사용하면 가벼운 모듈식 가상 머신처럼 다룰 수가 있다. 컨테이너 구축, 배포, 복사하고 이식을 유연하게 할 수 있어서 애플리케이션을 클라우드에 최적화하도록 지원한다. 작동 방식 Linux 커널과 함께 Cgroups및 네임스페이스와 같은 커널의 기능을 사용하여 프로세스를 분리함으로써 독립적으로 실행될 수 있도록 한다. 여러 프로세스와 애플리케이션을 서로 개별적으로 실행하여 인프라를 더 효과적으로 활용하고 개별 시스템을 사용할 때와 동일한 보안을 유지한다. 이미지 기반 배포 모델을 제공하므로 여러 환경 전반에서 애플리케이션이 모든 종속 항목과 손쉽게 공유할 수 있다. 또한 컨테이너 환경 내에서 애플리케이..