전체 글

전체 글

    LXC (Linux Container, 리눅스 컨테이너) 란?

    LXC (Linux Containers) 란? LXC 는 리눅스 컨테이너 (Linux Containers) 란 뜻이다. 리눅스 커널에 내장된 경량 가상화 기술이다. 단일 호스트에서 여러 개의 격리된 Linux 시스템 (컨테이너) 을 실행할 수 있다. c그룹 및 네임스페이스 격리를 사용하여 독립적인 컨테이너가 단일 Linux 인스턴스 내에서 실행되도록 함으로써 가상머신(VM) 을 시작하고 유지 관리하는데 드는 오버헤드를 방지한다. 특징 리소스 효율성 및 속도: VM과 비교했을 때 호스트 시스템의 커널을 공유하므로 오버헤드가 적고 빨리 부팅할 수 있다. 격리: 컨테이너 내부의 프로세스는 다른 컨테이너나 호스트 시스템에서 실행중인 프로세스를 보거나 상호작용할 수 없다. 보안: AppArmor, SElinux ..

    하이퍼바이저 (Hypervisor) 란 무엇인가?

    가상화 기술 용어 Host OS: 가상화 기술을 이용하고 있는 호스트의 운영체제 Guest OS: 가상화 기술에서 실행되고 있는 운영체제 하이퍼바이저 하이퍼바이저의 동작 원리 OS 엔 하드웨어를 사용하기 위해 커널이라는 중요한 도구가 설치되어 있음 커널은 System call 이란 것을 이용하여 OS 에 리소스 사용 요청을 전달함 System call 을 통해 하드웨어 자원을 이용할 수 있음 하이퍼바이저에서 Host OS 와 Guest OS 종류가 다르면 상호 호환이 되지 않음 여기서 하이퍼바이저가 다른 커널 간의 언어를 통역하는 역할을 하게 됨 가상머신은 하드웨어 리소스 사용을 위해 Host OS 로 시스템 콜을 보냄 이 시스템 콜은 하이퍼바이저에 의해 해석되어 Host OS 에 맞는 시스템 콜로 변함..

    .bashrc 파일이란?

    .bashrc 란? Bash 가 시작될 때마다 실행되는 스크립트다. Bash 는 대화형 셸 세션이다. bash, 그리고 Shell 이란 무엇인가 [[002.bash-란-무엇인가]] Bash 에 무언가 개인화된 기능을 넣을 때 필요하다. .bashrc 의 일반적인 용도 환경변수 설정 (environment variables) 명령의 별칭 만들기 (alias) 기본 편집기 설정 Bash 프롬프트 사용자 지정 PATH 변수에 디렉터리 추가 .bashrc 는 Bash 셸에서만 동작한다. Zsh 나 Fish 와 같은 다른 셸엔 자체 구성파일이 있다. .bashrc 파일의 작성 예제 alias: 편의를 위한 별칭 설정 PATH: 사용자의 /bin 디렉터리가 있는 경우 이를 포함하도록 PATH 업데이트 등등등... ..

    Bash, 그리고 Shell 이란 무엇일까?

    개요 Shell 의 일종이다. Shell 이란 운영체제에서 커널과 이용자 사이에 끼어 이용자의 명령어를 해석하고 처리 결과를 나타내주는 시스템 프로그램을 말한다. 운영체제만 딸랑 있으면 운영체제 내부에 있는 파일 접근, 명령 수행 등이 매우 어려운데 그 사이 브로커 역할을 해주는 것이 Shell 이다. Bash 는 Bourne Again SHell 을 줄여서 표현한 것이다. Bash 외에도 csh, ksh, zsh 등 많은 셸들이 존재한다. Bash 의 기능들 CLI (Command-line Interface) 파일 관리, 프로그램 실행, 디렉터리 탐색 등의 작업 수행이 가능한 텍스트 인터페이스를 제공한다. 스크립팅 언어 (Scripting Language) 셸 스크립트를 작성할 수 있게 해준다. 파일 ..

    Nest.js 의 Class Validator 란?

    Class Validator 란? nestjs 파이프 아래에 속하는 개념이다. Class Validator 공식문서 더 상세한 Typescript Validator 공식 문서 데코레이터를 통해 주로 DTO 내부에 있는 프로퍼티들의 값을 검증하는데 사용한다. 예시 글로벌로 적용하기 위해 필요한 설정 main.ts 에 다음 코드를 반드시 설정해주어야 한다. import { NestFactory } from "@nestjs/core"; import { AppModule } from "./app.module"; import { ValidationPipe } from "@nestjs/common"; async function bootstrap() { const app = await NestFactory.creat..

    Nest.js 의 가드(Guard) 란?

    Guard (가드) 란? 개념 Nest.js 에서 요청이 실제로 처리되기 전에 보통 권한이 있는지 확인하는 방패막이(Guard) 역할을 해주는 컴포넌트다. 가드가 없었다면 그냥 컨트롤러로 전해질수도 있는 요청에 이 가드가 중간 브로커 역할을 해서 인증 정보를 확인하거나 사용자 정보를 넣어주는 역할을 하는 것이다. Nest.js 의 라이프사이클로 보는 가드(Guard)의 위치 세부 설명 CanActive 인터페이스를 구현하고, @Injectable 데코레이터가 붙은 클래스이다. 런타임에 존재하는 조건에 따라 요청이 라우트 핸들러에 의해 처리될지 여부를 결정한다. 조건이란, 권한, 역할(ROLE), ACLs(Access Control Lists) 등을 말한다. 흔히 Authorization 이라 불리는 것들..

    Spring Boot3 (스프링 부트3) 에서 Log4j2 세팅 방법

    Spring Boot3 에서 Log4j2 세팅 방법 버전은 스프링 부트 3 현재 최신 버전 (2024-02-02) 을 기준으로 한다. 패키지 관리 도구는 Gradle 이용을 기준으로 한다. 스프링부트 기본 제공 Logback 을 의존성에서 제거 Spring Boot 의 기본 로깅 도구 Logback 을 의존성에서 제거한다. dependencies 아래에 configurations 영역을 추가해주고 아래 내용을 붙여넣는다. dependencies { // ... } // 추가 configurations { all*.exclude module: 'spring-boot-starter-logging' } 의존성 제거 전 의존성 제거 후 spring-boot-starter-logging 이 사라진 ..

    Nest.js 의 파이프(Pipes) 란?

    파이프 (Pipe) 란? @Injectable 데코레이터가 붙은 PipeTransform 인터페이스를 구현하는 클래스로 요청 데이터 변환 및 유효성 검사에 사용한다 핸들러가 호출되기 직전 라우트 핸들러가 처리중인 Argument 를 대상으로 작동한다. 주요 기능 변환 (Transformation): 입력 데이터를 원하는 형태로 변환 가능 ex) 문자열 -> 정수 유효성 검사 (Validation): 입력 데이터가 올바르지 않은 경우 예외 발생 가능 파이프가 실행되는 영역 파이프는 예외 영역 (Exceptions zone) 에서 실행되어 파이프가 던지는 예외는 예외 계층에서 처리된다. 파이프에서 예외가 발생하면 컨트롤러 메서드가 이어서 실행되지 않는다. 다이어그램 살펴보기 클라이언트: Nest.js 서버의..

    웹에서 자주 보게 되는 RFC 문서란 무엇일까?

    RFC 문서란? 개발에서 말하는 RFC 문서는 IETF(Internet Engineering Task Force) 와 ISOC(Internet Society)에서 발행하는 기술적이고 조직적인 메모다. 프로토콜, 절차, 프로그램 및 개념들을 포함하는 인터넷 관련 내용을 다룬다. 많은 인터넷 표준은 RFC 로 문서화가 되어있고, 인터넷 표준을 연구하는 사람은 누구나 RFC 문서를 작성할 수 있다. RFC 는 Request for Comment (의견 요청) 의 약자로 인터넷 관련 문제에 대한 피드백과 토론을 요청하는 문서의 초기 의도를 반영한다. RFC 문서의 주요 내용 표준화 프로세스 모든 RFC 가 표준이 되진 않지만, 상당 수는 인터넷 프로토콜 및 기술에 대한 공식 표준이 된다. 표준화 과정에는 개발,..

    Authentication 앞에 Basic 혹은 Bearer 를 붙이는 이유 (인증 방식)

    원본 글 토스 페이먼츠 Basic Bearer 설명 포스팅 HTTP 통신 방법 Authentication 앞에 Basic 과 Bearer 를 붙이는 이유는 정해진 하나의 통신 프레임워크이기 때문이다. 참고 모질라 HTTP 인증 프레임워크 문서 웹 표준 RFC 7235 Basic 인증 사용자ID:비밀번호 문자열을 Basic 이라는 문자와 함께 인증 헤더에 입력한다. 자세한 내용은 웹 표준 RFC 7617 에 나와있다. Base64 는 디코딩이 가능하기 때문에 반드시 HTTPS, SSL/TLS 로 통신해야 안전하다. Authorization: Basic base64({USERNAME}:{PASSWORD})장점 간단하다 단점 사용자 목록에서 권한을 확인하는데 시간이 많이 걸릴 수 있다. 사용자가 많으면 부각되..

    @Transactional 애노테이션 정리

    @Transactional 애노테이션이란? Spring 에게 트랜잭션 경계를 관리하도록 메타 정보를 주는 것이다. @Transactional 이 붙은 메서드가 호출됐을 때, 스프링은 새 트랜잭션을 시작한다. 메서드가 성공적으로 완료되면 트랜잭션이 커밋된다. 예외가 발생하면 트랜잭션이 롤백된다. @Transactional 애노테이션으로 설정할 수 있는 것들 import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @Service // 여기에도 쓸 수 있고, 여기에 쓰면 클래스 내부의 모든 메서드에 적용된다. public class YourService { priva..

    Nest.js Request Lifecycle 과 기본 아키텍처

    Nest.js 기본 아키텍처 살펴보기 아래는 참고용 Request Lifecycle 아키텍처 그림이다. Controller, Service, Repository 가 요청 로직을 실제로 처리하는 부분이다. 나머지는 없어도 동작을 하지만 요청 로직을 실제로 처리하는 부분은 반드시 있어야 한다. 미들웨어 request 와 resoponse 그리고 next() 함수에 접근할 수 있는 함수를 구성할 때 사용된다. 로깅이나 요청 검증 등에 사용 가능하다. 가드 인증 및 권한 부여에 사용된다. CanActivate 인터페이스를 구현한다. 인터셉터 메서드 실행 전 후에 추가 로직을 바인딩한다. 메서드 결과를 변형한다. 응답을 확장한다. 파이프 라우트 핸들러가 처리할 인수에 대해 작동한다. 데이터 유효성 검사 혹은 변환..