한동안 웹개발 표준 기술 스택 중 하나
* LAMP: Linux, Apache, MySQL, PHP
Postgres와 함께 가장 널리 쓰이는 프로덕션용 관계형 데이터베이스
용량 증대(Scaling) 방식 1
* Scale-Up: 서버에 CPU와 Memory 추가
용량 증대 (Scaling) 방식 2
* Scale-Out: Master-Slave 구성
다양한 종류의 서버 구매옵션 제공
- On-Demand: 시간당 비용을 지불하며 가장 흔히 사용하는 옵션
- Reserved: 1년이나 3년간 사용을 보장하고 1/3 정도에서 40% 디스카운트를 받는 옵션
- Spot Instance: 일종의 경매방식으로 놀고 있는 리소스들을 보다 싼 비용으로 사용 할 수 있는 옵션
EC2 - Elastic Cloud Compute
- AWS의 서버 호스팅 서비스
- 리눅스 혹은 윈도우 서버를 론치하고 로그인 가능
- 가상 서버들이라 전용서버에 비해 성능이 떨어짐
- Bare-metal 서버도 제공하기 시작
S3 - Simple Storage Service
- 아마존이 제공하는 대용량 클라우드 스토리지 서비스
- S3는 데이터 저장관리를 위해 계층적 구조를 제공
- 글로벌 네임스페이스를 제공하기 때문에 탑레벨 디렉토리 이름 선정에 유의
- S3에서는 디렉토리를 버킷(Bucket)이라고 부름
- 버킷이나 파일별로 액세스 컨트롤 가능
RDS(Relational Database Service)
AI & ML Services
기타 중요 서비스
도커는 리눅스의 응용 프로그램들을 프로세스 격리 기술들을 사용해 컨테이너로 실행하고 관리하는 오픈 소스 프로젝트이다. 도커 웹 페이지의 기능을 인용하면 다음과 같다: 도커 컨테이너는 일종의 소프트웨어를 소프트웨어의 실행에 필요한 모든 것을 포함하는 완전한 파일 시스템 안에 감싼다.
MySQL를 다른 OS에서 설치하려면 다양한 변수가 존재
Virtualization vs Containerization
Windows Subsystem for Linux Update Setup
wsl_update_x64 다운로드
wsl_update_x64 설치 하시면 대부분 에러가 해결 되시겠지만,
안되는 분들은 이미 VMware나 Virtual Box의 가상 하이퍼바이저가 Docker와 충돌하였기에, Hyper-V를 체크해제 하시고 docker engine을 실행하시면 됩니다.
🍖 MySQL docker image 다운로드
docker pull mysql/mysql-server:8.0
🍖 Docker container 실행
docker run --name= mysql_container --restart on-failure -d mysql/mysql-server:8.0
🍖 MySQL root 계정의 패스워드 찾기
docker logs mysql_container 2>&1 | grep GENERATED
🍖 MySQL shell 실행하기
docker exec -it mysql_container mysql -uroot -p
prod 데이터베이스
1. session 테이블
컬럼 | 타입 | 부가설명 | 예 |
---|---|---|---|
id | int | 세션 ID | 101 (기본키) |
user_id | int | 사용자 ID | 201 |
created | timestamp | 세션 생성시간 | 2021-05-01 11:32:59 |
channel_id | int | 채널 ID | 1 (Foreign Key) |
2. channel 테이블
컬럼 | 타입 | 설명 |
---|---|---|
id | int | session 테이블 channel_id의 Primary Key |
channel | varchar(32) | 외부키 |
CREATE TABKE channel (
id int not null auto_increment primary key,
channel varchar(32) not null
);
// primary key는 뒤로 빼서 입력하는게 범용적
CREATE TABLE channel (
id int not null auto_increment,
channel varchar(32) not null,
primary key(id)
);
CREATE TABLE session (
id int not null auto_increment primary key,
user_id int not null,
created timestamp not null default current_timestamp,
channel_id int not null,
foreign key(channel_id) references channel(id)
);
// [테이블channel]의 id값을 [테이블session]의 channel_id를 참조하여 foreign key로 설정