My-Book(History)
-
실무로 배우는 시스템 성능 최적화 - DBMy-Book(History) 2017. 2. 11. 22:50
- 파티션 : 한 테이블을 물리적인 여러 테이블로 구성해 분산 저장하는 기술 - 샤딩 : 여러 DB에 분산 저장함 - 인메모리 데이터 그리드 : KEY , VALUE 형식의 데이터 캐시 솔루션이다 DBMS에 저장된 데이터나 사용자 서비스 호출간에 공유할 데이터를 캐시해서 성능을 개선할 목적으로 사용한다. - 내포(Nested Loops Join) 조인 : 인덱스 기반으로 단 건에서 수 백 건 이내의 소량 레코드를 조회하는 온라인 애플리케이션에서 사용하기에 최적화된 조인 방식이다. 선행 테이블에서 탐색된 레코드 건수 만큼 후행 테이블의 랜덤 엑세스 탐색이 일어난다. -> (탐색이 레코드 건수가 작은 테이블이 선행 테이블이 되는 것이 유리하다. 그리고 선행 테이블과 연결고리가 되는 것이 유리하다. 그리고 선..
-
실무로 배우는 시스템 성능 최적화 - 웹,네트워크My-Book(History) 2017. 2. 11. 22:20
- DR : IDC 장애시 유일한 장애 복구 솔루션 - 웹 시스템에서 동시 사용자 수가 많다는 것은 대부분 요청이 큐잉되고 있다는 얘기일 수도 있다. - 동시 사용자 수가 많으면 그만큼 세션 수가 비례하는데 이것보다는 요청하는 수 또는 네트워크 연결 수가 성능에 큰 영향을 준다. # 기초 성능이론 - 서비스 요청 간격 = 응답시간 + 생각시간 - 동시 사용자 수 = 요청 사용자 수 + 비요청 사용자 수 # 성능 분석시 사용하는 기초 공식 : 서비스 처리 건수 / 측정 시간(초) - 라운드 로빈 : 프로세스 하나 끝날 때까지 CPU를 가지고 있는게 아니라, 할당된 시간 만큼 돌아가며 처리하는 방식 (우선 순위가 낮은 프로세스도 공평하게 실행됨_ - MAP 태그를 이용하여 HTTP 요청을 줄여라 ● 장점 :..
-
리팩토링 - 메소드 정리My-Book(History) 2017. 1. 11. 00:09
메소드 정리 - 쪼갠 메소드중 제 역할을 못할 경우 메소드 내용을 호출하는 메소드에 직접 넣는 기법을 사용하라. - 임시변수를 메소드 호출로 전환 기법을 사용할때 어려운 상황에 처하면 임시변수를 분리 시켜라 메소드 추출 - 어떤 코드를 그룹으로 묶어도 되겠다고 판단될땐 그 코드를 빼내어 목적을 잘 나타내는 직관적 이름의 메소드로 만들자. - 메소드 추출로 코드의 명료성이 향상 되기만 한다면 메소드명이 추출한 코드보다 길어도 메소드 추출을 실시해야 한다. - 지역 변수가 읽기 용으로만 사용된다면 그냥 매개변수로 전달하라. 메소드 내용 직접 삽입 - 메소드 기능이 너무 단순해서 메소드 명만 봐도 뻔할땐 그 메소드의 기능을 호출하는 메소드에 넣어버리고 그 메소드는 삭제하라 - 주의할점은 메소드가 재정의 되어있..
-
리팩토링 - 코드의 구린내My-Book(History) 2017. 1. 10. 23:46
잘못된 소속 - 객체의 핵심은 데이터와 그 데이터를 사용하는 프로세스를 묶는 기술이다. - 리팩토링을 하는 도중 특정 메소드가 호출하는 클래스가 많을 경우 문제의 메소드가 접근하는데이터가 어느 클래스에 많이 사용하는지 파악하여 해당 클래스로 옮겨라 중복 코드 - 한 클래스의 두 하위클래스에 같은 코드가 들어 있는 경우 메소드 추출(공동로직을 빼네어 메소드 처리)기법으로 중복을 없앤 후 메소드 상향 기법을 적용하면 된다. - 상향시 조금 다른 로직이 있다면 그 메서드를 상위 클래스에서 abstract 시켜라 장황한 메소드 - 최적의 상태로 장수하는 프로그램을 보면 공통적으로 메소드 길이가 짧다. - 메소드에 매개변수와 임시변수가 많으면 메소드 추출하기 까다로워진다. - 리팩토링 기법을 사용했음에도 여전히 ..
-
켄트 벡의 구현 패턴 - 설계My-Book(History) 2016. 11. 10. 18:53
인터페이스 - 클라이언트에게 제공할 때의 이점은 세부 사항을 가급적 적게 드러낸다. - 클라이언트 클래스가 여러 인터페이스를 동시에 구현할 수 있다. - 여러 개의 연관된 인터페이스를 하나의 클래스에서 구현하는 것은 명확하고 직접적인 커뮤니케이션을 돕는다. 상위클래스 - 상위클래스에 새로운 메소드를 추가해도 호환성에 문제가 발생하지 않는다. - 클라이언트에게 공개되는 상위클래스의 세부 사항은 공용 및 보호 메소드와 필드이다. 하지만 공개되는 내용들은 변화되지 말아야한다. - 가급적 클래스에서 노출하는 세부 사항을 줄여서 인터페이스에서 노출하는 정보 수준에 가깝게 하라 abstract 키워드 - 기본 메소드 구현을 제공해주면 클라이언트가 좀더 쉽게 클래스를 사용할 수 있다. 그러나 상위클래스에 새로운 추상..
-
켄트 벡의 구현 패턴 - 메소드My-Book(History) 2016. 10. 29. 21:09
조합 메소드 - 켄트 벡은 전체 구조를 읽을 때는 긴 메소드를 사용하는것을 좋아한다. 하지만 세부 사항을 이해하려 할 때, 긴 메소드는 오히려 방해가 되므로 밀접하게 관련된 코드만 모아놓고 관련성이 떨어지는 코드는 분리하는 편이다. - 메소드를 구성할 때는 추측이 아닌 사실에 근거하라. ( 일단 동작하는 코드를 만들고 구성 방식을 결정하라) - 켄트 벡은 로직을 나누고 난 뒤 코드를 읽기 어려운 경우 모든 메소드를 인라인시켜서 커다란 메소드를 만든 후메소드 구현에서 새로 얻은 경험을 바탕으로 다시 메소드를 나누는 방법을 사용한다. 의도 제시형 이름 - 메소드의 이름을 지을 때는 그 메소드를 호출하는 입장에서 생각해서 지어라. - 왜 이 메소드를 사용해야 하는가? 메소드 이름에서 이 질문에 대한 답을 얻을..
-
켄트 벡의 구현 패턴 - 행위My-Book(History) 2016. 10. 29. 19:06
설명 메시지 - 메소드를 호출시 직접 적으로 해당 메소드를 호출해도 되지만 프로그래머의 의도를 전달하기 위해 메소드를 한번더 감싸서 호출한다.ex) highlight (Rectangle area) {reverse(area);} - 한 줄로 된 코드에 주석을 부티고 싶은 경우라면 설명 메시지 사용을 고려하라.ex )flags |= LOADED_BIT; // 로드 비트를 설정 -> setLoadedFlag(); 위 예제와 같은 메소드의 구현이 하는일은 없다 하지만 이러한 한 줄 짜리 메소드는 커뮤니케이션을 돕는다. 보호절 - 간단한 지역적 예외 상황을 지역적인 변화만을 수반하며 표현할 수 있다. ex) 안좋은 예)void compute() {Server server = getServer();if(server..