분류 전체보기

    [쿠버네티스/도커] 2 - 쿠버네티스란, 쿠버네티스 기본 사용법

    3장 환경 세팅 이제 쿠버네티스로 컨테이너 인프라 환경을 자동으로 구축해보자. 위에서 언급했듯이 컨테이너 인프라 환경이란 운영 체제의 커널 하나에서 여러 개의 컨테이너가 격리된 상태로 실행되는 인프라 환경이다. 컨테이너는 가상머신과 많이 비교된다. 가상머신 VS 컨테이너? AWS에서는 가상머신과 컨테이너를 애플리케이션을 IT 인프라 리소스로부터 독립적으로 만드는 배포 기술이라고 정의한다. 두 기술은 공통적으로 소프트웨어 인프라를 이미지 파일이라는 단일 파일로 패키징할 수 있도록 해서 편리하게 애플리케이션을 어디서나 실행할 수 있도록 해준다. 두 기술은 각각 아래와 같이 설명할 수 있다. 가상머신은 물리적 머신의 디지털 사본이다. 기존의 컴퓨터, 즉 호스트OS 위에 원하는 운영체제를 가상화한 게스트OS를 ..

    [쿠버네티스/도커] 1 - 컨테이너 인프라 환경이란, 테스트 환경 구성

    회사에서 쿠버네티스를 사용한다는 것은 알고 있었지만 직접적으로 개발하진 않기 때문에 단순 반복해서 사용만 해왔다. 하지만 전체적인 구조와 사용하는 툴에 대한 기본적인 정보를 파악하고 싶어 컨테이너 인프라 환경 구축을 위한 쿠버네티스/도커 도서를 읽고 서칭한 내용을 간단하게 정리해본다. 1장 - 컨테이너 인프라 환경이란 이 책의 큰 주제 중 하나인 컨테이너 인프라 환경의 정의는 다음과 같다. 컨테이너 인프라 환경: 컨테이너를 중심으로 구성된 인프라 환경 컨테이너: 하나의 운영 체제 커널에서 다른 프로세스에 영향을 받지 않고 독립적으로 실행되는 프로세스 상태 과거에 모놀리식 아키텍쳐를 사용하다가 서비스가 커지고 다양해짐에 따라 마이크로소프트 서비스 아키텍쳐(MSA)가 많이 채용이 되고 있고, MSA를 구현하..

    무중단 배포 전략 - 롤링, 블루-그린, 카나리 배포

    서비스가 과거 모놀리식 구조에서 MSA(Micro Service Architecture) 구조로 쪼개지고 배포 주기도 짧아지면서 배포 방식 또한 변화가 생겼다. 기존 서버를 종료하고 새로운 버전의 서버를 실행하는 중단 배포 방식(유저가 서비스를 이용할 수 없는 시간인 downtime이 존재한다.)보다는 서비스가 중단되지 않는(zero-downtime) 무중단 배포 방식을 많이 채용한다. 무중단 배포(Zero-downtime deployment)에는 서비스가 중단되지 않은 상태로 새로운 버전을 사용자들에게 배포하는 것을 의미한다. 무중단 배포를 하기 위해서는 최소 서버가 2대 이상 필요하다. 가장 많이 알려져 있는, 무중단 배포의 3가지 전략, 롤링 배포, 블루-그린 배포 그리고 카나리 배포에 대해 알아보..

    SQL 성능 확인, Plan(실행계획) 보는 법

    mybatis로 개발을 하면서 query의 성능을 최적화 시키는게 필요한 시점들이 있다. 이때 튜닝을 하게 된느데 튜닝의 기초라고 할 수 있는 플랜 보는 법을 알아보자. 1. plan (실행계획) 이란? DBMS는 SQL을 수행할 최적의 처리 경로를 생성해 주는 핵심 엔진인 옵티마이저(Optimizer)를 가지고 있다. 이 옵티마이저는 우리가 SQL을 작성하고 실행하면 이 쿼리를 어떤 순서로 실행하겠다고 실행계획을 세우게 된다. 이 실행계획이 어떤 순서로 짜여져 있냐에 따라 성능의 차이가 크기 때문에 plan을 보는 방법을 알아두면 쿼리 성능 개선에 큰 도움이 된다. 2. plan 보는 법 툴을 확인하거나 "Explain plan for"를 쿼리 앞단에 붙여서 실행계획을 떠보면 위와 비슷한 형식으로 나온..

    Maven Lifecycle (+ Gradle, Ant)

    Intellij에서 우측의 maven을 클릭하면 clean, validate.. 등 다양한 버튼이 있다.각각이 어떤 행위를 하는 버튼인지 알려면 maven의 lifecycle을 이해해야한다. MavenMaven이란 빌드도구다. 소스코드를 컴파일, 테스트, 정적 분석 등을 실시해서 실행 가능한 애플리케이션으로 생성을 도와주고 계속해서 늘어나는 라이브러리를 자동 추가 및 관리해주는 도구다. 만약 우리가 빌드도구를 사용하지 않고 빌드를 한다면 개발하면서 필요한 다양한 라이브러리들을 직접 다운로드하고 관리하기 어려울 것이고 빌드 프로세스를 수동으로 호출할 때 어떤 순서로 하고 무엇을 빌드할지 파악하기 어려울 것이다. 이를 도와주는 빌드도구 중 하나가 maven이다. Maven으로 프로젝트를 생성하면 아래와 같이..

    [모던자바인액션] Part4 Optional, 날짜시간, 디폴트메서드, 모듈

    CH11. null 대신 Optional 클래스 Optional 클래스 소개 우선 이번 챕터에서 사용할 예제는 다음과 같다. public class Person { private Car car; public Car getCar() { return car; } } public class Car { private Insurance insurance; public Insurance getInsurance() { return insurance; } } public class Insurance { private String name; public String getName() { return name; } } 우리는 NullPointerException을 피하기 위해 아래처럼 null 확인 코드를 사용해왔다. /..

    @Transactional 사용시 주의점(+ @Async, 같은 Class 내에서 사용하는 경우)

    @Transactional을 사용하면서 마주쳤던 특이사항에 대해 정리한다.1. @Async와 함께 사용하는 경우(ThreadLocal)2. 같은 Class 내에서 사용하는 경우(AOP)로 나뉜다. @Async와 함께 사용하는 경우@Transactional이 붙은 메서드에서 다른 메서드를 호출하는데 그 메서드를 비동기로 호출해야 하는 일이 생겼다. 호출하는 메서드에 @Async를 붙여서 비동기로 호출해주려는데 Exception이 나면 Rollback 되어야 하는 @Transactional annotation이 잘 동작하지 않는다. 왤까?  간단한 코드로 확인해보자.// 예시를 위해 만든 간략한 코드라 실제로 돌아가지는 않음class TestService { private final TestReposi..

    @Transactional 개념, 사용법

    이번 포스팅에선 트랜잭션의 개념과 스프링에서 @Transactional 어노테이션을 통해 트랜잭션 관리를 하는 방법을 알아본다.트랜잭션?트랜잭션은 데이터베이스의 상태를 변화시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위이다. 예를 들어, A가 B에게 돈을 송금한다고 해보자. A의 계좌에서 돈을 차감하고, B의 계좌에 돈을 추가하는 과정은 하나의 작업의 단위이다. 둘 중 하나가 실패했을 경우 전체가 원상태로 돌아가야(rollback)하고 두 작업이 모두 완료되어야 성공(commit)되어야 한다. 이 작업의 단위를 트랜잭션이라고 한다. 우리는 보통 트랜잭션의 특징을 말할 때 줄여서 ACID라고 말한다.원자성(Atomicity)트랜잭션이 DB에 모두 반영되거나, 혹은 전혀 반영되지 않아야 된다.일관성(..