본문 바로가기

분류 전체보기121

Socket을 이용해 HTTP Server 만들기 with 병렬 처리 Socket을 이용한 HTTP Server HTTP 통신은 당연히 Socket을 이용하는건데 어떻게 제목이 Socket을 이용한 HTTP Server이다. 이전 게시글 소켓을 활용한 Echo Server 만들기 소켓(Socket) 소켓은 네트워크에서 실행되는 두 프로그램 간의 양방향 통신 링크의 양 끝점을 말한다. 즉, 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써 oneny.tistory.com 소켓에 대한 개념과 소켓을 통해 에코 콘솔 서버 만든 게시글이다. HTTP Server 개요 1. Configuration 파일 읽기 프로그램의 설정 정보를 저장하는 파일을 읽어와서 프로그램이 동작할 환경설정을 구성한다. 이 설정은 포트번호, 파일 경로, 데이터베이스 연결 .. 2023. 9. 20.
전자서명 전자서명 송신자는 네트워크에서 송신자의 신원을 증명하는 방법으로, 자신의 유일한 신분(identity)을 증명할 수 있는 서명을 메시지와 함께 보낸다. 서명(signature)를 계산할 때, 메시지의 내용을 자신의 비밀키로 암화하면 수신자는 송신자의 공개키로 암호문을 해독한다. 사이버 공간에서는 정보들을 쉽게 위변조 할 수 있다. 따라서 전자 서명은 쉽게 사이버 공간에서의 인감으로 프로그램의 제작자를 확인하고, 거래를 한 사람이 자신이 맞다는 것을 증명하기 위해 나오게 되었다. 송신자의 서명은 다음과 같은 특징을 가진다. 변경 불가(Unalterable): 메시지가 변조되지 않았음을 증명할 수 있다. 서명자 인증(User Authentication): 메시지를 보낸 송신자의 신분을 증명할 수 있다. 부인.. 2023. 9. 11.
HMAC(Hash-based message authentication code) HMAC HMAC(Hash-based message authentication code)는 해시 함수와 비밀키를 사용하는 암호화 인증 기술이다. 서명 및 비대칭 암호화와는 다르게 HMAC은 공유 암호를 사용하여 인증하고 데이터가 올바르고 신뢰할 수 있는지를 확인한다. 송신자와 수신자는 통신 시 서로 주고 받는 내용이 비공개이길 원한다. 또한 인터넷은 신뢰할 수 없는 매체이기 떄문에 수신된 패킷이 변조되었는지를 확인할 방법이 필요하다. 이러한 경우 HMAC은 효과적인 해결방법이 될 수 있다. HMAC 이전에 MAC에 대해서 먼저 알아보자. MAC 메시지에서부터 해시함수를 이용해 계산된 해시값을 Message Digest라고 부른는데 이 Message Digest에 인증 정차를 추가한 것을 메시지 인증 코드.. 2023. 9. 9.
HTTPS(with 공개키 암호화 방식) HTTPS HTTPS는 웹 브라우저와 서버 간에 데이터를 전송하는데 사용되는 기본 프로토콜인 HTTP의 보안버전이다. HTTPS는 데이터 전송의 보안을 강화하기 위해 암호화된다. 이는 사용자가 은행 계좌, 이메일 서비스, 의료 보험 공급자에 로그인하는 등 중요한 데이터를 전송할 때 특히 중요하다. 그러면 HTTPS가 어떻게 작동하는지에 대해서 알아보기 위해 먼저 공개키 암호화 방식에 대해서 알아보자. 공개키 암호화 방식 최근 사용되는 대부분의 암호화 방식은 공개키 암호화 방식이다. 공개키 암호화 방식의 효시가 되는 DH 비밀키 교환 방식과 공개키 암호화 방식의 대표적인 예인 RSA 방식에 대해서 알아보자. 비밀키 암호화 방식의 문제 비밀키 암호화 방식은 암호화키를 여러 사람이 공유하기 때문에 암호화키가 .. 2023. 9. 9.
[구름톤 챌린지] 통신망 분석 풀이 과정 먼저, 이 문제를 풀 때 컴포넌트에 포함된 컴퓨터의 번호를 오름차순으로 공백을 두고 출력하라는 것을 보고, TreeSet 자료구조를 이용하면 좋지 않을까 생각했다. 그래서 나는 컴포넌트들을 TreeSet에 담아두고 밀도들을 비교해서 조건에 맞는 TreeSet을 업데이트하는 방식으로 문제를 풀었다. Static 변수 static ArrayList[] A; // 노드와 연결된 노드들의 정보를 담기 위한 배열 static TreeSet treeSet; // 나중에 가장 조건에 적합한 컴포넌트 static boolean visited[]; // 방문한 적이 있는지 확인하는 배열 static int indegree[]; // 아래에서 설명 static int totalOrigin = 0; // 컴포넌트.. 2023. 9. 6.
Spring MVC와 Spring WebFlux로 알아보는 Blocking I/O vs Non-blocking I/O Spring WebFlux에 대해 깊이있게 공부하기 보다는 Spring MVC와 Spring WebFlux를 통해 Blocking 방식과 Non-blocking 방식에서 스레드가 어떻게 동작하는지에 대해서 가볍게 알아보려고 합니다. 관련 블로그 blocking I/O vs non-blocking I/O (feat. socket I/O) I/O I/O는 input/output의 약자로, 데이터의 입출력을 의미한다. 이러한 I/O의 종류에는 일반적으로 우리가 알고 있는 file I/O, 프로세스 간의 통신을 할 때 사용되는 pipe I/O이 있다. 그리고 일반적인 디 oneny.tistory.com 위에서 Blocking I/O와 Non-blocking I/O에 대해서 공부했던 글이다. Spring MVC와.. 2023. 9. 5.
[구름톤 챌린지] 연합 풀이 과정 처음에는 입력값도 크고 그래서 잠시 유니온파인드인가? 라는 착각을 했었다.. 근데 그러한 문제는 아닌거 같고 그냥 DFS로 풀어보기로 했다. 여기서 핵심은 임의의 두 섬 a와 b에 대해, a번 섬에서 b번 섬으로 직접 이동할 수 있는 다리와 b번 섬에서 a번 섬으로 직접 이동하 룻 있으면, 두 섬은 연합을 결성하는 것이다. 그리고 주의해야할 점으로 a와 b가 연합을 결성하고 b와 c가 여합을 결성했다면 a와 c 역시 위 조건을 만족하지 않더라도 같은 연합에 속해있다고 보는 것이다. 따라서 예제 2번에서 1이 출력되는 것이다. static int count = 0; static boolean visited[]; static ArrayList[] graph; 먼저, static 필드로는 count.. 2023. 9. 4.
Deadlock 상황 만들어 VisualVM으로 분석하고, 해결하기 데드락(Deadlock) 운영체제 또는 소프트웨어의 잘못된 자원 관리로 인하여 둘 이상의 프로세스 또는 스레드들이 아무것도 진행하지 않는 상태로 서로 영원히 대기하는 상황을 말한다. 주로 한정된 자원을 여러 프로세스 및 스레드에서 동시에 사용하는 환경에서 서로 상대방이 사용 중인 자원을 쓰기 위해 대기하는 상황, 그러니깐 A가 B를 기다리고, B가 A를 기다릴 때 발생한다. 발생조건 상호 배제(Mutual Exclusion): 한 번에 한 스레드만 단독으로 리소스에 액세스할 수 있다. 즉, 리소스 자체를 동시에 쓸 수 없으며 한 번에 하나의 스레드만이 해당 리소스를 사용할 수 있다. 점유 상태로 대기(Hold and wait): 최소 하나의 스레드가 리소스를 점유하면서 다른 리소스에 대기를 해야 한다. .. 2023. 9. 3.
소켓을 활용한 Echo Server 만들기 소켓(Socket) 소켓은 네트워크에서 실행되는 두 프로그램 간의 양방향 통신 링크의 양 끝점을 말한다. 즉, 프로세스가 데이터를 보내거나 받기 위해서는 반드시 소켓을 열어서 소켓에 데이터를 써보내거나 소켓으로부터 데이터를 읽어들여야 한다. 다시 말해, 소켓은 떨어져 있는 두 호스트를 연결해주는 도구로써 인터페이스의 역할을 하는데 데이터를 주고 받을 수 있는 구조체로 소켓을 통해 데이터 통로가 만들어진다. 이러한 소켓은 역할에 따라 서버 소켓과 클라이언트 소켓으로 구분되는데 이에 대해서는 뒤에서 자세히 살펴보자. 소켓의 역할 클라이언트-서버 응용 프로그램에서 서버는 사용자가 원하는 정보를 전송하여 보여주는 서비스를 일부 제공한다. 이러한 클라이언트와 서버 간에 발생하는 통신은 신뢰할 수 있어야 한다. 즉.. 2023. 9. 1.