데브코스 백엔드 3기 15일차
이제 주말!!이니까
이번주 밀린 화요일 TIL 내용도 함께 쓸거라 길 예정
MySQL의 scale-out
MySQL은 기본적으로 1대의 서버만
돌아가는 소프트웨어
-> 기본적인 scale-out과는 조금 다름
Master
있고 이걸 다수의 서버에 복사 ->다수의 Slave
(read-only)- 여전히 MySQL 자체가 핸들할 수 있는 데이터크기는 한대의 서버로 처리할 수 있는 최대의 양
- 여전히
쓰기작업은 결국 Master에
- 그래도 적어도 읽기에 대해서는 read-only의 slave에 복제를 하면
Select에 대해서는 더 큰 용량
클라우드
클라우드컴퓨팅업체에서 컴퓨팅자원(하드, 소프트웨어)
을 네트워크 통해 서비스형태로
제공
- MySQL쓰려면 MySQL 서버가 돌아가는 컴퓨터 사야함 초기비용(돈, 시간) 많이 필요
-> 업체에서 컴퓨터 여러대 사서 OS도 깔아두고 MySQL도 버전별로 다 사두고 나한테 빌려줌
-> MySQL 서버의 hostname, portnumber, access하는데 필요한 admin 정보 통해서 access
=> 시간단축 / 글로벌확장 용이 / 필요한만큼 실시간 할당 -> 사용한만큼 지불 -> 반환
EC2(Elastic Cloud Compute)
AWS의 서버 호스팅 서비스
S3(Simple Storage Service)
대용량 클라우드 스토리지 서비스
데이터 저장관리 -> 계층적구조
DataBase Service
RDS(Relational Database Service)
- MySQL / MariaDB
- Oracle
Docker
MySQL설치 시 OS, OS버전, 이미 깔려있는 다른 프로그램에 따라 다양한 변수 존재
-> MySQL + MySQL 실행에 필요한 기타 소프트웨어
= 하나의 패키지
로
=> 해당 프로그램의 개발과 사용을 도와주는 오픈소스 플랫폼
- Docker 받아서 실행 =
Docker Engine
- 패키지를 파일시스템 형태로 =
Docker Image
1) 파일형태이기 때문에 공유가능
2) 공유소 =Docker Registry
(대표적 : Docker Hub) - Docker Image를 싱행시킴 =
Docker Container
(응용 프로그램)
=> 내 운영체제 상에 있는 다른 소프트웨어들과 충돌이 안남
- Virtual Machine과 흡사하긴 하지만 Docker는 가상화 개념과는 조금 다름
- root계정 알아야(패스워드 찾아야) MySQL shell 실행가능
-
Docker Engine위의 App위의 Container가돌기 때문에
Contianer안에서 도는 프로그램과 통신하기 위해서 Docker command(docker exec) 사용
Transaction
- 테이블내용을 변경하는 SQL들을 연달아 실행 시,
다수의 SQL을 사용하더라도마치 하나의 SQL처럼
다같이 성공 or 실패한다면 트랜잭션 사용필수
(SELECT는 트랜잭션 사용필요x)
- autocommit
- true(default)
- 바로바로 테이블에 들어감
- Begin해줘야 rollback
- false(=0)
- 추가, 수정, 삭제 시 내가 commit을 명시적으로 해주지않으면 테이블 안바뀜
- 자바와 사용 시 connection -> Resultset에서 추가된 것처럼 보이지만 commit을 안하고 connection.close()-> 테이블 안바뀌어 있음
- true(default)
View
자주 사용하는 SQL쿼리(SELECT문)에 이름을 주고 마치 하나의 테이블처럼
사용
= 이름이 있는 쿼리
가 View로 테이블베이스단에 저장됨
(실제 피지컬하게 존재x -> Virtual Table이라고 부르기도함)
=> View 사용될 때마다 Select가 실행됨
- View 생성
CREATE OR REPLACE VIEW 뷰이름 AS SELECT ~
- 사용
SELECT * FROM 뷰이름
고급기능
- Stored Procedure
- MySQL 서버단에 저장되는 SQL쿼리들
- Explain SQL
- 쿼리가 어떻게 수행되는지 내부를 보여주는 SQL명령
-> 이를 바탕으로 느리게 동작하는 쿼리의 최적화 가능해짐
-> 보통 문제가 되는 테이블에 인덱스를 붙임
- 쿼리가 어떻게 수행되는지 내부를 보여주는 SQL명령
- Index
- primary key, foreign key 지정된 애들은 이미 기본적으로 Index 가짐 -> 속도 빠름
- 특정 컬럼을 많이 쓴다 -> pk, fk 아닌경우 속도 느릴 수 -> Index 붙임
- Index는 꼭 필요한 경우만 쓰자
- 너무많은 인덱스 -> 인덱스로딩으로 인한 오버헤드 -> 시스템이 전체적으로 느려질 수
- Insert/Update 명령의 경우 -> Index도 바뀌어야 하기 때문에 느림
디자인패턴 스터디
- 정리
- 객체생성의 비용이 비싼경우에 사용
- clone()
2번째 RBF
- Lombok의 동작원리
- compile할 때 lombok이 코드추가
- compiler가 parse해서 AST로 바꿔주면 AST전후에 코드 추가해서 AST 수정
- compile할 때 lombok이 코드추가
- 참고)
- AST(Abstract Syntax Tree)
- 프로그램 코드(소스)의 구조를 표현하는 프로퍼티이며, 컴파일러의 구문 분석 결과물
- delete from & truncate 차이
- delete
- 데이터만 삭제
- 속도 느림
- 로그 남김
- truncate
- rollback 불가
- 테이블을 최소 생성된 초기 상태로 만듬
- 속도 빠름
- delete
- if-else / switch 동작원리 차이
- if는 하나하나 맞는지 다 체크해봄, 안맞고 안맞고를 다 실행해봄
- switch : byte code로 변환 시 테이블 생성되어서 바로 어디로 갈지
-> 조건 3개이상이면 switch가 빠름 그이하는 비슷 - 참고) switch int만 가능(byte code에서 지원x)
=> 자바7 이상부터는 String, Enum 등 가능, 어떻게?- hashCode 사용(산기해있음 -> lookupswitch)
- 원리를 알기위해 byte code를 뜯어본 ㅌㅅ이
정말 신기해
byte code 보는법은 build하고 show byteccode 검색(shift*2)
- MySQL join종류
- inner, outer, left, right
추가로 더 찾아보기로 한 것들
- MySQL의 Like연산자 최적화 방법
- System.gc()
- Virtual Machine과 Contatiner의 차이점
일기(회고)
- 드디어 자바계산기 과제 PR!
오늘 model 만들어봤는데 이러한 방향이 맞는건지 너무 궁금스,,
얼른 피드백이 또 오면 좋겠다
- 피어리뷰 진행함
- 벌써 한주 마무리
자바계산기과제, SQL문제, 디자인패턴 조사 모든 과제완료
(계산기는 계속 더 다듬어야하지만 첫 PR에 의미를 두는ㅎ)
뿌듯하면서도 할게 진짜 많고 시간은 없고 잠은 오고(잠시 징징타임)
그래도 벌써 2주 끝
내일은 짬을 내서 힐링타임을 가져야g
담주부터는 스프링!
- 오늘의 게더
- 컨셉은 power렌저
- 세상 정신없는 방
-
프리팀 2주가 끝났다..!ㅠ
아쉽다~ㅠ