[도서 리뷰] 프로그래머를 위한 기초 해석학



길벗 출판사의 8차 신간 서평 이벤트에 참여하였다. 본인은 리뷰 이벤트에 등록된 많은 신간 도서 중 <프로그래머를 위한 기초 해석학> 책을 신청하였는데, 그 이유는 최근 자연어 처리 학습을 하며 수학에 대한 전반적인 기초가 많이 부족하다고 생각했기 때문이다. 그리고 단지 '기초'라는 단어가 붙어 있었다는 이유로 신청을 한 이 결정은 큰 후회를 낳게 되었다..

리뷰

1장에는 집합과 사상 그리고 실수의 특성 등 기본적으로 수학책의 초반부에 항상 등장하는 주제가 다루어 졌다. 책의 설명이 전반적으로 그림을 이용하여 진행되다 보니, 기본적 지식을 재점검하는데 큰 도움이 되었다. 그리고 이제 해석학의 본질적 목표인 수학적 개념들의 증명에 대한 내용들이 이어진다.

이 책은 초반부부터 책의 독자를 대학교 1, 2학년 수준 이상의 대학 수학을 이해하고 있는 사람으로 산정하고 있다. 따라서 문과 출신으로 고등학교 수학부터 이미 이과인들과의 간격이 벌어진 나에게는 책의 뒤로 갈수록 한 장 한 장을 넘기는게 쉽지 않은 책이었다. 그럼에도 그림을 이용한 추가적 설명들이 나를 책을 포기하는 행동으로부터 지켜주었다.

특히 유익하게 본 챕터는 6장 다변수함수 부분이었다. 딥러닝을 학습할 때, '역전파'라는 개념이 나온다. 한 입력값이 최종 출력값에 얼마만큼의 영향을 주는지를 계산하기 위해 출력값으로부터 입력값의 영향을 역으로 추적해나가는 이 행위는, 편미분 개념의 이해를 필요로 한다. 이전에는 굉장히 high-level 수준에서 '아, 이러한 개념으로 진행되는구나'라고 생각했던 이러한 편미분의 개념을 증명을 통해서 이해하려고 노력하니 어떠한 개념이구나라는 것을 전보다 깊게 이해할 수 있게 되었던 것 같다.

사실, 리뷰를 위해 책을 꾸역꾸역 모두 넘겨서 보려고 했지만 이해를 깊게 하거나 어떤 깊은 통찰력을 얻기에는 내가 이미 가지고 있는 수학적 지식이 부족해 쉽지 않았던 것 같다. 그럼에도 나같은 문과인들도 최소한 '시도'라도 해 볼 수 있을만한 기초 해석학 서적이 있다는 것은 단비와도 같다고 느꼈다. 연습문제도 거의 건드려 보지도 못할 만큼 어려운 것이 '증명'의 세계였지만, 마냥 어렵다고 멀리하지 않을 수 있을만큼 친절하게 도와주는 서적이었다는 것에 큰 의의가 있다고 생각한다. 인공지능에 관심 있고, 수학을 어려워 하셨던 문과 출신 분들께는 나와 같은 경험을 할 수 있는 좋은 책이라고 생각한다.

<프로그래머를 위한 기초 해석학>의 자세한 내용은 한빛미디에 홈페이지에서 확인하실 수 있습니다.


HTTP 상태 코드

  • 상태 코드는 서버로부터 리퀘스트 결과를 전달
  • 200 OK와 같이 3자리 숫자와 설명으로 나타남
    • 첫 째 자리는 리스폰스의 클래스를 의미
    • 나머지 2자리는 딱히 분류가 없음

2xx 성공

2xx 리스폰스는 리퀘스트가 정상으로 처리되었음을 나타냄

  • 200 OK: 클라이언트가 보낸 리퀘스트를 서버가 정상적으로 처리하였음
    • 상태 코드와 함께 되돌아 오는 정보는 메소드에 따라 다름
    • GET의 경우, 리퀘스트 리소스에 대응하는 엔티티
    • HEAD의 경우, 리퀘스트 리소스에 대응하는 헤더 필드
  • 204 No Content: 리퀘스트는 성공했지만 리소스는 돌려주지 않음
  • 206 Partial Content: Range에 의해 범위가 지정된 리퀘스트에 의해 서버가 부분적 GET 리퀘스트를 받음

3xx 리다이렉트

