본문 바로가기

📖 책책책 책을 읽읍시다. 📖8

[Chapter 2] 왜 서버가 느리지? (2) | 사용자 시간 진단높은 사용자 CPU 사용률로 일어나는 과부하는 흔히 일어나고 진단하기가 비교적 간단한 문제이다. 서버의 특정 서비스가 대량의 시스템 부하를 차지할 가능성이 높고, 이것들은 사용자 프로세스이기 때문이다. 사용자 CPU 사용 시간이 높지만 I/O 대기 시간은 낮은 경우 시스템의 프로세스 중 어떤 프로세스가 대부분의 CPU 자원을 사용하는지 확인할 필요가 있다.  기본적으로 top은 모든 프로세스를 CPU 사용률을 기준으로 정렬한다.   가장 흔히 볼 수 있는 CPU 과부하 상황은 하나 혹은 두 개의 프로세스 혹은 많은 수의 프로세스에 의해 모든 CPU 자원이 소비되고 있는 경우이다. 하나 혹은 두 개의 프로세스 : 맨 위에 있는 프로세스 혹은 두 번째 프로세스가 매우 높은 CPU 사용률을.. 2024. 12. 24.
[Chapter 2] 왜 서버가 느리지? (1) 서버에서 볼 수 있는 대부분의 문제는 네트워킹에서 비롯되어 발생한다. 하지만, 어떤 문제는 여전히 로컬호스트와 관련이 있다. 이 장에서는 호스트에서 발생하는 문제를 다뤄보자.  | 응답이 느려질 때 호스트에서 찾을 수 있는 가장 흔한 문제는 응답이 느려지는 증상이다. 과부하가 걸린 네트워크와 과부하가 걸린 로컬호스트 장비의 차이점을 파악할 수 있어야 한다.  종종, 시스템이 느려질 때는 시스템의 특정 자원을 모두 소비했기 때문일 수도 있다. 시스템의 주요 자원은 CPU, RAM, 디스크 I/O 그리고 네트워크이다. 이러한 리소스를 남용하면, 최후의 수단인 재부팅이 빈번하게 일어날 수 있다.  | 시스템 부하시스템의 평균 부하는 느려진 시스템의 문제를 해결하기 위해 기초적인 지표가 된다.  | uptime.. 2024. 12. 23.
Chapter 6. 스프링이 사랑한 디자인 패턴 이번에는 디자인 패턴에 대해서 알아보자.  디자인 패턴은 설계 패턴이다. 실제 개발 현장에서 비즈니스 요구 사항을 프로그래밍으로 처리하면서 만들어진 다양한 해결책 중에서 많은 사람들이 인정한 베스트 프랙티스를 정리한 것이다. 디자인 패턴은 당연히 객체 지향 특성과 설계 원칙을 기반으로 구현돼 있다.  스프링 프레임워크는 많은 개발자들이 사랑한 개발 프레임워크이다. 스프링 프레임워크 : 자바 엔터프라이즈 개발을 편하게 해주는 오픈소스 경량급 애플리케이션 프레임워크 책의 필자는 스프링 프레임워크를 OOP 프레임워크라고 표현했다. (객체 지향의 특성과 설계 원칙을 극한까지 적용한 프레임워크이다.) 디자인 패턴은 객체 지향의 특성 중 상속(extends), 인터페이스(interface/implements), 합.. 2024. 12. 3.
1장 : SQL 처리 과정과 I/O SQL을 튜닝하기 전에, 옵티마이저가 SQL을 어떻게 처리하는지, 서버 프로세스는 데이터를 어떻게 읽고 저장하는지 살펴보자.  | 구조적, 집합적, 선언적 질의 언어SQL은 Structured Query Language의 줄임말로, 구조적 질의 언어이다. SQL은 기본적으로 구조적이고, 집합적이고, 선언적인 질의언어이다. 원하는 결과집합을 구조적, 집합적으로 선언하지만, 결과집합을 만드는 과정은 절차적이다. 데이터베이스 내부에서는 이 선언적인 쿼리를 기반으로 데이터를 가져오는 과정을 절차적으로 처리한다.사용자가 입력한 쿼리를 분석(Parsing)하고,실행 계획을 최적화(Optimization)하며,데이터를 필터링(Filtering)하고 정렬(Sorting)하여 결과를 반환한다. 데이터베이스 내부에서 데이.. 2024. 11. 27.
Chapter 5. 객체 지향 설계 5원칙 - SOLID 객체 지향 언어를 통해 객체 지향 프로그램을 올바르게 설계해 나가는 방법이나 원칙에 대해 알아보자.  SOLID에 대해 간략하게 보면 다음과 같다. SRP(Single Responsibility Principle) : 단일 책임 원칙 OCP(Open Closed Principle) : 개방 폐쇄 원칙 LSP(Liskov Substitution Principle) : 리스코프 치환 원칙 ISP(Interface Segregation Principle) : 인터페이스 분리 원칙 DIP(Dependency Inversion Principle) : 의존 역전 원칙 위의 원칙들은 응집도는 높이고, 결합도는 낮추라(개인적으로 개발을 하면서 머리에 늘 새기는 것이다..🥸)는 고전 원칙을 객체 지향의 관점에서 재정립.. 2024. 11. 26.
Chapter 4. 자바가 확장한 객체 지향 객체 지향의 4대 특성을 넘어 자바가 객체 지향을 확장하기 위해 사용하는 키워드와 개념을 살펴보자.  | abstract추상 메서드와 추상 클래스에 대해서 알아보자. 추상 메서드 : 선언부는 있는데 구현부가 없는 메서드를 말한다. 추상 클래스 : 추상 메서드를 하나라도 갖고 있는 클래스를 말한다.  이들은 공통 동작을 정의하고 다형성을 제공하기 위한 중요한 도구이다. Animal을 상속 받은 동물들에게 sound()라는 메서드는 공통 동작이다. 만약, abstract를 사용하지 않으면 개발자가 soud가 아니라 다른 메서드 명으로 정의하거나 누락 시켰을 때 이를 인지하지 못하게 된다. 따라서, abstract 키워드를 사용해서 반드시 sound()라는 메서드를 구현하면서, 공통 동작을 정의할 수 있게 하.. 2024. 11. 26.
Chapter 3. 자바와 객체 지향 기존의 구조적 프로그래밍에서 가장 중요하게 여겨지는 것은 함수이다. 함수는 코드를 논리적 단위로 구분하고 분할해서 정복하다는 것이다. Divide & Conquer 전략이다. 함수는 논리적 단위의 블록이라고 할 수 있다.  객체 지향을 이해하기 위해서 다음의 사항을 살펴보자. 세상에 존재하는 모든 것은 사물인 객체이다. 각각의 사물은 고유하다.사물은 속성을 갖는다. 사물은 행위를 한다.  그리고 우리는 이러한 사물을 분류(class)해서 이해한다. 김연아(Object)는 사람이라는 분류(class)에 속한다. 김연아(Object)는 나이, 몸무게, 키와 같은 속성(property)를 가진다. 김연아(Object)는 먹다, 자다, 걷다와 같은 행위(method)를 가진다. 위를 통해서 알 수 있는 점은 객.. 2024. 11. 25.
Chapter 2. 자바와 절차적 / 구조적 프로그래밍 Java는 Write Once Run Anywhere 이라고 한다. Java로 작성된 프로그램이 한 번 작성되면 다양한 플랫폼에서 수정 없이 실행될 수 있다는 것이다. JDK, JRE, JVM에 대해서도 알아두면 좋다.   T자 메모리 구조Java를 더 잘 활용하기 위해서는 우선, Java가 어떤 방식으로 메모리를 사용하는지 알아야 한다.코드 실행 영역데이터 저장 영역 하나의 프로그램이 실행될 때는 위와 같이 코드 실행 영역과 데이터 저장 영역으로 나뉜다. (모든 프로그래밍 언어의 공통된 메모리 사용 방식이다.)  그리고 객체 지향 프로그램에서는 데이터 저장 영역을 다시 세 개의 영역으로 분할해서 사용한다. Static 영역 - 클래스들의 놀이터Stack 영역 - 메서드들의 놀이터Heap 영역 - 객체들.. 2024. 11. 24.