var 재 선언, 재 할당 되며 scope는 전역 범위 혹은 함수 범위로 지정된다. 호이스팅이 된다. let은 재 할당만 되며 scope는 블록 {} 범위이다. let도 호이스팅이 되지만 undefined로 초기화 되지 않아 선언 이전에 let을 사용하려고 하면 참조 오류가 발생한다. const는 재할당도, 재선언도 되지 않아 일정한 상수 값으로 사용된다. let처럼 블록 {} 범위 스코프이며 선언과 할당이 동시에 일어나야 한다.
2. 원시타입과 참조 타입
원시값 - number, bigint, string, boolean, null, undefined, symbol로 객체가 아니고 따로 method를 가지지 않는 데이터이다. 원시타입은 선언하면 스택에 저장 식별자를 통해 접근할 수 있고 원시 데이터와 함께 스택에 저장이 된다. ex) const a= 50 -> a가 50과 함께 스택에 푸쉬됨 ex) let a =50, let b =a, a = 100 : a를 변경해도 b는 영향이 없다. {a:50},{b:50} -> {a:100},{b:50} 참조 타입 - 원시타입을 제외한 나머지 참조 타입은 스택에 식별자와 heap(메모리 주소값)이 저장이 되어 heap에 저장된 값을 참조하게 된다.
3. OOP가 추구하는 방향과 특징 -> 프로그래밍 방식중 하나이다.
프로그램을 서로 관련 있는 '객체(함수와 데이터의 묶음)'라는 기본 단위(class)로 나누고 서로 의사소통할 수 있도록 프로그래밍하는 방식 장점으로는 중복되는 관련 객체는 재사용을 통해 코드의 중복을 줄이고(생산성을 높여준다.) 역활을 확실하게 나누어 가독성을 높일 수 있다(유지 보수 및 확장성이 높다). 1. 캡슐화 : 서로 연관되어 있는 데이터와 함수들을 하나로 묶고 접근 지정자를 통해 제어하는 것으로 외부에서 보여질 필요가 없는 데이터를 숨기면서 외부에는 기능만을 제공하기 위해 사용 2. 추상화 : 데이터의 공통된 속성이나 기능을 묶어 이름을 붙이는 것으로 클래스를 정의하는 것을 추상화한다고 할 수 있다. 3. 상속 : 특정 클래스의 기능을 물려받고, 새로 기능을 추가하는것으로 상위 클래스를 하위 클래스가 기능만을 복사하는 것을 뜻한다. 코드를 재활용하여 생산성이 높아지며 유지보수하기에 좋다. 4. 다향성 : 부모클래스에서 물려받은 가상의 함수를 자식 클래스 내에서 오버라이딩(메서드나 데이터를 수정해서 사용) 되어 사용되는 것
4. this란?
자기참조변수로 자신이 속한 객체 또는 자신이 생성할 인스턴스를 가리킨다. this를 통해 자신이 속한 객체와 자신이 생성할 인스턴스의 프로퍼티나 메소드를 참조할 수 있다. 4-1 Constructor 클래스의 인스턴스 객체를 생성하고 초기화하는 특별한 메서드이다. 자바스크립트에서 this는 함수로 호출했는지, 객체의 메서드로 호출 했는지에 따라 달라진다. this는 기본적으로 window이다 하지만 객체의 메서드로 this를 사용하면 객체를 가리킨다.
5. 인덱스
테이블의 검색 성능의 속도를 높여주기 위한 자료구조이다. 특정 컬럼에 인덱스를 생성하면, 해달 컬럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다. 인덱스가 생성이 되면 조회 쿼리를 실행할 시에 옵티마이저에서 판단하여 생성된 인덱스를 사용한다. 인덱스에 저장되어 있는 데이터의 물리적 주소에서 데이터를 가져오는 동작으로 속도의 향상을 가져온다. 5-1 옵티마이저 가장 효율적인 방법으로 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 엔진이다. DBMS의 두뇌이다. 5-2 카디널리티 5-3 Selectivity 5-4 트레이드 오프 관계
6. 트랜잭션
DB의 상태를 변화 시키기 위해 수행하는 작업 단위 원자성 : DB에 모두 반영이되거나, 전혀 반영이되지 않아야 한다. 일관성 : 작업처리 결과는 항상 일관성이 있어야 한다. 독립성 : 둘 이상의 트랜잭션이 동시에 병행되고 실행되고 있을 때, 어떤 트랜잭션도 다른 트랜잭션 연산에 끼어들 수 있다. 지속성 : 트랜잭션이 성공적으로 완료되면 결과는 영구적으로 반영되어야 한다. 6-1 스케줄 직렬 스케줄은 순서대로, 하나씩 트랜잭션을 실행하는 것으로 하나의 트랜잭션이 완료되면 다른 트랜잭션을 시작하는 방식 직렬화 스케줄은 트랜잭션들이 동시에 자료 접근 연산들을 교차하며 실행시키면서도 결과가 직렬 스케줄과 동일한 스케줄이다. -> 병행 처리
7. DI -> OOP SOLID 원칙을 지키기 위해서
OOP에서는 객체가 의사소통을 하게되는데 의사소통을 하기 위해서는 객체간의 의존성이 생긴다는 말이다. 의존성은 'A가 B를 의존한다는 B가 변하면 A도 영향을 받는다'는 뜻이다. 이는 의존 대상의 로직이 변경되면 의존하는 모든 클래스가 변경되어야 한다는 뜻이다. 이를 해결 하기 위해서는 의존을 줄여야 한다 즉 A클래스 내부에서 B클래스 인스턴스를 생성하지 않고 외부에서 인스턴스를 주입해줘야 하는데 이를 DI 의존성 주입이라고 부른다. 3가지 방법이 제안되는데 1. Field 주입, 2. Setter 주입, 3. Constructor 주입이 있고 많은 디자인 패턴들이 3.Constructor 주입을 권장하고 있다. 1,2는 의존성 없이 생성 할 수 있어서 에러가 발생할 수 있다. Nest에서 DI하는 방법은 Constructor에 현재 프로바이더에 등록되어있는것을 넣는 것으로 적용이된다. 이것은 Ioc 덕분에 가능 요약 : 각 클래스를 관리 하려면 기존의 인스턴스 정보를 주입은 해줘야된다 안하면 몰라서 -> Ioc 프로바이더에 DI를 하는 것으로 다른 파일에서 사용이 가능
8. Ioc
그러면 Ioc는 무엇일까 프레임워크가 의존의 제어권을 가져가는 것을 말한다. 즉 관리해주는 권한의 주체를 프레임워크에 넘기는 것이다. Nest에서는 프로바이더가이 역활을 해준다.
9. NoSQL vs RDB
SQL은 스키마가 고정적이고, 데이터 무결성이 필요할 때, 데이터 수정이 자주 필요한 경우 NoSQL은 스키마가 불규칙적이고, 데이터가 중복되어도 상관없고, 읽기와 쓰기가 중요한 경우 10. 자료구조 큐,스택 11. 이벤트루프가 뭔가요? - 메인스레드(싱글스레드)가 자바스크립트를 동작시키는데 이것을 관리해주는 관리자 자바스크립트는 싱글 스레드 프로그래밍 언어이다. 이로인해 Call Stack을 하나만 가지게 되어 비동기동작을 실행할 수 없습니다. 하지만 Node나 브라우저에서 비동기 동작을 하기 위해서 만든것이 이벤트 루프 입니다. libuv와 web API를 통해 싱글스레드 방식으로 쌓인 콜스택에서 비동기나 블로킹 처리가 필요한 동작들을 이벤트 루프를 통해 스레드 풀이 처리를 하고 처리가 완료된 동작들은 Callback Queue(FIFO)에 저장이 됩니다. 이때 어떤 순서든 Promise가 가장 먼저 나가게 됩니다. 콜스택이 전부 실행되면 Callback Queue에 있는 것들을 콜스택에 넣어서 실행합니다. 12. HTTPS의 특징 13. www.google.com을 쳤을때 생기는 일? 14. REST API가 뭔가요 uri(자원)와http method로 개발자가 소통하기 쉽게 표현한 api → http method 종류 → get, post 차이 → 멱등성, 요청 방식 → get에서 body를 넣어 요청하면 → 왠만하면 무시된다.(프레임 워크에서 무시) 15. 정규화 16. TCP와 UDP의 차이 둘다 전송계층에서 사용되는 프로토콜이다 -> IP에 의해 전달되는 패킷의 오류를 검사하고 재전송 요구 등의 제어를 담당하는 계층 TCP와 UDP - 모두 패킷을 한 컴퓨터에서 다른 컴퓨터로 전달해주는 IP 프로토콜을 기반으로 구현됬다. TCP 17. 제네릭 클래스 또는 함수에서 사용할 타입(Type)을, 그 클래스나 함수를 사용할 때 결정하는 프로그래밍 기법을 말한다. -> 타입을 함수의 파라미터처럼 사용하는 것 사용이유 : 한가지 타입보다 여러 가지 타입에서 동작해야 할때, 재사용성이 높은 함수와 클래스를 생성할 수 있다. 제네릭은 자바의 타입 안정성을 맡고 있습니다. 컴파일 과정에서 타입체크를 해주는 기능으로 객체의 타입을 컴파일 시에 체크하기 때문에 객체의 타입 안정성을 높이고 형변환의 번거로움을 줄여줍니다.
18. Promise을 왜 쓰냐?, 어떻게 사용하냐?
자바스크립트에서 비동기 처리에 사용되는 객체로 서버에서 받아온 데이터를 프론트에 보낼때 주로 사용합니다. 데이터가 받아오기 전에 마치 데이터를 다 받아온 것 마냥 화면에 데이터를 표시하려고 하면 오류가 발생하거나 빈 화면이 뜨는 문제를 해결하기 위한 방법으로 사용합니다. pending, fulfilled, rejected의 상태가 존재한다.
- 시스템의 뒷단을 의미하며 클라이언트(앱, 브라우저등) 프런트엔드 영역의 요청을 서버(컴퓨터)가 수행하도록 하는 역할
1-1 클라이언트와 서버는 어떻게 통신?
서로 정해놓은 약속인 프로토콜을 사용한다. 프로토콜은 네트워크의 일부로 가장 많이 사용되는 프로토콜은 HTTP 프로토콜이 있다.
2. DNS?
- IP는 인터넷에서 주소 역할을 하지만 사람이 외우기에 어렵다. 이것을 사람이 사용하기 편한 언어로 변경해서 사용하는 것이 DNS이다.
3. HTTP Method에 대해 설명
4가지가 있으며 get, post, put, delete 등이 있습니다.
Get은 서버에 리소스를 요청하기 위해 사용됩니다. 읽기만 하는 method로 서버에 영향이 없어 안전하고, 몇 번을 시도하든 상태가 동일 함으로 멱등성을 가지고 있다.
* 멱등성 : 여러 번 반복할 때와 한번 할 때 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때.
Post는 리소스를 생성하기 위해 서버에 데이터를 보내는 데 사용되는 method이다. 서버에 데이터를 만드는 것으로 멱등성이 없다.
Put은 데이터를 전체적으로 업데이트를 하는 것이어서 Post와 다르게 멱등성을 가지고 있다. 동일한 url에 동일한 내용으로 계속 변경
fetch는 url에 대한 data를 부분적으로 업데이트하는 방식으로 구현에 따라 달라지지만 멱등성은 없다.
Delete는 한번 삭제하면 계속 삭제가 돼있어서 멱등성이 있다.
4.HTTP 상태 코드 - 중요한 정보를 간편하게 전달가능, HTTP에서 공통으로 약속, 100 단위로 내용의 큰 틀이 다름
2xx : 요청이 성공
- 200: OK, 201: 생성,
3xx : 요청이 다른 곳으로 가야 할 때 redirect - 추가 처리가 필요
4xx : 잘못된 요청
- 400: 잘못된 요청, 401: 권한 없는 사람이 요청, 403: 특정한 일에 대한 권한, 404: 존재하지 않을 때, 409: 충돌
5xx : 예상치 못한 서버 에러
- 500: 서버에러, 502: 서버가 어떻게 처리 모를 때, 503: 서버가 준비가 안됬을 때
5. 프로세스와 스레드의 차이
프로세스는 자원을 할당받는 작업의 단위이며, 스레드는 프로세스가 할당받은 자원을 이용하는 실행의 단위. 스레드는 자원을 공유(data, code, heap)한다는 점이 차이점이 있습니다.
6.RDB와 NoSQL의 차이
RDB는 스키마(SCHEMA)를 이용해서 데이터 정리,타입 정의가능,관계맺을 수 있음 관계를 읽고 쓸 때 SQL을 사용함
NoSQL은 schema-less, Non-relation로 용도에 따라 저장 형태가 다름, 관계와 스키마가 없어서 데이터를 중복해서 저장하게 된다. -> 코드에서 해결해야 한다. -> 개별적으로 데이터 저장
7.DB 인덱스 사용 시 장점, 단점
인덱스는 DB 테이블에 대한 검색 성능의 속도를 높여주는 자료구조이다. 특정 칼럼에 인덱스를 생성하면, 해당 칼럼의 데이터들을 정렬하여 별도의 메모리 공간에 데이터의 물리적 주소와 함께 저장된다.
장점으로는 검색속도 향상, 시스템의 부하를 줄여 성능향상에 기여한다.
단점 : 인덱스를 위한 추가 공간 필요, 생성에 시간이 소요됨, 생성, 수정, 삭제에 대한 성능이 하락할 수 있다.
8. DB 정규화
DB의 중복을 없애는 작업으로 무결성 유지와 DB 저장용량 절감을 목표로 정규화를 합니다. 테이블의 칼럼이 하나의 값을 갖도록 테이블을 분리하는 것이 1 정규화이고 1 정규화를 진행한 테이블에
9. ORM
Object Relational Mapping으로 어떻게 오브젝트를 테이블로 바꾸고 사용할지를 대신해 주는 소프트웨어 - 코드로 스키마를 정의하고 테이블로 만들어주고 사용해 준다. 데이터베이스를 추상화해 주는 프로그램
장 : DB쿼리를 신경 안 쓰고 비즈니스 로직에 시간 투자가능, 반복되는 쿼리를 줄여줌, 데이터베이스를 추상화해 줌 (DB 종류에 신경 안 씀)
단 : 복잡하고 상세한 쿼리는 쿼리문을 사용해야 효율이 나온다. 최적화에는 아쉬울 수 있음(DB가 무겁고 성능이 중요하면 sql을 쓰자)
9-1N+1
ORM에서 관계가 설정이 되어있을 때 관계가 설정된 엔티티를 조회할 경우에 조회된 데이터 개수(n)만큼 관계의 조회 쿼리가 추가로 발생하여 데이터를 읽어오는 문제를 말한다. 1번의 쿼리를 사용해 n건의 데이터를 가져오는데, 관련 칼럼을 얻기 위해 추가적으로 n번의 쿼리가 실행되는 문제. eager loading은 로딩 시 참조해야 하는 정보를 미리 가져오는 - 불필요한 데이터 많이 로드, 긴 초기 로딩 시간, 연결이 많아지면 그만큼 느려 짐 lazy loading 은 필요한 순간에만 데이터를 가져오는 - TypeORM에서는 실험적 방법, promise를 이용해야 함 user와 post(1:n) -> user를 조회(1개) -> post를 n회 조회 -> n+1 relation으로 해결, qureybuilder나 10. node가 싱글 스레드인데 여러 가지 병렬 작업이 되는 이유?
10.Node는 2개의 스레드로 구성
1. 이벤트 루프(메인스레드) - 자바스크립트를 동작하는 메인 스레드로 메인으로 돌아가는 스레드가 하나이어서 싱글 스레드라고 부른다. 비즈니스로직을 수행하며 수행도중 블로킹 I/O 작업을 만나면 커널 비동기 또는 스레드 풀에게 넘겨주는 역할을 한다.
2. Thread Pool이란 이벤트 루프가 싱글 스레드이지만 이벤트 루프인 libuv를 통해 블로킹 작업을 따로 모아 처리하는 스레드들의 집합이다.
-> 메인 스레드(싱글- V8)가 비동기, 블로킹으로 처리되는 일은 callback으로 Node API(Libuv) 포함 모듈에 보내주면 병렬적으로 처리한 뒤 TeskQueue에 넣음
10-1 Node에서 비동기 돌아가는 원리
노드는 싱글스레드여서 call stack이 하나이지만 이벤트루프(libuv)로 Node API(멀티스레드 - 스레드풀)가 블로킹이 되는 작업들을 처리 후 TeskQueue에 넣어주고 Call Stack이 비어었으면 TeskQueue에 있는 내용을 call stack에 넣어준다.
11. 세션과 쿠키의 차이
세션(세션아이디, 사용자 아이디, 유효기간)을 만들고 정보를 세션 DB 혹은 메모리에 저장하고 클라이언트에 세션아이디를 보내준다.
-> 서버의 자원을 사용함, stateful
쿠키(이름, 값, 만료일)를 저장하여 클라이언트에 저장 서버 자원 사용하지 않음 브라우저를 종료해도 남아있다
12. HTTP와 HTTPS의 차이
둘 다 서버와 클라이언트의 데이터를 주고받기 위한 프로토콜이지만 HTTPS는 데이터가 SSL인증서를 통해 데이터가 암호화되어 추가적인 보호를 하는 방식이다.
12-1 SSL
클라이언트와 서버 간의 통신을 제삼자가 보증해주는 전자문서 : 인증서를 검증 후 데이터 통신을 한다.
13.OOP에서 지향하는 바
많은 객체들이 모여서 상호 협력하며 데이터를 처리하는 방식의 프로그래밍 설계 방법이다.
-> 프로그램을 묶음 단위로 잘게 쪼개서, 추후에 가져다 쓰기 편하게 -> 라이브러리처럼 다른 개발자가 이용할 수 있게 구조를 만든 것
13-1 추상화
클래스를 정의할 때 불필요한 부분들을 생략, 속성 중 중요한 것에만 중점을 두어 개략화하는 것
13-2 상속
상위 클래스의 특징을 하위클래스에서 상속받아 중복 코드제거, 코드 재사용성을 증대
14.hoisting
함수 안에 있는 선언들을 모두 끌어올려서 해당 함수 유효 범위({안에있는것})의 최상단에 선언하는 것
let, const를 포함한 모든 선언을 호이스팅
14-1 변수 생성단계
선언 단계(Declaration Phase): 변수를 변수 객체(Variable Object)에 등록합니다. 이 변수 객체는 스코프가 참조하는 대상이 됩니다.
초기화 단계(Initialization Phase): 변수 객체(Variable Object)에 등록된 변수를 위한 공간을 메모리에 확보합니다. 이 단계에서 변수는 undefined로 초기화됩니다.
할당 단계(Assignment Phase): undefined로 초기화된 변수에 실제 값을 할당합니다.
-> 외부 함수 호출이 종료되더라도 외부 함수의 지역 변수 및 변수 스코프 객체의 체인 관계를 유지할 수 있는 구조
클로저는 반환된 내부함수가 자신이 선언됐을 때의 환경(Lexical environment)인 스코프를 기억하여 자신이 선언됐을 때의 환경(스코프) 밖에서 호출되어도 그 환경(스코프)에 접근할 수 있는 함수
var color = 'red';
function foo() {
var color = 'blue'; // 2
function bar() {
console.log(color); // 1
}
return bar;
}
var baz = foo(); // 3
baz(); // 4
-> 여기서 baz가 클로져입니다.
outer함수의 context에 속해있는 변수를 참조합니다.
outer함수의 지역변수로 존재하는color를 자유변수라고 합니다.
16. 실행콘텍스트
실행할 코드에 제공할 환경 정보들을 모아 놓은 객체이다.
16-1 렉시컬 스코프
함수를 어디서 선언하였는지에 따라 상위 스코프를 결정한다는 뜻 -> 함수의 선언에 따라 결정된다.
17. 콜백함수
18 TS는 어떻게 실행되는 것일까?
TS는 정적언어 JS는 동정언어 정적언어를 동적언어로 바꾸는 과정이 추가된 것(JS파일로 바뀐다.)
19. NestJS?
스프링과 비슷한 추상화 계층이 존재
- 프레임워크에서 IoC를 지원
- 프로바이더로 DI를 지원
- 싱글톤 패턴으로 모듈에 컨트롤러, 서비스를 캡슐화하여 최상단 모듈에 연결
- 데코레이터를 활용 AOP(관점 지향 프로그래밍)을 지원
- MVC패턴을 지원
재사용성이 좋은 모듈식 아키텍처 채용
TS를 기본언어로 사용 안전성을 늘림
20 Nest 아키텍처
제공 데코레이터를 사용할 경우 자체적으로 인스턴스 생성
- 해당하는 것을 모듈의 프로바이더에 넣는 것으로 싱글톤이 적용
Ioc을 프로바이더에 넣는 것으로 사용할 수 있다.
생성자를 활용하여 의존성을 부여하는 것(DI)으로 느슨한 결합을 사용
- 사용하고 싶은 클래스에 생성자로 호출하기만 하면 바로 사용
비슷한 로직이 모여있는 것을 모듈에 담아 캡슐화를 시킬 수 있다.
데코레이터 패턴
데코레이터 : 기존 객체의 동작을 동적으로 증대시킬 수 있는 디자인 패턴 -> 동작이 명시적으로 데코레이팅된 인스턴스에만 적용
싱글톤 패턴 - OOP에 무조건 보이는 디자인 패턴
클래스의 인스턴스는 1개만 존재한다.
Nest의 Ioc 구현 방법
공급자를 정의 - 데코레이터이용 선언하여 클래스를 생성할 경우 Nest IoC 컨테이너에서 관리
DI 하는 방법
생성자를 만들어서 현재 프로바이더에 등록되어 있는 것을 넣으면 적용이 됨
21 HTTP, HTTPS
SSL이나 TLS를 사용하여 HTTP 통신내용을 암호화한 것이 HTTPS -> 내용을 암호화
SSL에서는 공개키 암호화 방식
22 Docker
데이터 또는 프로그램을 격리 시키는 기능을 제공하는 소프트웨어로 각각 독립된 환경에 격리하는 기능을 제공하는 소프트웨어
격리된 공간을 컨테이너라고 부른다.
22-1 compose
단일 서버에서 여러개의 컨테이너를 하나의 서비스로 정의해 컨테이너의 묶음으로 관리할 수 있는 작업 환경을 제공하는 관리 도구
23 로드벨런싱, 로드밸런서는 부하를 분산해주는 장치, 기술
서버가 처리해야 할 업무 혹은 요청을 여러대의 서보로 나누어 처리하는 것
L4 트랜스포트 계층 ip주소와 포트 번호 부하 분산 - TCP, UDP
L7 애플리케이션 계층 URL, HTTP헤더에서 부하 분산이 가능 - HTTP, HTTPS
로드밸런서 주요 기능
- NAT : private IP를 public IP로 바꿈
- Tunneling : 데이터를 캡슐화하여 연결된 노드만 캡슐을 해제할 수 있게 만듦
- DSR : 요청에 대한 응답을 할 때 로드밸런서가 아닌 클라이언트의 IP로 응답
24 팀 아키텍처 알기
루트 53 - 도메인 이름 시스템(DNS)
github/action
github에서 제공하는 CI/CD 툴로 개발의 work flow를 자동화하는 툴
CI-> 테스트, 빌드, Dockerizing, 저장소에 전달하는 것까지 프로덕션 환경으로 서비스를 배포할 수 있도록 준비하는 프로세스
CD -> 저장소로 전달된 프로덕션 서비스를 실제 사용자들에게 배포하는 프로세스
메인에 푸시 됐을 때 github action을 통해 빌드하고 상용 서버에 배포(deploy)할 수도 있다.
application load balancer - 7 계층에서 작동하는 로드 밸런서
EC2 인스턴스, 컨테이너, IP 주소등 여러 대상에 걸쳐 수신되는 트래픽을 자동으로 분산합니다.
lambda
서버리스로 하드웨어나 os가 신경 쓸 필요 없이 관리해 주는 서비스 -> 코드만 작성해서 코드가 실행될 때만 작동
서버에서 해당 이벤트가 발생하면 람다에서 응답으로 코드를 실행하는
ec2/ecs차이
ecs : aws 고도로 안전하고, 안정적이며, 확장 가능한 컨테이너 실행 클러스터에서 컨테이너를 쉽게 실행, 중지 및 관리할 수 있게 해주는 컨테이너 관리 서비스 컨테이너 오케스트레이션 서비스
클러스터 : 도커 컨테이너를 실행할 수 있는 논리적인 공간
태스크 정의 : 애플리케이션을 구성하는 하나 이상의 컨테이너를 설명하는 텍스트 파일(JSON)
테스트 : 태스크 정의를 인스턴스화하는 것, 컨테이너를 실행하는 최소 단위
ec2 : 가상머신 독립적 환경이 있고 운영체제를 갖고 있는 컴퓨팅 리소스
25 트랜잭션?
DB의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미한다.
-> 논리적 단위
원자성: 트랜잭션의 연산은 모두 반영/ 안반영
일관성: 트랜잭션이 성공하면 일관성 있는 DB상태로 변환한다
독립성: 둘 이상의 트랜잭션이 동시에 병행 실행되는 경우 서로의 연산에 끼어들면 안 된다.
영속성: 성공적으로 완료된 결과는 영구적으로 반영
트랜잭션 연산 및 상태
Commit - 한 개의 단위가 성공적으로 끝나고 DB가 다시 일관된 상태에 있을 때 관리자에게 알려주는 연산
Rollback 실패해서 재시작 or 폐기
상태
활동 : 실행 중
실패: 오류가 발생 중단
철회: 비정상적으로 종료되어 Rollback 수행
부분 완료 : 마지막까지 연산했지만 Commint이 실행되기 직전
완료 : 성공 Commit연산을 실행 후 상태
26 컨테이너?
소프트웨어를 OS로부터 분리시켜 동작할 때 최소한의 실행환경을 제공하는 것
컨테이너 = 패키징
27 CI/CD
코딩 -> 빌딩 -> 테스팅으로 구분이 됨
CD: 목표 소프트웨어를 언제든지 신뢰할 수 있는 수준으로 릴리즈가 가능하도록 하는 것
28 Fargte
EC2와 비교할 것은 Fargate이다 이 둘 위에 ECS가 동작
EC2는 가상머신이지만 Fargate는 추상화된 컴퓨팅 환경이다. : EC2의 서버리스 버전
EC2를 안 쓰고 이걸 사용한 이유 - Ec2의 인스턴스 관리를 할 이유(아는 건 없고 해야 할 것은 많기 때문에)가 없고 금액이 더 저렴하다는 이유가 있어서 선택을 했다.
29 프로젝트에서 진행된 아키텍처
개발 단계에서 각자 docker compose up으로 mysql, redis의 환경을 통일한 뒤 개발을 시작한다.
개발이 끝나서 각자의 브랜치를 dev에 pull/req 하면서 코드 리뷰를 한다.
dev에서 문제가 없으면 main으로 push를 하는데 이때 github action이 main의 코드를 빌드하여 ECR에 push 한다.