400ms STW 하나가 실시간 서비스를 어떻게 멈춰세우는지
·
JAVA
글을 작성하게 된 이유실시간 트래픽이 몰리는 서비스에서 Stop-The-World(STW)가 400ms 이상 걸리면서, 모듈 사이 통신이 끊기고 라우팅이 꼬이는 상황을 겪고 나서야 깨달았다. 이 글은 그때 겪었던 장애 상황부터, GC 원인 분석, 그리고 ParallelGC에서 G1GC로 튜닝하면서 실제로 STW를 줄였던 과정을 정리해보려고 쓴다. GC가 뭐길래?Java에서는 개발자가 직접 free() 같은 걸 호출해서 메모리를 해제하지 않는다.대신 GC가 주기적으로 돌아다니면서 더 이상 참조되지 않는 객체를 찾아서 메모리에서 치워준다.이 덕분에 메모리 관리가 편해지는 대신, GC가 도는 동안 애플리케이션의 모든 쓰레드가 멈춘다. 이것을 Stop-The-World(STW) 라고 부른다. 서비스 간략 설명내..
시큐리티(미완성)
·
JAVA
세션은 최초 요청과 재요청 두 가지로 나뉜다. 최초요청 때 브라우저(쿠키) -> 서버(세션) 쿠키에 세션 정보가 아직 없다. 응답할 때 서버 쪽 세션에서 세션 Id를 전달해서 브라우저 쿠키에 심어준다. SID 현 상황 내 로컬 브라우저 쿠키 값에 세션 정보의 고유한 값이 담겨 있다. 이제 재요청을 보내게 될 때 쿠키에 있는 세션정보를 같이 보내게 된다. 서버에 있는 세션의 정보와 내가 보낸 쿠키안에 있던 세션 정보가 동일하다면 그 값을 전달하게 된다. 문제는 쿠키에 있는 세션의 정보를 헤더에 담아서 요청을 보내면 개인정보가 즉, 세션에 담긴 모든 정보가 다른 컴퓨터에서 볼 수 있다. Spring Session 모든서버에 공용 세션을 만든다. 세션에 있는 정보를 db에 담는다. text만 저장하는데 특화된..
JAVA Object 클래스 란?
·
JAVA
Object 클래스(최상위 부모 클래스) 1. toString( ) 항상 객체명을 출력할 때에 toString( )이 생략된다. toString( )을 통해 출력되는 문자열이 마음에 들지 않는다면, 재정의하여 수정하도록 한다. 2. equals( ) : 주소값 비교 (==) String 클래스에서 값 비교로 재정의 되었다. 문자열 비교에서는 반드시 equalls( )를 사용하고, null을 비교할 때는 == 으로 비교한다.
JAVA 캐스팅을 하는 이유
·
JAVA
Casting up casting : 자식 값을 부모 타입으로 형변환 down casting : up casting된 객체를 자식 타입으로 형변환 * 부모 값을 자식 타입으로 형변환 시 오류 Casting을 사용하는 이유 모든 자식 값을 전달받기 위해서는 동일한 타입의 저장공간으로 받아야 한다. 하지만 자식끼리는 서로 타입이 다르기 때문에 한 번에 전달 받을 수가 없다, 이 때 up casting을 사용하면, 모든 자식이 부모 타입이므로 하나의 저장공간에 모든 자식을 받을 수 있게 된다. 만약 up casting으로 자식 값을 전달 받았다면, 자식에서 새롭게 구현한 기능들은 사용할 수 없기 때문에 down casting을 통해서 복구하여 사용한다. 객체 간 타입 비교 → instanceof 객체 inst..
JAVA 변수의 종류
·
JAVA
변수의 종류 지역변수(local variable) : 클래스 중괄호 영역은 포함되지 않으며, 메소드 또는 그 안의 영역에서 선언된 변수 매개변수(parameter) : 메소드의 소괄호 안에서 선언되는 변수, 해당 메소드 안에서만 사용 가능 전역변수(global variable) : 클래스 중괄호 영역에서 선언된 변수, 클래스 내 전 지역에서 사용 가능 정적변수(static variable, class variable) : 객체 간 공유, 편의성 저장기억부류(Storage class) Stack Data영역 지역변수, 매개변수 전역변수, 정적변수 초기화 방법 직접 자동 생명주기 } new, 프로그램 종료 시
JAVA 클래스란?
·
JAVA
클래스(반) 공통 요소를 한 번만 선언해 놓고 가져다 사용만 하도록 설계한다. 1. 클래스는 타입이다. 클래스 안에 선언된 변수와 메소드를 사용하고 싶다면, 해당 클래스 타입으로 변수를 선언해야 한다. 2. 클래스는 주어이다. 원숭이가 바나나를 먹는다. Monkey eats the banana. Monkey.eat("banana"); -------- --- ---------- 주어 동사 목적어 클래스 선언 class 클래스명{ 필드(변수, 메소드) } 클래스의 필드 사용 1. 객체화(instance) : 객체(instance variable)를 만드는 작업, 추상적인 개념을 구체화시키는 작업. 클래스명 객체명 = new 생성자( ); 객체명.필드 2. 생성자 클래스 이름 뒤에 소괄호가 있는 형태, 메소드..
JAVA 메소드란?
·
JAVA
메소드 이름 뒤에 소괄호. 단, 키워드(예약어) 뒤에 소괄호가 있다면 메소드가 아니다. if( ), switch( ), while( ), for( ) 메소드가 아님 f (x) = 2x + 1; 메소드의 이름 매개변수 리턴값 메소드 선언 (1)리턴타입 (2)메소드명(자료형 (3)매개변수명, ...){ (4)실행할 문장; (5)return 리턴 값; } (1) 리턴 값이 있다면 리턴 값의 자료형을 작성하고, 리턴 값이 없다면 void를 작성한다. (2) 동사로 작성한다. (연필(매개변수)을 쓴다(메소드)) (3) 외부에서 전달받을 값이 있다면, 자료형과 순선에 맞게 선언해준다. (생략 시, 외부에서 값을 전달 받을 수 없다.) (4) 생략이 가능하며, 메소드의 기능을 구현하는 로직을 작성한다. (5) 생략이..
클래스와 객체의 생성
·
JAVA
필드 구현 자동차를 추상화한 클래스 Car를 구현 자동차의 속성 자동차의 번호판 자동차의 소유자 public class Car { public long carNumber; public String carOnwner; } 필드 지정자 type keyword function 상수 final 수정하면 안되는 상수를 지정할 때 접근 지정자 public protected private 필드의 접근 권한을 종류로 지정할 때 정적 static 필드의 소속(클래스인지 인스턴스인지) 필드의 기본 값 선언 시 초기 값이 없으면 자동으로 저장되는 값 # 타입에 따라 기본이 되는 0 구분 필드 기본 값 불린형 booleans false 문자형 char 'w0' 'wu0000' 정수형 byte short int long 0 실..