![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/WkKrD/btrIbMy42u4/78vPZNVQq0CM29sPuceZx1/img.jpg)
트랜잭션의 특징 (ACID) 원자성 (Atomicity) : 트랜잭션의 수행 결과는 DB에 모두 반영되던가, 그렇지 않던가 둘 중 하나여야 한다. 일관성 (Consistency) : 트랜잭션 수행 결과는 항상 일관성이 있어야 한다. 트랜잭션 시작 시에 참조한 DB상태를 기준으로 트랜잭션을 수행하고 트랜잭션 도중에 변경된 DB를 기준으로 하지 않는다. 따라서 사용자는 일관된 데이터를 볼 수 있도록 한다. 독립성 (Isolation) : 다수의 트랜잭션이 서로의 트랜잭션 연산에 끼어들 수 없다. 트랜잭션들끼리 동시에 수행될 수 없다는 의미가 아니다. 동시에 실행은 될 수 있으나 트랜잭션 도중의 결과를 다른 트랜잭션이 참조할 수 없다는 것을 의미한다. (serializable) 지속성 (Durability) ..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bxuEog/btrIi5Medy3/kIVO7RjrbEHGrvs0RTjKy0/img.png)
데드락이 발생하기 위한 조건 1. Mutual Exclusion : 한 resource에 대해 한 번에 하나의 task만 사용할 수 있다. 2. Hold and Wait : 어떤 task가 multiple resource를 필요로 하는데, 하나의 resource를 잡는 데는 성공했지만, 또 다른 resource를 잡는 데에는 실패했을 때, "첫 번째로 잡은 resource를 잡고 있는 채로, 두 번째 resource를 기다리는 상태" 3. No preemption : resource를 잡고 있는 task를 강제로 resource를 빼앗을 수 없음. 4. Circular wait : taskA는 taskB가 잡고 있는 resource를 기다리고, taskB는 taskC가 잡고 있는 resource를 기다리..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bJoT7N/btss87ErQx3/zclpgjuEs7lvGHdmsZUITk/img.png)
Microservice - 기존 모놀리틱 구조에서 모든 도메인과 기능이 하나의 시스템에 담겨있고 서비스가 방대해짐에 따라 복잡성이 커졌다. - Microservice는 기존 모놀리틱 구조에서 방대한 시스템을 적절하게 나눈 구조로 설명된다. - 'API Gateway'를 두고 기능별/도메인별로 요청이 '분기'하도록 구성된다. 특징 [장점] - 기존 모놀리틱 구조에서는 장애 발생 시 서비스 전체가 마비될 것이다. Microservice는 분리한 서비스 단위로 배포가 가능하기 때문에 자유롭게, 가볍게 배포가 가능하며 확장도 용이하다.(서비스 간 의존도가 떨어지기 때문) - 애플리케이션 재기동 시간이 크게 단축된다. (보통 모놀리틱은 한번 빌드하는데 엄청난 시간이 소요) - 다른 서비스와는 API로 연동되기 때..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/cwNjIB/btrIdDupTrX/9RvRywczq8veIIzIbkEkJ0/img.png)
Dispatcher Servlet 등장 배경 요청 메시지를 파싱하고 분석하고 이에 대한 응답 메시지 또는 파일 등을 만드는 작업 등을 매번 웹 개발자가 컨트롤 하는 것이 매번 서블릿을 만들때마다 중복해서 할 수밖에 없었다. 그래서 이런 작업을 통합적으로 해주는 것이 필요했고 필요할 때 마다 템플릿화 시켜서 변경이 필요한 부분에만 변경을 해주고 어떤 서비스를 호출하고 어떻게 처리할 지를 정하는 것을 '분리'해야 한다는 필요성에 의해 등장했다. Front Controller Pattern 중앙 집중형 컨트롤러를 가장 앞단에 두는 방식이다. 스프링은 Dispatcher Servlet을 제공하는데, 이는 Front Controller Pattern이 적용된 결과이다. 여러개의 서블릿을 둘 수도 있지만 스프링에서..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/b8oixG/btrIdEfO0ZZ/2JSA8rYqTjJqryo773v1qk/img.png)
대체로 HTTP 웹 서버를 줄여서 웹 서버라고 한다. 말그대로 HTTP나 HTTPS를 지원하는 서버이다. 웹 서버는 이미지나 HTML파일, 자바스크립트 파일, CSS파일과 같은 정적 리소스를 지원하기 위해 만들어졌다. 따라서 웹 서버는 정적 컨텐츠를 제공하기 위한 용도로 사용된다. 여기서 정적 리소스는 모든 사용자에게 똑같이 보여지는 파일로써 어떤 클라이언트로부터 요청이 오든지 상관없이 항상 같은 파일을 제공한다. 웹 서버와 WAS의 큰 차이점은 동적 컨텐츠를 제공하는 유무이다. 항상 똑같은 파일을 제공하는 정적 컨텐츠에서 동적인 컨텐츠를 처리하기 위해 WAS가 존재한다. 보통 동적 컨텐츠가 요구되는 요청이 클라이언트로부터 왔을 때에는 웹 서버가 WAS에게 요청을 전달하지만 최근 WAS는 웹 서버의 역할..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/4ftvU/btrIc91z46o/0k6PxixgDesIXRIOBQuVu0/img.png)
실행계획이란 말 그대로 요청받은 SQL문으로 데이터를 옵티마이저가 '어떻게 가져올 것인지'에 대한 계획 또는 경로를 의미한다. 같은 데이터를 가져오더라도 지름길을 통해 가져온다면 더 효율적으로 데이터를 가져올 수 있을 것이다. 요청할 SQL문의 실행계획을 확인하려면 EXPLAIN, DESCRIBE, DESC 중 아무 키워드나 사용하면 된다. EXPLAIN 키워드를 사용해 SQL의 실행계획을 확인해보면, 다음과 같이 id, select_type, table, type, key 등의 정보가 출력된다. 위 사진은 임의의 post라는 테이블에 explain select * from post; 쿼리를 보냈을 경우 실행계획을 보여준다. 이 정보들을 통해 옵티마이저가 요청받은 SQL문을 비효율적으로 수행하진 않는지,..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/FmF8Q/btrH74HeF52/NcjlSgJx2s9RJzyExaj9rk/img.png)
프록시 객체 - JPA에서 프록시 객체는 객체 탐색을 자유롭게 하기 위해서 필요한 시점에 쿼리를 날려 Entity화 하는 기술이다. - JPA는 프록시 객체라는 기술을 이용해 연관된 객체를 처음부터 데이터베이스에서 조회하지 않고, 실제 사용하는 시점에 SELECT 쿼리를 통해 조회할 수 있다. - JPA는 연관된 객체를 가져오는 시점에 따라 지연로딩(LAZY), 즉시로딩(EAGER) 두 가지 옵션을 제공하며 연관관계 매핑 어노테이션에서 FetchType 옵션을 통해 설정할 수 있다. 즉시로딩(EAGER), 지연로딩(LAZY) 1. 지연로딩(LAZY) 1) find 등을 통해 Member 엔티티를 가져온다. 그러면 그 안에 주문리스트가 있을 것이고, 주문리스트는 프록시 객체로 저장되어 있다. 2) 그 후에..
![](http://i1.daumcdn.net/thumb/C148x148.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/DxGSN/btrIdYyxp8r/Rk8vbOvkEU5r2SNbE1L8z1/img.png)
영속성 컨텍스트 관련 주요 용어 [Entity] 테이블과 매핑되는 객체이다. [EntityManagerFactory] EntityManager를 생성해주는 factory 성질을 갖는 Bean이다. Thread-safe하게 구현되어 있어서 여러 쓰레드가 동시에 접근해도 무방하다. [EntityManager] Entitiy와 관련된 일들을 담당한다. 즉, Entity를 저장하고, 수정하고, 삭제하고, 조회하는 (CRUD) 등 Entity와 관련된 모든 일을 처리한다. Thread-safe 하지 않기 때문에 EntitiyManagerFactory를 통해서 계속해서 새로운 EntityManager를 생성하도록 해서 단일 쓰레드가 EntitiyManager에 접근하도록 한다. 참고) JPA는 인터페이스일 뿐이며 ..
- Total
- Today
- Yesterday
- helm
- db
- Kubernetes
- golang
- Stream
- Non-Blocking
- GitOps
- ubuntu
- CICD
- github actions
- 컨트롤러
- 우분투
- Controller
- rolling update
- docker
- argocd
- Java
- 카프카
- spring
- jvm
- go
- ci/cd
- RDB
- kafka
- Linux
- 코틀린
- 쿠버네티스
- K8s
- container
- LFCS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |