분류 전체보기
힙덤프
Heap 동적으로 할당되어 사용할 수 있는 메모리 영역 주로 실행중에 생성되는 객체들이 저장되고, 실행 후 제거되는 영역 GC(Garbage Collection)의 대상의 되는 메모리 영역 가비지 컬렉터는 가비지 컬렉션을 통해 힙 영역에 있는 사용되지 않는(더이상 참조가 없는) 객체를 회수한다. 힙 덤프 : 힙 메모리의 내용을 그대로 파일로 떠놓은 것. 주의 : 서버에서 이 파일을 열면 안됨. 서버의 메모리를 사용하여 서버 다운될 수 있다. 메모리 누수 힙 영역에 있는 동적으로 할당된 객체가 더 이상 사용되지 않음에도 불구하고 가비지 컬렉터에 의해 회수되지 않고 메모리에 남아있어서 자리만 차지하는 현상 OOM 메모리 부족현상 어플리케이션이 동작하지 못하고 JVM이 종료되는 최악의 상황. 24시간 서비스하..
JDBC
정의 자바에서 데이터베이스에 상관없이 DBMS에 접근하기 위해 사용되는 API 디비 접속, SQL 실행, 실행 결과로 얻어진 데이터의 핸들링을 제공하는 방법과 절차에 대한 규약 네이버의 경우 DDos 공격으로 L4가 죽어 네트워크가 단절되어 WAS도 동작 불능 상태가 되었다. WAS의 쓰레드 덤프를 통해 JDBC의 API 호출 중에 WAS가 정지해있음을 알게 되었고, 10~20분이 지나도 WAS는 여전히 WAITING였고, 서비스는 정상동작하지 않았다. 그런데 30분 지나서 Exception을 발생시키면서 서비스가 복구되었다고 한다. QueryTimeout도 3초인데 왜 30분씩이나 WAS가 정지되어 있고, 왜 30분이 지나서 동작한걸까? d2.naver.com/helloworld/1321 JDBC 드라..
팩토리패턴
팩토리 패턴의 핵심은 클래스의 인스턴스를 만드는 것을 서브클래스에서 결정하도록 한다는 것이다. 즉, new 키워드를 사용하는 부분을 서브클래스에 위임함으로서 객체 생성을 캡슐화하고 구상 클래스에 대한 의존성이 줄어든다는 이점을 얻을 수 있다. 특히 구상 클래스에 대한 의존성이 줄어드는 것은 의존성 뒤집기 원칙(Dependency Inversion Principle:DI)에 기인하는데, DI는 자바 진영에서 널리 쓰이고 있는 Spring 프레임워크의 핵심 개념 중 하나이다. 싱글톤 패턴과 더불어 가장 유명하고 널리 쓰이는 디자인 패턴 중 하나라고 할 수 있다.
스레드풀이란
스레드풀이란 스레드를 미리 만들어 풀장에 풀어놓는 개념이라고 이해하면 쉬움 사용자로부터 들어온 요청을 작업큐에 넣고 스레드풀은 작업큐에 들어온 Task 일감을 미리 생성해놓은 스레드들에게 일감을 할당한다. 일을 다 처리한 스레드를 다시 어플리케이션에게 결과값을 리턴한다. 자바에서는 스레드풀을 생성하고 사용할 수 있도록 concurrent 패키지에서 ExecutorService인터페이스와 Executors 클래스를 제공하고 있다. Executors의 다양한 정적 메소드를 통해 ExecutorService 구현 객체를 만들어서 사용할 수 있으며, 이것이 바로 스레드 풀이다. 스레드풀의 목적 성능 저하를 방지하기 위해서 매번 발생되는 작업을 병렬처리 하기 위해 스레드를 생성/수거 하는 부담은 전체적인 퍼포먼스..
쓰레드 덤프 분석하기
장애가 발생했을 때나 기대보다 웹 애플리케이션이 느리게 동작할 때, 우리는 스레드 덤프를 분석해 봐야 한다. 웹서버에서 많은 수의 동시 사용자를 처리하기 위해서 수십 ~ 수백개 정도의 쓰레드를 사용함. 두 개 이상의 쓰레드가 같은 자원을 이용할 때에는 필욘적으로 쓰레드 간의 Contection(경합)이 발생하고 데드락이 발생할 수 도 있다. *경합 : 한 쓰레드가 다른 쓰레드를 획득하고 있는 락이 해제되기를 기다리는 상태 웹앱에서 여러 쓰레드가 공유자원에 접근하는 일은 매우 빈번한다. 대표적으로 로그를 기록하는는 쓰레드가 락을 획득하고 공유 자원에 접근하는 것이다. 데드락은 쓰레드 경합의 특별한 케이스이다. 두 개 이상의 쓰레드에서 작업을 완료하기 위해 상대의 작업이 끝나야 하는 상황. 쓰레드 경합 때문..
스프링 스터디 1주차에 공부한 것들
CPU, RAM, DISK의 정의 및 역할 CPU : 중앙처리장치. 사용자가 입력한 명령어를 해석하고 자료를 연산하여 그 결과를 제어하는 역할 구성 요소 ALU 산술논리장치 : 연산을 수행 CU컨트롤 장치 : 제어 명령을 전달. 레시스터 사이의 데이터 전송을 제어 레지스터 : 값을 일시적으로 기억. 메모리중 저장 속도가 가장 빠름. 내부 버스를 통해 연산장치와 연결되어 있음 하이퍼스레딩 : 한개의 코어를 두개의 쓰레드로 나눔으로서 두가지 작업을 동시에 할 수 있게 만든 기술. RAM : Random Access Momory의 줄임말고 CPU가 빠른 엑세스를 하기 위해 데이터를 단기간에 저장하는 구성 요소 응용프로그램의 로딩 데이터의 일시적 저장 등에 사용 *Random Access : 어느 곳에 저장된 ..
데이터베이스
DBMS : 데이터베이스를 관리해주는 시스템 (오라클, MySQL과 같은 데이터베이스 관리 프로그램) 데이터베이스 : 데이터를 저장할 공간 DBMS 클라이언트 : 데이터베이스를 사용하는 어플리케이션. DB 데이터를 저장하려면 데이터를 저장할 공간인 데이터베이스를 만들어줘야 한다. GRANT 쿼리 -> MySQL, DBMS 계정에 권한을 부여할 때 사용하는 명령어, all privilieges이면 모든 권한을 부여한다. SQL기초 Sturected Query Lanaguage 데이터베이스로부터 데이터를 조회하고 삭제하는 등의 작업을 수행할 때 사용하는 언어 CHAR 확정 길이의 문자열을 저장한다. 표준의 경우 255글자까지만 저장 VARCHAR 가변 길이의 문자열을 저장함. 표준의 경우 255글자까지만 저..
자바 HashSet
충돌 해결 어떻게 하는지 thread-safe 구현 방식 HashSet의 중복 해결 방법 public class HashSet extends AbstractSet implements Set, Cloneable, java.io.Serializable 중복된 원소를 허용하지 않고 순서 역시 고려되지 않음. 객체를 저장하기 전에 먼저 객체의 hashCode() 메서드를 호출하여 해시코드를 얻고 이미 저장되어 있는 객체들의 해시코드와 비교한다. 만약 동일한 해시코드가 있다면 다시 equals()로 두 객체를 비교해 참이면 저장 안함. 이미 키에 매핑된 값이 있으면 그전의 값을 덮어씌운다고 명시되어 있다. /** * Associates the specified value with the specified key ..
TCP, UDP
1. TCP(Transmission Control Protocol) 인터넷상에서 데이터를 메세지의 형태로 보내기 위해 IP와 함께 사용하는 프로토콜 [ TCP 특징 ] 연결형 서비스로 가상 회선 방식을 제공한다. 바이트 스트림을 통한 연결 (데이터의 경계를 구분하지 않음) 3-way handshaking과정을 통해 연결을 설정하고 4-way handshaking을 통해 해제한다. 흐름 제어 Flow Control 및 혼잡 제어. Congestion Control 순서 보장 높은 신뢰성을 보장한다. UDP보다 속도가 느리다. 전이중(Full-Duplex), 점대점(Point to Point) 방식. 일대일 통신(유니캐스트) 흐름제어 : 데이터 처리 속도를 조절하여 수신자의 버퍼 오버플로우를 방지 송수신 하..
컨텍스트 스위칭이란
멀티프로세스 환경에서 CPU가 어떤 하나의 프로세스를 실행하고 있는 상태에서 인터럽트 요청에 의해 다음 우선 순위의 프로세스가 실행되어야 할 때 기존의 프로세스의 상태 또는 레지스터 값(Context)을 저장하고 CPU가 다음 프로세스를 수행하도록 새로운 프로세스의 상태 또는 레지스터 값(Context)를 교체하는 작업을 Context Switch(Context Switching)라고 한다. 컨텍스트란? CPU가 해당 프로세스를 실행하기 위한 해당 프로세스의 정보들. 이 Context는 프로세스의 PCB(Process Control Block)에 저장된다. 그래서 Context Switching때 PCB의 정보를 읽어(적재) CPU가 전에 프로스세가 일을 하던 것에 이어서 수행이 가능함 PCB의 저장정보..