https://www.yes24.com/Product/Goods/102819435 가상 면접 사례로 배우는 대규모 시스템 설계 기초 - 예스24 “페이스북의 뉴스 피드나 메신저, 유튜브, 구글 드라이브 같은 대규모 시스템은 어떻게 설계할까?”IT 경력자라도 느닷없이 대규모 시스템을 설계하려고 하면 막막하다고 느낄 수 있다. 특히나 www.yes24.com 이 책 드디어 다 읽었다! 그렇게 막 두껍지는 않은데 회사 다니면서 이것 저것 하느라 읽는 데 시간이 좀 걸렸다. 주된 내용은 대규모 시스템 설계할 때 어떻게 접근해야하는지 면접의 상황을 빌려서 풀어가는 것이다. 처리율 제한 장치, 안정 해시, 키-값 저장소, 유일 ID 생성기, URL 단축기, 웹 크롤러, 알림 시스템, 뉴스 피드 시스템, 채팅 시스템..
우선 수료증 인증! 한가롭던 어느 날, 인프런에 라는 강의가 나온 걸 알게 됐고 "이건 사야해!"하면서 바로 구매했다. 그리고 요즘 시간이 좀 남아서 각잡고 하루만에 다 들어버렸다.(시작일이 24일로 되어 있는데 그건 사고 바로 확인하려고 들은 것) 나는 리눅스에 대해 잘 알지 못해서 업무상 어려움을 느낀 적이 꽤 있다. 물론 명령어야 외우면 되니 그래도 어느 정도 리눅스를 사용한다고 할 수 있는데, 리눅스의 성능에 대해서 물어보면 항상 물음표였다. 이 포스트(https://dakafakadev.tistory.com/201)에서도 알 수 있듯이 메모리를 과도하게 사용하고 있는 이슈가 발생했을 때 일일이 다 물어가며 배웠다. 나에게 서버에 뭔가 문제가 생겨서 뭐가 문제인지 찾아보라고 하면 어려워서 노트북을..
자바에서 스트림은 연속적인 데이터를 순차적으로 처리한다. 그런데 효율을 위해 멀티코어를 사용하여 병렬스트림으로 처리하는 경우가 있다. 이때 병렬스트림이 내부적으로 어떻게 동작하는지 알아보고자 한다. 병렬스트림은 각각 스레드에서 데이터를 처리할 수 있도록 스트림 요소를 여러 청크로 나눈다. 여기서 청크란 무엇일까? 청크는 스트림 요소를 작은 단위로 분할하는 단위이다. 예를 들어, ["hello", "judy", "smile"] 이 있다고 하자. 그러면 각각 "hello", "judy", "smile"처럼 세 가지로 분할하여 처리하는 것이 효율적일 것이다. 그런데 데이터가 엄청 많다고 하자. 그럴 때는 ["hello", "judy", "smile"]를 하나의 청크로 하여 스레드에 넘겨주는 것이 효율적일 것이..
얼마전 신입분의 질문으로 JSESSIONID부터 세션 클러스터링에 대해 알아보았는데(JSESSIONID에서 세션 클러스터링까지) 실습을 해볼 수 있으면 좋을 것 같아서 간단하게 도커로 환경을 만들어서 실습해본 내용을 정리한다.(Redis 클러스터링 실습 프로젝트 소스는 https://github.com/arajo-hub/redis-session-clustering-practice에. noclustering소스는 간단한 내용이므로 따로 업로드해두지 않았다.) 참고링크(https://zzang9ha.tistory.com/442) 도커로 Redis와 실습 프로젝트 인스턴스 2대를 돌린다. 제일 먼저 도커로 Redis를 실행한다. docker run -d --name my-redis-container redi..
최근에 다른 분이 OpenSSL을 업데이트하다가 문제가 생겨 도움을 요청하셨는데 그 문제와 관련하여 포스팅해본다. Ubuntu 20.04에는 기본적으로 openssl 1.1.1f가 설치되어 있다고 한다. 그런데 최신버전의 openssl(1.1.1t)을 설치해야하는 상황이었고, 업데이트를 하기 위해 작성한 스크립트로 설치를 하면 1.1.1t가 적용되지 않는다는 것이었다. 설치를 완료하고 버전을 확인하는 명령어를 실행하면 다음과 같은 메시지가 표시됐다. /usr/bin/openssl: symbol lookup error: /usr/bin/openssl: undefined symbol: EVP_mdc2, version OPENSSL_1_1_0 그런데 스크립트없이 그냥 아래와 같이 설치를 하면 1.1.1t가 제..
현재는 VCS로 SVN을 사용하고 있는데, 다음 프로젝트에서는 git을 사용할 수도 있다고 해서 평소 사뒀던 git 관련 책을 읽었다. 개인적으로는 git을 자주 사용하고 있기 때문에 이해하기는 그렇게 어렵지 않았고, 깃의 내부 구조가 어떻게 되고 어떻게 돌아가는지 알게 되어 좋았다. 내가 참고한 책은 토미의 Git with 소스트리로, 이곳을 통해 PDF파일로 구매했다. 책은 git의 각 기능에 대해 설명하고 이를 소스트리로 어떻게 동작시키는지로 구성되어 있는데, 나의 경우 소스트리를 사용하지 않고 거의 CLI(아니면 깃크라켄)로 사용하기 때문에 소스트리 사용법은 과감하게 패스했다. 본 포스팅은 위에 말한대로 어느 정도 깃을 사용한 경험을 바탕으로 내가 모르거나 정리가 필요한 부분만 집중적으로 책의 내..
테스트를 할 때 필수적인 사항은 대량의 데이터가 준비되어 있어야 한다는 것이다. 대량의 데이터를 DB에 넣는 방법 중에 파일로 만들어서 넣는 방법이 빠르다고 해서 해보았다. 우선 CSV 파일을 만든다. 이때, 데이터는 CSV 파일에 적힌 그대로 들어가는데 VARCHAR라고 ''를 붙이게 되면 ''까지 같이 들어가게 된다. 그러니 그냥 문자열을 적는다. CSV 파일을 만들어서 서버에 옮기고 아래와 같이 실행하면 된다. load data local infile '[파일경로]' into table [insert할 테이블명] fields terminated by '[데이터 구분자. CSV의 경우 ,]' lines terminated by '\n' IGNORE 1 LINES // 첫번째 줄에는 각 컬럼명이 표시되..