
👩🏻🏫 URL 단축기를 설계해 주세요!1️⃣ URL 단축: 주어진 긴 URL을 Short URL로 바꿔준다 - 원본 URL을 Short URL로 단축해달라는 요청이 오면 Short URL을 제공한다.2️⃣ URL 리디렉션: Short URL로 HTTP 요청이 오면 원래 원본 URL로 리디렉션 처리한다.원본 URL: https://docs.google.com/forms/d/e/1FAIpQLSdjLMLaq-B-5lw4By1lP80guXM972bFPLWS8xMP_1HQ7lmh6A/viewform?usp=sf_linkShortURL: https://forms.gle/r4Bmp3fkbBhZrV1S6 ✔️ URL 단축기를 설계할 때, 고려해볼 수 있는 것들URL의 길이단축 URL에 포함될 문자 제한 ..

👩🏻🏫 분산 시스템에서 사용될 유일 ID 생성기를 설계해 주세요! 🤔 데이터 베이스의 auto_increment를 쓰면 안될까?❌ 분산 시스템에서 데이터 베이스 1대로는 요청을 감당할 수 없다! 그렇다고 해서 여러 데이터 베이스를 쓰더라도, 지연 시간이 길어진다! (ID 중복 방지를 위해 동기화 과정이 필요하기 때문) 그렇다면, 다른 방법으로 유일 ID를 생성해보자! 일단,🔎 분산 시스템에서 유일 ID 생성기를 설계할 때, 고려해볼 수 있는 것들✔️ ID가 정렬 가능해야 하는가?✔️ 새로운 ID는 이전 ID보다 일정한 간격만큼 커야 하는가?✔️ ID는 숫자로만 구성되어 있는가?✔️ 초당 몇개의 ID를 생성할 수 있어야 하는가? 분산 시스템에서 유일성이 보장되는 ID를 만드는 방법들을 하나씩 ..

👩🏻🏫 키-값 저장소 시스템을 설계해 주세요!라는 요청을 받았다면? 먼저 키-값 저장소가 무엇인지 알아야 한다. 🤔 키-값 저장소?자료구조의 Map과 같이 키(key)를 식별자로 값(value)을 저장하는 일종의 데이터 베이스비관계형 데이터베이스 (ex. 아마존 다이나모, memcached, 레디스)💬 키-값 저장소의 특징✔️ 키는 유일해야 한다.✔️ 오직 키로 대응되는 값에 접근할 수 있다.✔️ 키는 일반 텍스트이거나 해시 값이다.✔️ 키는 짧을수록 성능이 좋다.✔️ 값은 문자열, 리스트, 객체 등 다양한 형태의 데이터를 가질 수 있다. 기본적인 기능(put(key, value), get(key))을 가진 키-값 저장소 시스템을 설계 해보자! 1️⃣ 단일 서버 키-값 저장소 : 키-값 쌍..

🤔 안정 해시? : 해시 테이블 크기가 조정될 때 평균적으로 오직 k/n개의 키만 재배치하는 해시 기술 (k: 키의 개수, n: 슬롯(서버)의 개수) 🔎 해시 테이블의 주요 구성요소- 키: 데이터를 저장하고 검색하는 데 사용되는 식별자- 해시 함수: 키를 배열의 인덱스로 변환하는 함수. (해시 테이블의 효율성을 결정)- 버킷 또는 슬롯: 데이터가 저장되는 배열 위치입니다. 🤔 안정 해시가 왜 나오게 된걸까?💡 해시 재배치 문제때문, 전통적인 해시 테이블은 슬롯의 수(n)가 바뀌면 거의 대부분의 키를 재배치한다. 자세하게 살펴보자! 4개의 캐시 서버가 있다고 하자. 이 서버들에 데이터를 균등하게 분배하려면, 해시함수를 사용할 수 있다. 키해시해시 % 4 (서버 인덱스)key0183586171key..

❓ 플로이드 워셜 알고리즘? : 가중 그래프에서 모든 정점 사이의 최단 경로(최소 비용)를 구하는 알고리즘 ▪️ 플로이드 워셜 알고리즘은 O(n^3) 시간 복잡도를 갖는다. ▪️ 그래프에 음수 사이클이 없어야 한다. ▪️ 가중치가 음수 또는 양수이다. 참고로 그래프에서 최단 경로를 구하는 알고리즘에는다익스트라 알고리즘벨만-포드 알고리즘플로이드-워셜 알고리즘이 있다! 이번 포스트에서는 플로이드 워셜에 대해 알아보자. 플로이드 워셜 알고리즘은각 정점 사이의 최단 거리를 저장하는 일종의 dp 테이블을 가지고 문제를 해결한다!dp[i][j]는 i정점에서 j정점으로 가는 최소 비용을 의미한다. 1️⃣ 처음 dp[i][j]에는 i에서 j로 바로 가는 비용이 저장된다. (바로 갈 수 없다면, 무한대로 초기화)2️..

https://school.programmers.co.kr/learn/courses/30/lessons/17684 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 1️⃣ 어떻게 문제를 풀까?먼저 해당 단어가 사전에 있는 단어로 시작하는지 확인해야 됨! 따라서 String로 검색해야 하므로 Map 자료구조를 사용! 그런데 압축 할 때마다 단순히 Map의 모든 Key 값으로 검색하면 느려질 것 같음.. (압축을 한번 할 때 마다 사전에 한 단어는 넣기 때문!)그래서 Map의 Key를 해당 단어의 첫 글자(ex. 'A')로 하고 value를 해당 글자로 시작하는 단..

https://school.programmers.co.kr/learn/courses/30/lessons/92335# 프로그래머스코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요.programmers.co.kr 1️⃣ 어떻게 문제를 풀까?기본적으로 구현 문제라고 생각한다. 문제는 크게 2부분으로 나뉘어 지는데, 1) 첫번째는 10진수를 k진수로 변환 2) 두번재는 k진수에서 소수의 갯수를 구하는 것이다.진수 변환은 단순히 n을 k로 나눈 후 나머지를 저장해서 구하면 된다! 이때 구해진 나머지를 역순으로 가져와야 하기 때문에 Stack 자료구조를 활용한다!소수의 갯수를 찾는 것은 에라토스테네스의 체를 활..
❓ Spring REST Docs? : 테스트 코드를 통한 API 문서 자동화 도구 : 기본적으로 AsciiDoc을 사용하여 문서를 작성 ❔ AsciiDoc : 마크다운과 같은 경량 마크업 언어 장점 테스트를 통과해야 문서가 만들어진다 (신뢰도↑) 프로덕션 코드에 비침투적이다 단점 코드의 양이 많다 설정이 어렵다 간단한 예시들과 함께 사용 방법을 익혀보자! 설정 1️⃣ 플러그인 적용 : Asciidoc을 HTML 문서로 변환해주는 플러그인 적용 // build.gradle plugins { ... id "org.asciidoctor.jvm.convert" version "3.3.2" } 📎 최신버전 확인하기 ❕ 필수는 아니지만, AsciiDoc 플러그인을 설치하면 AsciiDoc 미리보기를 할 수 있다..