분류 전체보기

제네릭과 가변인수를 함께 쓸 때는 신중하라 - [5장. 제네릭(아이템32)]
1. 가변인수 & 제네릭 💪 가변인수(varargs)란 매개변수로 들어오는 값의 개수와 상관없이 동적으로 인수를 받아서 기능하도록 해주는 문법을 말한다. public PrintStream printf(String format, Object ... args) { return format(format, args); } 가변인수 메서드를 호출하면 가변인수를 담기 위한 배열이 자동으로 하나 만들어진다. 만약 다음과 같이 제네릭과 가변인수를 함께 사용하면 어떻게 될까? static void dangerous(List... stringLists) { } 이 경우에도 가변인수 메서드가 호출되기 때문에 가변인수를 담기 위한 배열이 자동으로 만들어진다. 즉, 제네릭 배열이 만들어지는 것이다. 일반적으로는 제네릭 배열을 ..

한정적 와일드카드를 사용해 API 유연성을 높이라 - [5장. 제네릭(아이템31)]
1. PECS 🌞 PECS(Producer-Extends, Consumer-Super)란 매개변수화 타입 T가 생산자라면 에는 null 외에는 어떤 값도 넣을 수 없기 때문이다. 그래서 아래와 같이 도우미 메서드를 따로 작성해서 사용해야 한다. public class Swap { public static void swap(List list, int i, int j) { swapHelper(list, i, j); } private static void swapHelper(List list, int i, int j){ list.set(i, list.set(j, list.get(i))); } } 해당 글은 백기선 님의 '이펙티브 자바 완벽 공략'을 참고하였습니다.

제 11장. 웹 공격 기술
인터넷상에서 벌어지는 공격의 대부분은 웹 사이트를 노린 것이다 웹 사이트 공격에는 어떤 것이 있는지 그리고 어떤 영향을 미치는지에 대해서 알아보자. 웹 애플리케이션에 대한 공격 패턴 서버를 노리는 능동적 공격 (active attack) 공격자가 직접 웹 애플리케이션에 액세스 해서 공격 코드를 보내는 타입의 공격 서버 상의 리소스에 대해 직접 실행되기 때문에 공격자가 리소스에 액세스 할 필요가 있음 ex) SQL 인젝션, OS 커맨드 인젝션 유저를 노리는 수동적 공격 (passive attack) 함점을 이용해서 유저에게 공격 코드를 실행시키는 공격 공격자가 직접 웹 애플리케이션에 액세스 해서 공격하지 않음 ex) 크로스 사이트 스크립팅(XSS, cross-site scripting), 크로스 사이트 리..

제 9장. HTTP에 기능을 추가한 프로토콜
HTTP를 기반으로 해서 새로운 기능을 추가한 프로토콜에 대해서 알아보자. 📘 1. HTTP의 병목 현상을 해소하는 SPDY Google이 2010년에 발표한 SPDY(SPeeDY)는 HTTP의 병목 현상을 해소하고 웹 페이지 로딩 시간을 50% 하다는 목표를 세우고 개발 🔎 HTTP의 병목 현상이 발생하는 이유 1개의 커넥션으로 1개의 요청만 보낼 수 있다 요청은 클라이언트에서만 시작할 수 있다. 응답만 받는 것은 불가능하다 요청/응답 헤더를 압축하지 않은 채로 보낸다. 헤더의 정보가 많을수록 지연이 심해진다 장황한 헤더를 보낸다. 매번 같은 헤더를 보내는 것은 낭비다 데이터 압축을 임의로 선택할 수 있다. 압축해서 보내는 것이 강제적이지 않다 🔎 Ajax에 의한 해결 방법 Ajax는 JavaScrip..

제 8장. 누가 엑세스하고 있는지를 확인하는 인증
HTTP에서 사용하는 인증 방법 4가지를 알아보자. 📘 1. BASIC 인증 웹 서버와 대응하고 있는 클라이언트 사이에서 이뤄지는 인증 방식 🔎 인증 절차 요청 송신 상태 코드 401로 응답해서 인증이 필요하다는 것을 전달 유저ID와 패스워드를 Base64 형식으로 인코딩한 것을 송신 인증 성공 시 200으로 응답하고, 실패 시 401로 응답 BASIC 인증에서는 Base64라는 인코딩 형식을 사용 (아무런 부가 정보 없이도 복호화가 가능하다는 것) BASIC 인증을 하면, 일반 브라우저에서는 로그아웃을 할 수 없다는 문제가 있음 사용상의 문제와 많은 웹 사이트에서 요구되는 보안 등급에 미치지 못한다는 면에서 그다지 많이 사용되고 있지는 않음 📘 2. DIGEST 인증 BASIC 인증의 약점을 보안한 것..

제 7장. 웹을 안전하게 지켜주는 HTTPS
📘 1. HTTP의 문제점과 해결 방안 HTTP의 3가지 문제점과 각각에 대한 해결 방안에 대해서 알아보자. 🔎 1-1. 평문(암호화하지 않은)이기 때문에 도청이 가능하다. HTTP를 사용한 요청과 응답의 통신 내용은 HTTP 자신을 암호화하는 기능이 없기 때문에 통신 전체가 암호화되지는 않는다. 즉, 평문(암호화되지 않은 메시지)으로 HTTP 메시지를 보낸다 어느 서버와 클라이언트가 통신을 할 때, 통신 경로 상에 있는 네트워크 기기, 케이블, 컴퓨터 등을 전부 자기 자신이 소유하고 있을 수는 없다. 그래서 악의를 가진 누군가가 HTTP 메시지를 엿볼 수 있다. 📌 해결책 통신 암호화 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security)라는 다른 프로토콜..

