본문 바로가기
반응형

Server61

[minikube] 쿠버네티스 서비스(Service) 구조와 실행 Kubernetes에서 Service란? – Pod를 외부로 노출하는 방법앞선 강의에서는 Kubernetes 클러스터 안에 첫 번째 Pod를 만들어보고, 그 안에 웹 애플리케이션 컨테이너를 배포했습니다. 하지만 그 상태에서는 웹 브라우저로 아무리 접근해도 연결되지 않았습니다. 왜 그럴까요?그 이유는 Pod는 기본적으로 외부에서 접근할 수 없도록 설계되어 있기 때문입니다. 이 제한을 해결하기 위해 Kubernetes는 Service라는 리소스를 제공합니다.왜 Service가 필요한가?Kubernetes에서 Pod는 수명이 짧고 가볍게 쓰고 버리는 존재입니다. 특정 Pod가 중단되면, Kubernetes는 새롭게 동일한 Pod를 생성합니다. 이 과정에서 IP 주소도 바뀌게 됩니다. 이렇게 계속 바뀌는 Pod.. 2025. 4. 8.
[minikube] 쿠버네티스 포드(pod) 구조와 실행 쿠버네티스 포드(Pod)란 무엇인가쿠버네티스(Kubernetes)를 본격적으로 사용하기 전, 가장 기본적인 개념인 포드(Pod)부터 이해해봅니다.포드는 쿠버네티스에서 가장 작고 기본적인 배포 유닛으로, 하나 또는 그 이상의 컨테이너를 감싸는 추상화된 단위입니다. 포드는 왜 중요한가?마이크로서비스 아키텍처에서는 여러 개의 컨테이너를 배포해야 합니다.도커(Docker)만 사용한다면 각각의 컨테이너를 수동으로 관리해야 하는데, 이는 매우 번거로운 작업입니다.쿠버네티스는 이러한 컨테이너를 효율적으로 배포하고 관리할 수 있도록 '포드'라는 개념을 도입했습니다.포드의 구성공식 문서에 따르면, 포드는 다음과 같은 구성 요소를 가집니다:하나 이상의 컨테이너 (주로 도커 기반)공유 스토리지 및 네트워크실행 방법이 정의된.. 2025. 4. 8.
[minikube] Kubernetes 실습을 위한 Minikube 설치 가이드 (Mac / Windows / Linux) 이글은 Minikube를 다양한 운영체제(Mac / Windows / Linux)에서 가장 간편하게 설치하는 방법을 설명합니다.필자는 Mac OS기반에서 설치했습니다. 1. 쿠버네티스 개요컨테이너란?컨테이너는 애플리케이션(프로그램)과 그 프로그램을 실행하는 데 필요한 모든 라이브러리, 설정 파일, 의존성 등을 하나로 묶은 실행 단위입니다.쉽게 말해, "앱이 어디서든 잘 실행되게 하기 위한 일회용 독립 상자"입니다.컨테이너 = 앱 + 실행환경 + 설정격리된 공간에서 돌아가기 때문에, 다른 앱과 충돌 없이 실행됨실행 속도가 빠르고, 가볍고, 효율적임클라우드에 배포하기 좋고, 실수로 깨지는 일이 적음가장 대표적인 컨테이너 실행 환경은 Docker입니다.쿠버네티스(Kubernetes)란?Kubernetes(줄여.. 2025. 4. 8.
[Linux] Swap memory를 이용해서 메모리 부족 해결 (aws ec2) Swap 메모리는 RAM이 부족할 때 HDD의 일부를 RAM처럼 사용하는 방식으로, 시스템 안정성을 높이는 데 유용하다. AWS 권장 기준에 따르면, RAM이 2GB 이하일 경우 Swap 공간은 RAM 용량의 2배를 설정하는 것이 좋다. 예를 들어, RAM이 1GB인 t2.micro 환경에서는 Swap 메모리를 통해 2GB를 추가하여 총 3GB 메모리로 확장 가능하다.Swap 메모리 생성 및 활성화1. Swap 파일 생성 sudo dd if=/dev/zero of=/swapfile bs=128M count=16of: 파일 경로bs: Block 사이즈count: Block 개수→ 위 설정은 128MB * 16 = 2GB Swap 메모리를 생성. 2. 권한 설정 및 활성화sudo chmod 600 /swap.. 2025. 1. 25.
[Spring Boot jpa] 다중 LEFT JOIN 시 MultipleBagFetchException 발생 문제 문제테스트 중, 다음과 같은 쿼리에서 MultipleBagFetchException이 발생함:@Query("SELECT h FROM House h " + "LEFT JOIN FETCH h.rooms r " + "LEFT JOIN FETCH r.roommates " + "LEFT JOIN FETCH h.pins " + "WHERE h.id = :houseId")Optional findHouseDetailsById(@Param("houseId") Long houseId);MultipleBagFetchException은 Hibernate에서 여러 개의 @OneToMany 관계를 fetch join할 경우 발생하는 문제로, 한 번의 쿼리로 여러 개의 컬렉션(List)을.. 2025. 1. 25.
[Spring Boot] Record 객체를 이용하여 DTO 작성 Java record란?Java record는 Java 14에서 도입된 기능이다. 주로 데이터 전달 객체(DTO)와 같은 불변 객체를 정의할 때 사용된다. record는 클래스를 정의할 때 필드, 생성자, 접근자, toString(), equals() 및 hashCode() 메서드를 자동으로 생성하여 코드가 간결해진다. 주요 특징은 다음과 같다: 1. 불변성 (Immutability):record는 기본적으로 불변 객체이다. 생성 후 상태를 변경할 수 없다. 2. 자동 생성되는 메서드들:record는 필드를 기반으로 toString(), equals(), hashCode(), getter 메서드를 자동으로 생성한다. 3. 간결한 문법:record는 클래스를 정의하는 것보다 간단한 문법을 제공한다.기존 c.. 2025. 1. 25.
[Spring boot jpa] 연관된 엔티티 불러올때 LazyInitializationException 발생하는 문제 해결 지연 로딩하려 할 때 세션/entityManager이 닫혀 LazyInitializationException이 발생하는 문제 @OneToMany 관계에서 fetch의 기본값은 LAZY이다.@OneToMany(mappedBy = "house", cascade = CascadeType.ALL)private List rooms = new ArrayList();원인지연 로딩(Lazy Loading) 관련 오류FetchType.LAZY는 엔티티 관계에서 연관된 다른 엔티티를 지연 로딩 방식으로 로딩하겠다는 의미이다.그러나 지연 로딩을 사용하는 엔티티가 프록시 객체로 반환되기 때문에, 실제로 해당 엔티티가 사용될 때까지 로딩되지 않는다.이 때문에, 관계된 엔티티가 사용될 때 LazyInitializationExce.. 2025. 1. 25.