일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- JVM
- 강화학습
- SpringSecurity
- 최소힙
- 알고리즘
- 점근적 표기법
- 최대 힙
- 연결리스트
- 백준장학금
- AVL트리
- HTTP
- JPA
- Kruskal
- heapq
- jpa n+1 문제
- 이분탐색이란
- python
- MSA
- 완전이진트리
- 엔티티 그래프
- spring
- 운영체제
- posix
- 연결리스트 종류
- 자료구조
- 멀티프로세서
- 백준 장학금
- 스케줄링
- 프로세스
- 힙트리
- Today
- Total
목록전체 글 (107)
KKanging

InnoDB 스토리지 엔진 아키텍처MySQL 은 클라이언트의 쿼리를 해석하는 MySQL 엔진과 해석한 쿼리를 실행하기 위한 데이터를 읽고 쓰기 위한 핸들러 역할을 하는 스토리지 엔진으로 구성된다.InnoDB는 현재 MySQL 기본 스토리지 엔진이고 제일 많이 쓰는 MySQL 스토리지 엔진이다.Primary 키에 의한 클러스터링InnoDB에서 모든 테이블은 PK에 의해 클러스터링 되어 있다.→ PK 값의 순서대로 디스크에 저장된다는 의미그리고 Secondary index 는 레코드의 물리 주소가 아닌 PK 를 가진다.따라서 InnoDB는 pk에 의한 레인지 스캔은 상당히 빨리 처리될 수 있다.오라클 DBMS 의 IOT와 동일하게 구성 💡 PK 기준으로 클러스터링 되기 때문에 PK에 의한 Range 스캔이..

MySQL 전체 구조MySQL 구조는 클라이언트의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와SQL 파서 및 전처리기 SQL 옵티마이저와 캐시 와 버퍼로 이루어진 MYSQL 엔진과 스토리지 엔진으로 구성되어 있다MySQL 엔진은클라이언트로부터의 접속 및 쿼리 요청을 처리하는 커넥션 핸들러와 SQL 파서 및 전처리기, 쿼리의 최적화된 실행을 담당하는 옵티마이저가 주를 이룬다.SQL 문장을 분석하거나 최적화하는 등 DBMS의 두뇌에 해당하는 처리를 수행한다.스토리지 엔진은, 실제 데이터를 디스크 스토리지에 저장하거나 디스크 스토리지로부터 데이터를 읽어오는 부분은 스토리지 엔진이 전담한다.스토리지 엔진을 여러대를 사용할 수 있다?MySQL 서버에서 엔진은 MySQL 엔진은 하나이지만 스토리지 엔진은 여러 대..

