본문 바로가기

전체 글

컨테이너 가상화 기술과 Docker 서버 가상화 기술과 컨테이너 가상화1. 서버 가상화 기술 (Hypervisor 기반)개념기존 하드웨어 위에 OS를 올리고, 그 위에 Hypervisor 프로그램을 실행.Hypervisor를 통해 여러 개의 Virtual Machine(VM)을 생성하여 가상화를 구현.특징VM 단위 당 하나의 OS를 실행.각 VM은 독립된 가상 하드웨어를 사용.단점성능 저하 가상 시스템이 사용하는 리소스가 많아질수록 성능 저하가 심함.거대한 이미지 크기 OS 이미지는 GB 단위.느린 시작 시간 VM 시작 시간이 분 단위로 소요.환경 불일치 VM 간의 환경이 일치하지 않아 운영의 복잡성을 증가.2. 컨테이너 가상화개념OS 위에 컨테이너 런타임(Container Runtime)을 실행하고, 이를 통해 여러 컨테이너를 생.. 더보기
소프트웨어 아키텍쳐 소프트웨어 아키텍처정의소프트웨어 아키텍처는 기능적인 측면보다는 안정적인 운영을 위한 전체적인 코드를 설계하는 것을 의미합니다.IT의 역사초기: 하드웨어 중심현재: 소프트웨어 중심현재 아키텍처 트렌드탄력적 (Resilient) 깨지지 않는 (Anti-Fragile) 클라우드 네이티브 (Cloud Native) 확장 방식수직적 확장 (Scale-Up): 시스템의 성능을 높이기 위해 하드웨어 성능을 증가. 수평적 확장 (Scale-Out): 여러 대의 서버를 추가하여 확장.Anti-Fragile의 4가지 특징Auto-scaling시스템의 부하에 따라 자동으로 확장 및 축소.Microservices역할을 분리하여 하나의 서비스 장애가 다른 서비스에 영향을 주지 않음.Chaos Engineering예상치 .. 더보기
AWS 리전과 AZ AWS 리전과 가용 영역리전 (Region)AWS의 리전은 전 세계에 걸쳐 존재하며, 사용자는 서비스를 제공할 리전을 선택할 수 있습니다.리전을 변경할 경우한 리전에서 서비스를 사용하다 다른 리전으로 이동하면 새로운 인프라를 구축해야 합니다.리전 선택 시 중요 고려 사항법률 준수 (Compliance)예: 프랑스 데이터는 프랑스 리전에 저장해야 하는 경우.지연 시간 (Proximity)사용자와 가까운 리전을 선택하여 네트워크 지연을 최소화.서비스 가용성 (Available Services)특정 서비스가 해당 리전에서 지원되는지 확인.가격 (Pricing)리전에 따라 비용이 다를 수 있으므로 예산에 맞는 리전 선택.가용 영역 (Availability Zone)가용 영역은 리전 내에 존재하며, 보통 하나의 .. 더보기
JVM 내부 동작 원리 1. Java 프로그램 실행 과정Java 소스 코드 작성 및 실행개발자가 Java 소스 코드를 작성하고, Run 명령을 실행하면 Javac 컴파일러가 소스 코드를 바이트 코드(.class 파일)로 변환한다.JVM의 역할JVM(Java Virtual Machine)은 바이트 코드를 읽고 실행하는 가상 머신이다.이때, Class Loader를 통해 .class 파일을 JVM 내부로 로드하고, Runtime Data Area에 배치한 후, Execution Engine이 이를 실행한다.2. JVM의 주요 구성 요소2.1 Class Loader (클래스 로더)역할: .class 파일(바이트 코드)을 JVM의 Runtime Data Area로 로드하고, 클래스 간의 참조를 연결하는 작업을 수행한다.로딩(Loadi.. 더보기
@EventListener 사용 이유의존성이 강한 로직들의 레이어들을 분리하기 위해서예를 들어 배달 서비스의 배달하기 라는 비즈니스 로직을 실행할때 식당 서비스의 조리 완료하기 (뭔가 이상하긴 하지만)라는 비즈니스 로직을 가져다가 써야된다면 배달 서비스 안에 식당 서비스를 의존성 주입하여서 사용해주는데 이렇게 된다면 서로 의존성이 강해져버리는 안좋은 부작용이 생긴다.이를 해결하기 위한게 @EventListener 이다.그러면 대체 어떤 방식으로 해결을 한다는 것일까?배달 서비스의 배달하기 로직 -> 이벤트 발행 -> 식당 서비스의 조리 완료하기 로직 순으로 구성을 한다면 배달 서비스는식당 서비스의 비즈니스 로직 수정 여부에 따른 자체 코드의 수정이 필요가 없어진다.사용1.우선 이벤트를 발행하는 publisher 쪽에서는 Appli.. 더보기
Spring boot 퇴근길 밋업(작성중..) 1.자바의 record 클래스 -> lombok대신 사용 -> java 21에서 도입2.sealed interface Loan permits SecuredLoan, UnsecuredLoan -> java 17에서 도입seald를 이용하여서 해당 Loan인터페이스의 구현할 수 있는 하위 클래스를 2개의 클래스로 제한할 수 있다.3.instanceof 메소드 -> a instanceof b -> a가 b의 구현체인가?4.java의 var 키워드 -> 지역 변수의 타입 추론을 위한 키워드,변수 선언 시 타입 생략 가능(which can help you write code that's easier to read)var의 장점에는 가독성 향상,유지 보수성 증가,컴파일 시점에 검증,코드 간소화가 있지만 잘못된 타입.. 더보기
JAVA에서 Final을 사용하는 이유 스프링 부트에 익숙한 백엔드 개발자라면 익숙한 친구 바로 final이다.@RequiredArgsConstructor 를 이용하건 혹은 @Autowired를 통하여서 직접적으로 생성 시점에 주입을 해주던 PokemonFinder 라는 PokemonRepository를 사용하는 클래스에스는 PokemonRepository를 private final을 선언하여 이용한다. 대체 왜 이렇게 사용할까?흔하게 대답할 수 있는 final의 불변성 보장이라는 말 대신 스프링 부트에서의 관점에서 왜 사용하고 이것의 장점과 단점이 무엇인지에 대해서 생각해보자. 먼저 의존성 주입의 안정성 측면에서 생각을 해본다면 final을 사용하지 않는다면 mutable하기 떄문에의존성 주입이 항상 유지되고 신뢰할 수 있다고 말하기 어려워.. 더보기
쿠키 vs 세션 vs 캐시 1.쿠키쿠키에 대하여 알기 위해선 우선 우리가 흔하게 아는 HTTP 프로토콜의 특성에 대하여 알아야한다.HTTP프로토콜은 Stateless의 특성을 지니는데 이는 지속적으로 특정 유저와의 연결을 유지할 경우, 유저가 증가하면 증가할 수록 어마어마한 latency를 초래할 수 있기 떄문이다.따라서 HTTP프로토콜은 쉽게 생각하면 내가 A라는 사람을 만나서 무슨 이야기를 나눴는데 이걸 다음번에 A를 또 만났을떄 내가 무슨 이야기를 나눴는지를 기억하지 못한다는 거다.하지만 홈페이지에 로그인을 하는 경우 로그인 정보를 클라이언트의 컴퓨터에 저장해두는 것이 필요한 Stateful한 경우가 있다.이를 대비하기 위해서 쿠키와 세션을 사용한다. 쿠키란?쿠키는 클라이언트의 브라우저에 저장이 되며 서버와 통신할떄 HTTP.. 더보기