Language/Java (5) 썸네일형 리스트형 Stomp Heartbeat (for Spring) 최근 업무 도중 Stomp 기반 웹소켓을 사용하여 개발할 일이 있었는데, 공유차 기록... 클라이언트와 heartbeat 를 주고 받는데, 에러가 계속 발생하였다. 원인은 물론 내가 잘못 코드를 개발한것이지만, 찾기 힘들어서 몇일 고생하였다. 보통 Spring 을 사용하여 웹소켓 서비스를 개발할때 웹소켓 설정중에, configureClientInboundChannel, configureClientOutboundChannel 설정이 있다. 단순하게 요청의 앞뒤에 인터셉트 기능을 하는 설정인데, Stomp Command를 조회하여, Command별로 기능을 분기하는 역할을 만들었었다. 그런데 Heartbeat 메세지만 오면 에러가 났었는데, 결론부터 말하면 StompCommand와 SimpMessageTyp.. 에러처리 메소드를 만들때, 호출하는 쪽에서 에러처리를 해야할 경우 throws 란 키워드를 사용한다. 하지만 throws로 던질 에러가 RuntimeException 을 상속받는 에러일 경우 호출하는 쪽에서는 별도로 에러처리를 하지 않아도 컴파일&실행이 정상적으로 된다. public class Test { public void throwsExample1() throws ClassCastException { } public void throwsExample2() throws IOException { } } public class MainClass { public static void main(String[] args) { Test test = new Test(); // 에러처리 안해도 정상 컴파일 test.thro.. Stack 대신에 Deque를 사용하자 여태 stack 자료구조를 사용할 경우, 단순히 Stack 클래스를 구현해서 사용해왔다. 그러나 Stack 클래스는 Vector를 상속하는 클래스인데, Vector 클래스 내부를 보면 대부분 메소드가 synchronized로 선언되어 있다. 대부분의 경우에는 성능 낭비이기 때문에, Deque 구현체인 ArrayDeque를 사용하자. 단, 클래스명대로 Deque는 queue & stack 특성이 둘다 가능하기 때문에, 코드를 작성할때 오타 및 실수를 조심하자! Abstract VS Interface Abstract : 추상 클래스를 나타내는 키워드 이다. 추상클래스를 상속받아 기능을 확장하는데 주 목적이 있다. Interface : 인터페이스를 나타내는 키워드 이다. 인터페이스를 사용한다는것은 그 인터페이스에 주어진 메소드의 구현을 강제하여, 동일한 기능을 동작 시키는데 주 목적이 있다. 즉 특정 클래스가 추상클래스를 사용(상속)한다는것은 일종의 혜택을 부여하여 혜택 + 자신만의 기능확장을 한다고 볼 수 있고, 인터페이스를 사용(구현)한다는 것은, 특정 클래스에게 구현을 강제시켜 동일한 기능을 수행해야하는 책임을 부여한다고 볼 수 있다. JVM 정리 1. JVM - .java 파일을 컴파일한 결과물(.class)을 실행시키는 프로그램. 2. JVM 구조 - Heap - Method Area - Stack - Native Method Stack - PC Register 위에 나열한것 모두 각각 개별적인 영역이라고 이해하면 될 것 같고, Heap, Method Area는 JVM에 한개 존재하고, 나머지 (Stack, Native Method Stack, PC Register)는 Thread당 하나씩 존재한다. Heap 과 Method Area는 Thread간 공유가 가능하기 때문에, Thread Safe를 신경써서 코드를 작성해야 한다. 3. JVM 내부 구성요소들의 역할 - Heap 객체들이 new() 라는 키워드로 생성이되면 Heap영역에 존재한다고.. 이전 1 다음