목록언어/Java (31)
개발자는 기록이 답이다
우리가 구글에서 검색할 때, '문자여'만 입력해도 다음에 나올 단어들이 자동완성처럼 제안되는 것을 흔히 볼 수 있습니다. 이는 Prefix 검색 덕분입니다. 그렇다면 데이터베이스에서는 어떻게 이러한 Prefix 검색을 빠르게 처리할 수 있을까요? 📌 MySQL에서 인덱스 사용 데이터베이스에서 특정 데이터를 빠르게 찾아오기 위해 인덱스(Index)를 사용합니다. 인덱스는 디스크 파일에 저장된 데이터를 빠르게 검색할 수 있게 도와줍니다. MySQL에서의 인덱스는 주로 B+ Tree 자료구조를 기반으로 구성됩니다. B+ 트리는 B-Tree에서 파생된 개념입니다. B-Tree는 트리 구조의 최상위에 하나의 루트 노드(Root Node)가 존재하고, 그 하위에 자식 노드가 붙어있는 형태입니다. 트리 구조의 가장..
Baeldung에 올라온 포스팅을 한글로 번역한 글입니다. Java의 throw 키워드는 사용자 정의 예외 혹은 내장 예외를 명시적으로 발생시키는데 사용됩니다. 하지만 때로는 catch블록에서 동일한 예외를 다시 발생시켜야 할때도 있고, 이로 인해 예외가 다시 발생합니다. 1. Rethrowing Exceptions 때로는 예외를 더 높은 수준으로 전파하기 전에 몇 가지 수행해야 할 것이 있습니다. 예를 들어 DB트랜잭션을 롤백하거나 예외를 기록하거나 이메일을 보낼 수 있습니다. catch블록에서 이러한 활동을 수행하고 예외를 다시 발생시킬 수 있습니다. 이러한 방식으로 시스템에서 예외가 발생했음을 상위레벨에 알립니다. 예시를 들어보면, 아래 코드에서는 동일한 예외가 다시 발생합니다. 그리고 오류 메세지..
자바의 신 책에는 DTO에 Serializable를 꼭 구현해야 된다고 되어 있다. 하지만 나는 Spring boot 프로젝트를 했을때 한번도 구현하지 않았는데도, 문제가 없었던것 같다. 어떤 관련이 있는지 "직렬화"라는 개념에 대해서 더 정확히 이해하고자 한다. 본 포스팅을 이해하기 위해서는 사전에 IO에 대한 배경지식이 필요하다. 1. 직렬화란? 직렬화라는 개념은 wiki에서 나오는 것처럼"데이터의 구조"나 객체의 "상태"를 지속되게 만드는 프로세스이다. 우리가 만든 데이터와 객체는 이미 비트로 표현되어 있으며, 해당 객체가 네트워크로 전송되거나 데이터베이스에 저장되기 위해 객체의 상태를 연속적인 바이트 형태로 유지하는 것이 바로 직렬화이다. 여기서 마샬링이라는 개념도 나오는데, 직렬화랑 비슷하지만 ..
멀티 스레드에 대해 배우면서, 스레드를 재사용할 수 있는 스레드 풀에 대해 알게 되었다. 그런데 처음 보는 클래스와 인터페이스가 많아서 정리하면서 좀 더 확실히 이해하고자 한다. 여러 배경지식도 함께 포스팅했기 때문에 ThreadPoolExecutor의 디버깅 과정이 궁금하다면 하단에 있는 5번으로 가주시길 바랍니다. 1. 스레드 풀이란? 스레드 풀이 무엇인지 알기 전에 먼저 알아야 할 키워드는Thread Per Request Model 이다. (One to one thread model이라고도 부른다. 이 부분은 오라클 문서를 참고하자) 이 방식은 웹 서버에서 요청이 들어올 때마다 새로운 스레드를 생성하여 해당 요청을 처리하므로, 각 요청은 독립적으로 실행되기 때문에 동시에 여러 요청을 처리할 수 있으..