🌏 HTTP Header 주요 필드✅ Host클라이언트가 요청을 보낼 때 도메인 이름을 명시하는 헤더하나의 IP 주소에서 여러 도메인을 운영하는 가상 호스팅(Virtual Hosting) 환경에서 필수적HTTP/1.1부터 Host 헤더가 필수가 됨 (HTTP/1.0까지는 선택이었음)예시Host: www.example.com✔️ Virtual Hosting이란?하나의 서버(즉, 하나의 IP 주소)에서 여러 웹사이트를 동시에 운영하는 환경을 가상 호스팅(Virtual Hosting)이라고 하는데, 이때 Host 헤더가 필수적입니다.예를 들어 같은 서버에서 www.cafe.com, www.shop.com, www.blog.com 세 사이트를 운영한다면, 서버 입장에서는 단순히 IP만 보고는 요청이 어느 사이..
분류 전체보기
🌏 Stateless & Connectionless✅ Stateless서버가 클라이언트의 상태 정보를 유지하지 않는 특성각 요청은 독립적인 트랜잭션으로 취급, 이전 요청의 맥락을 알지 못함클라이언트가 매 요청마다 필요한 모든 정보를 담아서 전달해야 함HTTP 기본 동작이 Stateless하기 때문에 세션(Session)이나 JWT를 통해 상태 유지를 별도로 구현장점서버 확장성 향상, 부하 분산 용이장애 복구 및 로드 밸런싱에 유리단점같은 클라이언트라 하더라도 요청마다 인증 정보나 세션 토큰 등을 포함해야 함상태를 유지하려면 별도의 저장소(Redis, DB 등)에 위임 필요Q. HTTP는 왜 Stateless라고 하나요?HTTP는 각 요청을 독립적으로 처리하고, 서버가 클라이언트의 이전 상태를 기억하지 ..
🌏 HTTP Method✅ GET서버에서 데이터를 조회(Read)할 때 사용하는 메서드요청 데이터는 주로 쿼리스트링(Query String)으로 전달특징URL에 노출됨 → 북마크 가능, 캐싱 가능보통 서버 상태를 바꾸지 않음 (멱등성 O)예시GET /users?id=1 → id=1인 사용자 정보 조회✅ POST서버에 새로운 리소스를 생성(Create)할 때 사용요청 데이터는 Request Body에 담겨 전송특징캐싱 불가, URL에 보이지 않음멱등성 X (POST 요청을 여러 번 하면 리소스가 계속 생김)예시POST /users → 새로운 사용자 생성✅ PUT서버의 리소스를 전체 교체(Update)할 때 사용특징요청 시 해당 리소스 전체를 덮어씀멱등성 O (같은 PUT 요청을 여러 번 보내도 결과는 동..
🌏 HTTP/1.1 → HTTP/2 → HTTP/3✅ HTTP/1.0처음 웹이 퍼질 때 만들어진 규칙으로 가장 간단함기본적으로 한 연결당 한 요청-응답만 처리 후 연결 종료 (Non-persistent)요청마다 TCP 연결을 새로 맺어야 했기 때문에 오버헤드가 매우 큼✅ HTTP/1.1Persistent Connection(Keep-Alive)기본적으로 Persistent Connection(Keep-Alive)이 기본 동작즉, 한 연결을 여러 요청/응답에 재사용할 수 있음여전히 한 연결에서 요청은 순차적으로 처리되기 때문에, 앞 요청이 느리면 뒤 요청도 막히는 HOL Blocking 문제가 발생cf. 병렬 처리를 위해 파이프라이닝(Pipelining)을 지원하긴 했지만, 응답 순서 문제(HOL Blo..
🌏 TCP vs UDP✅ TCP (Transmission Control Protocol)TCP는 연결형 프로토콜로 3-way handshake를 통해 신뢰성을 보장하며, 데이터 순서와 재전송을 관리합니다. 대신 속도가 느리고 오버헤드가 큰 편입니다.특징연결형 (Connection-oriented) → 3-way handshake 필요신뢰성 보장: 데이터 손실 시 재전송, 순서 보장흐름 제어(Flow control), 혼잡 제어(Congestion control) 지원속도는 비교적 느림단위: 세그먼트 (Segment)장점보내는 쪽, 받는 쪽에 '커넥션'을 유지함에러 체킹 등 이 프로토콜 쓰면 데이터가 믿을 만 함 데이터를 특정 순서로 보낼 수 있음단점UDP에 비해서 느림 (동시에 처리할 수 있는 처리량이..
✅ 1. 반올림 (round)소수 첫째 자리에서 반올림 → 가장 가까운 정수Math.round(x) → long 반환System.out.println(Math.round(3.14)); // 3System.out.println(Math.round(3.5)); // 4소수 n자리 반올림double x = 3.14159;double r2 = Math.round(x * 100) / 100.0; // 소수 둘째 자리까지System.out.println(r2); // 3.14✅ 2. 올림 (ceil)항상 위쪽 정수로 올림Math.ceil(x) → double 반환System.out.println(Math.ceil(3.14)); // 4.0System.out.println(Math.ceil(-3.14)); // -..
🌏 OSI 7계층 정리✅ 큰 그림목적: 네트워크 통신을 추상화하여 단계별로 나눈 표준 모델실제 네트워크 체계의 구조는 OSI 7계층으로 이루어져 있지는 않아서 참조모델임구조: 7계층 (상위 → 하위)Application (응용)Presentation (표현)Session (세션)Transport (전송)Network (네트워크)Data Link (데이터링크)Physical (물리)✅ 각 계층별 특징1계층 Physical Layer (물리 계층)역할: 0/1 비트 신호를 실제 전송 매체(전선, 광섬유, 무선파)로 전달단위: 비트(Bit)장비: 허브, 리피터, 케이블신호 세기 약하면 통신 오류 발생, 케이블 불량 문제2계층 Data Link Layer (데이터 링크 계층)역할: 물리적 전송에서 오류 제어,..
코딩테스트에서는 알고리즘을 잘 짜는 것도 중요하지만, 입출력 속도 때문에 정답을 맞추고도 시간 초과(TLE)가 나는 경우가 자주 있습니다. 특히 자바는 Scanner와 System.out.println을 그대로 쓰면 위험합니다.이 포스팅은 ‘프로그래머스’ 플랫폼을 통해서 시험을 본다면 전혀 볼 필요가 없습니다✅ 왜 Scanner + println이 망할까?Scanner는 내부에서 정규식을 써서 입력을 파싱하기 때문에 매우 느립니다.System.out.println은 출력할 때마다 버퍼를 비우기 때문에 출력이 많으면 병목이 생깁니다.즉, 입력이 수천~수만 줄 이상 들어오는 문제에서는 그대로 쓰면 시간 초과가 날 확률이 높습니다.실제로도 입출력만 바꿔도 통과하는 경우가 생길 정도입니다!✅ 빠른 입력 (Buf..
자바 코딩테스트에서 배열을 리스트로 변환하는 경우가 종종 있습니다. 자바에서는 배열 타입(int[], String[], Integer[] 등)에 따라 방법이 달라집니다. 이번 편은 중요도는 아주 높지는 않지만 모르면 당황스럽기 때문에 정리해보려고 합니다!🌏 배열 → 리스트 변환✅ 1. 객체 배열 (Integer[], String[] 등)보통 배열을 쓸 때는 String 제외하고는 객체(boxed) 형태로 쓰지는 않기 때문에 String[]의 경우에 이렇게 사용한다 정도로 생각하면 좋을 것 같습니다.String[] arr = {"apple", "banana", "cherry"};// 1) Arrays.asList()List list1 = Arrays.asList(arr);// 고정 크기 리스트 (추가/삭..
코테를 현재 준비하고 있다면 배열 / 리스트 / 일부 구간 / 커스텀 Comparator까지 자유자재로 다룰 수 있어야 합니다. 막상 코테 시작하면 생각이 잘 안 날 수 있는 문법이기 때문에 오늘 포스팅에서는 잘 정리해보려고 합니다!🌏 자바 정렬 완벽 정리✅ 기본 배열 정렬// 오름차순 정렬int[] arr = {5, 3, 8, 1};Arrays.sort(arr);// 결과: [1, 3, 5, 8]// 내림차순 정렬 (int는 불가능, Integer로 변환해야 함)Integer[] arr2 = {5, 3, 8, 1};Arrays.sort(arr2, Collections.reverseOrder());// 결과: [8, 5, 3, 1]Tip: int[] 같은 기본형 배열은 Collections.revers..