본문 바로가기

전체 글

중복문자 제거 fun removeDuplicates(s: String): String { return s.toSet().joinToString("") } fun main() { println(removeDuplicates("banana")) // "ban" (순서는 보장되지 않음) } 더보기
문자열 뒤집기 fun reverseString(s: String): String { return s.reversed() } fun main() { println(reverseString("Hello World")) // "dlroW olleH" } 더보기
Kotlin의 suspend 키워드를 이용한 비동기 프로그래밍 Kotlin에서 suspend 키워드는 코루틴을 사용하여 비동기 프로그래밍을 할 때 사용합니다. suspend 함수는 코루틴 안에서 실행되며, 비동기 작업을 수행할 수 있게 해줍니다. 이 함수는 실행을 중단할 수 있고, 필요에 따라 나중에 다시 시작할 수 있습니다. 이런 특징 때문에 suspend 함수를 사용하면 메인 스레드를 차단하지 않으면서 비동기 작업을 간결하게 처리할 수 있습니다. suspend 함수의 특징 suspend 함수는 코루틴 스코프 내에서만 호출할 수 있습니다. suspend 함수 내부에서는 다른 suspend 함수를 호출할 수 있습니다. suspend 함수는 비동기 작업을 수행할 때 유용하며, delay(), async(), await()와 같은 코루틴 빌더와 함께 사용됩니다. sus.. 더보기
마이크로서비스 추적을 위한 Spring Cloud Sleuth와 Zipkin 사용예제 Spring Cloud Sleuth는 Spring Cloud 프레임워크의 일부로, 마이크로서비스 아키텍처에서 서비스 간의 요청 추적을 돕는 라이브러리입니다. 이를 통해 개발자는 마이크로서비스 간의 요청이 어떻게 흘러가는지, 각 서비스에서 소요되는 시간 등을 쉽게 확인하고 문제를 진단할 수 있습니다. Spring Cloud Sleuth는 주로 다음과 같은 방법으로 작동합니다: 각 마이크로서비스의 요청과 응답에 유니크한 ID를 부여하여 추적합니다. 서비스 호출 체인을 통해 각 서비스의 응답 시간과 상태를 로깅합니다. 이 정보를 이용하여 시각화 도구 (예: Zipkin)에 데이터를 전송하여, 서비스 간의 호출 관계와 응답 시간을 시각적으로 확인할 수 있게 해줍니다. Spring Cloud Sleuth Spri.. 더보기
분산 마이크로서비스 추적: 마이크로아키텍처 환경에서의 효율적인 모니터링 마이크로서비스 아키텍처는 현대적인 애플리케이션 개발의 패러다임을 바꾸었습니다. 각각의 서비스가 독립적으로 운영되고, 빠르게 배포 및 업데이트가 가능해졌습니다. 하지만, 이러한 분산 환경에서 각 서비스의 상태와 성능을 추적하고 모니터링하는 것은 쉽지 않은 과제입니다. 이 글에서는 마이크로 아키텍처 환경에서 분산 서비스들을 효과적으로 추적하고 모니터링할 수 있는 방법에 대해 소개합니다. 분산 추적 (Distributed Tracing) 분산 추적은 서비스 간의 호출과 데이터 흐름을 시각화하는 데 필수적인 방법입니다. Jaeger와 Zipkin Jaeger와 Zipkin은 가장 인기 있는 분산 추적 도구 중 두 가지입니다. 이러한 도구들은 각 서비스에서 생성된 트레이스와 스팬 정보를 수집하여 서비스 간의 상호.. 더보기
스프링 클라우드 스트림과 카프카를 활용한 마이크로서비스 이벤트 처리 마이크로서비스 아키텍처에서 이벤트 기반 통신은 서비스 간의 느슨한 결합을 지원하며, 확장성과 유연성을 향상시킵니다. 이 포스팅에서는 스프링 클라우드 스트림(Spring Cloud Stream)과 Apache Kafka를 사용하여 마이크로서비스 간의 이벤트 기반 통신을 구현하는 방법을 소개합니다. 스프링 클라우드 스트림이란? 스프링 클라우드 스트림은 메시지 기반 마이크로서비스를 구축하기 위한 프레임워크입니다. 개발자가 특정 메시지 브로커의 API에 직접 의존하지 않고, 메시지 기반의 커뮤니케이션을 손쉽게 구현할 수 있게 해줍니다. 스프링 클라우드 스트림은 메시지 브로커를 추상화하는 바인더(binder)라는 개념을 도입하여, Kafka, RabbitMQ와 같은 다양한 메시지 브로커를 동일한 프로그래밍 모델로.. 더보기
몽고디비를 활용한 주문 프로세스 관리: 스텝별 상태 저장 및 조회 모든 쇼핑몰에서 사용자 주문, 결제, 배송 과정은 거의 모두 동일 합니다. 이러한 트랜잭션의 각 단계를 효과적으로 관리하고 추적하는 것은 사용자 경험을 향상시키고 운영 효율성을 높이는데 도움을 줍니다. 이번 포스팅에서는 몽고디비를 활용하여 주문 아이디 기준으로 스텝별 상태를 저장하고 조회하는 방법을 소개합니다. 시퀀스 도커 컴포즈 설정 몽고디비 도커 컴포즈를 통해 구성합니다. version: '3.8' services: # MongoDB configuration mongodb: image: mongo:latest container_name: mongodb_container ports: - "27017:27017" volumes: - mongodb_data:/data/db environment: MONGO.. 더보기
배열을 오른쪽으로 N번 회전하기 fun rotateArrayRight(arr: IntArray, n: Int): IntArray { val len = arr.size val rotatedArr = IntArray(len) for (i in arr.indices) { rotatedArr[(i + n) % len] = arr[i] } return rotatedArr } fun main() { val s = intArrayOf(1, 2, 3, 4, 5) val n = 2 val rotatedS = rotateArrayRight(s, n) println(rotatedS.joinToString(", ")) } 코드 설명: 먼저, rotateArrayRight라는 함수를 정의하여 구현을 시작합니다. 이 함수는 정수 배열 arr와 정수 n을 매개변.. 더보기