본문 바로가기
반응형

분류 전체보기313

여러 대의 서버가 세션(Session)을 공유하는 방법 HTTP 프로토콜의 특징 중 하나는 무상태성(Stateless)이다. 상태가 없기 때문에 서버는 요청이 왔을 때 이전 클라이언트와 동일한 클라이언트인지 확인할 방법이 없다. 이는 세션(Session)을 통해 해결한다. 세션이란 쿠키를 기반으로 일정 시간 동안 같은 브라우저로부터 들어오는 요구를 하나의 상태로 보고 그 상태를 유지하는 기술이다. 또한, 세션은 서버에 저장 및 관리된다. 서비스의 규모가 조금만 커지더라도 대부분의 서비스들은 하나가 아닌 여러 대의 서버를 두고 운영한다. 하지만 트래픽이 여러 서버로 분산되지 않고 한 서버로만 집중된다면 여러 대의 서버를 둘 이유가 없어진다. 따라서 트래픽을 여러 대의 서버에 적절히 분산시켜줘야 하는데 이를 가능하게 해주는 친구가 바로 로드 밸런싱(Load Ba.. 2021. 8. 24.
백준 15678 : 연세워터파크 https://www.acmicpc.net/problem/15678 15678번: 연세워터파크 첫 줄에 징검다리의 수 N과 문제에서 설명한 D가 주어진다. (2 ≤ N ≤ 105, 1 ≤ D ≤ N-1) 이어 N개의 정수로, 각 징검다리에 쓰인 수 Ki가 1번 징검다리부터 N번 징검다리까지 순서대로 주어진다. (-109 www.acmicpc.net [ 문제풀이 ] 11003 최솟값 찾기 문제랑 거의 비슷한 문제이다. 좌측에서 우측으로 탐색하면서 구간 내의 최댓값을 유지해주면 되는 문제이기 때문에 덱(Deque) 자료구조를 활용해서 항상 덱에 구간 내의 첫 번째, 두 번째 최댓값을 유지해준다. import java.io.BufferedReader; import java.io.BufferedWriter; i.. 2021. 8. 24.
[Spring] 빈 스코프(Scope) 종류 스프링 컨테이너에서 다양한 빈들을 관리해줌으로써 애플리케이션을 개발할 때 굉장히 편리하게 개발할 수 있는 장점이 있다. 스프링 빈의 생명주기는 다음과 같다. 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸 전 콜백 -> 스프링 종료 빈 스코프란 빈이 스프링 컨테이너에서 존재할 수 있는 범위를 의미한다. 스프링은 다양한 스코프를 지원하는데 싱글톤, 프로토타입, 웹 관련 스코프들에 대해서 알아보도록 하자. 싱글톤 스코프 스프링 컨테이너에 빈을 등록하면 기본적으로 싱글톤 패턴으로 빈을 관리해준다. 애플리케이션 생명주기 동안 해당 빈의 요청이 발생할 때마다 항상 동일한 빈을 제공해줘야 하기 때문에 싱글톤 스코프는 스프링 컨테이너의 시작과 종료, 모든 생명주기.. 2021. 8. 23.
백준 9328 : 열쇠 https://www.acmicpc.net/problem/9328 9328번: 열쇠 상근이는 1층 빌딩에 침입해 매우 중요한 문서를 훔쳐오려고 한다. 상근이가 가지고 있는 평면도에는 문서의 위치가 모두 나타나 있다. 빌딩의 문은 모두 잠겨있기 때문에, 문을 열려면 열쇠가 www.acmicpc.net [ 문제풀이 ] bfs + set을 활용하면 해결할 수 있는 문제이다. Key의 종류가 최대 26개이기 때문에 이를 비트로 표현하려면 2^26(67108864)만큼의 공간이 필요하다. 이는 쓸데없는 메모리를 많이 사용하기 때문에 set을 이용해서 관리해주도록 하자. 또한, 시작점을 어디부터 시작하느냐에 따라서 얻을 수 있는 문서의 개수가 달라지기 때문에 한 번의 탐색으로 처리할 수는 없다. 따라서 아직 발견하.. 2021. 8. 23.
[Spring] 싱글톤 컨테이너 : CGLIB 스프링 컨테이너에 빈(Bean)을 등록하면 기본적으로 싱글톤 패턴으로 빈을 관리하게 된다. 따라서 해당 빈을 요청하게 되면 항상 동일한 빈을 반환해주는 것을 확인할 수 있다. 물론 기본 빈 등록 방식이 싱글톤 방식이라는 의미이며, 요청할 때마다 새로운 객체를 생성하여 반환해주는 프로토타입 방식 등 빈 스코프에 따라 다른 방식도 제공한다. 싱글톤 패턴이란 클래스의 인스턴스가 1개만 생성됨을 보장해주는 디자인 패턴으로 해당 인스턴스를 공유하여 사용함으로써 메모리를 절약할 수 있는 장점이 있다. 싱글톤 패턴에 대해서 공부하고 싶다면 다음 글들을 참고하길 바란다. https://sorjfkrh5078.tistory.com/107?category=1007502 싱글톤 패턴(Singleton Pattern) 싱글톤.. 2021. 8. 22.
[Java] 상속(Inheritance) vs 위임(Delegation) 객체지향 프로그래밍에서 서로 연관된 객체들의 관계를 표현할 때 상속(Inheritance)과 위임(Delegation) 관계로 많이 표현한다. 디자인 패턴을 공부해보면 이들을 활용함으로써 보다 객체지향적인 설계가 가능해지는 장점이 있다. 하지만 이들은 각각 장단점이 존재하며 사용해야 하는 상황이 다르기 때문에 무분별하게 남용하게 되면 클래스 간의 결합도가 강해 지거나 의존성이 높아지는 등 오히려 설계에 어려움이 생기게 될 수도 있다. 따라서 이번 기회에 이들의 장단점과 차이점, 언제 사용해야 하는지에 대해서 알아보도록 하자. 상속(Inheritance) 상속은 is a 관계로 extends 키워드를 통해 부모의 속성들을 자식이 물려받아서 사용할 수 있도록 해주는 관계이다. 부모의 속성을 물려받기 때문에 .. 2021. 8. 22.
백준 1600 : 말이 되고픈 원숭이 https://www.acmicpc.net/problem/1600 1600번: 말이 되고픈 원숭이 첫째 줄에 정수 K가 주어진다. 둘째 줄에 격자판의 가로길이 W, 세로길이 H가 주어진다. 그 다음 H줄에 걸쳐 W개의 숫자가 주어지는데, 0은 아무것도 없는 평지, 1은 장애물을 뜻한다. 장애물이 있 www.acmicpc.net [ 문제풀이 ] 일반적인 bfs + dp 문제에서 말로 움직일 수 있는 방법만 추가된 문제이다. 3차원 배열을 하나 선언해서 말의 방향으로 움직인 횟수에 따라 방문 표시를 해주면 된다. 가로길이가 W이고 세로길이가 H인 것만 주의하자. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.Input.. 2021. 8. 22.
포워드 프록시(Forward Proxy) vs 리버스 프록시(Reverse Proxy) 프록시 서버의 종류에는 포워드 프록시(Forward Proxy) 서버와 리버스 프록시(Reverse Proxy) 서버가 존재한다. 이들을 알아보기전에 먼저 프록시(Proxy) 서버에 대해서 알아보자. 프록시(Proxy)는 "대리"를 의미한다. 그렇다면 프록시 서버는 무언가를 대신 수행해주는 서버라고 생각할 수 있다. 프록시 서버는 클라이언트가 자신을 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 해주는 컴퓨터 시스템이나 응용 프로그램을 의미한다. 즉, 서버와 클라이언트 사이에 중계기로써 대리로 통신을 수행하는 친구가 바로 프록시 서버이다. 클라이언트 서버 사이에서 프록시 서버의 위치, 역할에 따라 포워드 프록시와 리버스 프록시로 나뉘게 된다. 포워드 프록시(Forward Proxy) 클라이언트.. 2021. 8. 21.
백준 2021 : 최소 환승 경로 https://www.acmicpc.net/problem/2021 2021번: 최소 환승 경로 첫째 줄에 역의 개수 N(1≤N≤100,000), 노선의 개수 L(1≤L≤100,000)이 주어진다. 다음 L개의 줄에는 각 노선이 지나는 역이 순서대로 주어지며 각 줄의 마지막에는 -1이 주어진다. 마지막 줄에는 출발 www.acmicpc.net [ 문제풀이 ] 단순 BFS 문제인 줄 알았는데 생각보다 많이 애를 먹은 문제이다. 10번의 시도만에 겨우 성공하였다... 이 문제를 풀기 위해선 노선을 정점으로 두는 것이 아닌 노선이 속하는 경로를 정점으로 두는 아이디어가 중요한 것 같다. 단순히 노선을 정점으로 BFS를 한다면 경로를 선택하는데 있어서 방문 표시로 인해 문제가 발생하게 된다. 따라서 노선이 속하는.. 2021. 8. 21.
반응형