[Java] TLV(Tag-Length-Value) 설명 및 해석 함수 구현
·
Programming/ETC
- TLV는 "Tag-Length-Value"의 약자로,데이터의 구조를 세 가지 구성 요소로 구분하는 형식입니다.이 형식은 주로 통신 프로토콜에서 데이터를 효율적으로 전송하고,각 데이터의 의미를 명확히 하기 위해 사용됩니다. Tag: 데이터 항목의 종류나 속성을 나타내는 식별자입니다. Length: 데이터 값의 길이를 나타내며, 몇 바이트로 이루어졌는지를 표현합니다. Value: 실제 데이터 값 자체입니다.예를 들어, 특정 메시지가 Tag=01, Length=04, Value=1234로 구성되어 있다면, Tag는 데이터의 종류를, Length는 값이 4바이트라는 것을, Value는 실제 데이터가 "1234"임을 의미합니다. TLV 구조는 특히 비동기 데이터 처리나 다양한 데이터 유형을 처리할 때 유용합니..
Springboot 서버 비동기 처리 - Redis 를 이용한 분산락 설명 및 구현
·
Programming/BackEnd
- Springboot 는 기본적으로 멀티 스레드로 요청을 처리합니다.즉, 이로인해 비동기 처리에 대한 문제가 발생할 수 있으며,이에 대한 적절한 조치가 필요할 것입니다. - 먼저, Springboot 가 멀티 스레드로 동작하지 않는다면 어떤 문제가 발생할까요?만약 Springboot 가 단일 스레드로 API 요청을 처리한다면, 동시 사용자가 조금만 늘어나더라도 각 요청을 순차적으로 처리하느라 사용성이 떨어지게 될 것입니다.많은 연산량을 필요로 하는 기능이 아닐지라도, 네트워크 요청과 같은 단순히 요청 시간이 긴 작업을 수행할 동안에도 다른 요청을 처리하지 않고 있으므로 단일 스레드 서버는 비동기 처리를 하지 않아도 되는 단순성과 그로인한 강제적인 안정성을 제외하고는 이득이 없습니다. - 위와 같은 이유..
Springboot kotlin JPA QueryDSL 설정 및 테스트
·
Programming/BackEnd
- 이번 포스팅에서는 Kotlin 언어로 구성된 Springboot 에서 QueryDSL 을 설정하는 방법에서부터 테스트까지 진행하겠습니다. - 설정build.gradle.kts 파일 안에,plugins { kotlin("jvm") version "1.9.25" kotlin("plugin.spring") version "1.9.25" id("org.springframework.boot") version "3.3.4" id("io.spring.dependency-management") version "1.1.6" // 추가 kotlin("plugin.allopen") version "2.0.21" // allOpen 에 지정한 어노테이션으로 만든 클래스에 open 키워드를 ..
Springboot logback 적용
·
Programming/BackEnd
- springboot logback 이란, 스프링부트 프로세스에서 발생하는 로그들의 형식을 정해주는 기능입니다.예를들어 test 라는 로그를 남길 때,import org.slf4j.Loggerimport org.slf4j.LoggerFactoryprivate val classLogger: Logger = LoggerFactory.getLogger(this::class.java)fun test(){ classLogger.info("test")} 위와 같이 로깅을 하는데,의도대로라면 로그에 "test" 만 찍혀야 하겠죠? 하지만 운영 단계에서는 해당 로그가 찍힌 시간, 로그의 중요도, 실행된 스레드가 무엇인지 등을 자동으로 로깅하고 싶을 수도 있습니다.그렇다면 위와 같은 로깅 코드마다 각 정보를 일일이 넣..
Springboot 로 Socket(STOMP) 개발하기
·
Programming/BackEnd
- 이번 포스팅으로는 Springboot 로 Socket 을 개발 할 때, STOMP 를 사용하도록 하겠습니다. - STOMP(Simple Text Oriented Messaging Protocol)STOMP 는 텍스트 기반의 메시징 프로토콜로, 텍스트 메시지 전송을 위해 설계된 간단한 프로토콜입니다.STOMP는 WebSocket 위에서 사용할 수 있으며, 다양한 메시징 시스템에 쉽게 적용할 수 있도록 만들어졌습니다. STOMP는 클라이언트와 메시지 브로커 사이에서 상호작용을 단순화하는 역할을 합니다. 브로커 기반 메시징 시스템에서 클라이언트가 메시지를 보내고 받고, 구독하고 브로커와 소통하는 방식의 규칙을 정의합니다. STOMP의 주요 특징은,1. 텍스트 기반 프로토콜:STOMP는 텍스트로 이루어진 프..
Springboot 로 Socket(SockJS) 개발하기
·
Programming/BackEnd
- 이번 포스팅에서는 Springboot 에서 Socket 을 사용한 개발 방식에 대해 알아볼 것입니다.Socket 은 아시다시피 실시간 양방향 통신 기술로, 연결이 끊기지 않고 상호간 데이터를 전송하고 수신할 수 있기에 채팅 등을 구현할 때 사용합니다. - 정식적으로 채팅 등의 서비스를 만들어보기 위해서는 클라이언트 개발의 수고나 접속자 연결 및 계정 관리, 채널 관리 등의 여러 요소들을 구현해야합니다.즉, 계정 시스템이나 채널 관련 데이터베이스 등의 구축이 필요한데, 저는 여기까지 구현하기보다는 Socket 자체에 대해 이해가 쉽도록 기능 중심의 구현을 하려고 합니다. 아래 실습에서는 단순하게 Springboot 에서의 Socket 기술 사용의 원형 및 클라이언트에서 메시지를 서버에 보내면 서버에서 ..
[Java] JVM Garbage Collector 정리
·
Programming/ETC
- 이번 포스팅에선 JVM 성능 튜닝의 가장 대표적인 GC 튜닝을 알아보기 전에,JVM Garbage Collector 에 대한 개념을 이해하는 글을 정리하겠습니다. [자바 메모리 공간] - 자바는 가상 머신인 JVM으로 돌아가는 프로그램이니만큼, 직접 메모리를 할당하고 제거하는 C와는 다른 메모리 공간 할당 정책을 사용합니다. C의 경우는 C언어 메모리 레이아웃이라고 하여, C 프로그램만의 메모리 사용 공간이 있다면, 자바의 경우에는 자바 가상 머신이 관리하는 메모리 공간이 있습니다. - 이는, 프로그램이 메모리 공간을 효율적으로 사용 및 관리하기 위한 논리적 구조이지, 물리적으로 나뉘어진 구조가 아님을 명심하세요. 메모리라는 것도, 전기가 흐르는 흐름을 전자적으로 제어하는 전자 회로의 일종의 묶음일 ..
[Java] 자바 Thread Dump 개인정리
·
Programming/ETC
- 이번 포스팅은 개인정리글입니다.언제나 그렇듯, 개인 정리글은 설명을 위한 글이 아니라 가독성이 떨어질 수 있습니다.- JVM 최적화를 위해 필요한 지식 중 하나. [Thread] - 자바는 JVM을 사용하기에, 가장 단순한 형태의 프로그램도, 수개의 쓰레드로 이루어져 있습니다. 내 코드가 만들어낸 스레드와 더불어 JVM 자체 쓰레드 역시 존재합니다.(스레드 경합)- 공유 자원에 대해서, 여러 스레드가 동시에 요구를 할 때 일어나는 현상으로, 서로 다른 쓰레드 간에 자원을 가져가기 위한 경합이 자주 발생합니다. - 경합이 심해지면, 어느 쓰레드가 자원을 소유하지 못하고 멈춰버리는 '데드락'이 걸리기도 합니다. - 경합은, 어느 자원에 있어서, 한 스레드가 그것을 사용함에 있어서 잠궈놓은 '락'에 대해,..
[Java] JNI 정리 및 개발 방식 정리
·
Programming/ETC
[JNI]- Java Native Interface의 약자로,자바로, C와 C++의 코드를 실행시키는 인터페이스를 말합니다.(꼭 C C++에 국한된 것은 아니지만, 실질적으로 사용되는 것이 C/ C++입니다.) (기본 설명)- SW 프로그램 구동 원리를 이해해야 합니다. - '소스 코드는 텍스트일 뿐이다.'텍스트인 소스 코드를 개발자가 작성하여, 컴퓨터에게 일을 시키기 위해서는 이를 컴퓨터가 이해할수 있는 명령 체계로 변환을 시켜야 합니다. 이것이 바로 컴파일링 입니다. 각 프로그래밍 언어별로, 문법이 서로 다르고,이 다른 문법을 해석하여, 컴퓨터가 이해하고 실행할수 있는 형식으로 변화시켜 주는 것이 바로 각 언어의 컴파일러의 역할입니다. 당연히 다른 언어는 다른 문법체계를 가지고, 다른 컴파일러를 가지..
[Java] 자바를 사용한 병렬 프로그래밍 정리와 synchronized, volatile 설명
·
Programming/ETC
[자바 병렬 프로그래밍]- 병렬 프로그래밍이라는 것은, 개발자가 소스코드를 작성할 때, 위에서 아래로 차례대로 흐르는 방식의 코드 흐름을 작성하는 것만이 아닌,(일반적으로 hello world를 찍을 때도 사용되는 것이 바로 이 일직선의 코드 흐름입니다.) 한 코드 내에, '동시적'으로 실행되는 코드와 로직의 흐름을 만들어 내는 것입니다. - 여기선 자바를 중점으로 한 병렬 프로그램에 대해 정리할 것입니다. 어렵지 않으니 차근차근 알아보죠.먼저, 필요 지식에 대해 설명하겠습니다. (Thread)- 한 OS에서 동시에 실행되는 프로그램을 프로세스라는 단위로 부릅니다. 멀티 프로세싱이라는 것은, OS가 작동 시키는 프로세스의 갯수가 복수개라는 뜻이죠. (만일 윈도우 같은 OS를 사용할 때, 한번에 하나의 작..