센서 디스플레이 예제가정WeatherDataDisplay 종류이 세 가지 메서드는 각각 가장 최근의 온도, 습도, 그리고 기압 측정값을 반환한다. 우리는 이러한 변수들이 어떻게 설정되는지 신경 쓸 필요가 없으며, WeatherData 객체가 외부 장치인 WeatherStation으로부터 업데이트된 정보를 얻는 방법을 알고 있다.요구 사항이 화면들은 WeatherData가 새로운 측정값을 받을 때마다 업데이트되어야 한다.시스템은 확장 가능해야 한다일단 구현Copypublic class WeatherData { private CurrentConditionDisplay currentConditionDisplay; private StatisticsDisplay statisticsDisplay; private F..

문제 상황오리 문제가정모든 오리는 소리를 낼 수 있다(quack)모든 오리는 수영을 할 수 있다(swim)오리의 종류마다 외형만 다르다.(display)설명모든 오리는 quack 과 swim operation을 가지고 있기 때문에 추상 클래스로 quack 와 swim 을 가지게 하고 추상 메서드로 display 를 구현하게 하였다.추가 요구 사항(fly)추가 요구 사항오리는 날 수 있다.설명오리는 날 수 있기 때문에 fly 라는 operation 을 추가해야한다.다행이도 현재 MallardDuck 과 RedheadDuck은 fly 동작을 하므로 추상 클래스인 Duck 에 fly를 impl 하였다.에러 상황설명RubberDuck 추가 : 소리를 다른 오리와 다르게 냄, 날지 못함DecoyDuck 추가 : ..

동시성 제어란동시성 제어가 왜 필요할까?위 이미지 처럼 2개의 트랜잭션이 실행되었다고 가정하자트랜잭션 A 는 x와 y를 더해 y값을 수정하고트랜잭션 B는 x와 y를 더해 x값을 수정한다.위 예시는 정상적인 흐름의 실행 예시이다.하지만 트랜잭션이 동시에 실행됐다고 가정해보자.위 이미지 과정처럼 트랜잭션 A가 실행하다가 다른 트랜잭션에 switching 될 수도 있고 꼭 트랜잭션이 동시에 시작하지 않더라도 동시에 실행되는 트랜잭션은 어떻게 switching되어 어떤 실행 결과가 나올지 예상할 수 없다.(이러한 동시성 문제를 운영체제에선 경쟁조건:race condition 이라고 부른다) 데이터베이스에서 동시성 문제를 어떻게 해결할까?데이터베이스에서 이러한 동시성 문제를 락으로 해결한다(운영체제에서도 존재하는..

java 의 enum 이란상수가 필요해!public class EnumClient { private static final int ONE = 1; public static void main(String[] args) { System.out.println(ONE); }}우리는 프로그래밍 하는 도중에 상수가 필요하다면 위에 처럼private static final 키워드를 사용해서 상수 선언을 한다.추상화 된 상수가 필요해!public class EnumClient { private static final int ONE = 1; private static final int TWO = 2; private static final int THREE = 3; public static void main(String..

AOP 적용 시점위빙이란AOP 적용 시점을 알기 위해서는 위빙(Weaving)이라는 단어를 알아야 한다.우리가 분리한 핵심 로직과 부가 기능 로직이 결합되는 시점을 의미한다.따라서 그 시점에 따라 다음과 같이 구분된다.AOP 적용 시점컴파일 타임 위빙(Compile-Time Weaving)컴파일 타임 위빙(Compile-Time Weaving)런타임 위빙(Runtime Weaving)자바에서 사용하는 대표적인 AOP 기법Spring AOP는 2가지 기법을 채택하였다.JDK Dynamic 프록시JDK Dynamic 프록시는 Reflection API 의 Proxy를 사용해서 구현한다.프록시 팩토리에 의해 런타임 시 다이나믹하게 만들어지는 오브젝트Target의 인터페이스를 상속하는 구조로 사용된다따라서 cl..

자바 개발자가 AOP를 공부 해야하는 이유관점 지향 프로그래밍 기법이란핵심 기능과 부가 기능우리가 개발할 때를 생각해보자도메인 로직을 개발할 때 보면 항상 “도메인 로직만” 개발할 수 있을까?컴포넌트 로깅을 위해 모든 메서드에 로그를 찍는다거나DB와 트랜잭션을 연결하기 위해 트랜잭션 connection 을 한다던가 하는일련의 핵심기능을 위해 해야하거나 부가적인 필요 때문에 해야하는 부가기능 로직이 항상 들어가게 된다.핵심 기능 : 해당 객체가 제공하는 고유의 기능부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능 ( ex: 로그 추적 기능, 트랜잭션 기능 )이러한 부가 기능을 바로 횡단 관심사라고 한다.객체 지향 프로그래밍으로 어느 정도 SRP를 따르면서 클래스의 책임을 분리할 순 있어도 도메인 로직..

리플랙션을 알기위한 사전 준비자바 프로그램은 어떻게 실행 될까?제일 처음 우리가 작성한 자바 소스 코드는 javac (jdk 포함되어 있음)에 의해 컴파일 된다.그럼 이제 JVM이 이해 할 수 있는 JAVA Byte Code (.class) 로 변환된다.그리고 이제 main 함수부터 클래스 로딩되어 Method Area 라는 메모리 영역에 올라간다.클래스 내부에 다른 클래스를 의존하면 해당 클래스는 처음에는 심볼릭 링크의 형태로 클래스를 참조한다.해당 심볼릭 링크 부분이 실행될 때 물리 주소로 변환된다.다음 클래스를 호출하면 해당 클래스가 런타임(실행 중)에 로딩되는 구조이다.우리가 작성한 코드가 변경된다고?위에는 우리가 작성한 소스코드가 실행될 때 과정을 아주 요약하였다.그런데 요약된 내용을 보면 작성..

GC이란C/C++ 같은 OS 의존도 높은 Native 언어와 Java 언어의 차이C/C++ 같이 프로그램 한 언어가 직접 OS가 실행하는 언어들은 Memory Leak 문제를 많이 겪는다. Memory Leak 란? “동적으로 할당한 메모리가 free(할당 해제)될 수 없는 상태가 된 것.” 이다. 즉, C/C++ 같은 Native 언어들은 heap을 할당하고 해제하는 해동을 오로지 개발자들의 코드로 이루어진다. 따라서 이러한 heap 메모리 관리를 잘못하여 동적으로 할당한 메모리가 더이상 free 할 수 없어서 사용하지도 않는 데이터가 메모리를 차지하여 성능 저하 및 심하면 프로그램 강제 종료가 되는 상황을 말한다. Java 언어에서는 메모리 해제한 적 없는데? 위 문제를 보고 이런 생각이 들 것이다...