3xx 리스폰스는 리퀘스트가 정상적으로 처리를 종료하기 위해 브라우저 측에서 특별한 처리를 수행해야 함을 의미

  • 301 Moved Permanently: 리퀘스트된 리소스에 새로운 URI 부여되어, 이후로는 바뀐 URI를 사용해야 한다고 알림
    • 따라서 북마크가 설정되어 있는 경우, URI 변경을 할 것을 권함
  • 302 Found: 리소스 URI가 일시적으로 다른 곳에 이동되어 있음을 알림
    • 영구적으로 이동한 것은 아니기 때문에 북마크 변경을 권하지 않음
  • 303 See Other: 리소스 URI가 다른 곳에 있다는 것을 알림 + GET 메소드의 사용을 권함
    • 302 Found와 같은 기능이지만, GET 메소드의 사용을 권하기 때문에 303을 사용하는 것이 바람직함
    • 301, 302, 303 리스폰스 코드 수신 시 브라우저는 POST를 GET으로 바꾸어 리퀘스트를 자동으로 재송신
      • 301, 302에서는 POST를 GET으로 바꾸는 것을 금지하지만, 실상에서는 변경하는 것이 대부분
  • 304 Not Modified: 클라이언트가 조건부 리퀘스트를 했을 때 리소스에 대한 접근은 허락하지만, 조건이 만족되지 않았음을 알림
  • 307 Temporary Redirect: 302 Found와 같은 기능 수행

4xx 클라이언트 에러

4xx 리스폰스는 클라이언트의 원인으로 에러가 발생했음을 나타냄

  • 400 Bad Request: 리퀘스트 구문이 잘못되었음을 나타냄
    • 브라우저는 해당 상태 코드를 200 OK와 같이 취급
  • 401 Unauthorized: 리퀘스트에 HTTP 인증 정보가 필요하다는 것을 알림
    • 브라우저에서 처음 401 리스폰스를 받은 경우에는 인증을 위한 다이얼로그가 표시됨
  • 403 Forbidden: 리퀘스트된 리소스의 액세스가 거부되었음을 알림
    • 이유를 명확히 하는 경우에는 Entity Body에 기재해서 유저 측에 표시
  • 404 Not Found: 리퀘스트한 리소스가 서버 상에 없다는 것을 나타냄

5xx 서버 에러

5xx 리스폰스는 서버 원인으로 에러가 발생하고 있음을 나타냄

  • 500 Internal Server Error: 서버에서 리퀘스트를 처리하는 도중에 에러가 발생했음을 알림
  • 503 Service Unavaliable: 일시적으로 서버가 과부하 상태이거나 점검중이기 때문에 리퀘스트 처리가 불가함을 알림
    • 상태가 해소되기까지 걸리는 시간을 Retry-After 헤더 필드에 전달하는 것이 좋음

'Software Convergence > Network' 카테고리의 다른 글

Network Layer (2)  (0) 2018.10.08
Network Layer (1)  (0) 2018.10.07
Transport Layer  (0) 2018.10.07
OSI 7 Layers Overview  (0) 2018.10.01
Application Layer  (0) 2018.09.30

클래스 Object와 Wrapper 클래스

Object class

  • 클래스 Object는 Java에서 모든 클래스의 superclass
  • Java의 모든 클래스는 이미 equals와 toString 메서드 등을 가지고 있음
  • class Object의 member method
    • equlas, toString, getClass, hashCode()
  • toString method는 사용자가 원하는 결과를 출력하도록 Override를 해주어야 함
  • Object 클래스의 equals 메서드의 매개변수는 Object 타입
    • 매개변수로 제공된 객체와 자기 자신의 동일성을 검사
      • 값을 비교하는 것이 아님
    • 따라서 원하는 값의 비교를 해주기 위해서는 역시 Override 해주어야 함

Wrapper class

  • Java에서 primitive type 데이터와 non-primitive type 데이터(객체)는 근본적으로 다르게 처리됨
  • 때로 primitive type 데이터를 객체로 만들어야 할 경우가 있음
    • 이럴 때, Integer, Double, Character 등의 Wrapper class를 이용
int a = 20;
Integer age = new Integer(a);
int b = age.intValue();  // b becomes 20

// 데이터 간 형변환
String str = "1234";
int d = Integer.parseInt(str);  // d becomes 1234
  • Autoboxing과 Unboxing
Object[] theArray = new Object[100];
theArray[0] = 10; // 컴파일러가 자동으로 10을 Integer 객체로 변환해줌(autoboxing)
int a = (Integer)theArray[0]; // theArray[0]에 저장된 걱은 Integer 객체이지만 컴파일러가 자동으로 정수로 변환(unboxing)


'Software Convergence > Java' 카테고리의 다른 글

다형성: Polymorphism  (0) 2018.11.05
static과 접근제한자  (0) 2018.10.19
상속의 단점과 Strategy Pattern  (0) 2018.09.03
Generic 자료형 실습  (0) 2018.07.12
instanceof / encapsulation  (0) 2018.07.04

+ Recent posts