제 6장. HTTP 헤더
HTTP 헤더 필드는 그 용도에 따라 4종류로 분류할 수 있다. 또한, HTTP 헤더 필드는 캐시와 비캐시 프록시의 동작을 정의하기 위해서 두 가지 카테고리로 분류되어 있다. End-to-end 헤더 요청이나 응답의 최종 수신자에게 전송 Hop-by-hop 헤더 한 번 전송에 대해서만 유효하고 캐시와 프록시에 의해서 전송되지 않는 것도 있음 📘 1. 일반적 헤더 필드(General Header Fields) 요청 메시지와 응답 메시지 둘 다 사용되는 헤더 헤더 필드 명 설명 Cache-Control 캐싱 동작 지정 Connection Hop-by-hop 헤더. 커넥션 관리 Date 메시지 생성 날짜 Pragma 메시지 제어 Trailer 메시지의 끝에 있는 헤더의 일람 Transfer-Encoding 메..

제 5장. HTTP와 연계하는 웹 서버
📘 1. 가상 호스트(Virtual Host) 가상 호스트 기능을 사용하면 물리적으로는 서버가 1대지만 가상으로 여러 대가 있는 것처럼 설정하는 것이 가능하다 고객마다 다른 도메인을 가지고, 다른 웹 사이트를 실행할 수 있다 이름 기반의 가상 호스트(Name-Based Virtual Host) 같은 IP 주소를 가지고 여러 개의 호스트명을 가진다. example1.com -> 192.168.0.1 example2.com -> 192.168.0.1 주소 기반의 가상 호스트(IP-Based Virtual Host) 하나의 서버에 있는 도메인들에게 각각 IP 주소를 할당하여 운용 example1.com -> 192.168.0.0 example2.com -> 192.168.0.1 포트 기반의 가상 호스트(Por..

이왕이면 제네릭 메서드로 만들라 - [5장. 제네릭(아이템30)]
클래스와 마찬가지로, 메서드도 제네릭으로 만들 수 있다. 제네릭 메서드 3가지를 살펴보면서 어떻게 제네릭 메서드를 만드는지 알아보자. 1. 매개변수화 타입을 받는 정적 유틸리티 메서드 🌼 매개변수화 타입을 받는 정적 유틸리티 메서드는 보통 제네릭이다. (Collections의 알고리즘 메서드는 모두 제네릭이다.) 우선, 제네릭을 사용하지 않은 메서드를 살펴보자 public class Union { public static Set union(Set s1, Set s2) { Set result = new HashSet(s1); result.addAll(s2); return result; } } 해당 메서드는 아래의 예시에서 살펴볼 수 있는 것처럼 안전하지 않다. public static void main(S..

제 4장. 결과를 전달하는 HTTP 상태 코드
📘 1. 상태 코드 클래스 클래스 설명 1XX Informational 요청을 받아들여 처리중 2XX Success 요청을 정상적으로 처리했음 3XX Redirection 요청을 완료하기 위해서 추가 동작이 필요 4XX Client Error 서버가 요청을 이해 불가능 5XX Server Error 서버가 요청 처리 실패 📘 2. 2XX 성공(Success) 요청이 정상적으로 처리되었음을 나타냄 200 OK 클라이언트가 보낸 리퀘스트를 서버가 정상 처리하였음을 나타냄 204 No Content 서버가 요청을 받아서 처리하는 데는 성공했지만 응답에 엔티티 바디를 포함하지 않음을 의미 클라이언트에서 서버에 정보를 보내는 것으로 족하고, 클라이언트에 대해서 새로운 정보를 보낼 필요가 없는 경우에 사용 206 ..

제 3장. HTTP 정보는 HTTP 메시지에 있다.
📘 1. 전송 효율을 높이는 인코딩 HTTP로 데이터를 전송할 경우 그대로 전송할 수 있지만 전송할 때에 인코딩(변환)을 실시함으로써 전송 효율을 높일 수 있다. 하지만, 컴퓨터에서 인코딩 처리를 해야 하기 때문에 CPU 등의 리소스는 보다 많이 소비하게 된다. 콘텐츠 코딩(Content Codings) 엔티티에 적용하는 인코딩을 가리키는데 엔티티 정보를 유지한 채로 압축한다. 종류 : gzip(GNU zip), compress(UNIX의 표준 압축), deflate(zlib), identity(인코딩 없음) 싱크 전송 코딩(Chunked transfer Coding) 엔티티 바디를 분할하는 기능 사이즈가 큰 데이터를 전송하는 경우에 데이터를 분할해서 조금씩 표시하도록 하는 것 📘 2. 여러 데이터를 보..

제 2장. 간단한 프로토콜 HTTP
📘 1. HTTP 메시지 구조 🔎 1. HTTP Requset 구조 Start Line [HTTP Method][Request Target][HTTP Version]로 구성 HTTP Method : 요청의 의도를 담고 있는 GET, POST, PUT, DELETE 등이 해당 Request Target : HTTP Request가 전송되는 목표 주소 HTTP Version : version에 따라서 Request 메시지 구조나 데이터가 다를 수 있어서 version을 명시해야 함 Http Headers 해당 Request에 대한 추가 정보를 담고 있는 부분 요청하려는 서버 호스트 이름, 포트 번호, cookie, authorization 등이 존재 Empty Line Headers의 끝을 빈 줄로 식별 B..