웹 개발에서 성능 최적화는 사용자 경험을 결정하는 중요한 요소입니다. 이 중에서도 캐싱은 빠른 데이터 접근과 서버 부하 감소에 핵심적인 역할을 합니다. 오늘은 캐싱 알고리즘의 기본 원리와 주요 알고리즘 종류에 대해 살펴보겠습니다. 캐싱이란 자주 사용되는 데이터를 미리 메모리에 저장해 두어, 필요할 때 빠르게 접근할 수 있도록 하는 기술입니다. 이는 데이터베이스나 파일 시스템과 같은 상대적으로 느린 저장소 대신, 빠른 접근이 가능한 메모리에 데이터를 보관합니다. 가장 많이 사용되는 캐싱 알고리즘은 다음과 같습니다: LRU (Least Recently Used): LRU 알고리즘은 가장 오랫동안 사용되지 않은 데이터를 캐시에서 제거하는 방식으로 작동합니다. 이는 최근에 사용된 데이터가 미래에 다시 사용될 가..
web
암호화는 디지털 세계에서 개인 정보를 보호하고 안전한 통신을 가능하게 하는 필수적인 기술입니다. 이 글에서는 공개 키와 개인 키, 두 가지 주요한 암호화 키에 대해 자세히 알아보고, 이들이 어떻게 안전한 통신을 지원하는지 살펴보겠습니다. **공개 키 암호화의 개념:** 공개 키 암호화는 두 개의 키를 사용하는 암호화 방식입니다: 공개 키와 개인 키. 이 두 키는 수학적으로 연관되어 있지만, 하나를 알더라도 다른 하나를 유추하기는 매우 어렵습니다. 1. **공개 키 (Public Key)**: - 공개 키는 누구나 접근할 수 있으며, 이를 사용해 메시지를 암호화하거나 디지털 서명을 검증할 수 있습니다. - 예를 들어, 사용자 A가 사용자 B에게 안전하게 메시지를 보내고 싶을 때, A는 B의 공개 키를 사용..
HTTP 상태 코드는 웹 브라우저와 웹 서버 간의 상호 작용을 나타내는 3자리 숫자입니다. 이 숫자는 특정 HTTP 요청이 성공했는지, 리디렉션 필요한지, 클라이언트 오류인지, 서버 오류인지 등을 나타냅니다. 다음은 주요 HTTP 상태 코드에 대한 요약입니다. 코드 설명 1xx (정보 응답) 100 Continue 101 Switching Protocols 2xx (성공) 200 OK 201 Created 204 No Content 3xx (리디렉션 필요) 300 Multiple Choices 301 Moved Permanently 302 Found (임시 리디렉션) 4xx (클라이언트 오류) 400 Bad Request 401 Unauthorized 403 Forbidden 404 Not Found 5..
이번 주제는 http와 https에 대해 간단히 다뤄볼까 하다. http(HyperText Tranfer Protocol) 특징 1. 영어로 된 것을 직역하면 하이퍼텍스트 교환 프로토콜이다. 다시 말하면 웹 서버와 브라우저 간 하이퍼텍스트 문서를 교환하는 프로토콜을 의미한다. 2. 암호화없이 교환하기 때문에 도중에 해커가 데이터를 탈취하거나 변조 될 수 있는 위험한 면이 있다. 3. 포트번호는 80이다. https(HyperText Tranfer Protocol Secure) 특징 1. 웹 서버와 브라우저 간에 데이터를 교환하기 전 SSL나 TLS 프로토콜을 통해서 데이터를 암호화를 시키고 전송하는 프로토콜이다. 2. 전송방식은 크게 대칭키, 공개키 나눠진다. 3. 포트번호는 443이다. 4. https..
기본적으로 캐싱은 접근되어진 데이터들의 뭉치들을 저장하는 능력을 의미한다. 그래서 웹 자원을 효율적으로 쓰기 위해서는 캐싱이라는 부분이 중요하다. 마침 Rest의 가장 큰 특징인 부분이 바로 Cacheable이고, Http에 대한 리소스들을 캐싱을 하게 되면 성능에 있어서 이점을 가지게 된다. 클라이언트는 서버를 위해 캐싱된 응답을 반환해주고, Http 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능하다. Last-Modified응답 날짜 헤더는 언제 응답이 나타났는지 가리키는 데 반면에, Last-Modified 헤더는 지난 할당되어진 자원이 바뀔 때 가리킨다. 그래서 Last-Modified value는 Date value보다 최근일 수가 없다. Las..
Rest의 다음 특징은 Stateless이다. Stateless는 서버에 클라이언트에 대한 상태를 저장하지 않는 것을 의미한다. 대신 클라이언트에서 서버까지 보내지는 각각의 요청은 서버가 요청을 처리할 수 있도록 하는 정보가 포함이 되어야 한다. 그래서 클라이언트 쪽에서는 서버에 관련된 모든 상태를 관리하고 저장하는 책임이 있다. 그림 출처 : https://www.slideshare.net/KishrorKumar/getting-started-with-wp-rest-api 그림을 보시다시피 각 요청에 대해서는 서로 의존적이지 않기 때문에 서버 입장에서는 많은 요청들을 처리가 가능하게 된다. 게다가 요청들이 제대로 서버에 전달되었는지에 대해서 보장받기 위한 동기화 처리를 굳이 기다릴 필요가 없게 된다. 그..
Rest API 특징들 중에서 이번에는 Uniform Interface에 대해 설명할 까 하다. 정의는 URL로 지정된 리소스에 대한 조작을 통일하고 한정된 인터페이스로 수행하는 아키텍쳐 스타일이다. 단순히 정의로만 생각을 하면 추상적으로 들려 이해가 가지 않을 수가 있으니 한 번 풀어서 설명해볼려고 한다. 여러 특징들을 나누어서 Rest API에 관한 정의를 이해할 수 있다고 생각한다. 1) URL과 한정된 인터페이스예전에는 param을 통해 해당 resource에 접속을 할 수 있었다. 예를 들면 programmer7895.tistory.com?user=admin 이라는 URI를 통해서 관리자모드로 들어갈 수 있었다. 하나의 param이라면 상관이 없지만, 상황에 따라서는 URI 주소가 길어지는 염려..
RESTful API는 웹 서비스에서 가장 인기 있는 디자인 패턴 중 하나입니다. REST는 Representational State Transfer의 약자로, 웹의 장점을 최대한 활용할 수 있는 아키텍처를 의미합니다. RESTful API는 HTTP 프로토콜을 기반으로 구축되며, 웹 서비스 간 통신을 단순하고 일관성 있게 만들어줍니다. API는 Application Programming Interface의 약자로, 다른 소프트웨어와 소통하기 위한 방법을 제공합니다. RESTful API의 특징 1. Stateless RESTful API는 상태를 유지하지 않습니다. 이는 각 요청이 서버에서 처리되는 독립적인 트랜잭션이라는 것을 의미합니다. 서버는 클라이언트의 이전 요청에 대한 정보를 기억하지 않으며, ..
로드 밸런싱은 주로 자원에 대한 최적화, 처리량 최대화, 지연율 최소화를 해준다. nginx는 여러 애플리케이션 서버에 트래픽을 분산해주고, 퍼포먼스를 향상시켜주고, 확장성, 신뢰성을 바탕으로 매우 효율적인 Http 로드밸런싱을 제공해준다. 로드밸런싱은 다음과 같은 메소드를 제공한다. 1. 라운드 로빈(round-robin) 2. 가장 접속량이 적은 서버에 할당(Least-connected) 3. 다음 요청은 전에 들어왔던 서버에 할당(ip-hash) 다음은 로드밸런싱의 기본값(default) 세팅이다. (Round-robin) http { upstream application { server www.server1.com; server www.server2.com; server www.server3.co..
출처 : https://docs.spring.io/spring-framework/docs/2.0.x/reference/mvc.html 스프링이 어떠한 방식으로 돌아가는지 차근차근히 설명해 보려한다. 1. 클라이언트에서 요청이 오면 웹 컨테이너에서 web.xml를 거치게 된다. web.xml 안에는 dispatcher servlet 에 가기에 앞서, listener를 통해 스프링에 필요한 설정(context) 들을 읽어들이고, 필요한 객체들을 등록해주는 역할을 한다. 그리고 을 통해 어떤 위치에 있는지 설정이 가능하다. (없으면 설정들을 불러오는 것이 불가능하다.). applicationContext.xml 안에는 각종 빈 등록(패키지 안에 존재하는 클래스 및 DB 영역)을 담당하는 곳이라 생각하면 된다...