시스템 설계 시 고려해야 하는 것 중에 데이터베이스의 다중화도 빠질 수 없다.도커로 직접 데이터베이스를 구성하여 운영을 했었는데 다중화는 꼭 해야 될 것이라고 생각했다. 찾아보니 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는 정규화 기법을 사용하고 데이터 중복을 최소화하여 저장..
인증을 알아보기 이전에, 스프링 시큐리티의 필터를 먼저 알아야한다. 필터에서의 주요 개념들은 이전 글을 통해 확인할 수 있다.2024.11.17 - [Framework/Spring] - Spring Security 의 첫 걸음 Spring Security 의 첫 걸음스프링 시큐리티에 대해 전무한 상태였다.스프링 시큐리티를 이용하면 사용자의 인증, 인가 그리고 보안 처리를 할 수 있다. 그 과정에서 필터는 가장 중요한 핵심이라는 것을 알게 되었지만 그yeongnius.tistory.com 스프링 시큐리티에서 인증은 어플리케이션 보안의 첫 번째 단계이다. 어플리케이션에 접근하려는 사용자가 누구인지 확인하는 절차는 보안의 시작이자 중요한 요소 중 하나이다. 나중에 알아 볼 인가(Authorization)의 기..
스프링 시큐리티에 대해 전무한 상태였다.스프링 시큐리티를 이용하면 사용자의 인증, 인가 그리고 보안 처리를 할 수 있다. 그 과정에서 필터는 가장 중요한 핵심이라는 것을 알게 되었지만 그만큼 어렵게 느껴졌기 때문에 필터에 대해 천천히 알아보려고 한다.Filter와 FilterChainFilter클라이언트의 요청과 응답에 대해 전처리, 후처리를 수행하는 컴포넌트로 서블릿 앞 단에 위치해서 클라이언트의 요청-응답을 가로채서 인증, 인가, 로깅, 보안 등의 작업을 처리한다. 필터는 서블릿 컨테이너의 컴포넌트로 서블릿 컨테이너에 의해 관리된다. 이때 필터는 서블릿 컨테이너의 필터일 수도 있고, 스프링에서 제공하는 필터일 수도 있고, 개발자가 만든 필터일 수도 있다. 즉, 필터는 서블릿 컨테이너 내에서 관리되지만..
Lambda와 Stream은 Java8부터 도입되었지만, 그동안 개발하면서 Lambda와 Stream 사용에 대한 경험이 적어서 제대로 알지 못했다. 그래서 Lambda와 Stream이 무엇이고 왜 사용하는지에 대해 알아보려고 한다. Lambda 정의익명 함수(anonymous function)로, 메서드나 기능을 간단하게 표현할 수 있는 방법이다.Java 8에서 도입되었으며, 주로 함수형 인터페이스(Functional Interface)의 인스턴스를 생성하기 위해 사용된다. Lambda 문법(매개변수1, 매개변수2, ...) -> { 실행할 코드 }1. 람다는 메서드 이름이 없다.2. 람다는 반환 타입이 없다. 정확하게 말하자면 람다식은 값을 반환하는 식이지만, 그 자체로 변수를 할당하는 방식이 아니..
stack 영역은 지역변수나 함수와 같이 일시적으로 사용되는 데이터들이 저장되며, 함수 호출이 종료되면 해당 데이터는 사라진다. 반면, heap 영역은 new 연산자로 생성된 객체들이 할당되며 이 객체들은 메모리 관리법에 따라 해제된다. 이 메모리 관리법은 GC(Garbage Collection)이라고 하며, GC의 동작원리에 대해 알아보려고 한다.GC (Garbage Collection)메모리 관리 기법 중 하나로, 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요 없게 된 영역을 해제하는 기법이다.프로그램에서 사용중이거나 참조되고 있는 객체는 여전히 포인터를 유지되고 있지만, 참조되지 않는 객체는 더 이상 프로그램에서 참조되고 있지 않는다. 따라서 더이상 참조되지 않는 객체에 대한 메모리를 회수할..
- Total
- Today
- Yesterday
- nosql
- Load Balancer
- @conditional
- 오블완
- syncronized
- Caching
- 정적변수
- AutoConfiguration
- HashMap
- 로드 밸런서
- JPA
- 인스턴스변수
- Security
- Hash
- spring boot
- Spring
- 티스토리챌린지
- 다중화
- fail-fast
- 자동구성
- 고정 세션
- java
- 추상클래스
- Red-Black Tree
- 인터페이스
- HashSet
- object
- nginx
- fail-safe
- Sticky Session
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |