카테고리 없음

기술스택을 araboja.

티코딩 2024. 9. 4. 23:22

회사분들과 며칠 지내보며 들었던 기술스택들을 써본적도 없고 뭐하는애들인지도 몰라서 내자신이 너무 초라해졌다.

몇개만 알아보자.

 

ㅇ ElasticSearch

이건 AWS로 배포할때 aws를 들락날락하다가 본 적이 있다. 하지만 엘라스틱서치가 무슨 기술인지는 모르고있었다.

그래서 찾아봤다.

Elastic Search는 검색 엔진이라고 한다. 대용량의 데이터를 빠르게 검색하거나 분석할 수 있게 도와줘서 주로 로그 데이터, 문서 검색, 제품 검색 등에 사용된다고 한다. 검색 뿐 아니라, 데이터를 저장하고 그 데이터를 기반으로 빠르게 분석할 수도 있다고 한다. 그래서 검색엔진? 음? 했는데 알고보니 하나의 소프트웨어 시스템 내에서 사용되는 검색엔진이었다. 우리회사에서는 어떻게 쓰고있는지는 사실 잘 모르긴 한다. 다음에 기회가 된다면 여쭤봐야겠다.

내 추론이지만 로그 데이터에서 에러가 얼마나 발생하는지, 특정 시간대에 얼마나 많은 트래픽이  있었는지 그런 실시간 분석을 할것같다.

 

ㅇ Kafka

카프카.. 이것도 사실 들어는 본 적이 있다. 실시간 데이터 스트리밍 어쩌구 였던걸로 알고있었다. 이것도 찾아보았다.

내가 알던대로 주로 실시간 데이터 스트리밍, 메시지 브로커 역할을 한다고 한다. 출근하면서 kafka에 대해서 무료강의가 있길래 찾아봤다. 근데 대체 뭔소린지... 다른 시스템간에 대용량의 데이터를 주고받게 해준다는데, 왜 한프로젝트 내에 프로듀서, 컨슈머가 있는거지? 싶었다.

프로듀서(데이터 보내는측) 컨슈머(데이터 받는측) 사이에서 중개역할을 하는게 카프카라고 한다. 설명을 보니 엄청 효율적인 기술인건 확실한데... 어떻게 쓰는지 간단하게 예시를 보자.(spring boot 환경에서)

 

ㅁ build.gradle에 디펜던시 추가

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-kafka'
}

 

ㅁ application.yml 설정

spring:
  kafka:
    bootstrap-servers: localhost:9092 # Kafka 브로커 주소
    consumer:
      group-id: my-group  # 컨슈머 그룹 ID
      auto-offset-reset: earliest # 메시지 시작 위치
      key-deserializer: org.apache.kafka.common.serialization.StringDeserializer
      value-deserializer: org.apache.kafka.common.serialization.StringDeserializer
    producer:
      key-serializer: org.apache.kafka.common.serialization.StringSerializer
      value-serializer: org.apache.kafka.common.serialization.StringSerializer

뭔소린진 잘 모르지만 대충 보면 StringDeserializer과 StringSerializer가 필요해보인다!

 

ㅁ 프로듀서

@Service
public class KafkaProducerService {

    private final KafkaTemplate<String, String> kafkaTemplate;

    public KafkaProducerService(KafkaTemplate<String, String> kafkaTemplate) {
        this.kafkaTemplate = kafkaTemplate;
    }

    public void sendMessage(String topic, String message) {
        kafkaTemplate.send(topic, message);
        System.out.println("Sent message: " + message + " to topic: " + topic);
    }
}

 

ㅁ 컨슈머

@Service
public class KafkaConsumerService {

    @KafkaListener(topics = "my-topic", groupId = "my-group")
    public void listen(String message) {
        System.out.println("Received message: " + message);
    }
}

 

그리고 카프카 브로커를 설치하려면 dockercompose를 사용해야 한다고 한다.

그래서 docker-compose.yml에다가 kafka에관한 정보도 넣어준다.

 

ㅁ 컨트롤러

@RestController
@RequestMapping("/kafka")
public class KafkaController {

    private final KafkaProducerService producerService;

    public KafkaController(KafkaProducerService producerService) {
        this.producerService = producerService;
    }

    @GetMapping("/send")
    public String sendMessage(@RequestParam String message) {
        producerService.sendMessage("my-topic", message);
        return "Message sent to Kafka!";
    }
}

이렇게 세팅하면 /kafka/send uri로 메시지를 전송하면 kafka에 메시지가 전달되고 서비스에서 메시지를 수신한다고 한다.

참고로 이코드들은 가져온거. 난 아직 짤 능력이 안된다...

 

 

ㅇ Kubernetes

쿠버네티스? 이름 멋지다! 라고 생각했다. 쿠버네티스는 생각보다 정보가 엄청 많아서 이해하기 좀 수월했다.

쿠버네티스는 컨테이너 오케스트레이션 도구로, 애플리케이션이 여러 서버에서 안정적으로 동작하도록 관리하는 역할을 한다고 한다.

도커 컨테이너를 이용해 애플리케이션을 서버 여러대에 자동으로 배포하고 관리한다고 한다. 이걸 보니 그 때 회사분들이 설명해주신게 조금이나마 이해가 갔다. 개발자들이 서버 관리를 직접 하지 않아도 쿠버네티스가 알아서 확장성 관리를 해줘서 운영이 편하다고 한다.

 

아무것도 몰랐을 때 도커랑 쿠버네티스랑 뭔차이지? 컨테이너 뭐...같은거아닌가 했는데 일단 컨테이너가 뭔지부터 제대로 짚고 가자.

 

ㅇ 컨테이너

컨테이너는 애플리케이션에 필요한 모든 라이브러리, 의존성, 설정 등을 하나의 패키지로 묶어, 어느 환경에서나 일관된 방식으로 애플리케이션을 실행할 수 있게하는기술이다. 가상머신(VM)과 비슷하지만 훨씬 가볍고 빠르다. 운영체제 커널을 공유하기 때문에 자원을 더 효율적으로 사용한다.
컨테이너는 격리된 환경에서 애플리케이션을 실행해서 서로 다른 컨테이너들이 독립적으로 동작할 수 있게 한다.

https://youtu.be/LXJhA3VWXFA?si=irm9ZbRxct30Pxxz

2:28초 도커와 vm의차이

 

ㅇ 도커!

도커는 얕게나마 써봐서 알고는 있다. 애플리케이션과 환경을 컨테이너 이미지로 패키징해서 어느 환경이든 동일하게 컨테이너를 실행할 수 있게 해준다. 사실나는 굳이 쓸 필요는 없었는데 그래도 맛은 봐야지 싶어서 썼던거같다. 좀더 깊게써볼걸...

 

ㅇ Docker Compose?

여러개의 도커 컨테이너를 하나의 정의파일에서 관리할 수 있게 해주는 도구
여러 컨테이너를 하나의 docker-compose.yml 파일로 컨테이너를 정의하고 한꺼번에 실행, 중지, 관리 할 수 있다.

이것도 또 따로 공부해야 실무에 따라갈 수 있을거같다..

 

ㅇ 느낀점

하..너무부족하다.하나하나 다 공부해보자!!