시스템 설계 시 고려해야 하는 것 중에 데이터베이스의 다중화도 빠질 수 없다.도커로 직접 데이터베이스를 구성하여 운영을 했었는데 다중화는 꼭 해야 될 것이라고 생각했다. 찾아보니 MHA(Master High Availability)라는 솔루션을 알게 되었고, 혼자 구성하고 테스트를 하다가 Master 서버가 다운되었을 때 Slave 서버가 승격하지 못하는 상황에 부딪히고 원인과 해결 방법을 찾지 못한 채 더 이상 진행을 하지 못했었다. (다시 한번 도전해보도록..) - 관련 깃허브본 글에서는 데이터베이스의 다중화가 무엇이고 다중화를 진행하였을 때 동작 방식 그리고 장애가 발생하였을 때 어떻게 해결할 수 있는지에 대해 알아보려고 한다. 데이터베이스의 다중화와 필요성데이터베이스의 다중화는 말 그대로 데이터베..
요즘 시스템은 다중화 설계에 대한 필요성이 중요해졌다.다중화 설계할 때 가장 첫 번째로 고려해야 할 부분은 서버의 다중화이다. 서버를 여러 대로 구성했다면, 클라이언트의 요청을 해당 서버들에게 처리하도록 보내도록 로드 밸런서를 설정해야한다. 서버 다중화 + 로드 밸런서는 1 + 1 개념이라고 생각한다.본 글에서는 로드 밸런서에 대해 알아보고 로드 밸런서에서 지원하는 기능 중 고정세션도 함께 알아보려고 한다.로드 밸런서둘 혹은 셋 이상의 중앙처리장치 또는 저장 장치와 같은 컴퓨터 자원에 트래픽을 분산하는 장치나 소프트웨어이다. 로드 밸런싱한다는 것은, 여러 서버나 리소스에 트래픽이나 작업을 분산한다는 것이다. 다음은 로드밸런서를 적용하지 않은 경우와 적용한 경우에 대한 그림이다.서버는 여러 대로 구성은 하..
정적 컨텐츠와 동적 컨텐츠정적 컨텐츠는 사용자 요청에 관계 없이 항상 동일하게 제공되는 컨텐츠이다. 별도의 데이터 처리가 필요 없이 모든 사용자에게 동일한 결과를 반환하고, 미리 생성되어 있기 때문에 빠르게 로드된다.예로 HTML, CSS, JavaScript 파일, 이미지, 비디오 등이 있다. 동적 컨텐츠는 사용자 요청에 따라 실시간으로 생성되거나 업데이트되는 컨텐츠이다. 서버의 연산 및 데이터베이스와 상호작용이 필요하기 때문에 정적 컨텐츠에 비해 상대적으로 처리 시간이 더 걸린다.예를 들어 사용자의 정보마다 페이지가 달라야 되는 경우, 실시간으로 데이터가 업데이트 되는 주식이나 실시간 뉴스가 있다. 정적 컨텐츠 캐싱, CDN정적 컨텐츠 캐싱 방법으로 CDN(Content Delivery Networ..
캐시는 데이터를 빠르게 제공하기 위해 사용된다고 알고 있었다.캐시는 웹 사이트나 앱에서 데이터를 빠르게 제공하기 위해 중요한 역할을 한다. 나같은 경우 조금이라도 느릴 경우 왜 이렇게 느린가하며 재시도를 하거나 껐다가 다시 켜는 경우도 있었다. 다른 외부적인 요인도 포함되겠지만, 속도에 대한 문제는 캐시를 제외시킬 수는 없다.캐시는 속도와 같은 시스템의 효율성을 향상시키기 위해 너무나 중요하기 때문에 많은 시스템에서 사용되고 있을 것이다. 그래서 이번에 캐시와 캐싱 전략에 대해 알아보려고 한다.캐시와 캐싱캐시는 자주 사용하는 데이터를 미리 복사해 놓은 임시 저장소를 말하며, 캐싱은 데이터를 캐시에 저장하고 활용하는 행위나 과정을 의미한다.캐싱을 잘 활용하면 응답 시간을 줄이고, 데이터베이스의 부하를 줄이..
Nginx 는 세계에서 널리 쓰이는 웹 서버로서 리버스 프록시(reverse proxy)라고도 불리며, 가볍고 높은 성능을 제공한다.또한 다양한 기능을 제공하는데, 본문에서 Nginx는 어떠한 기능을 제공하는지에 대해 알아보려고 한다.HTTP 웹 서버Nginx는 HTTP 웹 서버로서, 클라이언트로부터 HTTP 요청을 받아 웹 페이지에 필요한 정적 컨텐츠(HTML, CSS, JavaScript, 이미지 등)를 제공하며 리버스 프록시를 통해 동적 컨텐츠 또한 제공한다.즉, 정적 컨텐츠를 직접 제공할 수 있고 동적 컨텐츠에 대해서는 백엔드 서버로 전달하여 그 결과를 클라이언트에게 반환할 수 있다. 리버스 프록시Nginx는 리버스 프록시로서, 클라이언트의 요청을 백엔드로 전달하고 백엔드 서버의 응답을 클라이언트..
오랜 기간동안 RDBMS는 데이터를 저장하고 관리하는데 표준적인 시스템으로 많이 사용되어 왔다.하지만 언제부턴가 NoSQL의 사용이 증가하기 시작했는데, 그 이유는 다음과 같다. 1. 2000년대 후반부터 데이터 저장 비용이 크게 감소했다.다음은 시간 흐름에 따른 데이터 MB 비용을 나타낸다. 가격은 1985년부터 점차 하락되기 시작해서 2000년대 쯤에는 크게 하락된 것을 볼 수 있다. (최근 2022년에는 1MB 당 0.000014 달러로, 계속 하락하고 있다는 것을 알 수 있다. - 참고 자료)데이터 저장 비용이 감소하면서, 중복 데이터를 저장하는 것이 비용 면에서 큰 부담이 되지 않을 수도 있다. 데이터 양이 많다고 가정하였을 때, RDBMS는 정규화 기법을 사용하고 데이터 중복을 최소화하여 저장..
이 글을 쓰기 이전에 . . 잘못된 쿼리를 작성하면서 데이터 조회 속도가 매우 느리다는 것을 알게되었다. (데이터를 가져오기 위해 다중 조인이 필요했고 복잡하다고 느꼈던 쿼리문에 대해서 동작에 이슈가 없는지만 체크했던게.. 😥) 성능 개선을 위한 여러가지 방법을 확인해봤지만 가장 쉽게 접근할 수 있었던 건 쿼리를 다시 작성하는 것이었다. 이 과정속에서 또 알아가는 건 내가 작성하는 쿼리의 실행계획을 확인할 수 있다는 것과 옵티마이저의 하는 일 이었다. . . . 옵티마이저는 쿼리를 최적으로 실행하기 위해 각 테이블의 데이터가 어떤 분포로 저장되어 있는지 통계 정보를 참조하고, 기본 데이터를 비교하여 최적의 실행 계획을 수립하는 작업을 담당한다. 종류 비용 기반 최적화(Cost-based optimizer..
worker process 는 클라이언트로부터 요청받는 이벤트를 처리하는 프로세스이며 다음과 같은 특징이 있다. 각 worker process는 싱글 스레드로 동작한다. non-blocking 방식으로 요청을 처리하여 Context Switching을 최소화 한다. 설정 및 확인 nginx.conf worker_processes number | auto; worker process 확인하기 //worker_processes 설정 하지 않았을 때 프로세스 확인 root@79f15debee4d:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 13:03 ? 00:00:00 nginx: master process nginx -g daemon off; nginx ..
stop docker stop 명령어를 사용하게 되면 컨테이너는 SIGTERM 시그널을 받는다. SIGTERM 이란 프로그램의 종료를 유발하는 상태이다. 사용법 docker container stop [container_name] pause docker pause 명령어를 사용하게 되면 컨테이너는 SIGSTOP 시그널을 받게 된다. SIGSTOP 이란 프로세스를 중단시킨 상태로 종료한 상태는 아니다. 사용법 docker container pause [container_name] // pause 명령어로 중단시킨 컨테이너 재개하는 방법 docker container unpause [container_name] 컨테이너 상태 확인 docker ps 1d6190ac286f mysql:8.0.29 "docker..
내용을 읽기 전 용어에 대해 정의한다. 기본 테이블 : 물리적으로 실제 존재하는 테이블이다. 뷰 테이블 : 기본 테이블로부터 유도된 가상 테이블, 데이터 사전에만 있고 실제 데이터는 기본 테이블의 데이터를 사용한다. . . . 정의 하나 이상의 뷰 테이블은 기본 테이블로부터 유도되어 정의되는 가상 테이블이다. 기본 테이블처럼 로우와 컬럼을 포함하며, 컬럼은 기본테이블에 실제로 있는 컬럼이다. 장점 논리적 독립성 제공 뷰는 논리 테이블이므로 테이블의 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 된다. 사용자 데이터 관리 용이 복수 테이블에 존재하는 여러 종류의 데이터에 단순한 질의어 사용이 가능하다. 데이터 보안 용이 중요 보안 데이터를 저장 중인 테이블에는 접근 불허하며, 해당 테이블..
- Total
- Today
- Yesterday
- Red-Black Tree
- nosql
- 고정 세션
- HashSet
- 인터페이스
- 추상클래스
- fail-safe
- Sticky Session
- 로드 밸런서
- 다중화
- 자동구성
- syncronized
- Caching
- Spring
- 오블완
- 티스토리챌린지
- spring boot
- JPA
- Security
- AutoConfiguration
- fail-fast
- 인스턴스변수
- java
- HashMap
- Hash
- Load Balancer
- @conditional
- object
- nginx
- 정적변수
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
29 | 30 | 31 |