[ Basic ](30)
-
[DB] Index 적용 및 성능분석, 실행계획 분석
개요 - 게시글을 의미하는 post와 작성자를 의미하는 member 테이블을 만든다 - post 테이블에서 FK로 member의 id를 갖도록 구성한다. - post 테이블에서 member_id에 인덱스를 지정할 경우와 그렇지 않은 경우에 대해 분석한다. - post 테이블에는 데이터를 10,000개 넣어두고 분석한다. 인덱스를 설정하지 않은 경우 실행쿼리) select * from post where post_owner_id = 1 소요시간) 466 ms (execution: 147 ms, fetching: 319 ms) 실행계획 분석 쿼리) explain select * from post where post_owner_id = 1; 분석 결과 - type 항목이 ALL 이므로 최악인 '테이블 풀 스캔..
2021.12.16 -
[WEB] CORS(Cross-Origin Resource Sharing)
SOP(Same Origin Policy) 다른 출처의 리소스를 사용하는 것을 제한하는 보안 방식이다. SOP를 사용하면 보안에 도움이 된다. 만약 사용자가 서버에서 제공되는 URL 외 다른 URL로 접속해 서버에 request를 보낼 경우 이에 대한 출처를 cross-origin으로 판단해 SOP에 위반되며 해당 request는 허용되지 않는다. 이때 다른 출처(cross-origin)의 리소스가 필요할 경우, 해당 리소스가 있는 출처에 접근하고자 하는 설정에 필요한 것이 CORS이다. cf. 출처(Origin) 란? URL의 protocol, host(도메인), port를 통해 같은 출처인지 판단한다. 셋 중에 하나라도 다르면 다른 출처이고 모두가 같을 경우에만 같은 출처이다. ex) http://l..
2021.12.05 -
<추천글>[DB] Transaction의 Isolation level을 나눠 둔 이유
트랜잭션의 특징 (ACID) 원자성 (Atomicity) : 트랜잭션의 수행 결과는 DB에 모두 반영되던가, 그렇지 않던가 둘 중 하나여야 한다. 일관성 (Consistency) : 트랜잭션 수행 결과는 항상 일관성이 있어야 한다. 트랜잭션 시작 시에 참조한 DB상태를 기준으로 트랜잭션을 수행하고 트랜잭션 도중에 변경된 DB를 기준으로 하지 않는다. 따라서 사용자는 일관된 데이터를 볼 수 있도록 한다. 독립성 (Isolation) : 다수의 트랜잭션이 서로의 트랜잭션 연산에 끼어들 수 없다. 트랜잭션들끼리 동시에 수행될 수 없다는 의미가 아니다. 동시에 실행은 될 수 있으나 트랜잭션 도중의 결과를 다른 트랜잭션이 참조할 수 없다는 것을 의미한다. (serializable) 지속성 (Durability) ..
2021.11.29 -
[OS] 현대 OS의 Deadlock 처리
데드락이 발생하기 위한 조건 1. Mutual Exclusion : 한 resource에 대해 한 번에 하나의 task만 사용할 수 있다. 2. Hold and Wait : 어떤 task가 multiple resource를 필요로 하는데, 하나의 resource를 잡는 데는 성공했지만, 또 다른 resource를 잡는 데에는 실패했을 때, "첫 번째로 잡은 resource를 잡고 있는 채로, 두 번째 resource를 기다리는 상태" 3. No preemption : resource를 잡고 있는 task를 강제로 resource를 빼앗을 수 없음. 4. Circular wait : taskA는 taskB가 잡고 있는 resource를 기다리고, taskB는 taskC가 잡고 있는 resource를 기다리..
2021.11.22 -
[DB] 실행계획 항목 분석 기초
실행계획이란 말 그대로 요청받은 SQL문으로 데이터를 옵티마이저가 '어떻게 가져올 것인지'에 대한 계획 또는 경로를 의미한다. 같은 데이터를 가져오더라도 지름길을 통해 가져온다면 더 효율적으로 데이터를 가져올 수 있을 것이다. 요청할 SQL문의 실행계획을 확인하려면 EXPLAIN, DESCRIBE, DESC 중 아무 키워드나 사용하면 된다. EXPLAIN 키워드를 사용해 SQL의 실행계획을 확인해보면, 다음과 같이 id, select_type, table, type, key 등의 정보가 출력된다. 위 사진은 임의의 post라는 테이블에 explain select * from post; 쿼리를 보냈을 경우 실행계획을 보여준다. 이 정보들을 통해 옵티마이저가 요청받은 SQL문을 비효율적으로 수행하진 않는지,..
2021.10.13 -
<추천글>[DB] Database Layer 접근 방식 (JDBC, Query Mapper, ORM)
ApplicationLayer 에서 Database Layer에 접근하는 방법 3가지(Persistence Framework) 1) JDBC Template(또는 순수 jdbc) 2) Query Mapper(mybatis) 3) ORM(JPA) cf. Persistence(영속성): 데이터를 생성한 프로세스가 종료되어도 데이터가 사라지지 않게 하는 특성(생성된 데이터를 보관되어야한다는 성질을 의미함) 1. JDBC JDBC(Java Database Connectivity)는 썬 마이크로시스템즈에서 데이터베이스에 접근을 제공하는 자바 표준 API이다. 위 그림과 같이 JDBC 인터페이스는 다양한 JDBC Driver 구현체를 통해서 동일한 인터페이스로 구현이 되어 있다. 예를 들어, MySQL JDBC 드..
2021.09.27 -
[OS] interrupt와 system call
인터럽트(interrupt) 인터럽트란 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치에 예외상황이 발생하여 처리가 필요할 경우에 CPU에게 알려 처리할 수 있도록 하는 것을 말한다. 인터럽트가 발생하면 OS는 현재 CPU에 실행중인 기계어 코드를 중단하고 CPU가 해당 인터럽트 처리를 위한 프로그램(ISR; Interrupt Service Routine)으로 점프하여 해당 일을 수행 할 수 있도록 한다. 인터럽트의 의미는 생각보다 큰데, SW(instruction)에 의해서도 인터럽트가 발생할 수 있다. 예를 들어 DIV instruction을 실행할 때 0으로 나누어지거나, 주소 버스에서 할당되지 않는 주소공간을 액세스 한다든지 하는 경우를 예외(exception)..
2021.09.22 -
[BinarySearch] 백준 1920
처음에는 선형탐색을 생각했지만 정렬을 한 번만 해 둔다면 이진탐색이 성능 상 더 좋은 알고리즘이 될 것으로 판단했다. [자바 소스코드] import java.util.Arrays; import java.util.Scanner; public class Main { static int[] inputs; public static void main(String[] args){ Scanner sc = new Scanner(System.in); int len = sc.nextInt(); inputs = new int[len]; for(int i=0; i target){ end = mid - 1; } else{ start = mid + 1; } } System.out.println("0"); } } [시간복잡도 분석..
2021.08.04 -
[HTTP] HTTP 프로토콜 패킷 분석
1. 관찰 환경 및 방법 본인은 2020년 4월 18일 토요일부터 2020년 4월 22일 수요일까지 약 6일간 Wireshark를 이용하여 http기반의 임의의 사이트에 접속하고 패킷을 분석 및 관찰했다. 본인 자택 주변의 두 군데의 카페와 자택에서 진행했고 PC는 노트북과 데스크톱을 이용했는데, 노트북은 여러 개의 WIFI를 연결하며. 데스크톱은 유선망을 이용한다. 데스크톱은 본문3번의 ‘새로 알게 된 사실’을 기술할 때 사용했다. 두 컴퓨터 모두 Windows10운영체제이고 Internet Explorer11을 사용했다. Wireshark는 패킷을 관찰하기에 매우 최적화된 프로그램이다. 우선 시간 순으로 요청과 응답에 의한 패킷 정보들이 보기 좋게 나열되어 있다. Wireshark의 상단부를 보면 S..
2021.08.04 -
[TCP/UDP] Transport Layer 트래픽 분석
1. 개요 Application Layer와 Network Layer 사이에 존재하는 Transport Layer는 네트워크의 계층구조에서 핵심이다. Application 관점에서 보면 process들이 동작하는 호스트들이 직접 연결된 것처럼 보이는데, 이는 Transport Layer Protocol이 제공한다. 즉, end사이의 IP전달 서비스가 UDP와 TCP가 있음으로써 end사이의 두 프로세스 간의 전달 서비스로 확장된다. 여기서 transport multiplexing, demultiplexing이 활용된다. 일반적으로 Transport Layer단계에서 생성된 패킷을 세그먼트, Network Layer에서 생성된 패킷을 데이터그램이라고 부른다. 우선 UDP traffic을 관찰하기 위해 DN..
2021.08.04