본문 바로가기

전체 글207

[Kubernetes] 쿠버네티스 오브젝트 (Service, Volume, ConfigMap) 쿠버네티스 오브젝트 (Service, Volume, ConfigMap) 지난 포스팅에 이어 쿠버네티스의 오브젝트에 대하여 알아보겠습니다. Service Pod은 IP를 가지고, 다른 Pod과 통신할 수 있습니다. 하지만 Pod은 쉽게 삭제되고, 생성될 수 있기 때문에 쿠버네티스는 고정된 IP를 가진 서비스를 만들고 서비스를 통해 Pod에 접근합니다. Service(ClusterIP) 만들기 ClusterIP는 클러스터 내부에 새 IP를 할당하고, 여러 Pod을 바라보는 로드밸런서 기능을 제공합니다. 그리고 서비스 이름을 내부 도메인 서버에 등록하고 Pod간 서비스 이름으로 통신할 수 있습니다. apiVersion: apps/v1 kind: Deployment metadata: name: redis spe.. 2022. 8. 30.
[Kubernetes] 쿠버네티스 오브젝트(Pod, ReplicaSet, Deployment) 쿠버네티스 오브젝트 Pod, ReplicaSet, Deployment 이전에 쿠버네티스를 구성하고있는 master을 정리해보았습니다. 이번에는 쿠버네티스를 이용하며 사용하는 오브젝트를 정리해보려 합니다. Pod Pod은 쿠버네티스에서 관리하는 가장 작은 배포단위 입니다. 도커에서는 컨테이너를 관리하지만, 쿠버네티스의 Pod은 하나의 컨테이너 또는 여러 개의 컨테이너를 관리합니다. Pod 생성 예시 # pod run kubectl run echo --image ghcr.io/subicura/echo:v1 # 실행된 pod 확인 kubectl get pod 위와 같이 run 또는 apply 명령어로 pod을 생성할 수 있고, kubectl get pod 명령어로 현재 쿠버네티스에서 관리하는 pod 리스트를 .. 2022. 8. 29.
[Kubernetes] 쿠버네티스 간단 개념 정리 쿠버네티스 간단 개념 정리 많은 기업에서 쿠버네티스를 이용해 서비스를 운영하고 있습니다. 따라서 도커만 사용하는 것이 아닌 쿠버네티스를 사용하기 위해 학습한 내용을 정리하고자 합니다. 먼저 도커 도커, 컨테이너는 다음과 같은 이유로 사랑받고 있습니다. 가상머신에 비해 컨테이너 생성이 쉽고, 효율적이다. 컨테이너 이미지를 이용한 배포와 롤백이 간단하다. 언어나 프레임워크에 상관 없이 애플리케이션을 동일한 방식으로 관리한다. 등… 위처럼 다양한 이유로 도커를 많은 사람들이 사용했는데, 이 과정에서 동일한 앱을 여러 서버에 띄워 사용하는 경우, 관리하는 과정에서 불편함이 생겼습니다. 떄문에 문제를 해결하기 위해 컨테이너를 관리하기 위한 도우 Container Orchestration이 탄생했습니다. Conta.. 2022. 8. 29.
[Spring] ExceptionHandlerLoggedImpl 에러가 나타난다면 ExceptionHandlerLoggedImpl 에러가 나타난다면? 저는 start.spring.io를 이용해 스프링 프로젝트를 생성하고 있습니다. 현재 최신 springboot version은 2.7.3이며, 프로젝트 생성 후 H2DB에 ddl-auto=create 옵션 사용중 이러한 에러를 확인했습니다. GenerationTarget encountered exception accepting command : Error executing DDL 위 에러는 Hibernate 버전과 H2DB 스키마 사이의 에러로 확인되는데 springboot 2.7.3에서 사용하는 Hibernate는 5.6.10 버전입니다. 과거에도 자주 나타났던 에러이고, 최근 진행했던 다른 프로젝트에서 Springboot 2.6.8 .. 2022. 8. 24.
[Spring] AOP Joinpoint의 getThis()와 getTarget() AOP Joinpoint의 getThis()와 getTarget() 김영한님의 Spring 고급편을 수강하면서 수강하시는 분의 질문을 보고 작성하는 포스팅입니다. 커뮤니티의 질문을 보면 aspectj의 joinPoint를 통해 조회한 getThis()와 getTarget()의 결과가 같다는 질문이 있습니다. eclipse aspectJ doc을 확인해보면, getThis()의 경우 현재 실행중인 개체(proxy 객체)를 반환하고, getTarget()의 경우 대상 개체(class 객체)를 반환한다고 나와있습니다. @Around("com.heekng.aop.order.aop.Pointcuts.orderAndService()") public Object doTransaction(ProceedingJoinPo.. 2022. 8. 20.
[Kafka] docker를 이용해 kafka 환경 구축하기 docker를 이용해 kafka 환경 구축하기 kafka 실습 환경을 구축하면서 docker을 이용하기로 결정했습니다. 이유라 함은 처음 사용해보는 kafka이기에 설치 중 어떠한 오류가 발생할 지 모르기 때문이며, 역시나 여러 오류를 접하면서 docker을 이용하길 잘했다는 생각을 했습니다. zookeeper, kafka image pull 제 클라우드는 arm ubuntu 22.04버전을 사용하고 있습니다. 때문에 zookeeper docker image는 흔히 사용중인 wurstmeister/zookeeper를 이용하지 않았고, 각자 환경에 맞추어 이미지를 받으시면 될 것 같습니다. docker pull arm64v8/zookeeper docker pull wurstmeister/kafka dock.. 2022. 8. 16.
[Kafka] kafka의 console 명령어 Kafka의 console 명령어 kafka를 이용하면서 콘솔에 접근하여 명령어를 내려야 하는 경우 지금까지 자주 사용하던 명령어를 정리하고자 합니다. topic 생성하기 ./kafka-topics.sh --create --bootstrap-server [ip:port] --replication-factor [replication] --partitions [partitions] --topic [topicName] topic을 생성합니다. --bootstrap-server: 카프카 서버의 주소를 입력합니다. --replication-factor: replication의 수를 입력합니다. --partitions: 해당 토픽의 partition 수를 입력합니다. --topic: 해당 토픽의 이름을 지정합니다... 2022. 8. 16.
[Kafka] kafka에 대해 알아보자 - 2 kafka에 대해 알아보자 Partitioner(파티셔너)란? producer가 데이터를 보내면 partitioner를 통해서 브로커로 데이터가 전송됩니다. 파티셔너는 데이터를 토픽의 어떤 파티션에 넣을 지 결정하는 역할을 합니다. 레코드에 포함된 메시지 키 또는 메시지 값에 따라서 파티션의 위치를 결정하는 역할을 합니다. 파티셔너는 메시지 키가 있을 때와 없을 때 다르게 동작하게 됩니다. 만약, 파티셔너를 따로 설정하지 않았다면 UniformStickyPartitioner로 설정됩니다. 메시지 키가 있을 때 메시지 키를 가진 레코드는 파티셔너에 의해서 특정한 해쉬값이 생성됩니다. 이 해쉬값을 기준으로 어떤 파티션에 저장될 지 결정됩니다. 토픽에 파티션이 두개가 있는 경우 동일한 키를 가진 레코드는 동일.. 2022. 8. 15.