Steam API에 대한 개념 잡기Java를 통해 개발을 하다 보면 Stream API를 자주 사용하게 될 것입니다. Stream은 기본적으로 많은 기능을 제공해 주기 때문에, 적재적소에 사용하여 큰 도움을 얻을 수 있습니다. 최근 Java에 대한 강의를 보는 과정에서 제가 모르는 Stream 메서드들이 많이 등장해서, 이 기회에 이에 대해서 정리해보려고 합니다. 이 글을 읽는 분들이 이번 기회에 Stream API에 대한 이해 및 활용법에 대해 익혀 편하게 사용할 수 있기를 바랍니다. Stream API란?SteamAPI는 Java8부터 생긴 기능으로 `java.util.stream`에서 제공하는 다양한 기능들을 말합니다. Stream이라는 인터페이스에서 제공하는 기능들과 개발자가 작성한 람다 or 함..
전체 글
개발 공부를 하면서 얻은 지식들을 작성합니다. 주로 자바, 스프링, 알고리즘, CS와 관련된 이야기를 다룹니다.
문제 링크🏷️ 카테고리`#트라이` `#정렬` `#문자열` `#트리` ⏳ 시간복잡도`O(N)` or `O(N log N)` 📒 해설문제에서 주어진 N이 크지 않아서 그런지, 정렬로도 쉽게 풀리는 문제였습니다. 처음엔 정렬로 풀고 이후에 트라이로 다시 풀어봤는데, 확실히 트라이가 좋은 성능을 보였습니다. 문제의 핵심은 문자들 간의 관계에서 문자 A가 문자 B의 접두사가 되는 관계가 존재하는가? 입니다. 개인적으로는 정렬로 푼다면 골드 4의 난이도를 보이는 문제는 아니었다고 생각이 듭니다. 아래에서 정렬 풀이와 트라이 풀이에 대해서 각각 알아봅시다. 📜 문제 조건 문제의 조건은 다음과 같습니다.테스트케이스 `T (1전화번호의 수 `N (1 전화번호의 최대 길이 10 📒 정렬 방식의 풀이🔍 문제 접근이..

문제 링크🏷️ 카테고리`#그래프` `#깊이 우선 탐색` `#다이나믹 프로그래밍` ⏳ 시간복잡도`O(N)` 📒 해설문제를 이해하고, 접근하는 과정에서 헷갈릴 수 있었는데, 운이 좋게도 빠르게 정답에 가까운 풀이를 떠올릴 수 있었습니다. 초기에 떠올린 방식은 `위상 정렬`이었는데, 아마 해당 방법을 통해서도 풀이는 가능할 것입니다. 해당 문제에서의 핵심은 섬 A를 파괴하는 비용과 섬 A와 연결된(Leaf 쪽으로) 섬들을 각각 부수는 비용 중에서 더 최소값을 선택하는 것입니다. 📜 문제 조건 문제의 입력 조건은 다음과 같습니다. 테스트 케이스 T에 대해서 `1 섬의 총 개수 N은 `1 각 다리를 폭파하는 비용 D는 `1 Worst 케이스를 고려해서 테스트 케이스가 100개가 나타났을 때, 한 테케의 연..
개요8장은 bitly와 같은 단축 URL을 생성하는 서비스를 설계하는 장이다.단축 URL 생성기를 만들 때 중요한 지점인 해시 함수를 어떻게 사용할까?와 리다이렉트 시점에서 어떤 HttpStatus를 리턴할까?를 중심으로 다룬다.요구사항 명확하게 하기이 장은 면접자와 면접관 사이에 대화로 요구사항을 명확하게 하는 과정을 상세하게 다룬다.면접자가 질문을 통해 명확하게 한 요구사항은 다음과 같다.URL 단축기의 동작 예시서비스의 트래픽 규모단축 URL의 길이단축 URL에 포함될 문자의 제한단축 URL에 대한 기능이를 통해 다음과 같이 결론을 내렸다.쓰기 연산 : 매일 1억개의 단축 URL 생성초당 쓰기 연산 : 1억/24/3600 = 1160개읽기 연산 : 읽기 연산와 쓰기 연산의 비율은 10대 1로 잡아 ..
캐시란?캐시는 애플리케이션의 성능을 대폭 상승시켜 주는 대표적인 기술입니다. 조회 성능이 더 느린 계층에서 발생하는 병목 현상을 줄이기 위해 조회 성능이 더 빠른 계층에 임시로 데이터를 저장하는 방법입니다. 컴퓨터 구조에서의 메모리 계층에서 캐시라는 개념을 처음 접할 수 있지만, 저같은 백엔드 개발자는 DB(스토리지)에 저장된 것을 RAM으로 저장하여 조회 성능을 상승 키시는 것이 생각나네요. 조회 성능이 뛰어나게 된다면, 모든 정보를 캐싱하면 우리의 서비스는 기존보다 더 많은 트래픽에 대응할 수 있는 서비스로 성장할 수 있겠죠. 하지만 모든 정보를 캐싱하는 것을 불가능에 가깝습니다. 바로 돈 때문입니다. 우리가 컴퓨터를 구매하려고 할 때, SSD가 더 빠르지만 HDD가 훨씬 싸기때문에, 대량의 디스..
개요이 장은 처리율 제한 장치(Rate Limiter)에 대한 기술 면접을 대비하기 위한 장입니다. 이 장은 아래와 같은 내용을 다룹니다.처리율 제한 장치가 무엇이고, 왜 사용하는지기술 면접에서 어떤 점을 면접관과 소통해야 하는지처리율 제한 장치에서 사용될 알고리즘과 각각의 장단점해당 내용을 잘 익히시고, 만약에 해당 내용을 기술 면접에서 물어볼 때 잘 대답하시고, 그렇지 않더라도 프로젝트에서 적용할 수 있길 바랍니다.처리율 제한 장치란?처리율 제한 장치는 말 그대로 특정 시간 동안 서버로 오는 클라이언트의 요청의 수를 제한하는 장치를 말합니다.보통은 대규모 트래픽을 처리할 수 있는 능력을 물어볼 텐데, 오히려 처리율을 제한한다니 왜 그럴까요?결국에 성능 개선을 한다고 하더라도, 기업에서 현재 가지고 있..
개요이 장은 단일 서버로부터 대규모 이용자들 처리할 수 있는 서버로의 확장 과정에서 고려해야 할 부분에 대해서 다룬다. 이 장의 마지막에 작성된 내용이 이 장을 요약할 수 있다.웹 계층은 무상태 계층으로 만든다.모든 계층에 다중화를 도입하라가능한 많은 데이터를 캐싱하라.여러 데이터 센터를 지원하라.정적 콘텐츠는 CDN을 통해 서비스하라.데이터 계층은 샤딩을 통해 규모를 확장하라.각 계층은 독립적 서비스로 분할하라.시스템을 지속적으로 모니터링하고, 자동화 도구를 활용해라.이 내용들을 기억하며 책을 따라가면서 어떻게 아키텍처가 변화하는지 살펴보자.단일 서버단일 서버란 그 이름에서 알 수 있듯이, 서버를 이루고 있는 모든 개체들이 단 하나의 PC에서 운용되는 상태를 말한다.단일 서버에서 나타날 수 있는 문제는..

시작개발 프로젝트를 진행하면 기능을 개발하는 것이 전부가 아니라는 것을 아실 겁니다. 성능, 신뢰성, 보안 등 다양한 비기능 요구사항 역시 충족시켜야 하죠. 저 역시 프로젝트에서 만든 기능에 대한 성능을 점검하고, 개선할 수 있는 부분은 능력이 닿는 한 향상하려고 노력합니다. 저는 가장 먼저 하는 작업으로는 조회 API에 대해서 성능 테스트를 진행하고, 캐싱이 가능한 부분은 캐싱을 도입해서 성능 개선을 하려고 하는 편입니다. 이 글은 제가 성능 테스트와 캐싱을 적용하는 과정에서 겪었던 시행착오에 대해서 다룹니다. 이미 내용을 아는 분들은 웃으면서 읽어주시고, 알지 못했던 분들은 저와 같은 실수를 하지 않으시길 바랍니다. 발단 블로그 소재가 없나.. 하면서 `velog`를 구경하는 와중에 이런 글을 읽었..