CompletableFuture 학습 테스트 안녕하세요! 이번 포스팅에서는 학습 테스트를 통해 CompletableFuture를 알아보는 시간을 가져보려고 합니다. 모든 코드는 GitHub에 있으니 참고하시면 됩니다. CompletableFuture는 Java에서 대표적으로 비동기 요청을 처리할 때 사용하는 객체인데요. 사용하기에 따라 Async-Blocking, Async-Non-Blocking 하게 사용할 수 있습니다. 제공하는 기능이 꽤 많아서 이 글에서 전부 다루지는 못하지만, 몇 가지 주요 기능을 알고 나면 나머지는 필요에 따라 적용해볼 수 있다고 생각합니다. 동기 / 비동기, Blocking / Non-Blocking 에 대해 감이 잘 안오신다면 이전 포스팅을 참조해 주세요 :) 학습 테스트를..
늘 헷갈리는 비동기 개념 안녕하세요! 이번 포스팅에서는 늘 모두가 제가 헷갈려하는 Sync와 Async, Blocking과 Non-Blocking에 대해 정리해 보려고 합니다. 해당 개념들에 대해 개발자마다 의견도 조금씩 다르고, 이해하는 방식도 다를 수 있는데요. 저도 제가 이해한 방식대로 간단하게 한번 정리해 보겠습니다. 어떤 작업을 요청하는 클라이언트를 A, 작업을 수행해서 결과를 돌려주는 친구를 B라고 전제하고 시작하겠습니다! Sync VS. Async 동기와 비동기는 수행하는 작업의 주체성을 누가 가지고 있는지가 중요합니다. 동기(Sync)는 작업의 주체성을 A가 가지고 있습니다. A가 B에게 작업을 요구하면, A는 B의 행위가 완전히 끝나거나, B가 결과를 돌려줄 때까지 기다렸다가 자신의 남은..
칼럼의 데이터 타입 선정 칼럼의 데이터 타입과 길이를 선정할 때 주의해야 할 점은 다음과 같다. 저장되는 값의 성격에 맞는 최적의 타입을 선정 가변 길이 칼럼은 최적의 길이를 지정 조인 조건으로 사용되는 칼럼은 똑같은 데이터 타입을 선정 너무 긴 길이는 저장 공간의 낭비를 초래하고, 너무 짧은 길이는 추후 스키마 변경 작업 시 많은 부담을 가져오게 되므로 초기 스키마 설정에서 신중하게 조사 후 데이터 타입을 결정해야 한다. 문자열 (CHAR, VARCHAR) CHAR와 VARCHAR의 차이 CHAR와 VARCHAR의 가장 큰 차이점은 고정 길이인지 가변 길이인지의 여부다. 고정 길이 실제 입력되는 칼럼 값의 길이에 따라 사용하는 저장 공간의 크기가 변하지 않는다. 가변 길이 최대로 저장할 수 있는 값의 ..
자바 JDBC와 같은 인터페이스는 애플리케이션과 MySQL DB 중간에 위치하고 있어서 양쪽의 특성을 잘 알지 못하면 최적의 옵션을 선택하기가 쉽지 않다. JDBC 드라이버의 작동 방식을 변경하기 위한 옵션이나 주의할 점을 잘 알고 있어야 상황에 맞게 최적화하여 사용할 수 있다. MySQL Connector/J 자바에서 제공하는 JDBC는 껍데기와 같은 인터페이스이고, 실제 알맹이인 구현체는 각 DBMS 제조사에서 제공하는 JDBC 드라이버이다. Connector/J를 이용해 MySQL 서버에 접속하려면 JDBC URL이라는 개념을 알아야 한다. 여기서의 URL은 일반적인 HTTP, FTP에서 사용하는 URL이 아니라 MySQL 서버의 정보를 표준 포맷으로 조합한 문자열이다. 이를 커넥션 스트링이라고 한..
InnoDB의 기본 잠금 방식 InnoDB에서는 각 쿼리의 패턴별로 사용하는 잠금이 다르다. 먼저 기본적으로 각 쿼리가 어떤 잠금 방식을 사용하는지 알아보자. SELECT REPEATABLE-READ 이하의 트랜잭션 격리 수준에서 InnoDB 테이블에 대한 SELECT 쿼리는 기본적으로 아무런 잠금도 사용하지 않는다. 또한 이미 잠긴 레코드를 읽는 것도 아무런 제약이 없다. SELECT 쿼리로 읽은 레코드를 잠그는 방법은 읽기 모드와 쓰기 모드 잠금으로 두 가지가 있다. SELECT * FROM sample_tbl WHERE col1 = 10001 LOCK IN SHARE MODE; SELECT * FROM sample_tbl WHERE col1 = 10001 FOR UPDATE; LOCK IN SHAR..