전체 글

개발 공부를 하면서 얻은 지식들을 작성합니다. 주로 자바, 스프링, 알고리즘, CS와 관련된 이야기를 다룹니다.
· 🍃 Spring
조금 오래되긴 했지만 이전에 캐시에 대한 글을 작성하면서 로컬 캐시와 글로벌 캐시의 특징을 다룬 적이 있었다. 이때, 로컬 캐시는 일반적으로 서버 어플리케이션의 메모리에 함께 저장되기 때문에 캐시를 사용할 때 별도의 네트워크 IO가 발생하지 않아 글로벌 캐시에 비해서 더 빠른 성능을 보여준다고 했었다. 하지만 서버가 여러 대가 존재한다면, 동일한 내용들을 복수의 서버에 저장하게 되어서 자원 낭비가 발생할 수 있고, 캐시에 저장된 내용이 변경될 경우엔 다른 서버의 캐시들도 변경해줘야 하는 문제가 발생한다.  여기서 말한 캐시에 저장된 내용이 변경될 경우엔 다른 서버의 캐시들도 변경해줘야 하는 문제가 이번 글에서 다뤄볼 로컬 캐시의 동기화 문제이다. 사실 어떤 일이 발생할 지에 대해서는 이 문장을 읽기만 해..
· 📊 DB
인덱스란?이 글을 보는 대다수의 사람들은 이미 인덱스에 대한 기본적인 지식이 있으실겁니다. 자세히 아시는 분은 가벼운 마음으로 제가 작성한 내용을 봐주시고, 아직 정리가 안된 분은 함께 인덱스를 정리해나가며 읽어주시면 좋겠습니다. 인덱스의 정의우리가 흔히 데이터베이스에서 사용하는 인덱스의 본래 뜻은 무엇일까요? 인덱스를 사전에 검색하면 `색인`이라는 말이 나옵니다. `색인`이라는 단어를 일상에서 많이 사용하지는 지는 모르겠지만, 우리가 책을 볼 때 가장 마지막 부분에서 볼 수 있는 단어 혹은 용어가 어떤 페이지에서 등장했는지를 알려주는 페이지입니다.   그 페이지처럼 데이터베이스에서 우리가 원하는 정보(Row)를 빠르게 찾을 수 있게 해주는 것이 바로 인덱스(Index)의 기능이자 목적입니다.인덱스는 왜..
· 📊 DB
Stored Procedure이란?Stored Procedure는 MySQL의 `Stored Routine`의 한 종류로, SQL 명령문의 집합을 뜻합니다. 사용해 보신 분들은 쉽게 이해가 갈 설명인데요. 간단히 말하면 SQL문의 함수화라고 표현할 수 있습니다. 물론 비슷한 기능으로 `Stored Function` 도 존재하는데요, 이는 이전 글에서 다루고 있으니 확인해 주시면 좋겠습니다. Stored Procedure 역시 SQL 명령문의 집합이기 때문에 다음과 같은 장점을 가지고 있습니다.복수의 이용자들이 같은 DB를 이용하는 경우 동일한 SQL구문을 이용할 수 있음SQL의 내부 구현을 모르게 되어 보안적 측면의 강화클라이언트에서 DB로 많은 요청을 보내지 않아도 되어 성능 향상 가능성. (단, DB..
문제 링크🏷️ 카테고리`#자료구조`, `#트리` ⏳ 시간복잡도`O(N log N)` 📒 해설이진 탐색 트리에서 `insert`의 재귀 횟수를 계산하는 문제입니다. 하지만 N이 30만 번이라는 것이 걸리는 문제였습니다. N이 30만 번이라면, BST에서의 Worst Case의 경우 `O(N^2)`이기 때문에 시간 초과가 발생하기 때문입니다. 그렇다면 이 문제의 핵심은 BST에서의 `insert` 횟수를, 실제 `BST`를 구현하지 않고 계산해야 한다는 것인데 어떻게 하면 이것이 가능할까요? 이 방법을 같이 찾아봅시다. 📜 문제 조건문제의 조건은 다음과 같습니다.입력으로 들어올 수열의 크기 `N (1 수열의 값 `X (1 🔍 문제 접근앞선 해설 부분에서도 말했듯이, '이 문제에서는 실제 BST를 구현..
· 📊 DB
Stored Function이란?MySQL에서의 Stored Function, 보통 Function이라 불리는 기능은 SQL의 모음으로 서버에 저장한 후 함수 호출을 통해 해당 SQL 문들을 실행시키는 기능입니다. 프로그래밍을 해본 사람들은 쉽게 이해할 수 있는 이름이자 기능으로, 자신이 사용하는 언어에 존재하는 function이나 method의 SQL 버전이라고 이해하면 쉬울 것입니다. 조금 더 자세히 알아보자면, MySQL에는 Stored Routine이라는 기능을 제공합니다. 이는 앞서 설명했던 SQL의 모음(set of SQL Statements)으로 서버에 저장되어 사용됩니다. Stored Routine의 하위 개념으로 많이 들어봤을 Stored Procedure와 이 글에서 다루는 Stored..
이전에 작성했던 '가상 면접 사례로 배우는 대규모 시스템 설계 기초' 책에 대한 북스터디의 발표 자료입니다. 기존에 velog에 작성했던 글을 티스토리로 옮기다 보니 서식이 맞지 않는 문제가 있습니다. 조금 더 깔끔한 보기를 원하신다면 벨로그 혹은 깃허브를 통해 확인하실 수 있습니다. 원하신다면 벨로그나, 깃허브 글자를 클릭해주세요.Intro이 장은 대규모 채팅 시스템을 설계하는 방법에 대해서 다룹니다. 채팅 시스템은 카카오톡, 인스타DM, 라인 등 우리에게 굉장히 친숙한 기능이고 한번쯤은 개발해봤을 법 한 기능이니 자신이 만들어봤던 채팅 서비스에서 놓친 부분이 어떤 점이 있을지 다시 한 번 돌이켜보는 것도 좋아보입니다. 요구사항 분석얻어야 하는 정보채팅 시스템을 설계하기 위해서 면접관과 대화를 통해 얻..
· ☕ Java
Java를 이용해 알고리즘 문제를 풀다 보면 Scanner를 쓰지 말고 BufferedReader를 이용하라는 이야기를 많이 듣습니다. 실제로 Scanner보다 BufferedReader가 더 좋은 입력 성능을 가지고 있고, Scanner를 이용하면 시간 초과가 되는 문제도 있죠. BufferedReader가 더 좋다는 것은 알고 있었지만, 어떤 이유로 인해서 좋은지에 대해서는 크게 생각해보지 않았던 것 같아 이번 기회에 Scanner와 BufferedReader의 차이점과 BufferedReader가 왜 더 빠른지를 정리해보고자 합니다.  Docs로 알아보는 Scanner와 BufferedReader둘의 성능 차이의 원인을 알아보기 이전에 Java의 공식문서에서는 두 클래스에 대해서 어떻게 이야기하는지..
· ☕ Java
Steam API에 대한 개념 잡기Java를 통해 개발을 하다 보면 Stream API를 자주 사용하게 될 것입니다. Stream은 기본적으로 많은 기능을 제공해 주기 때문에, 적재적소에 사용하여 큰 도움을 얻을 수 있습니다. 최근 Java에 대한 강의를 보는 과정에서 제가 모르는 Stream 메서드들이 많이 등장해서, 이 기회에 이에 대해서 정리해보려고 합니다. 이 글을 읽는 분들이 이번 기회에 Stream API에 대한 이해 및 활용법에 대해 익혀 편하게 사용할 수 있기를 바랍니다. Stream API란?SteamAPI는 Java8부터 생긴 기능으로 `java.util.stream`에서 제공하는 다양한 기능들을 말합니다. Stream이라는 인터페이스에서 제공하는 기능들과 개발자가 작성한 람다 or 함..
Q현
Q현의 개발일기