서버 모니터링 시스템 Docker 로 구성하기(Grafana, Prometheus, Loki, Promtail, Springboot)
·
Programming/ETC
- 백엔드 서버를 개발해서 실행시키는 시점에 개발은 운영의 범위로 넘어가게 됩니다.운영에서 중요한 것은, 우리가 밥을 먹을 때나 잠을 잘 때나, 잠시 휴식을 취할때 상관 없이 에러가 발생할 가능성이 있는 서비스가 정상 동작하도록 감시하고, 만약 문제가 발생하면 신속하게 대응하는 것입니다. 단순히 서비스를 개발해서 네트워크상 오픈해두는 것으로 그치는 것이 아니라 주기적으로 상태를 확인해줘야만 합니다. 이때, 런타임 에러가 발생하거나 서버 컴퓨터에 장애가 발생한다면 바로 관련자에게 에러 발생 로그를 발송하여 에러 상황을 알린다던지, 언제 어디서든 서버 상태를 파악하고, 이전 로그를 확인 가능한 기능이 있다면 운영에 큰 도움이 되겠죠? 이러한 기능을 제공해주는 것이 바로 서버 모니터링 시스템입니다. - 이번 ..
ELK 개념 설명, Docker 구축 및, Springboot Log 데이터 처리
·
Programming/ETC
- 이번 글에서는 서버 모니터링 시스템 중 서비스에서 발생하는 로그를 관리하고 확인할 수 있는 ELK 를 구축해보겠습니다. [ELK Stack 이란?]- ELK Stack 이란, E 와 L 과 K 각 기술의 결합입니다.세 기술이 모여서 하나의 시스템을 구성하므로 Stack 이라 불립니다. 위 이미지를 봅시다. ELK 의 구조를 보여줍니다.E 는 ElasticSearch, L 은 LogStash, K 는 Kibana 의 약자입니다. 먼저 LogStash 를 봅시다.LogStash 는 로그를 받아들이는 창구를 의미합니다.Springboot, MongoDB, MySQL 등의 로그를 발생시키는 서비스에서 LogStash 로 요청을 보내면, LogStash 는 Elastic Search 에 정보를 전달합니다. ..
Kafka 란 무엇일까? Apache Kafka 설명
·
Programming/ETC
- 이 글을 보시는 독자분들은 어디선가 Kafka 가 좋다거나 배워야 한다는 이야기를 듣고 찾아오셨을 것입니다.저 역시 Youtube 에 노출되는 영상으로 먼저 Kafka 를 배워야겠다는 생각을 했습니다만, 왜 Kafka 를 사용해야하는지에 대해 알지도 못한 채 어려운 기술적 설명을 이해하는 것은 쉽지 않은 일이었습니다. Kafka 의 사용방식은 의외로 쉽습니다.Springboot 를 사용하신다면, 이글을 보시면 되고,다른 프레임워크라고 하더라도 관련된 라이브러리가 이미 제공되어 있을 것입니다. 저는 이번 포스트에서 Kafka 에 대해 이해하기 쉬운 설명을 통해 Kafka 를 어떻게 활용해야할지, 어디에 사용해야 할지에 대해 스스로 생각할 수 있는 기반을 세워드리는 것을 목표로 글을 작성하겠습니다.[Ka..
Kafka Cluster(SASL) DockerCompose 로 구현
·
Programming/ETC
- 본 게시글은 이전 게시글 인 Kafka 로 Cluster 구조를 적용하여 Docker 로 구현하는 것에 더하여, SASL(Simple Authentication and Security Layer) 보안 설정을 적용하는 방법을 정리하겠습니다.2024-10-02 기준 정상 동작 테스트(커맨드 창 접근 및 Springboot 기능 테스트)가 완료되었습니다. - 폴더 구조는 아래와 같습니다. - kafka-compose.ymlservices: zookeeper: image: wurstmeister/zookeeper:latest # 종료시 재시작 restart: always container_name: zookeeper ports: - "2181:2181" envir..
[Kotlin] List 타입 종류
·
Programming/ETC
- 리스트 타입의 종류 List : 변경이 불가능한 리스트입니다. MutableList : MutableList 는 Kotlin 의 인터페이스로, 변경 가능한 리스트를 나타냅니다. 반대되는 개념으로는, 변경이 불가능한 그냥 List 타입이 있습니다. 이는 인터페이스이므로 특정한 구현체에 의존하지 않으며, 여러 구현체가 존재할 수 있습니다. 대표적인 구현체로는 ArrayList 와 LinkedList 등이 있습니다. 만약 mutableListOf() 함수로 객체를 초기화 한다면 ArrayList 가 생성될 것입니다. ArrayList : MutableList 의 일종입니다. 내부적으로 배열을 사용하여 요소를 저장하는 리스트 구현체로, ..
JVM 메모리 누수 방지를 위한 체크사항
·
Programming/ETC
- Java, Kotlin 언어를 사용하면 C/C++ 과 다르게 Garbage Collector 가 자동으로 메모리 힙 영역을 정리해주므로, 메모리 관리에 엄격하지 않아도 됩니다.하지만 백엔드 서버 개발을 맡게된다면 이에 접근하는 클라이언트와 서버가 N 대 1 관계가 형성되기 때문에 실제 서비스에서 메모리 관련 누수에 주의해야만 할 것입니다.아래는 Java 계열 언어를 사용시 메모리 누수 방지를 위해 체크해야할 사항들을 모아둔 것입니다. 1. Static 메모리 사용을 주의하세요. Static 영역에 작성한 변수와 데이터는 프로그램의 처음과 끝까지 사라지지 않습니다. 이 영역의 사용을 지양하도록 합시다. 2. 해제를 전제로 만들어진 라이브러리를 사용할 때에는 꼭 사용 후 해제하도록 합시다...