최근 글

194개의 기록
Terraform

Terraform (6) - 기존 리소스 import와 drift 확인하기

1. 개요 지금까지는 Terraform 코드로 새 리소스를 만들었다. 실제 환경에는 콘솔이나 다른 도구로 이미 만든 리소스도 있다. 이를 Terraform에서 관리하려면 코드의 리소스 주소와 기존 객체를 연결 해야 한다. 그 과정이 import 다. 또 Terrafor…

·5분
Terraform

Terraform (5) - module로 인프라 구성 재사용하기

1. 개요 2편에서는 for each 로 같은 종류의 파일을 여러 개 만들었다. 그런데 파일 생성과 출력값을 하나의 묶음으로 다른 프로젝트에서도 쓰려면 관련 코드를 함께 복사해야 한다. module 은 여러 Terraform 블록을 한 디렉터리에 모아 입력과 출력을 정…

·5분
Terraform

Terraform (4) - 원격 state와 잠금으로 함께 작업하기

1. 개요 이전 글에서는 S3 버킷을 만들었다. 그 작업 기록인 terraform.tfstate 는 실행한 컴퓨터에 저장됐다. 다른 사람이 같은 코드를 받아 실행해도 그 기록이 없으면 기존 버킷을 Terraform이 관리 중인지 알 수 없다. 여러 사람이 작업하려면 s…

·6분
Terraform

Terraform (3) - AWS S3 버킷으로 실제 인프라 관리하기

1. 개요 이전 글까지는 내 컴퓨터의 파일을 만들었다. 이번에는 같은 init → plan → apply 흐름으로 AWS의 S3 버킷을 만든다. 리소스 는 Terraform이 만들고 관리하는 대상이고, AWS 계정 정보처럼 이미 존재하는 값을 읽을 때는 data sou…

·5분
데이터베이스

데이터베이스 (4) - SQL과 NoSQL의 차이

1. 개요 애플리케이션은 회원 정보, 주문 내역, 게시글처럼 계속 늘어나는 데이터를 안전하게 저장하고 다시 찾아야 한다. 이때 자주 비교하는 선택지가 SQL 데이터베이스 와 NoSQL 데이터베이스 다. SQL은 보통 정해진 구조의 테이블을 관계로 연결해 다루는 관계형…

·8분
데이터베이스

데이터베이스 (3) - SQL Injection

1. 개요 SQL 인젝션(SQL Injection) 은 사용자가 입력한 값이 SQL 문장의 일부로 해석되도록 만들어, 의도하지 않은 조회나 변경을 일으키는 공격이다. 로그인, 검색, 게시글 조회처럼 외부 입력을 데이터베이스 쿼리에 사용하는 기능에서 발생할 수 있다. 핵…

·3분
데이터베이스

데이터베이스 (2) - JOIN

1. 개요 관계형 데이터베이스에서는 회원, 주문처럼 성격이 다른 데이터를 보통 별도의 테이블에 나누어 저장한다. 조인(JOIN) 은 공통된 값을 기준으로 여러 테이블의 행을 한 번의 조회 결과로 연결하는 SQL 기능이다. 이 글에서는 회원과 주문 테이블을 예로 들어 조…

·10분
데이터베이스

데이터베이스 (1) - 키의 종류와 역할

1. 개요 관계형 데이터베이스의 테이블에는 비슷해 보이는 행이 여러 개 들어갈 수 있다. 이때 키(Key) 는 특정 행을 구별하거나, 다른 테이블의 행과 연결하는 데 쓰는 열 또는 열의 조합이다. 회원과 주문을 예로 키가 왜 필요한지 살펴보고, 후보키·기본키·대체키·외…

·6분
Ansible

Ansible (7) - Role로 playbook 재사용하고 Galaxy, Collection 쓰기

1. 개요 playbook이 커지면 한 파일에 task, 변수, handler, 설정 파일이 모두 섞인다. 웹 서버 설치 작업을 다른 프로젝트에서도 쓰고 싶다면 필요한 부분을 골라 복사해야 한다. role 은 "웹 서버 설치"처럼 한 가지 역할에 필요한 task, 변수…

·9분
Ansible

Ansible (6) - Facts와 조건문, 작업 실패 처리

1. 개요 관리하는 서버가 늘어나면 운영체제 종류나 버전이 서로 다를 수 있다. 같은 playbook을 쓰되 "Ubuntu면 이 작업, 아니면 건너뛰기"처럼 서버 상태에 따라 다르게 동작해야 한다. 또 한 작업이 실패했을 때 전체를 멈출지, 무시하고 계속할지도 정해야…

·9분