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 함수로부터 시작하여 메인 스레드 내에서 순차 동작하는데, 이때 스레드를 사용하면 프로그램의 흐름을 분리할 수 있습니다. 이때, 특정한 스레드 들에서 처리한 작업들이 준비된 그 시점에 실행되어야 하는 작업들이 있습니다.예를들어 우리가 출입자 통제 시스템을 만들 때, 시간이 오래 걸리는 이미지 분석 기능과 음성 인식 기능, 데이터베이스 조회 기능 등을 성능을 고려하여 병렬적으로 동작시켰다고 ..
Springboot Thymeleaf 로 랜더링한 HTML String 가져오기
·
Programming/BackEnd
- Springboot 에서 Thymeleaf 형식으로 작성한 웹 사이트를 랜더링하여, 완성된 HTML String 으로 가져오는 방법을 정리합니다. - Thymeleaf 설정 부분은 생략하겠습니다.프로젝트 구조는, 위와 같이 resources 폴더 안에 static, templates 폴더가 있으며,static 안에는 리소스 파일이, templates 안에는 thymeleaf 에서 사용할 HTML 파일이 들어있습니다. 유틸 파일을 만들겠습니다. CustomUtil.kt 파일을 만들고,import org.thymeleaf.context.Contextimport org.thymeleaf.spring6.SpringTemplateEngineimport org.thymeleaf.templatemode.Templ..
Springboot JavaMailSender 로 이메일 보내기 (PlainText 발송, 첨부파일 발송, Thymeleaf HTML 이메일 발송)
·
Programming/BackEnd
- 이번 포스팅으론 Springboot 에서 JavaMailSender 를 사용하여 이메일을 보내는 예시를 정리할 것입니다.백엔드 서비스 개발시 의외로 수요가 많은 기술로,서비스 진행 상태 공유, 인증 관련 비밀 문서 제공, 광고성 정보제공 등의 용도로 사용되며,Springboot 에서는 JavaMailSender 를 사용하여 쉽게 이메일을 전송 가능합니다. - 진행하기 전에 필요한 사항이 있습니다.HTML 이메일 전송을 위한 준비사항으로,앞선 포스팅에서 작성했던 Thymeleaf HTML 을 HTML String 으로 변환해주는 함수를 준비해주셔야 합니다.Thymeleaf 설정은 이미 되어있다고 가정하겠습니다. - 먼저 build.gradle 안의 dependencies 에 // (Spring e..
Springboot 에서 AWS S3 다루기
·
Programming/BackEnd
- 이번글에는 Springboot 에서 AWS 의 S3 를 다루는 라이브러리 사용법을 알아볼 것입니다.먼저, build.gradle 안에 AWS 라이브러리 종속성을 넣어줍니다. // (AWS) implementation("io.awspring.cloud:spring-cloud-starter-aws:2.4.4") application.yml 안에, cloud: aws: credentials: access-key: InputYourAccessKey secret-key: InputYourSecretKey region: static: ap-northeast-2 stack: auto: false 위와 같은 설정을 추가합니다.access-key 와 s..
Springboot MongoDB 설정하기 (멀티 소스 데이터베이스 접속, MongoDB ReplicaSet 접속 및 트랜젝션 Annotation 작성)
·
Programming/BackEnd
- 이번 포스팅으론 Springboot 로 MongoDB 에 접근하여 사용하는 방법을 설명드리겠습니다. - build.gradle.kts저는 코틀린 언어를 사용하기에 build.gradle.kts 를 사용하는데, java 를 사용하신다면 적절히 수정을 하시면 됩니다. 종속성으로, dependencies 태그 안에 // (MongoDB) implementation("org.springframework.boot:spring-boot-starter-data-mongodb:3.3.0") 위와 같이 추가하면 됩니다. - application.yml 파일 안에 데이터베이스 설정을 하겠습니다. 여기서는 하나의 프로젝트로 여러 데이터베이스에 접근이 가능하다는 것을 전제로 하기에 여러 데이터베이스에 대한 설정..
Springboot JPA 설정하기 (멀티 소스 데이터베이스 접속 및 트랜젝션 Annotation 작성)
·
Programming/BackEnd
- 이번 포스팅에서는 Springboot 에서 JPA 를 통해 Database 를 사용하도록 설정하는 방식을 정리하겠습니다. - 2025-05-09 수정사항현시점, 아래 설명글에서 개선된 몇가지 사항이 존재합니다.Transaction 처리 등의 방식이 변경되었으므로, 최신 코드는, java-githubkotlin-github 위의 링크에서 확인하실 수 있습니다.기본적인 설정 원리는 동일하므로, 아래 설명글을 한번 읽어보시고 위 최신 코드를 사용하시는 것을 추천드립니다. - build.gradle.kts저는 코틀린 언어를 사용하기에 build.gradle.kts 를 사용하는데, java 를 사용하신다면 적절히 수정을 하시면 됩니다.종속성으로, dependencies 태그 안에 implementatio..
서버 모니터링 시스템 Docker 로 구성하기(Grafana, Prometheus, Loki, Promtail, Springboot)
·
Programming/ETC
- 백엔드 서버를 개발해서 실행시키는 시점에 개발은 운영의 범위로 넘어가게 됩니다.운영에서 중요한 것은, 우리가 밥을 먹을 때나 잠을 잘 때나, 잠시 휴식을 취할때 상관 없이 에러가 발생할 가능성이 있는 서비스가 정상 동작하도록 감시하고, 만약 문제가 발생하면 신속하게 대응하는 것입니다. 단순히 서비스를 개발해서 네트워크상 오픈해두는 것으로 그치는 것이 아니라 주기적으로 상태를 확인해줘야만 합니다. 이때, 런타임 에러가 발생하거나 서버 컴퓨터에 장애가 발생한다면 바로 관련자에게 에러 발생 로그를 발송하여 에러 상황을 알린다던지, 언제 어디서든 서버 상태를 파악하고, 이전 로그를 확인 가능한 기능이 있다면 운영에 큰 도움이 되겠죠? 이러한 기능을 제공해주는 것이 바로 서버 모니터링 시스템입니다. - 이번 ..