전체 글

전체 글

    대규모 서비스를 지탱하는 기술, 4강 대규모 데이터란 요약

    대규모 서비스를 지탱하는 기술, 4강 대규모 데이터란 요약 대규모 데이터 환경에 대한 이해 대규모 데이터의 크기는 어느정도인가? 대규모 데이터 처리는 왜 오래 걸리는가? 애플리케이션과 대규모 데이터의 부하 관계는 어떻게 되는가? DB 에서 대규모 데이터란? 수백 GB 이상의 데이터만 축적돼도 기본적인 select 쿼리가 동작하지 않는다. 규모에 따라 수백 GB, TB, PB 가 될 수 있다. 대규모 데이터 처리는 왜 어려운가 메모리 내에서 계산할 수 없다. 많은 양의 데이터를 디스크에서 찾아 메모리에 올렸다 내렸다하며 데이터를 처리해나가야 한다. I/O 에 많은 시간이 소비된다. 메모리는 디스크보다 대략 10만~100만배 정도 빠르다.

    대규모 서비스를 지탱하는 기술, 3강 서비스 개발의 현장 요약

    대규모 서비스를 지탱하는 기술, 3강 서비스 개발의 현장 요약 개발 팀을 나누는 방식 서비스 개발부 서비스 구현 및 애플리케이션 측면 개선 애플리케이션 코드로 부하 개선이 가능한 경우 인프라부와 협업 인프라부 서버/인프라 시스템의 운용을 담당하는 팀 서버 준비, 데이터 센터 운용, 부하 분산 등을 담당 부하 상황 등 모니터링 커뮤니케이션 그룹웨어 이용 되도록 공유가 되지 않는 개인 이메일 사용하지 않음 위키에 자료를 남김 IRC 사내 메신저로 이용 시스템 알람용으로도 사용 장애 통지 서버 관리 도구 현대의 뉴렐릭과 비슷한 서비스 같음 실무 서비스 개발 아침 스크럼, 진척 상황, 할 일 공유 아침 미팅에서 기능 구현 태스크 담당자를 정함 기능 구현 시 가능한 테스트 코드 작성 가능한 -> 타협 가능하다는 ..

    대규모 서비스를 지탱하는 기술, 2강 계속 성장하는 서비스와 대규모화의 벽 요약

    대규모 서비스를 지탱하는 기술, 2강 계속 성장하는 서비스와 대규모화의 벽 요약 웹 서비스의 어려움 트래픽이 점점 증가 다중화, 부하분산을 적용 시스템 규모 확장 1차 라우터 도입 HTTP 요청 부하 분산 apache mod_rewrite 로드 밸런서보다 훨씬 적은 기능을 가지고 있음 단순 URL 리다이렉팅만 가능 DB 분산 MySQL 레플리케이션 2차 LVS (Linux Virtual Server) 로드 밸런싱 기능 Keepalived 서버의 헬스체크를 하고 unhealthy 서버가 있는 경우 healthy 쪽으로 트래픽을 돌려줌 서버 정보 관리 시스템도 개발 각 서버에 받고 있는 부하, 서버의 용도 등을 쉽게 관리 가능해짐

    대규모 서비스를 지탱하는 기술, 1강 대규모 서비스와 소규모 서비스 요약

    대규모 서비스를 지탱하는 기술, 1강 대규모 서비스와 소규모 서비스 요약 개요 하테나라는 기업의 인턴십 내용 대규모 서비스 개발 경험 대규모 서비스는 특성을 파악하지 못하고 어중간하게 구현하면 장애 잘남 선배가 2주간 강의 책에서 설명하는 것 대규모 웹개발, 사고방식 OS, DB, 알고리즘, 자료구조 선택 중요성 RDBMS 의 한계 파악 검색엔진 만들어봄 서버/인프라의 예와 개념 프로그래밍 코드 같은 세부사항 외에 전체적 그림을 배움 장별 설명 2장 대규모란 어느정도 3장 OS 캐시 4장 MySQL 대규모 서비스에서 갖는 문제 5장 애플리케이션단 핵심 내용 6장 압축기법 7장 알고리즘 8장 키워드 9, 10장 검색엔진 개발 RDBMS 에서 다룰 수 없는 데이터 규모 다루기 11~15장 인프라 구성 등 설..

    이펙티브 자바, 쉽게 정리하기 - item 62. 다른 타입이 적절하다면 문자열 사용을 피하라

    이펙티브 자바, 쉽게 정리하기 - item 62. 다른 타입이 적절하다면 문자열 사용을 피하라 문자열을 잘못쓰는 사례들 데이터를 입력받을 때 무작정 문자열로 입력받는 사람이 있다. 숫자면 숫자, 예/아니오라면 boolean 과 같은 명확한 타입으로 받는게 더 좋다. 열거 타입을 문자열로 대신하는 경우도 있다. 혼합 타입을 문자열로 대신하는 경우도 있다. 권한을 문자열로 표기하는 경우도 있다. 혼합 타입을 남용하는 예 String compoundKey = className + "#" + i.next(); 가운데 # 을 기준으로 파싱하려고 하는 의도가 살짝 보인다. # 이 만약 className 에서 이용되거나 i.next() 에서 이용되면 문제가 일어난다. 문자열 파싱이라는 추가적인 성능 악영향까지 있다...

    자바의 ThreadLocal 이란?

    자바의 ThreadLocal 이란? 오직 같은 스레드에 의해서만 쓰이거나 읽혀질 수 있는 변수를 만들기 위한 클래스이다. 제네릭 타입의 객체 하나만 읽거나 쓰는 용도이다. 각각의 스레드가 독립적인 공간을 가지고 변수를 다룰 수 있게 만든다. 스레드는 독립적으로 초기화된 변수의 자체 복사본을 가질 수 있다. ThreadLocal 인스턴스는 보통 상태를 스레드에 연결하려고 하는 클래스의 비공개 정적 필드로 사용된다. 이 이유에 대해선 아래에서 설명한다. 주로 user ID 나 transaction ID 와 같은 것에 많이 쓰인다. 왜 ThreadLocal 은 private & static 하게 사용되는가? private 을 사용하는 이유 비공개로 선언해야 다른 클래스에서 해당 스레드의 ThreadLocal ..

    도둑맞은 집중력 (집중맞은 도둑력) 서평 및 문장정리

    서평 대부분의 현대인은 자신의 집중력에 문제가 있다고 생각할 것이라 본다. 이 책이 인기 있는 이유도 아마 모두 자신의 집중력 문제를 실감했기 때문이다. 저자는 자신 그리고 현대인이 겪는 집중력 문제를 어쩌다 탐구하게 되었는지 또 어떻게 탐구했는지에 대해 과학 서적이나 논문 형식이 아니라 읽기 편한 에세이 형식으로 서술하고 있다. 처음엔 단편적으로 실질적 집중력 문제에 대한 분석을 위해 다양한 집중력 관련 논문의 저자를 만나고 다니며 문제의 실마리를 찾아다닌다. 결국 대략적인 문제를 파악한다. 그 문제는 대충 멀티태스킹, 몰입의 조건을 충족하지 못하는 것, 현대 사회의 만성 수면부족, 여유를 허락하지 않는 사회적 분위기, 책에서 전자기기로의 생활 변화 등을 꼽고 있다. 문제를 파악한 뒤에는 전문가들을 통..

    이펙티브 자바, 쉽게 정리하기 - item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라

    이펙티브 자바, 쉽게 정리하기 - item 61. 박싱된 기본 타입보다는 기본 타입을 사용하라 기본 타입과 박싱된 기본 타입의 차이 기본 타입은 값만 가지고 있으나, 박싱된 기본 타입은 식별성(identity)이라는 속성도 갖는다. 기본 타입의 값은 언제나 유효하나, 박싱된 기본 타입은 null을 가질 수 있다. 기본 타입이 박싱된 기본 타입보다 메모리 면에서 우수하다. 문제가 생기는 코드 살펴보기 의도치않은 식별성 검사 public class Item61Test { Comparator naturalOrder = (i, j) -> (i < j) ? -1 : (i == j ? 0 : 1); @Test public void naturalOrderTest() { int compare = naturalOrder..

    이펙티브 자바, 쉽게 정리하기 - item 60. 정확한 답이 필요하다면 float 과 double 은 피하라

    이펙티브 자바, 쉽게 정리하기 - item 60. 정확한 답이 필요하다면 float 과 double 은 피하라 float과 double이 사용하는 이진 부동소수점의 취약점 @Test public void floatDoubleTest1() { System.out.println(1.03 - 0.42); // 결과: 0.6100000000000001 } float 과 double 은 이진 부동소수점 연산에 쓰여 근사치로 계산하도록 설계된 타입이다. 위 코드의 경우 0.61 이 그대로 나오지 않고, 0.6100000000000001 이 나오게 된다. 이진수로 소수점을 표현하는 데 한계가 있고, 그 한계가 이진 부동소수점을 사용함으로써 여실히 드러난다. 이를테면 0.1 을 2진수로 표현하면 0.0001100,11..

    이펙티브 자바, 쉽게 정리하기 - item 59. 라이브러리를 익히고 사용하라

    이펙티브 자바, 쉽게 정리하기 - item 59. 라이브러리를 익히고 사용하라 java Random 라이브러리의 예제 public class Item59Test { Random rnd = new Random(); @Test public void randomTest() { int n = 2 * (Integer.MAX_VALUE / 3); // 약 14억 int low = 0; for (int i=0; i < 1_000_000; i++) { if (randomNumber(n) < n / 2) { // 약 7억 low++; } } System.out.println("low = " + low); } public int randomNumber(int n) { return Math.abs(rnd.nextInt())..

    이펙티브 자바, 쉽게 정리하기 - item 58. 전통적인 for 문보다는 for-each 문을 사용하라

    이펙티브 자바, 쉽게 정리하기 - item 58. 전통적인 for 문보다는 for-each 문을 사용하라 전통적인 for문의 약점 for (Iterator i = c.iterator(); i.hasNext()) { Element e = i.next(); // do something with e... } for (int i=0; i{ for (Iterator i = suits.iterator(); i.hasNext();) { for (Iterator j = ranks.iterator(); j.hasNext();) { System.out.println(i.next() + ", " + j.next()); } } }); } 위 코드에는 어떤 버그가 있을까? 먼저, 사용자가 i.next() 와 j.next() 를..

    node js 실행 시 Error: Can not find module semver 에러 해결하기

    Error: Cannot find module &#39;semver&#39; node.js 패키지가 꼬여서 발생하는 에러이다. 나는 mocha framework 를 사용하기 위해 npm 과 node 의 버전을 최신으로 올리려다 발생했다. 1단계: node js 삭제 node.js 를 삭제했다가 다시 깔아보자. sudo apt-get purge nodejs sudo apt-get purge npm sudo apt-get purge 명령어에 대한 설명 cd /etc/apt/sources.list.d 로 접근하여 노드 목록이 있으면 제거한다. sudo rm -rf /usr/local/bin/npm /usr/local/share/man/man1/node* /usr/local/lib/dtrace/node.d ~/..

반응형