IoT(Internet of Things, 사물 인터넷) 설명 및 기술 로드맵
·
Programming/ETC
- 이번 포스팅으론 IoT 에 대해 알아보겠습니다.IoT 개념과 더불어 IoT 를 개발하기 위해 필요한 기술 및 로드맵까지 정리합니다. - IoT 는 단일 기술이 아닌 여러 기술들 융복합 기술입니다.특정 분야의 개발자시라면 해당 분야의 기술 습득은 패스할 수 있으며,아직 개발 경험이 없으시다면 웹 개발 부분으로 먼저 접근하시는 것을 추천드립니다. (IoT란?)Internet of Things (사물인터넷) = "사물(Things)" + "인터넷 연결(Internet)" 말 그대로 일상 속 사물들이 정보 단말로서 인터넷에 연결되어 데이터를 주고받고 동작하는 기술입니다. 예를 들어,스마트 에어컨이 자동으로 온도를 조절하거나,스마트워치가 심박수를 측정하고 서버에 저장하거나,집 앞에 사람이 오면 자동으로 조명이..
ReactJS 컴포넌트 개발 방법론
·
Programming/FrontEnd
- 이번 포스팅에서는 ReactJS 프론트엔드의 개발 방법론에 대해 작성할 것입니다. 실습에 사용할 기술은, Typescript : JavaScript 에서 Type Safety 를 적용한 언어react-router-dom : 웹 페이지별 접근 주소를 설정하는 라이브러리axios : 클라이언트인 브라우저에서 서버로 네트워크 요청을 보내기 위한 라이브러리 크게 위와 같으며,상태 관리를 위한 라이브러리인 Redux 와 같은 기술은 사용하지 않지만,라이브러리에 의존하지 않고도 충분히 합리적인 상태 관리를 할 수 있는 방식을 준비하였습니다. https://github.com/RaillyLinker/ReactJs_Template위의 Github 프로젝트를 기반으로 설명할 것이므로 참고하세요. (컴포넌트란?)Re..
분산 소켓 서버 설명 및 구현(Springboot, SockJS, STOMP, Kafka, Redis, Javascript)
·
Programming/BackEnd
- Socket 을 사용하여 채팅과 같은 서비스를 구현한다면, 통신하는 클라이언트 상호간 직접적으로 데이터를 주고받을 수 있는 WebRCT 와 같은 P2P 기술과는 달리 데이터 전송마다 중간에 서버를 거쳐야만 합니다. 이로 인하여 모든 서버-클라이언트 구조와 마찬가지로 연결된 클라이언트 수만큼 서버에 부담이 걸릴 수 있는 구조라는 것으로, 소켓 서버 역시 분산 시켜 이러한 부하를 효율적으로 분산시킬 수 있다면 안정적인 Socket 서버를 구축하고 운영 할 수 있을 것입니다. 이번 포스팅에서는 분산 소켓 서버를 구축하는데에 필요한 기본 지식을 간단히 알아보고, Springboot 를 사용하여 효율적인 채팅 서버를 구축하는 방법론을 정리해보겠습니다. (소켓 서버 설명) 일반적인 소켓 서버의 구조는 위와 같습..
MySQL Master-Slave 구현(Docker)
·
Programming/DBMS
- 이번 포스팅으로는 RDBMS 중 MySQL 을 Master-Slave 구조로 구현하는 방식을 정리하겠습니다. - DBMS 분산DBMS 는 소프트웨어의 가장 중요한 자원이라 할 수 있는 데이터를 직접 저장하고 관리하는 부분이니만큼 매우 중요하면서, 여러 응용 소프트웨어의 요청을 받아들이기에 전체 서비스 내에서 가장 부하가 많이 발생할 수 있는 곳이기도 합니다. 서버-클라이언트 구조에서 서버가 N개의 클라이언트로부터 요청을 받아 처리를 하듯, DBMS 는 N개의 서버로부터 요청을 받아 처리를 한다고 생각하시면 됩니다. 고로 데이터 요청의 부하를 분산하는 방식을 사용하여 전체 서비스의 처리 효율을 높일 수 있을 것입니다. - Master-Slave 구조 데이터베이스 분산을 통한 부하 분산 기술은 여러 방식..
Springboot Kafka Json Value 매핑하기
·
Programming/BackEnd
- 이번 포스팅에서는 Springboot 에서 Kafka 를 사용시 값으로 JSON 형태의 데이터를 전달하도록 할 것입니다.이전글에서는 StringSerializer, StringDeserializer 를 사용하여 String 형식으로 데이터 값을 보내고 가져왔는데,이렇게 설정시, 구조를 지닌 데이터를 입출력하기 위하여, "{\"test\" : \"testString\", \"testInt\" : 2}" 이렇게 String 을 보내면, Springboot 의 Consumer 에서 에러가 발생합니다.정식으로 Data 형태를 정해서 통신하도록 하겠습니다. - build.gradle // (jackson) implementation("com.fasterxml.jackson.module:jackson..
[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는 텍스트로 이루어진 프..