분류 전체보기 (41) 썸네일형 리스트형 [MySQL] MySQL 최적화에 대한 공부(2/2) 저번 글 1/2에서는 NoOffset 전략과 COUNT(*) vs COUNT(column)의 성능 차이, 그리고 그 이유에 대해 살펴보았다. 이번 글에서는 그 연장선으로 몇 가지 유용하게 적용할 수 있는 MySQL 전략에 대해 정리해 보았다. 이 글은 Real MySQL 책을 기반으로 작성되었으며, 보다 깊이 있는 학습을 원한다면 해당 서적이나 MySQL 공식 문서를 병행해서 보는 것을 추천한다. SELECT … FOR UPDATEREPEATABLE-READ 격리 수준에서는 RDBMS는 변경 전의 레코드를 언두 공간에 백업해 둔다. 동일한 레코드에 대한 여러 버전이 존재하는 이를 MVCC라고 한다. 각각의 트랜잭션은 순차 증가하는 고유한 트랜잭션 번호가 존재한다. 트랜잭션 번호를 통해서 쿼리에 레코드.. [MySQL] MySQL 최적화에 대한 공부(1/2) MySQL에 대해서 여러 쿼리를 날려도 같은 값이 돌아오지만 실제로 걸리는 시간에 대해서는 고민하지 않았었다. 실제로 SQL을 작성할 때 결과 값만을 생각만 했고 이에 어떻게 최적화를 하는지 몰랐다. 그래서 최적화를 하기 위해서 책을 읽었고 이를 기억하기 위해서 글로 남긴다. 이 글은 Real MySQL을 기준으로 한다. 또한 여러 최적화 중 몇 가지를 알려주기에 더 많은 공부를 하고 싶다면 Real MySQL 책을 읽거나 공식문서를 읽기 바란다. 이 글의 MySQL 버전은 8.0.37 버전이라는 점을 유의하자. NoOffSet전략페이징 쿼리를 작성할때 LIMIT, OFFSET 구문을 사용하는데 실제로 LIMIT, OFFSET 구문을 사용하면 DBMS에 더 많은 부하를 발생한다. 실제로 LIMIT 10 .. [MySQL] MySQL 아키텍처 구조에 대한 공부 MySQL의 전체 구조MySQL 엔진클라이언트 접속과 SQL 요청을 처리하는 커넥션 핸들러, 쿼리 파서, 전처리기, 옵티마이저, 실행 엔진 등으로 구성되어 있다. MySQL은 표준 SQL 문법을 지원하기 때문에 표준 문법에 따라 작성된 쿼리는 타 DBMS에서 실행이 가능하다.스토리지 엔진데이터를 실제로 디스크에 저장하거나, 디스크에 저장된 데이터를 읽어오는 역할을 담당한다. MySQL에서는 여러 가지 스토리지 엔진을 사용하는 게 가능하다. InnoDB, MyISAM, NDB Cluster, Memory 등 여러 가지 스토리지 엔진을 가지고 있다.운영체제 & 하드웨어실제 테이블 데이터와 로그 데이터를 파일로 저장한다. 위에서 MySQL 엔진과 스토리지 엔진은 서로 핸들러 API를 사용하여 데이터를 주고 받.. [Project] 프로젝트 중 n+1문제에 대한 고민 및 문제 풀이 이 글은 토이 프로젝트인 게시판 프로젝트를 진행하면서 나온 n+1 문제에 대한 글이다.문제 상황토이 프로젝트로 게시판을 개발하면서 N+1 문제가 발생했다. 기존에 fetch = FetchType.LAZY와 Fetch Join만 사용하면 N+1 문제가 해결될 거라고 생각했지만, 실제로는 그렇지 않았다. 왜 이런 문제가 발생하는지, 그리고 어떻게 해결할 수 있는지 정리해보았다.JPQL(Java Persistence Query Language)JPQL은 테이블이 아닌 엔티티 객체를 대상으로 조회하는 객체지향 쿼리를 의미한다. SELECT * FROM Member; -- SQL 문SELECT m FROM Member m; -- JPQL 문fetch = FetchType.LAZY, FetchType.EAGER 란.. [Java] I/O에 대한 공부 (1/2) I/OInput과 Output의 약자로 데이터의 입출력을 의미한다. 문자 인코딩데이터를 다른 형식으로 변환하는 과정이다.문자 디코딩인코딩 된 데이터를 원래 형식으로 복원하는 과정이다.인코딩, 디코딩을 하는 이유컴퓨터가 이해할 수 있도록 데이터를 Byte 형식으로 변경한다. 따라서 파일을 작성하려면 Byte 형식으로 변경해야 한다. 그리고 컴퓨터가 이해하는 언어는 사람이 보고 이해하기 어렵다. 따라서 디코딩을 하여 사람들이 보고 이해하는 언어로 변경한다.InputStream위 코드에 주석을 읽어 보면 "이 추상 클래스는 바이트 입력 스트림을 나타내는 모든 클래스의 슈퍼클래스 이다. InputStream의 하위 클래스를 정의해야 하는 애플리케이션은 항상 입력의 다음 바이트를 반환하는 메서드를 제공한다."이다.. [Java] 스레드, 멀티스레드에 대한 공부 스레드 프로세스 내에서 실행되는 실행 단위이다. 이전 글을 보면 더 쉽게 알 수 있다.멀티 스레드한 프로세스 내에서 여러 스레드가 실행 단위를 나누어 실행되는 것을 의미한다. 자바 프로그램을 돌리면서 1개의 스레드만으로 여러 작업을 동시에 할 수 없다. 이에 자바에서는 여러 스레드를 만들어 실행시키는 방식으로 발전해 왔다. 이를 멀티 스레드라고 한다.스레드의 상태스레드는 여러 가지 상태를 가지고 있다. New : 스레드 객체가 생성되었지만, start() 메서드가 호출되지 않은 상태이다.Runnable : 스레드가 실행 중이거나 실행될 준비가 된 상태이다.Blocked : 스레드가 락을 기다리는 상태이다.Waiting : 스레드가 다른 스레드의 특정 작업이 완료되기를 기다리는 상태이다.Timed Wai.. [Java] 제네릭에 대한 공부 제네릭을 공부하기 전에 다형성에 대해서 알아야 한다. 다형성에 대해서 모른다면 이 글을 참고 하도록 하자.이제 다형성을 알고 있다고 생각하고 제네릭에 대해서 설명하겠다. 제네릭이란?클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법이다.이렇게만 보면 이게 무슨 소리지? 또는 어떻게 이게 가능하지?라는 생각을 하게 된다. ArrayList list=new ArrayList();위 코드를 보면 Integer을 감싸고있는 가 사용한 클래스를 제네릭 클래스라고 한다. public class ExGeneric{ private T t; public void setT(T t){ this.t=t; } public T getT(){ return t; }}다.. [Java] 예외처리에 대한 공부 예외(Exception)란 개발자가 구현한 로직에서 발새한 실수나 사용자의 영향에 의해 발생한다. 오류와 달리 미리 예측이 가능하여 상황에 맞게 예외처리를 해야 한다. 오류(Error)란 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미한다. 미리 예측이 불가능하여 방지할 수 없다. 예외 계층체크 예외애플링케이션 로직에서 사용할 수 있는 실질적인 최상위 예외이다. Exception과 그 하위 예외는 모두 컴파일러가 체크하는 체크 예외이다. RuntimeExceptiond을 제외한 모든 예외는 체크예외이다. 언체크 예외(런타임 예외)컴파일러가 체크하지 않는 언체크 예외이다. RuntimeException과 하위 언체크 예외를 모두 런타임 예외라고 한다. 예외 처리 란? 예기치.. 이전 1 2 3 4 ··· 6 다음