분류 전체보기 (MySQL) Direct I/O 2020. 3. 8. 17:06 Direct I/O가 무엇인가 Direct I/O는 시스템의 read/write 버퍼 캐시를 거치지 않고 (ByPass) 직접 I/O를 수행하는 것이다. 왜 Direct I/O 인가? 대부분의 경우에는 Buffered cache 가 훨씬 더 나은 성능을 제공하지만 특정 애플리케이션의 경우에는 혜택이 거의 없다. 데이터베이스(DBMS)는 일반적으로 응용 프로그램 수준에서 데이터 캐싱을 관리하므로이 서비스를 구현하기 위해 파일 시스템이 필요하지 않다. 조금 더 구체적으로 말하자면 데이터베이스는 내부적으로 버퍼를 관리하고 해당 알고리즘이 운영체제에서 관리하는 버퍼 캐시에 대한 알고리즘보다 우수하다. 운영체제가 버퍼링 한것을 데이터 베이스 내부에서 한번 더 버퍼링을 하므로 이러한 경우에 오버헤드가 발생한다. 이.. (MySQL) Adaptive Hash Index 2020. 3. 8. 15:42 Adaptive Hash Index이란? B-Tree 인덱스를 보완하기 위해서 나온 기법이다. B-Tree 인덱스는 데이터의 양이 아무리 증가해도 데이터 접근 퍼포먼스가 선형적으로 증가하지 않는다는데 장점이 앗다. 하지만 자주 조회되는 데이터임에도 불구하고 매번 트리의 경로를 쫓아가야 하므로 조금 고지식한 경향이 있다. Adaptive Hash Index는 B-Tree의 이러한 단점을 보완하기 위해서 자주 사용되는 데이터 값만 내부적으로 해시 값을 생성하여 조회를 성능을 높인다. (즉 모든 데이터에 해시 값을 적용하지 않는다는 것이다.) Adaptive Hash Index의 장점 자주 사용되는 자원을 해시 값을 통해서 접근하기 때문에 락(Mutex)으로 인한 지연이 줄어든다. B-Tree인덱스 보다 훨씬.. (MySQL) ACID : 트랜잭션을 통한 동시성 제어 2020. 3. 8. 12:45 데이터베이스 요청은 순차적으로 선형 시간에 발생한다. 많은 유저들이 데이터베이스에 접근하거나 한 명의 유저가 요청을 실행 중일 때 해당 결과에 대해서 일관성을 보장하는 것이 중요하게 되었다. 일관성을 유지하기 위해서는, 전반적으로 처리되는 요청의 그룹인 트랜잭션을 사용해야 한다. 즉 트랜잭션은 논리적인 작업 단위이다. 원자성 (Atomicity) 원자성은 트랜잭션이 반드시 완수되어야 함을 의미한다. 만일 원자성을 따르지 않는다면 트랜잭션은 붕괴된다. 원자성은 데이터 무결성을 망가뜨리는 부분적으로 완료된 트랜잭션으로 절대로 남아있지 않도록 보장한다. 예시 은행에서 돈을 인출한다고 가정하자 인출을 완료하였지만 두 번째 요청이 실패하여 해당 시스템은 또 다른 은행에서 돈을 꺼내올 수 없는 경우 두 요청 모두 .. (운영체제) 프로세스 구조와 힙 2020. 3. 7. 14:02 C언어 코드를 예로 들어 힙에 대한 메모리 구조를 살펴보자 int main() { int *data; data = (int *) malloc(sizeof(int)); *data = 1; printf("%d\n", *data); return 0; } malloc : 동적으로 메모리를 생성하는 함수 (args는 size) 현재는 int가 4바이트 이기 때문에 32 bits의 메모리 공간이 생성된다. 해당 data는 Heap 메모리 공간에 생성된다. 출력 결과 : 1 이전과 같은 작업을 동일하게 진행한다. Stack에 return address를 저장한다. 지역변수인 int * data; 값을 저장한다. malloc을 처리할 때는 메모리 영역을 동적으로 생성하기 때문에 Heap 영역에 생성한다. 32 bits.. (JAVA) static keyword in java 2020. 3. 4. 11:54 static 연산자는 하기와 같은 네 가지 경우에 적용 가능하다. blocks variables methods nested classes 어떠한 멤버가 static으로 선언되어있을 때, 클래스의 오브젝트가 생성되기 이전에 접근 가능하다 이때 접근 시 어떠한 오브젝트의 참조가 필요 없다. package statickeyword; public class StaticExercise { static void method01() { System.out.println("I am static Method...!"); } public static void main(String[] args) { // TODO Auto-generated method stub method01(); } } 위의 코드를 예시로 StaticEx.. (REST API) REST API란? 2020. 3. 2. 19:50 API Application Programming Interface REST Representational State Transfer 인터넷 상의 시스템 간의 사호 운용성을 제공하는 방법 중 하나 웹을 깨뜨리지 않으면서 http를 진화시키는 방법 시스템 제각각의 독립적인 진화를 보장하기 위한 방법 REST API : REST 아키텍처 스타일을 따르는 API REST API 아키텍처 스타일 Client-Server Stateless Cache Uniform Interface Layered System Code-onDemand(optional) Uniform Interface Identification of resources manipulation of resources through represenatio.. (SPRING) Spring ApplicationContext의 내부 (2) 2020. 3. 1. 19:57 https://jwdeveloper.tistory.com/189 (SPRING) Spring ApplicationContext의 내부 (1) 요즘 스프링의 ApplicationContext의 빈 생성 원리에 대해서 2주 동안 지속적으로 살펴보았다. 어려워서 2주간의 시간이 걸린 것이 아니라 감탄 + 복잡하게 얽혀있는 인터페이스 추상클래스 클래스 와의 관계 때.. jwdeveloper.tistory.com 이때까지 살펴보았던 과정은 인스턴스를 생성하거나 초기화하는 과정이었다. 이제 실질적으로 Bean을 등록하는 과정을 살펴보자 Bean을 등록하는 메서드는 register로부터 시작된다. 사실 실질적으로 등록되는 메서드는 아래 doRegisterBean 메서드이다. doRegisterBean(Class , .. (SPRING) Spring ApplicationContext의 내부 (1) 2020. 3. 1. 17:16 요즘 스프링의 ApplicationContext의 빈 생성 원리에 대해서 2주 동안 지속적으로 살펴보았다. 어려워서 2주간의 시간이 걸린 것이 아니라 감탄 + 복잡하게 얽혀있는 인터페이스 추상클래스 클래스 와의 관계 때문에 시간이 조금 걸렸다.(아직도 하고 있다..;) 일단 시작한 계기는 Bean을 등록하면 분명 new를 사용해서 객체를 생성할텐대.. 그 부분을 찾고 싶었다. 아직 완벽하지는 않지만 느낀 바는 두 가지이다. 스프링은 신기하게도 인스턴스를 등록하는 것이 아니라 registry로 Bean에 대한 정보를 저장한다. 또 다른 느낀 점은 스프링이 객체지향적으로 잘 설계돼있다는 점이었다. 객체지향에 대한 막연한 개념이 실제 사용되는 코드를 보면서 아 이렇게 사용하면 되는구나 라고 개념이 명확해졌다... (JAVA) 상속보다는 컴포지션을 사용하자 2020. 2. 27. 23:03 http://aeternum.egloos.com/3013830 단일 접근 원칙(Uniform Access Principle)을 통한 캡슐화 - (上) 속성과 메서드, 그리고 캡슐화은행 도메인에서 계좌(account)의 주된 용도는 고객의 잔액(balance)을 관리하는 것이다. 객체 지향 분석/설계의 핵심은 실세계의 개념과 유사한(그러나 완전히 동일하지는 않은) 추상 모델을 구축하는 것이므로 유비쿼터스 언어(UBIQUITOUS LANGUAGE)에 포함된 어휘인 account와 balance를 사용해서 도 aeternum.egloos.com http://aeternum.egloos.com/3028192 단일 접근 원칙(Uniform Access Principle)을 통한 캡슐화-(下)[完] 단일 접근 원칙.. (알고리즘) 정렬 (3) - 퀵정렬 2020. 2. 26. 00:18 퀵 정렬이란? 풀기 힘든 문제를 풀기 쉽게 작은 단위로 점점 더 쪼개서 정렬을 수행하는 알고리즘 작은 단위로 쪼개는 과정은 파티셔닝을 통해 이루어진다. 기준되는 값을 하나 정해서 큰 값은 우측 작은 값은 좌측으로 정렬하면서 해당 작업이 끝나면 기준값을 기준으로 좌측 우측의 기준값을 또다시 설정하여 해당 과정을 반복하여 결국은 정렬이 이루어지는 알고리즘이다. 아래를 예시로 해당 알고리즘을 설명해보자 기준값을 기준으로 나누기 현재 배열의 길이는 9이다. pl을 왼쪽 커서 pr을 왼쪽 커서라고 지칭하겠다. 또한 기준값은 배열의 절반이라고 명시한다. 1. pl, pr, 기준값 설정 2. pl이 기준값보다 클 때까지 계속 전진! pr은 기준값보다 작을 때까지 계속 전진! 현재 pl은 8을 만났고 pr은 3을 만났.. 이전 1 ··· 7 8 9 10 11 12 13 ··· 27 다음