본문 바로가기

Load Balancer(로드밸런서)와 LB 알고리즘 간략 정리 애플리케이션을 위한 서버가 여러대 있다고 생각해보자. 무조건 서버만 많다고 성능이 극대화되는 것이 아니고, 이를 잘 분산시켜 서버에 분배해야 성능이 극대화 될 것이다. 이런 서버들에게 요청들을 밸런스있게 분산시켜주는 역할을 하는 중간자가 필요할텐데, 이게 로드밸런서다. LB는 어떤 분산 시스템에서든 또다른 매우 중요한 컴포넌트임 트래픽을 여러 서버로 분산시켜줘서 responsiveness 와 db와 애플리케이션의 가용성을 올려주는 역할을 한다. 또한, LB는 요청들을 분산시키면서, 모든 자원들의 상태를 계속 트래킹 한다. 예를 들면, 어떤 서버가 지금 요청 처리를 못하는 상태에 있으면, LB에서 이 상태를 알아둬서 해당 서버로의 트래픽 분산을 막을 수 있다. LB는 크게 3가지 위치에 둠 유저와 웹서버 ..
분산 시스템의 특징 5가지 글을 쓰기에 앞서, 시스템 디자인 카테고리를 새로 만든 이유를 얘기하겠다. 누군가 시스템 디자인에 대한 공부가 필요하다는 얘기를 듣고, 시스템 디자인 인터뷰에 대한 공부를 하게 되었는데, 사실 이게 인터뷰를 위한 것이라기보다는 백엔드 개발자라면 알아야 할 덕목에 가깝다고 느꼈다. 완벽한 정리는 아니겠지만, 핵심을 잘 담고자 노력할 예정이니 봐주길 바란다. 먼저 시스템 디자인의 기본을 보자. 만약 거대한 시스템을 디자인한다고 할 때 우리는 아래 3가지를 고려해야 한다. 어떤 다른 아키텍쳐적인 파트들이 사용될 수 있을까? 이러한 아키텍쳐적인 파트들이 어떻게 상호작용을 하며 작동할까? 이러한 파트들을 어떻게 하면 가장 최고로 잘 이용할 수 있을까? Trade-off 는 어떻게 될까? 즉, 위의 3가지 얘기는,..
Basic Principle of Ruby Variable Assignment Key points assigning variables in Ruby(루비에서의 변수 할당 원칙) 루비에서의 변수는 해당 개체의 값의 참조가 아니고, 개체의 ‘위치’ 에 대한 참조다. 루비에서의 변수간 할당은 pass-by value로 전달된다! (Pass-by reference의 반대) 얼마전 코드리뷰에서 굳이 불필요한 변수 할당은 자제하라는 피드백을 꽤 여러 번 받았다. 그냥 스택 메모리를 변수가 차지하는 공간만큼 조금씩 잡아먹는다 정도로 생각하고, 크게 생각은 안했었는데, 이 참에 Ruby의 변수 할당 원리/원칙을 정리하고자 한다. 몇 가지 간단한 예시로 루비에서의 변수 할당이 어떻게 작동하는지 살펴보자. “Ruby” String 클래스의 object를 a, b라는 변수에 할당한다. 각각 의 obj..
URL 주소 입력부터 웹 브라우저 화면 출력까지 과정 url 주소 입력부터 웹브라우저에 우리가 원하는 웹 화면을 출력받기까지의 과정을 정리해봤다. 사실 거의 번역글이고, 구글링으로 양질의 블로거들이 정리해놓은 글들을 번역하는 과정에서 상당히 배울 점이 많다. 번역을 하기 위해 나도 내용을 알아야 하므로 나도 정리하는 것과 같은 효과를 볼 수 있다. 1. google.com을 타이핑 한다. 2. 브라우저는 해당 url 네임에 해당하는 ip주소를 dns cache에서 먼저 체크한 후, 적합한 ip 주소를 찾는다. 참고로 DNS 는 Domain Name System으로. URL name- linked IP address 의 리스트이다. DNS 서버가 따로 있어서 해당 url 에 대해, DNS 서버에 접근해서 ip주소를 받은 후, 그 ip로 우리가 정보를 얻고자 ..
parameter as a Reference, pointer 차이 ? 자료구조 책을 보는데, 자료구조를 구현할 때, 초기화 함수에서 인자를 포인터 변수로 선언했었는데, 그 부분이 껄끄러워서 1. 포인터 변수 인자, 2. 참조 변수 인자 의 차이를 정리하고자 한다. 인자로 *ptr 를 넣거나, (포인터 인자), 레퍼런스 인자(&ref)를 넣을 때의 차이를 정리하자. 레퍼런스 인자는 이미 존재하는 변수를 또 다른 이름으로 참조할 때 사용하고, 포인터 인자는 변수의 주소값을 저장하기 위해 사용함 레퍼런스 인자는 null value를 가질 수 없지만, 포인터 인자는 null value를 가질 수 있음 레퍼런스 인자는 반드시 초기화가 되어있어야 사용 가능하지만, 포인터 인자는 그럴 필요가 없음. 레퍼런스 인자는 오리지널 변수와 같은 주소공간을 공유하면서 또한, 스택 공간에 추가 메..
카카오 2018 블라인드 1차 코테 기출문제 코드 모음/C++ cpp로 모두 작성하였다.. 카카오 코딩테스트 정주행중인데, 코드 공개한다. 1. 추석 트래픽 Source Code: https://github.com/brwnsugr/algorithm/blob/master/kakao_test/2018_1st_thanksgiving_traffic.cpp 2. 뉴스 클러스터링 Source Code: https://github.com/brwnsugr/algorithm/blob/master/kakao_test/2018_1st_news_clustering.cpp 3. 셔틀 버스 Source Code: https://github.com/brwnsugr/algorithm/blob/master/kakao_test/2018_1st_Shuttle_bus.cpp 4. 프렌즈4블록 Sour..
BOJ/C++/DFS/BFS 문제풀이1/#2331(반복수열)/#9466(텀프로젝트)/ C++언어로 모두 작성하였으니 참고하길 바란다. 1. #2331/반복수열 https://www.acmicpc.net/problem/2331 DFS/Directed Non-Weight Graph/Adjacency list, 수열을 Directed non-weight Graph 자료구조로 옮겨서 먼저 생각하자. 방향의 근거로는 수열은 1차원 상에서 한 방향으로 수가 계속해서 나열되는 구조이기 때문이다. 각 수열의 원소는 정점, 그것들을 간선으로 수열의 진행 순서대로 이어준다.그래프를 담을 자료구조로는 딱히 Adj list나 Matrix를 사용하지 않고 Hash map을 사용했다. DFS, BFS중에선 DFS를 사용한다. 그래프 자료구조로 담아서 DFS로 계속 수열을 증가시키면서(다음 노드, 그리고 그 다음노..
BOJ 그리디 문제 모음2/C++/30(#10610)/병든나이트(#1783)/NMK(#1201) 모두 C++로 작성하였음을 유의하자. 1. 30 (#10610) https://www.acmicpc.net/problem/10610 30 = 3 * 10 이다. 3과 동시에 10으로도 나누어 떨어져야 하므로, 우선 0이 하나 들어가야하고, 0을 제외한 나머지 숫자들의 합이 3의 배수가 되어야 30의 배수도 동시에 만족할 수 있다. 나는 먼저 string 을 순회하면서, 0이 있을때마다 카운트 해서 zeros 에 저장했고, 각 자리수의 합을 check에 더해나가는 방식으로 마킹했다. -> 이후 zeros 가 0 이거나 check이 3으로 나눠떨어지지 않는 경우는 예외처리를 해줬다. 다만, 주의할 점은 받을 N이 10^5개의 숫자로 구성되있다는 점이다. 즉, 자리수가 nnnnnn...........nnnn ..