본문 바로가기
728x90

공부155

[모던 자바 인 액션] 람다 표현식 3.1 ~ 3.2 람다와 스트림을 잘하고싶어서..기억 정리 겸 올림. 람다란 무엇인가? 람다 표현식은 메서드로 전달할 수 있는 익명 함수를 단순화한 것 람다 표현식에는 이름은 없지만, 파라미터 리스트, 바디, 반환 형식, 발생할 수 있는 예외 리스트를 가질 수 있다. 여러가지 람다 표현식 () -> {} 파라미터가 없고 void 를 반환 () -> "Jeong" 파라미터가 없으며 문자열을 반환 () -> { return "Jeong" } 파라미터가 없으면 명시적으로 return 문을 이용해 문자열을 반환 람다 표현식에는 return이 함축되어 있다.return 문을 명시적으로 사용하지 않아도 된다. 어디에, 어떻게 람다를 사용할까 함수형 인터페이스라는 문맥에서 람다 표현식을 사용할 수 있다. 함수형 인터페이스 https:.. 2023. 1. 29.
[RealMysql 8.0]04아키텍처 4.2.7 ~ 4.2.7.4 InnoDB 버퍼 풀 InnoDb 스토리지 엔진에서 가장 핵심적인 부분으로 "디스크의 데이터 파일이나 인덱스 정보를 메모리에 캐시해 두는 공간"이다 쓰기 작업을 지연시켜 일괄 작업할 수 있게 해주는 버퍼 역할도 같이 한다. 일반적인 application 에서는 insert, update, delete 처럼 데이터 변경하는 쿼리는 데이터 파일의 여러곳에 위치한 레코드를 변경하기 때문에, 랜덤한 디스크 작업이 발생하지만, 버퍼 풀을 통해 이러한 변경된 데이터를 모아서 처리하면 랜덤한 디스크 작업의 횟수를 줄일 수 있다. 버퍼 풀의 크기 설정 운영체제와 각 클라이언트 스레드가 사용할 메모리도 충분히 고려해서 설정해야 한다. 초기설정 후 모니터링을 통하여 조금씩 줄이거나 늘리는걸 추천 운영체제 전체 메모리 8G.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.2.1 ~ 4.2.6 프라이머리 키에 의한 클러스터링 InnoDb의 모든 테이블은 기본적으로 프라이머리 키를 기준으로 클러스터링되어 저장된다. 즉 프라이머리 키 값의 순서대로 디스크에 저장된다. 모든 세컨더리 인덱스는 레코드의 주소 대신 프라이머리 키의 값을 논리적인 주소로 사용한다.(디스크 접근도 프라이머리 키로 접근한다.) 프라이머리 키를 통한 범위 검색이 매우 빠르지만, 쓰기 성능은 저하된다. 클러스터링? 테이블을 여러 노드로 분산하는 기술, 이를 통해 데이터베이스의 성능과 확장성을 향상시킬 수 있음. 두 대 이상의 서버를 하나의 서버처럼 운영하는 기술 mysql 은 프라이머리 키를 기준으로 클러스터링하기 때문에 프라이머리 키 값에 대한 인덱싱을 통해 쿼리가 빠르게 수행됩니다. InnoDb 스토리지 엔진과는 달리 MyI.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.1.3 ~ 4.1.10 그냥 기억 정리. 메모리 할당 및 사용 구조 mysql 에서 사용되는 메모리 공간은 크게 글로벌 메모리 영역, 로컬 메모리 영역으로 구분할 수 있다. 글로벌 메모리 영역 mysql 서버가 시작되면서 운영체제로부터 할당된다. 클라이언트 스레드와 무관하게 하나의 메모리 공간만 할당 받는다. 필요에따라 n개의 메모리 공간을 할당 받을 수 있지만 이는 클라이언트 스레드 수와는 무관하다. 생성된 글로벌 영역이 n개라 하더라도 모든 스레드에 의해 공유된다. 대표적인 메모리 영역은 => 테이블 캐시, InnoDb 버퍼 풀, InnoDb 리두 로그 버퍼 등이 있다. 로컬 메모리 영역 세션메모리 영역이라고도 한다.(클라이언트와 서버의 커넥션을 세션이라 부르기도 하여) 클라이언트 스레드가 쿼리를 처리하는 데 사용하는 메모.. 2023. 1. 28.
[RealMysql 8.0]04아키텍처 4.1 ~ 4.1.2.2 그냥 기억 정리 글. MySql 엔진 아키텍처 Mysql 서버는 크게 MySql 엔진, 스토리지 엔진으로 구분할 수 있음. 전체구조 MySql 서버 MySql 엔진 요청된 sql 문장을 분석하거나 최적화 하는 등 dbms 의 두뇌에 해당하는 처리를 수행 스토리지 엔진 실제 데이터를 디스크 스토리지에 저장, 디스크 스토리지로부터 데이터를 읽어오는 부분을 전담한다. 핸들러 API mysql 엔진의 쿼리 실행기에서 데이터를 쓰거나 읽어야 할 때, 각 스토리지 엔진에 쓰기, 읽기를 요청하는데 이러한 요청을 핸들러 요청이라하고, 여기서 사용되는 api를 핸들러 api 라고 한다. mysql 스레딩 구조 mysql 서버는 프로세스 기반이 아니라 스레딩 기반으로 작동, 크게 1.포그라운드 스레드, 2.백그라운드 스레.. 2023. 1. 28.
[이펙티브자바]item 15. 클래스와 멤버의 접근 권한을 최소화하라 구현과 API 분리하는 정보은닉 장점 시스템 개발 속도를 높인다 인터페이스 설계시 사용하는 쪽과 지원하는 쪽이 동시에 개발이 가능하다. 시스템 관리 비용을 낮춘다 컴포넌트를 더 빨리 파악할 수 있기 떄문에, 인터페이스 위주로 빠르게 파악이 가능하다 소스프퉤어 재사용성을 높인다 모듈화가 잘되어 있따면 병목지점을 빠르게 찾아서 처리할 수 있다. 시스템 개발 난이도를 낮춘다 큰 시스템을 개발할때 작은 단위로 나눠서 구현하다보면 전체를 구현할 수 있다. 모든 클래스와 멤버의 정급성을 가능한 한 좁혀야 한다. 톱레벨 클래스와 인터페이스에 pakage-private(default) 또는 public 을 쓸 수 있다. public 으로 선언하면 API가 되므로 하위 호환성을 유지하려면 계속 관리해야 한다. 패키지 외.. 2023. 1. 19.
[이펙티브자바]item14.Comparable을 구현할지 고려하라. 추후 업데이트 예정. 2023. 1. 19.
DB 인덱스는 왜 대부분 B-Tree 를 쓸까 B-Tree vs Hash..링크공유.. 대부분의 디비는 hash index 보다는 B-Tree index 를 지원하는데 왜 그런지 궁금해서 찾아봄. https://www.youtube.com/watch?v=at2sMaNYqCE https://helloinyong.tistory.com/296 https://tech.kakao.com/2016/04/07/innodb-adaptive-hash-index/ MySQL InnoDB의 Adaptive Hash Index 활용 개요 MySQL의 InnoDB에는 Adaptive Hash Index 기능이 있는데, 어떤 상황에서 효과가 있고 사용 시 반드시 주의를 해야할 점에 대해서 정리하도록 하겠습니다. InnoDB B-Tree 인덱스 MySQL의 InnoDB의 대표적인 tech.kakao.com 정리가 감.. 2023. 1. 19.
[이펙티브자바]item13.clone 재정의는 주의해서 진행하라. 자꾸 Object 에 있는 메서드들을 오버라이딩할때 조심하라는데.. Object 은 구상클래스로서([Concrete class]: new 키워드를 통해 인스턴스를 만드는 클래스) 이러한 구상클래스는 내부구현이 되어 있어야 한다. 하지만 몇몇 메서드 들은 되어 있지 않다. clone, toString, hashCode, equals 등등 이러한 메서드 들은 오버라이딩할때 지켜야할 몇가지가 있다. 이러한 주의점들과 해결책들을 계속 말해주는것 같다. 근데 왜 다른것들은 final 이 아니라 오버라이딩을 가능하게 했을까? 음..편의성 떄문인가 입맛대로 수정할 수 있게끔?필요할때마다 다른 기능을 구현해야할 상황이 있어서 ===Cloneable 을 상속받아 clone 메서드를 override 하면 Cloneable.. 2023. 1. 18.
728x90