Language (9) 썸네일형 리스트형 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 특성이 둘다 가능하기 때문에, 코드를 작성할때 오타 및 실수를 조심하자! Kotlin 스터디 1일차 kotlin을 예전에 간단히 공부하고 써먹었는데, 다시한번 공부하고 기록을 남길겸 작성한다. 공부는 Kotlin In Action 라는 책과 공식사이트를 참고로 했다. 코드 실행은 intelliJ를 사용. 주 사용처는 서버개발을 위한 언어로 Kotlin 을 도입해보기 위함. 정리는 책을 읽은 순서대로 작성하고, 예제로 작성한 코드에서 패키지는 모두 생략. Kotlin은 기본적으로 jvm위에서 동작 (java 와 혼용에서 사용가능) 보통 Gradle을 사용해서 build하는데, gradle에 코틀린 관련 plugin만 작성해주면 기본적인 사용 가능. 프로젝트를 구성할때, 디렉토리 구조를 java와 같은 방식으로 구조를 짜는걸 추천 (그렇지 않으면, 혼용하거나, 마이그레이션할때 이슈가 생길 수 있음) kot.. 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영역에 존재한다고.. 3. Tuple, Collections, Enum typealias: 사용자 마음대로 타입 선언을 하는 기능 typealias: CustomInt = Int typealias: CustomString = String let name: CustomString = "test" let age: CustomInt = 20 // 처음 선언한 타입과 캐스팅 가능 let age2: Int = 30 age2 = age Tuple: 사용자가 임의로 만드는 타입 (c언어의 구조체와 비슷) // Index를 통해서 접근 및 수정 가능 var person: (String,Int) = ("name", 20) person.0 = "change name" person.1 = 10 // Index에 Alias 사용 가능 var computer: (cpu: String, memory.. 2. 데이터 타입 종류 Int, UInt : UInt 사용은 특별한 경우가 아니면 지양 Bool Double, Float: Float 사용은 특별한 경우가 아니면 지양 Character: 변수(상수)를 선언할때 큰 따옴표 ("")를 사용해서 초기화 String: Character 타입과 마찬가지로 큰 따옴표를 사용하여 초기화 Any: 모든 타입 선언 가능하지만 캐스팅 및 타입을 확인하는 번거로움 때문에 사용 지양 AnyObject: Any 타입과 비슷하지만 클래스의 인스턴스만 할당 가능 nil: null 이전 1 2 다음