Docker 컨테이너 안에서 Docker 사용하기 (Windows, Linux, MacOS)
·
Programming/ETC
- 이번 포스팅에서는 도커 컨테이너 안에서 도커를 사용하는 방식을 알아보겠습니다. 실습으로 만들어볼 Docker 컨테이너 구조는,ubuntu 22.04 OS 환경의 컨테이너 안에 docker 를 설치하겠습니다. - 먼저, 도커 안의 도커와 도커 밖의 도커를 동일하게 사용하는 방식입니다.이 방식은, 도커 컨테이너 안에서 도커를 사용할 때, 해당 컨테이너를 실행시키는 주체가 되는 도커를 그대로 사용하는 방식으로, 컨테이너 내부에서 도커 명령어를 사용하면 컨테이너 밖에서 생성한 도커 이미지, 컨테이너 등에 그대로 접근이 가능합니다. 도커를 공유하므로 성능상 우위를 지니겠지만 보안적으로 주의가 필요한 방식입니다. 도커 환경이 세팅되었다는 가정 하에,windowsdocker run --privileged -v /..
Springboot kotlin Excel 파일 읽기, 쓰기 기능 구현
·
Programming/BackEnd
- 이번 글에는 Springboot 로 Excel 파일을 읽고 쓰는 방식에 대해 알아볼 것입니다. - build.gradle사용라이브러리로, // (Excel File Read Write) // : 액셀 파일 입출력 라이브러리 implementation("org.apache.poi:poi:5.2.5") implementation("org.apache.poi:poi-ooxml:5.2.5") implementation("sax:sax:2.0.1")위와 같이 추가해주세요. - 다음으로 기능을 따로 나누어 보기 좋도록 모듈화를 할 것입니다.Excel 파일 관련 처리 기능들을 모아둔,ExcelFileUtil.kt 파일을 만들어서,import org.apache.poi.openxml4j...
Springboot Kotlin String 문자열을 투명 배경 서명 이미지(BufferedImage) 로 변경하기
·
Programming/BackEnd
- 어떠한 String 이 오더라도 배경이 투명한 서명 이미지로 변경하는 코드를 작성해보겠습니다.BufferedImage 객체를 사용하여 추출한 Graphics2D 객체를 사용합니다.    // (문자열을 투명 배경 서명 이미지로 변경하는 함수)    fun createSignatureImage(        // 서명화할 텍스트        text: String,        // 사인 이미지 사이즈        signImageWidth: Int,        signImageHeight: Int,        // 사인 텍스트 색상        signColor: Color,        // 사인 텍스트 폰트        signFont: Font    ): BufferedImage {     ..
Springboot Kotlin 파일 압축 및 압축 해제 코드
·
Programming/BackEnd
- kotlin 을 사용한 파일 압축 및 압축 해제 코드는 아래와 같습니다. // (디렉토리 내 파일들을 ZipOutputStream 으로 추가) fun compressDirectoryToZip(directory: File, path: String, zipOutputStream: ZipOutputStream) { for (file in directory.listFiles() ?: emptyArray()) { if (file.isDirectory) { compressDirectoryToZip(file, "$path/${file.name}", zipOutputStream) } else { addToZip(file, "$path/${file.name}", zipOutputStream) } } } // (파일들..
Springboot Java/kotlin 암호화/복호화 구현 코드(AES256, Base64, SHA256, HmacSHA256)
·
Programming/BackEnd
- 이번 포스팅에선 Springboot 를 사용하여 암/복호화 라이브러리를 사용하는 코드를 작성하겠습니다.- Kotlin 코드import java.nio.charset.StandardCharsetsimport java.security.MessageDigestimport java.util.*import javax.crypto.Cipherimport javax.crypto.Macimport javax.crypto.spec.IvParameterSpecimport javax.crypto.spec.SecretKeySpec// [암호화, 복호화 관련 유틸]object CryptoUtil { // [암호화 / 복호화] // (AES256 암호화) fun encryptAES256( text..
Springboot Redis 설정 및 사용 (다중 데이터 소스, Redis Cluster 적용)
·
Programming/BackEnd
- 이번 포스팅에서는 Springboot 에서 Redis 와 연동하는 설정과 사용 방식에 대한 설명글을 작성하겠습니다. - 2025-05-09 수정사항아래 설명글에서 소개한 Redis 설정 방식에서 개선된 부분이 다수 존재합니다.java-springkotlin-spring위 github 레포지토리에서 module-sample-redis 에 있는 설정 코드가 최신 코드입니다.최신코드를 기반으로 하여 아래 설명글을 참고하시면 됩니다. - 설명글이번에도 먼저 build.gradle 에 라이브러리를 입력하세요. // (Redis) // : 메모리 키 값 데이터 구조 스토어 implementation("org.springframework.boot:spring-boot-starter-data-red..
Springboot 요청/응답 자동 로깅 필터 만들기
·
Programming/BackEnd
- 이번 게시글에서는 Springboot 에서 API 에 요청이 있을 때마다 그 요청 정보와 응답 결과를 자동으로 로깅하는 필터를 만들어보겠습니다. import jakarta.servlet.AsyncEventimport jakarta.servlet.AsyncListenerimport jakarta.servlet.FilterChainimport jakarta.servlet.ServletExceptionimport jakarta.servlet.http.HttpServletRequestimport jakarta.servlet.http.HttpServletResponseimport org.slf4j.LoggerFactoryimport org.springframework.core.Orderedimport org...
Springboot SSE 구독 Client 구현
·
Programming/BackEnd
- 이번에는 짧게 코드만 게시하도록 하겠습니다. SseClient.ktimport okhttp3.*import okio.BufferedSourceimport java.io.IOExceptionimport java.util.concurrent.TimeUnit// [SseClient 클래스]class SseClient( private val requestUrl: String) { // private var originalRequest: Request? = null private var callObject: Call? = null private var lastEventId: String? = null private val dataStringBuilder = StringBuil..
Springboot SSE(Server Sent Event) 구현하기
·
Programming/BackEnd
- SSE(Server Sent Event)란?SSE는 HTTP 프로토콜을 기반으로 하며, 클라이언트는 EventSource라는 인터페이스를 통해 서버와의 연결을 수신합니다. 서버가 text/event-stream MIME 타입을 사용하여 데이터를 전송하면, 클라이언트는 이를 실시간으로 처리하게 됩니다. - 어디에 사용하는 기술인가?SSE 는 실시간으로 서버에서 내려주는 신호를 클라이언트가 받을 수 있습니다.이러한 기능으로 인하여 실시간 주식 가격 사이트, 실시간 랭킹 변동 사이트, 실시간 알림 시스템 등에 사용이 가능합니다. - SSE 의 특징 1. 단방향 통신: 서버에서 클라이언트로만 데이터를 전송. 클라이언트에서 서버로는 요청을 보낼 수 없으며, 연결을 열거나 닫는 역할만 수행. 2. 지속적인 연결..
병렬 프로그래밍 스레드 병합 패턴 (Kotlin / Java 예시)
·
Programming/ETC
- 본 포스팅은 언어에 상관 없이 병렬 프로그래밍을 사용하는 모든 언어로 구현이 가능한 패턴에 대한 설명입니다. (Thread, Semaphore, 콜백 함수 입력 기능이 가능해야함) - 스레드를 사용한 병렬 프로그래밍 시에 고려해야 할 중요한 사항 중 하나로, 스레드 병합 처리가 있습니다. 대부분의 프로그램은 main 함수로부터 시작하여 메인 스레드 내에서 순차 동작하는데, 이때 스레드를 사용하면 프로그램의 흐름을 분리할 수 있습니다. 이때, 특정한 스레드 들에서 처리한 작업들이 준비된 그 시점에 실행되어야 하는 작업들이 있습니다.예를들어 우리가 출입자 통제 시스템을 만들 때, 시간이 오래 걸리는 이미지 분석 기능과 음성 인식 기능, 데이터베이스 조회 기능 등을 성능을 고려하여 병렬적으로 동작시켰다고 ..