쿠버네티스에서 Persistent Volume(PV)는 클러스터에서 관리하는 스토리지 리소스이고, Persistent Volume Claim(PVC)는 사용자가 해당 스토리지를 요청하는 방식이다.Persistent Volume(PV)관리자가 설정한 정적인 스토리지 리소
kubernetes에서 Pod는 동적으로 생성되고 사라지므로, 특정 Pod의 IP 주소는 고정되지 않는다. 따라서 안정적인 네트워크 통신을 위해 Service가 필요하다.ClusterIP (기본값)클러스터 내부에서만 접근 가능한 서비스kubectl expose depl
Spring Boot + JPA 환경에서 상품 단건 조회 API를 호출했을 때 다음과 같은 예외가 발생했다.문제가 된 코드Product 엔티티는 @Lob 타입의 description 필드를 포함하고 있음ProductPhoto 엔티티와 @OneToMany 관계를 맺고 있
| 명령어 | 설명 | |------------|----------| | aws eks --region update-kubeconfig --name | EKS 클러스터와 로컬 kubectl을 연결 | | kubectl get nodes | 클러스터의 노드 상태 확인
노드 그룹은 쿠버네티스 클러스터에서 노드들을 그룹화하여 관리하는 개념이다.주로 클라우드 환경(AWS, GCP, Azure)에서 노드 풀(Node Pool)형태로 제공된다.동일한 설정을 가진 여러 개의 노드를 그룹으로 묶어 자동 확장 및 배포 전략을 효율적으로 관리할 수
Kubernetes는 컨테이너화된 애플리케이션을 배포하고 관리하는 오케스트레이션 도구로 자동화된 배포, 확장 및 운영을 지원한다.Kubernetes 클러스터를 구성하는 개별 서버Master Node : 클러스터를 제어하고 관리하는 역할Worker Node : 실제 애플
동시성 문제를 해결하기 위해 데이터베이스에서 락(Lock)을 사용하는 방법은 크게 낙관적 락(Optimistic Lock)과 비관적 락(Pessimistic Lock) 두 가지로 나눠진다. 각각의 방식은 데이터 충돌을 처리하는 방식이 다르며, 사용하는 상황에 따라 성능
RTMP는 "Real-Time Messaging Protocol"의 약자로, 오디오, 비디오, 데이터 스트리밍을 위해 Adobe Systems가 개발한 프로토콜입니다. 주로 라이브 스트리밍과 VOD(Video on Demand) 서비스에서 사용된다.저지연(낮은 Late
Spring Boot 어플리케이션에서 JUnit과 Mockito를 사용해 테스트하던 중 UserAuthorizationUtil.getLoginUser()를 호출하는 코드에서 다음과 같은 예외가 발생했다.java.lang.IllegalArgumentException: 인
주석을 해제하면 setAllowedOrigins("") 설정이 적용되면서 특정 브라우저 환경에서 CORS 오류가 발생할 수 있다. 특히 SockJS는 기본적으로 다양한 전송 방식을 사용하므로, 일부 전송 방식에서는 setAllowedOrigins("") 설정이 올바르게
프로젝트에 채팅 기능을 올리면서 MongoDB를 사용하게됬다. Docker 이미지를 받고 컨테이너를 실행시킨 후 IntelliJ에서 플러그인으로 제공되는 'MongoDB Browser'를 이용했다.IntelliJ를 재실행 후 오른쪽 메뉴바를 보면 MongoDB Brow
Spring Security를 사용한 사용자 인증 과정에서 Redis를 활용하려는 중에 다음과 같은 에러 문구를 확인할 수 있었다.java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to
OAuth2 소셜 로그인 흐름 요약 사용자 인증 요청 사용자가 소셜 로그인을 요청하면, 클라이언트는 소셜 플랫폼으로 리다이렉션한다. 권한 승인 및 인증 정보 반환 사용자가 소셜 플랫폼에서 권한을 승인하면, 인증 코드 또는 토큰이 반환된다. 서버 인증 처리 반환된 정보를
Spring Boot 프로젝트에서 OAuth2 로그인 구현 중, 어플리케이션이 실행되지 않고 순환 참조 문제가 발생했다.Spring Boot 2.6 이상에서는 순환 참조가 기본적으로 금지되어 있어 어플리케이션이 시작되지 않았다.콘솔 화면을 확인해보면 친절하게도 어떻게
UserController에 Logout 메서드를 만들고 Postman에서 API를 호출했다.먼저 로그인 API를 호출해서 토큰을 받고, 로그아웃 API의 Authorization을 Bearer Token으로 설정해준 후 API를 호출하게 되면 다음과 같은 결과가 나온
JWT는 서버와 클라이언트 간에 정보를 안전하게 전달하기 위한 토큰 기반 인증 방식입니다. 토큰은 보통 Base64로 인코딩된 JSON 형식의 데이터를 포함하며, 세 부분(헤더, 페이로드, 서명)으로 구성된다.특징:서버리스 인증 : JWT는 서버에서 상태 정보를 유지하
스프링부트 테스트는 주로 다음과 같이 나뉜다.단위 테스트(Unit Test) : 개별 클래스나 메서드의 동작을 검증 (Mock 객체를 자주 사용)통합 테스트(Integration Test) : 애플리케이션의 여러 계층 (Service, Repository 등)이 상호작
스프링부트 프로젝트를 도커와 깃허브 액션을 통해 CI/CD를 구성했던 과정을 간단히 기록해보려고 한다.먼저 사전에 준비물이 필요하다.EC2 인스턴스RDSDocker 설치, 계정 및 DockerHub에 레포지토리 만들기위에 언급된 내용들이 준비된 상태에서 진행하면 된다.
API를 테스트 하기 위해 Postman을 이용 중 이었는데 팀원들과 개발을 진행하면서 서로 만든 API를 좀 더 쉽게 통합하고 테스트 시간을 단축하고 싶어서 Swagger를 한번 적용해보는 과정을 정리해봤다.Swagger를 사용하기 위해 먼저 build.gradle에
사용자가 아이디와 비밀번호를 전송한다.스프링 시큐리티의 기본 필터로, 사용자가 입력한 인증 정보를 Authentication 객체로 변환한다.인증 정보를 처리하고 실제 인증이 유효한지 검증하는 역할을 한다. 기본적으로 여러 인증 공급자(AuthenticationProv