java 7

Java Exception이란?

Java Exception이란? 사용자가 잘못 입력하거나 개발자의 실수로 인해 발생하는 오류를 말하며, Exception클래스를 사용한다. Exception 종류 1) 확인된 예외, checked exception 컴파일 단계에서 확인이 가능한 예외 개발자가 개발을 하는 단계에서 수정이 가능함 Exception클래스에서 RuntimeException클래스를 제외한 모든 Exception을 말함 IOException 등 2) 확인되지 않는 예외, unchecked excpetion 컴파일 단계에서 확인하지 못하고 실행단계에서 확인할 수 있는 예외 개발자가 개발을 하는 단계에서 수정을 할 수 없음 Exception클래스에서 RuntimeException클래스를 상속받는 모든 Exception을 말함 Null..

Java 접근 지정자(Access Modifier)

java는 public, protected, default, private 4개의 접근 지정자를 갖는다. 각각은 사용할 수 있는 범위가 다르다. 구분 public protected default private 동일 클래스 O O O O 동일 패키지 O O O X 상속 O O X X 다른 패키지 O X X X public : 다른 패키지를 포함한 어디서든 접근이 가능하다. protected : 다른 패키지의 클래스여도 상속받은 클래스에서는 접근이 가능하다. 동일 패키지에서는 어디서든 접근이 가능하다. default (지정자를 입력하지 않는다. private package) : 동일패키지에서는 public처럼 사용 가능하지만, 다른 패키지에서는 접근이 불가능하다. private : 동일 클래스에서만 접근이 ..

(1) Java는 Call By Value다.

메소드에 변수를 전달하는 방법에는 두 가지가 있다. Call By Value (값에 의한 호출) 값을 전달하기 위해, 메모리 공간을 별도로 할당하고 그 주소값을 전달한다. 메모리 공간을 할당하기 때문에, 비용이 많이 들게 된다. 원본값은 안전하다. Call By Reference (참조에 의한 호출) 참조를 전달하기 때문에, 메모리 공간을 별도로 할당하지 않는다. 참조에 해당하는 메모리를 직접 다루기 때문에 원본값에 영향이 있다. Java에서는 포인터라는 개념이 없기 때문에, 무조건 Call By Value다! swap함수로 예를 들어보자. 아래의 swap 함수를 호출했다고 한다면, 함수를 호출하는 쪽에서 swap 이후의 값은 변하지 않는다. 왜? swap함수가 종료될 때 까지, 할당된 새로운 메모리 공..

Java8 stream 정렬 방법

들어가기 전 테이블 두 개를 같은 화면에 보여줘야 한다. 두 테이블을 조인해서 한 번에 뿌려주는 방법이 있다. 이 경우 DB가 아무리 좋더라도 부하가 발생하기 마련이다. 때문에, 테이블 각각에서 필요한 데이터를 조회하고, 서비스단에서 병합하는 방법이 부하가 덜 해서 더 낫다. 아래는 일부 테스트 코드이다. 테스트 코드 병합 기준 : 시간순 private final Logger LOGGER = LoggerFactory.getLogger(this.getClass()); public void test(){ // 리스트 선언 List firstList = new ArrayList(); List secondList = new ArrayList(); List allList = new ArrayList(); // 쿼..

GC란 무엇일까?

GC ( Garbage Collection ) 쓰레기 객체 처리를 말하며, Java에서 하는 메모리 관리 알고리즘이다. C언어같은 경우에는 개발자가 직접 메모리를 참조할 수 있지만, Java에서는 GC를 통해 관리한다. 메모리 관리를 할 필요도 없고, 관리를 해서도 안된다. Full GC를 수행하는 순간에는 JVM위에서 처리 되지 않는다. GC를 많이 하면 응답시간에 많은 영향을 미친다. 쓰레기 객체란 무엇일까? 그냥 자바 객체를 말한다. // 객체는 이렇게 생성된다. String obj = new String(); // 아래 함수를 통과하면 preQuery, postQuery 객체는 더 이상 참조되지 않고 쓰레기 객체가 된다. public String makeQuery(String code){ Stri..

톰캣 CPU 점유 장애 (Feat. GC)

배경 어느 날, 아무 문제 없이 동작하던 웹 서비스에서, 페이지가 조회되지 않는다고 한다. 서버는 어떤 에러도 뱉어내지 않았지만 응답이 매우 느린 상황이었다. 시스템 정보를 보니 CPU를 100%가량 사용하고 있었고, Load Average또한 거의 8까지 올라가 있는 상황이다. 문제의 원인을 찾아보자. Step1. CPU를 많이 사용하고 있는 프로세스 찾기 => 톰캣 프로세스에서 CPU를 엄청 사용하고 있었다. Step2. 이 프로세스에서도 CPU를 많이 사용하고 있는 쓰레드 찾기 ps -mo pcpu,lwp -p ${PID} => 4개 쓰레드가 CPU를 엄청 사용하고 있었다. Step3. 그 쓰레드가 어떤 일을 하고 있었는지 덤프하기 jstack ${PID} => 어라..? GC를 하는 쓰레드였다. ..

개발/웹 2020.07.18