My-Book(History)
-
실무로 배우는 시스템 성능 최적화 - 웹,네트워크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..
-
켄트 벡의 구현 패턴 - 상태My-Book(History) 2016. 10. 18. 19:06
직접접근 - 데이터를 가져오거나 저장하는 것을 나타내는 가장 간단한 방법은 직접 변수를 사용하는 것이다.- 명확성이 높아지나 수정해야하는곳이 많아지게 된다.- 켄터 벡 이 말하고자하는것은 프로그래머라면 커뮤니케이션하고 ㅂ 얘기하고자 하는것인거 같다. 간접접근 - 접근자 메소드를 사용하면 명확성과 직접성을 희생해서 유연성을 얻을 수 있다. 공용상태 - 여러 연산에서 같은 데이터 요소를 사용하는 경우가 많다. 이런 경우는 클래스에 필드를 선언해서 사용하는 것이 좋다. ex) class Point {int x;int y;} - 각 객체의 공용 상태는 모두 범위와 생명기간이 같아야 한다. 가변상태 - 인스턴스에 따라 각각 다른 데이터 요소를 필요로 할때 데이터를 맵 형식으로 표현한다.- 공용상태에 비해 훨씬 유..