분류 전체보기
-
TDD 알아보기테스트코드 2020. 9. 6. 16:14
테스트 주도 개발의 목표는 작동하는 깔끔한 코드를 작성하는 것 예측 불가능한 끊임없이 발생하는 버그에 대해 걱정하지 않아도 된다. 일이 언제 마무리될지 알 수 있다. 코드가 가르쳐주는 교훈을 배울 기회를 갖게 된다. 처음 생각나는 대로 빨리 완료해버리면 더 나은 것에 대해 생각할 기회를 잃게 된다. 테스트 주도 개발 규칙 오직 자동화된 테스트가 실패할 경우에만 새로운 코드를 작성한다. (새로운 코드를 추가하려면 테스트를 먼저 작성해라) 중복을 제거한다. TDD 프로그래밍 순서 빨강 - (처음 작성 시에는 컴파일 조차 되지 않는) 실패하는 작은 테스트를 작성한다. 초록 - 빨리 테스트가 통과하게끔 만든다. 이를 위해 어떤 죄악(상수 값 입력 등..)을 저질러도 좋다. 리팩토링 - 일단 테스트를 통과하게만 ..
-
[알고리즘] 병합 정렬알고리즘 2020. 6. 27. 16:07
병합 정렬은 배열을 앞부분과 뒷부분으로 나누어 각각 정렬한 다음 병합하는 작업을 반복하여 정렬 정렬을 마친 배열의 병합 정렬된 배열 a와 b를 비교하여 작은 값을 배열 c에 넣는다. static void merge(int[] a, int na, int[] b, int nb, int[] c) { int pa = 0; // a의 pointer int pb = 0; // b의 pointer int pc = 0; // c의 pointer // 1 while(pa < na && pb < nb) c[pc++] = (a[pa]
-
[이펙티브 자바 : 2장] 모든 객체의 공통 메서드Java & Kotlin 2020. 6. 24. 09:30
[ITEM 10] equals는 일반 규약을 지켜 재정의하라 equals 메서드는 재정의하기 쉬워 보이지만 함정이 많아 잘못 재정의하면 끔찍한 결과를 초래한다. 재정의 하지 않으면 오직 자기 자신과만 같게 된다. equals를 재정의하지 않는 것이 최선인 상황 상황 1 : 각 인스턴스가 본질적으로 고유하다. 값을 표현하는 게 아니라 동작하는 개체를 표현하는 클래스가 여기 해당한다. Thread가 좋은 예로, Object의 equals 메서드는 이러한 클래스에 딱 맞게 구현되었다. 상황 2 : 인스턴스의 '논리적 동치성(logical equality)'을 검사할 일이 없다. 예컨대 java.util.regex.Pattern은 equals를 재정의해서 두 Pattern의 인스턴스가 같은 정규표현식을 나타내는..
-
[HTTP 완벽 가이드 15장] 엔터티와 인코딩Network 2020. 6. 22. 10:31
HTTP는 콘텐츠를 나르기 위한 잘 라벨링 된 엔터티를 사용한다. 이 장에서는 엔터티 및 그와 연관된 엔터티 헤더들과 그들이 웹상의 화물을 수송하기 위해 어떤 일을 하는지에 대해 논의한다. 이 장에서 다루는 것 HTTP 데이터를 담는 컨테이너인 HTTP 메시지 엔터티의 포맷과 동작방식 어떻게 HTTP까 엔터티 본문의 크기를 기술하며, 크기를 측정하기 위해 HTTP가 무엇을 요구하는지 클라이언트가 콘텐츠를 바르게 처리할 수 있도록 제공되는 엔터티 헤더들(콘텐츠의 포맷, 문자, 언어를 기술하기 위해 사용된다) 공간을 적게 차지하고 더 안전하게 만들기 위해 발송자가 콘텐츠 데이터 포맷을 변형할 때 사용하는, 디코딩 가능한 콘텐츠 인코딩 클라이언트가 요청한 콘텐츠의 최신 버전을 가져올 수 있도록 도와주는 태그,..
-
[HTTP 완벽 가이드 14장] 보안 HTTPNetwork 2020. 6. 22. 10:29
14.1 HTTP를 안전하게 만들기 HTTP 보안 기술을 사용함으로써 얻을 수 있는 것들 서버 인증 - 클라이언트는 자신이 위조된 서버가 아닌 진짜와 통신하고 있음을 알 수 있어야 한다. 클라이언트 인증 - 서버는 자신이 가짜가 아닌 진짜 사용자와 통신하고 있음을 알 수 있어야 한다. 무결성 - 클라이언트와 서버는 그들의 데이터가 위조되는 것으로부터 안전해야 한다. 암호화 - 클라이언트와 서버는 제 3자의 도청에 대해 걱정 없이 서로 통신할 수 있어야 한다. 효율 - 저렴한 클라이언트나 서버도 이용할 수 있도록 알고리즘은 충분히 빨라야 한다. 편재성 - 프로토콜은 거의 모든 클라이언트와 서버에서 지원되어야 한다. 관리상 확장성 - 누구든 어디서든 보안 통신을 할 수 있어야 한다. 적응성 - 현재 알려진 ..
-
[HTTP 완벽 가이드 12장] 기본 인증Network 2020. 6. 22. 10:28
12.1 인증 1) HTTP의 인증요구/응답 프레임워크 HTTP는 사용자 인증을 하는 데 사용하는 자체 인증요구/응답 프레임워크를 제공한다. 웹 애플리케이션이 HTTP 요청 메시지를 받으면, 서버는 요청을 처리하는 대신에 현재 사용자를 식별할 수있는 '인증 요구'로 응답할 수 있다. 인증 요구 응답을 받은 사용자는 다시 요청을 보낼 때 인증 정보(사용자 이름과 패시워드)를 첨부해야 한다. 2) 인증 프로토콜과 헤더 HTTP는 필요에 따라 고쳐 쓸 수 있는 제어 헤더를 통해, 다른 인증 프로토콜에 맞추어 확장할 수 있는 프레임워크를 제공한다. 단계 헤더 설명 메서드/상태 요청 첫 번째 요청에는 인증 정보가 없다 GET 인증 요구 WWW-Authenticate 서버는 사용자에게 인증을 요구하며..
-
[HTTP 완벽 가이드 11장] 클라이언트 식별과 쿠키Network 2020. 6. 22. 10:26
웹 서버는 다른 수천 개의 클라이언트들과 동시에 동신하며, 이 익명의 클라이언트들로부터 받는 모든 요청을 처리할 뿐만 아니라 클라이언트를 추적해야 할 때도 있다. 이 장에서는 서버가 통신하는 대상을 식별하는데 사용하는 기술을 알아본다. 11.1 개별 접촉 HTTP는 익명으로 상태가 없고, 요청과 응답으로 통신하는 프로토콜이다. 현대의 웹 사이트들은 개인화된 서비스를 제공하고 싶어한다. 사용자에 대해 더 많은 것을 알고싶어 하고 사용자들이 브라우징하는 것을 기록하고 싶어한다. 여러 유명한 온라인 쇼핑 사이트는 여러가지 방식으로 사이트를 개인화시켜서 사용자에게 제공한다. 개별 인사 온라인 쇼핑이 개인에게 맞춰져 있는 것처럼 느끼게 하려고 사용자에게 특화된 메시지나 페이지 내용을 만든다. 사용자 맞춤 추천 고..
-
[HTTP 완벽 가이드 7장] 캐시Network 2020. 6. 22. 10:24
웹 캐시는 자주 쓰이는 문서의 사본은 자동으로 보관하는 HTTP 장치 캐시가 주는 혜택 캐시는 불필요한 데이터 전송을 줄여서, 네트워크 요금으로 인한 비용을 줄여준다. 캐시는 네트워크 병목을 줄여준다. 대역폭을 늘리지 않고도 페이지를 빨리 불러올 수 있게 된다. 캐시는 원 서버에 대한 요청을 줄여준다. 서버는 부하를 줄일 수 있으며 더 빨리 응답할 수 있게 된다. 페이지를 먼 곳에서 불러올수록 시간이 많이 걸리는데, 캐시는 거리로 인한 지연을 줄여준다. 7.1 불필요한 데이터 전송 복수의 클라이언트가 자주 쓰이는 원 서버 페이지에 접근할 때, 서버는 같은 문서를 클라이언트들에게 각각 한 번씩 전송한다. 똑같은 바이트들이 네트워크를 통해 계속 반복해서 이동한다. 이 불필요한 데이터는 네트워크 대역폭을 잡아..