[네트워크] SNI와 암호화 기법
·
CS
"인터넷에서 HTTPS로 웹사이트에 접속할 때는 단순히 데이터를 주고받는 것이 아니라, 먼저 안전한 통신을 위한 암호화 과정을 거친다. 이 과정에서 중요한 역할을 하는 것이 TLS 핸드셰이크와 SNI(Server Name Indication)이다. SNI(Server Name Indication)현대의 웹 서버는 하나의 IP 주소에서 여러 개의 웹사이트나 서비스를 동시에 호스팅하는 경우가 많다. 예를 들어 하나의 서버가 naver.com, example.com, service.com 같은 여러 도메인을 동시에 제공할 수 있다. 이때 문제가 발생한다. HTTPS 연결을 시작하기 위해서는 서버가 클라이언트에게 해당 웹사이트의 인증서를 제공해야 하는데, 서버는 클라이언트가 어떤 웹사이트에 접속하려는지 알 수 ..
[백준 - G5] 17836. 공주님을 구해라!
·
알고리즘
문제용사는 마왕이 숨겨놓은 공주님을 구하기 위해 (N, M) 크기의 성 입구 (1,1)으로 들어왔다. 마왕은 용사가 공주를 찾지 못하도록 성의 여러 군데 마법 벽을 세워놓았다. 용사는 현재의 가지고 있는 무기로는 마법 벽을 통과할 수 없으며, 마법 벽을 피해 (N, M) 위치에 있는 공주님을 구출해야만 한다.마왕은 용사를 괴롭히기 위해 공주에게 저주를 걸었다. 저주에 걸린 공주는 T시간 이내로 용사를 만나지 못한다면 영원히 돌로 변하게 된다. 공주님을 구출하고 프러포즈 하고 싶은 용사는 반드시 T시간 내에 공주님이 있는 곳에 도달해야 한다. 용사는 한 칸을 이동하는 데 한 시간이 걸린다. 공주님이 있는 곳에 정확히 T시간만에 도달한 경우에도 구출할 수 있다. 용사는 상하좌우로 이동할 수 있다.성에는 이전..
[네트워크] 웹의 언어 HTTP와 HTTPS
·
CS
웹을 사용하면서 우리는 매일같이 브라우저 주소창에 URL을 입력합니다. 그 순간 보이지 않는 곳에서 수많은 통신이 오가는데, 그 중심에 있는 것이 바로 HTTP입니다. 오늘은 HTTP가 무엇인지, 왜 HTTPS가 필요한지, 그리고 그 기반이 되는 TLS까지 차근차근 설명해보겠습니다.1. HTTP란 무엇일까?HTTP(HyperText Transfer Protocol) 는 이름 그대로 하이퍼텍스트를 주고받기 위한 약속(프로토콜)입니다. 여기서 하이퍼텍스트란 '하이퍼링크'라는 논리적 연결을 통해 다른 문서나 리소스로 바로 이동할 수 있도록 구조화된 텍스트를 말합니다. 우리가 웹페이지에서 링크를 클릭하면 다른 페이지로 이동하는 것도 이 하이퍼텍스트 개념 덕분입니다.HTTP는 기본적으로 클라이언트-서버 모델을 사..
ProGuard
·
안드로이드/정리
ProGuardProGuard는 "단순히 코드를 알아보기 어렵게 만드는 난독화 도구"로만 알려져 있지만, 실제로는 자바 바이트코드를 분석하고 재구성하는 일종의 전처리 컴파일러에 가깝다.ProGuard는 자바 바이트코드(.class)를 대상으로 동작하는 도구로코드 난독화 (Obfuscation)코드 축소 (Shrinking)코드 최적화 (Optimization)를 수행한다. ProGuard의 핵심 원리는 크게 네 단계로 나눌 수 있다.첫 번째는 분석(Analysis) 단계다. 이 단계에서 ProGuard는 모든 클래스, 메서드, 필드 간의 참조 관계를 그래프 형태로 분석한다. 어떤 코드가 실제로 사용되고 있는지, 어디서 호출되는지, 서로 어떤 의존성을 가지는지를 추적한다.두 번째는 축소(Shrinking)..
[백준 - S4] 1059. 좋은 구간
·
알고리즘
문제정수 집합 S에서 n이 포함되는 좋은 구간 [A, B]의 개수를 구하기좋은 구간 [A , B]란A 를 만족하는 모든 정수 구간 제출 코드 및 문제 풀이1. n이 속하는 S에서의 구간을 구한다. => [left, right]2. 이중 for문으로 left + 1에서 right - 1 까지의 모든 경우의 수를 구한다. 주의 할 점집합 S를 정렬해야 한다.n은 최대 범위가 집합 S에서의 가장 큰 원소이지만, 최소 범위는 n >= 1이다.[5, 10, 15] 라면, 좋은 범위는 [1, 2], [1, 3], [1, 4] 가 된다. public class Main { static int S; static int[] nums; public static void main(String[] args)..
[네트워크] 도메인 이름은 어떻게 IP 주소로 변환될까?
·
CS
우리가 웹 브라우저에 주소를 입력하고 엔터를 누르는 짧은 순간, 인터넷 내부에서는 여러 단계의 통신이 순차적으로 일어난다. 이 과정의 핵심에는 사람이 이해하기 쉬운 도메인 이름을 컴퓨터가 이해할 수 있는 IP 주소로 변환해 주는 DNS(Domain Name System) 가 있다. 인터넷에 연결된 모든 장치는 고유한 IP 주소를 통해 서로를 식별한다. IPv4 주소는 192.168.10.25와 같이 숫자와 점으로 이루어져 있는데, 이는 사람이 기억하고 사용하기에 매우 불편하다. 이러한 문제를 해결하기 위해 문자 기반의 이름을 숫자 주소에 대응시키는 체계가 필요해졌고, 그 결과 DNS가 등장했다.DNS 덕분에 우리는 복잡한 숫자를 외울 필요 없이 www.naver.com과 같은 직관적인 이름으로 서버에 접..
[네트워크] 인터넷의 정보는 어떻게 움직일까
·
CS
인터넷은 단일한 네트워크가 아니라, 수만 개의 네트워크가 서로 연결된 거대한 집합체다. 이 각각의 네트워크를 자율 시스템(Autonomous System, AS) 이라고 부르며, 인터넷은 이 AS들이 복잡하게 얽혀 데이터를 주고받는 구조로 이루어져 있다.이 글에서는 AS 간의 경로를 결정하는 핵심 프로토콜인 BGP(Border Gateway Protocol) 와 실제 데이터 전송에 사용되는 UDP, TCP, QUIC 전송 프로토콜까지 흐름 중심으로 정리하였다. 자율 시스템(AS)과 BGP의 역할AS는 하나의 관리 주체(ISP, 기업, 기관 등)가 운영하는 네트워크 집합이다. 하나의 AS 내부에서는 자체적인 라우팅 정책을 사용하지만 AS와 AS 사이를 연결하고 경로를 교환하는 역할을 담당하는 것이 바로 B..
[백준 - G4] 15685. 드래곤 커브
·
알고리즘
문제이 문제는 문제에서 주어진 규칙 그대로 드래곤 커브를 격자 위에 그려보는 구현 문제이다.드래곤 커브가 여러 개 주어지며, 모든 커브를 격자에 그린 뒤 1×1 크기의 정사각형 중 네 꼭짓점이 모두 드래곤 커브에 포함되는 개수를 세는 것이 목표다. 1. 방향 리스트로 드래곤 커브 표현하기드래곤 커브의 핵심은 방향의 나열이다. 선을 직접 회전시키는 대신, 이동 방향을 리스트로 관리하면 훨씬 간단하게 구현할 수 있다.0세대 드래곤 커브는 시작 방향 d 하나로 구성된다.이후 세대는 이전 세대의 방향 리스트를 이용해 생성한다.세대를 확장하는 규칙은 다음과 같다.이전 세대의 방향 리스트를 뒤에서부터 탐색하면서,각 방향을 시계 방향으로 90도 회전한 값을 리스트 뒤에 추가한다.(시계 회전은 (dir + 1) % ..
[백준 - S3] 1002. 터렛
·
알고리즘
문제이 문제는 두 원의 위치 관계에 따라 교점의 개수를 판별하는 문제이다.핵심은 두 원의 중심 간 거리와 반지름의 합 / 차를 비교하는 것이다. 먼저 두 원의 중심 사이 거리를 직접 구하지 않고 거리의 제곱값을 사용해 비교한다. 이는 sqrt 연산을 피함으로써 연산 비용을 줄이고 부동소수점 오차를 방지할 수 있다.d : 두 원 중심 사이 거리의 제곱sum : 두 반지름의 합의 제곱 → 외접 판단 기준diff : 두 반지름의 차의 제곱 → 내접 판단 기준 두 원의 중심이 같고 반지름도 같은 경우두 원이 완전히 일치하므로 교점의 개수는 무한대이다.→ -1 출력두 원이 서로 만나지 않는 경우중심 거리(d)가 반지름 합보다 큰 경우 → 서로 너무 멀리 떨어짐중심 거리(d)가 반지름 차보다 작은 경우 → 한 원이..
[네트워크] 인터넷에서 기기는 어떻게 통신할까?
·
CS
프로토콜(Protocol)인터넷에 연결된 수많은 기기들이 서로 통신하기 위해서는 공통의 언어가 필요합니다. 이것이 바로 프로토콜입니다. 프로토콜은 기기가 인터넷에서 어떻게 통신해야 하는지, 오류가 발생했을 때 어떻게 대처해야 하는지에 대한 규칙을 정의합니다. 주요 통신 프로토콜대표적인 프로토콜로는 TCP, UDP, QUIC이 있습니다.TCP: 패킷을 정확하고 완전한 형태로 전송하지만 속도가 느린 편UDP: 정확한 패킷 전달이나 전송 순서보다 속도를 우선시하는 프로토콜QUIC: 이 둘의 장점을 결합한 형태로, 여러 개의 빠른 UDP 연결을 활용하면서도 TCP 처럼 정확하고 신뢰할 수 있는 방식으로 데이터 전송하는 프로토콜 표준과 프로토콜을 다루는 국제기구1) 미국전기전자학회(IEEE) : 802.11과 같..