2020-02-25 TIL

할 일 목록

  • 웹지탱 시험 & 스터디
  • 코어 자바 9 공부
  • 웹지탱 독서
  • 알고리즘 한 문제 풀기

완료하지 못한 목록

  • 알고리즘 한 문제 풀기

완료 목록

  • 웹지탱 시험 & 스터디
  • 코어 자바 9 공부
  • 웹지탱 독서

5Fs

1. Fact

웹을 지탱하는 기술 시험

  1. 웹을 지탱하는 기술 3가지를 쓰고 그 관계를 설명하시오. (27~28p)

    • HTTP, HTML, URL
  2. 웹 이전의 하이퍼미디어, 분산 시스템과 비교하는 관점에서 하이퍼미디어로서의 웹, 분산시스템의로서의 웹을 설명하시오. (42~43p)

    • 웹 이전에는 양방향 링크를 사용했었고, 하이퍼미디어에도 양방향 링크를 적용하는 시도를 했지만, 결국 간단한 단방향 링크로 살아 남게되었고, 웹이 가장 많이 사용되는 원인이 되었음.
    • 분산 시스템으로서의 웹으로 이전에는 RPC를 사용할 경우, 각 어플리케이션이나 서버마다 인터페이스가 다르다는 점과 외부 네트워크로부터 불특정 다수의 요청을 받을 경우 부하가 심함(입도가 너무 작음). 웹은 입도가 더 크고 ?????
  3. 웹 2.0에선 매쉬업이 중요했다. 매쉬업은 무엇인지 설명하고 이러한 흐름 속에서 REST가 승리한 요인은 무엇인가? (51~52p)

    • 매쉬업이란 여러가지 웹 API가 제공하는 정보를 조합하여 하나의 app을 실현하는 방법. 간단해서
  4. 아키텍쳐 스타일이란 무엇인가? (54p)

    • 아키텍처 패턴이라고도 하며, 복수의 아키텍처의 공통된 성질, 양식, 규정 혹은 독특한 방식을 가리킴.
  5. 리소스란 무엇인가? (58p)

    • 웹상에 존재하는 이름이 있는 정보
  6. URI란 무엇인가? 또한 URI가 가진 Addressability에 대해서 설명하시오. (58~60p)

    • 리소스를 식별하기 위한 통합된 식별자. URI를 가지고 리소스를 간단히 가리킬 수 있는 성질.
  7. 서버와 클라이언트 사이에 주고받는 어떤 구체적인 데이터를 무엇이라 하는가? (61p)

    • Resource Representation(상태)
  8. REST는 복수의 아키텍처 스타일을 조합하여 구축한 복합 아키텍처 스타일이다. 6가지 아키텍처 스타일을 모두 나열하고 각 아키텍처 스타일이 주는 장점을 차례대로 모두 설명하시오. (62~69p)

    • client - server : 요청을 받고 응답을 받은 후에 연결을 끊기 때문에 자원을 아낄 수 있음.
    • stateless : 어플리케이션의 상태를 서버가 갖지 않기 때문에 서버는 자원을 아낄 수 있고, 확장하기가 편함.
    • cache : 응답을 클라이언트에 저장하여 서버로 요청을 가지 않도록 하며, 통신양과 서버의 자원을 아낄 수 있ㄷ음.
    • uniform interface : URI로 지정된 리소스를 제한적이고 통합된 인터페이스를 수행하는 방법이다. 제한 적인 메소드를 사용하여 단순하고 전체적인 설계의 유연성을 얻을 수 있음.
    • layered : Uniform Interface의 영향을 받아 같은 HTTP 통신으로 중간에 프록시나 다른 컴퓨터를 둬서 계층화할 수 있고, 클라이언트는 경유한 사실도 모를 수 있음.
    • code on demand : 코드를 클라이언트에서 실행시키는 아키텍처 스타일로서 js가 있고, 클라이언트를 확장하기가 용이함.
  9. REST의 근간을 이루는 사상인 접속성(Connectedness)이란 무엇인가? (72p)

    • 리소스를 링크로 연결하여 하나의 APP을 구성한다는 개념으로 REST 의 근간을 이루는 사상이다.
  10. 기존 분산 시스템의 문제점과 이에 비해 REST가 갖는 장점들은 무엇인가? (72~73p)

    • 외부함수 호출은 오버헤드로 인한 성능 저하가 크고 REST에 기초한 웹 서비스에서는 링크를 이용하여 app실행 링크를 따라 app의 상태를 변화 시키는 편이 성능저하를 억제한다.
  11. http://yohei:pass@blog.example.com:8000/search?q=test&debug=true#n10과 같은 URI에서 각 7개의 구성요소를 구분하여 쓰시오. (79p)

    • schema
    • 사용자 정보
    • host
    • port
    • parameter query
    • fragment 식별자.
  12. 시작점이 /foo/bar/ 일 때 상대 경로 ../hoge/fuga의 절대 경로를 쓰시오. (81p)

    • /foo/hoge/fuga
  13. URL 구현에서 주의할 점 2가지를 모두 설명하시오. (89p)

    • URI가 절대 경로인지 상대 경로인지 확인하는 것.
    • ascii로 표현할 수 있는 부분은 % 인코딩을 사용하는것.
  14. URI, URL, URN이 무엇인지 각각 쓰시오. (90~91p)

    • URI : Uniform Resource Identifier : 밑의 둘을 포함
    • URL : Uniform Resource Location : 리소스의 위치
    • URN : Uniform Resource Name : 이름. 잘 안쓰임. 근데 aws에서 쓰인다는데 모르겠음.
  15. Cool URI가 무엇인지 설명하고 이를 위한한 URI 설계지침 5가지를 모두 설명하시오. (92~98p)

    • 프로그래밍 언어에 의존적이지 않아야함.
    • 구현에 의존적이지 않아야함.
    • session ID를 쿼리 파라미터에 넣지 말아야함.
    • URI에 메소드를 넣지 말아야함.
    • URI는 명사로만 구성해야함.
  16. URI의 불투명성에 대해서 아는대로 설명하시오. (107~108p)

    • 클라이언트가 서버에 존재하는 URI를 추측하지 못하는 상태.
  17. 웹 서비스와 웹 API 설계에 있어서 URI가 중요한 이유 3가지는 무엇인가? (109p)

    • URI는 리소스의 식별자
    • URI는 오랜 수명을 가짐
    • ?
  18. HTTP 메시지 구조를 그리고 각각에 대해서 설명하시오. (123~128p)

    • 스타트라인

      • 리퀘스트 라인
      • 스테이터스 라인
    • 헤더
    • 개행문자
    • 바디
  19. 애플리케이션 상태란 무엇인가? 그리고 Stateful 서버의 결점은 무엇인가? (131~132p)

    • 세션 상태라고도 함.
    • 로그인 하고 로그아웃 할때 까지 한것들을 세션상태라고 한다.
    • 서버가 클라이언트의 어플리케이션 상태를 갖다보니 그만큼 자원이 소모되며 여러 서버를 사용했을 경우에 동기화에 문제가 발생함.
    • 동기화 문제로 인해 redis로 세션서버를 따로 두거나 아니면 상태를 갖지 않게 jwt를 사용 하거나 아니면 jwt로 중요하지 않은 것들을 관리하고 세션으로는 중요한 것들을 관리한다.
  20. Self Descriptive Message가 무엇인지 설명하고 이를 이용한 Stateless 서버의 장점을 쓰시오. (132~134p)

    • 서버가 클라이언트의 상태를 갖지 않기 때문에 서버 시스템이 단순해지고 이전 상태를 신경쓰지 않고 새로운 요청만 집중하면 되기 때문에 시스템 확장에 용이하다.
  21. Stateless 서버의 단점은 무엇인가? (134~136p)

    • 매 요청마다 클라이언트의 상태를 확인하기 때문에 리소스 비용이 들며
    • 응답이 누락되어 여러번 요청이 갈 수 있다.

코어 자바9

  1. 자바는 객체 지향 언어이므로 프로그램에서 (대부분) 객체를 조작해 일을 시킨다. 각 객체는 클래스에 속하며, 그 객체를 클래스의 인스턴스라고 한다. 클래스에는 객체 상태와 할 수 있는 일을 정의한다. 자바는 모든 코드를 클래스 안에 정의한다.
  2. main 메서드는 프로그램을 실행할 때 첫 번째로 호출하는 메서드다. 이 메서드는 객체가 없어도 작동하도록 static으로 선언한다.
  3. 클래스를 패키지 안에 넣어 관련있는 클래스들을 함께 묶어 이름이 같은 클래스가 여러 개 있더라도 서로 충돌하지 않게 하면 좋다.
  4. 자바는 클래스, 패키지, 모듈로 구조화해 대규모 프로그램을 개발하기 좋은 언어이다.
  5. 자바 프로그램을 컴파일하고 실행하려면 JDK를 설치해야한다.
  6. 자바 프로그램은 두단계에 거쳐 실행된다

    1. javac 명령으로 자바 소스코드를 특정 기계에 종속되지 않은 중간 표현인 바이트 코드로 컴파일 해서 클래스 파일에 저장한다.
    2. java 명령으로 가상머신을 구동하고 클래스 파일을 로드해서 바이트 코드를 실행한다.
  7. 바이트 코드는 한번 컴파일하면 모든 자바 가상머신에서 실행할 수 있다.
  8. System.out은 객체이며, PrintStream 클래스의 인스턴스이다. 그 안에 println, print 메서드 등이 존재한다. 이해당 클래스의 객체(인스턴스)에서 작동하는 메서드를 인스턴스메서드라고 한다.
  9. 자바는 객체 대부분을 생성해야 한다. new 연산자로 생성하며 new classname(인자값)으로 생성한다.
  10. 한 객체에서 메서드를 두 번 이상 호출하기 위해선 변수에 저장해야된다.
  11. JShell : REPL(Read-Evaluate-Print-Loop)로 자바 표현식을 입력하면 평가해서 결과를 출력하고 다음입력을 기다리는 프로그램이다.
  12. 자바는 객체지향이지만 그렇다고 다 객체 지향인것은 아니다

    • primitive type : 기본 타입 네가지(byte, short, ing, long)는 부호 있는 정수 타입이고, 두 가지(float, double) 부동소수점 타입이며, 하나는 문자열 인코딩에 사용하는 문자타입인 char, 나머지 하나는 진리값 boolean타입이다.

      • byte Ehsms short타입은 주로 저수준 파일 처리 등 특수한 응용이나 저장 공간이 귀할 때 큰 배열을 만드는 용도로 사용한다.
      • long type으로 충분하지 않을땐 BigInteger 클래스를 사용한다.
      • 자바의 정수타입 범위는 프로그램 실행하는 머신과 상관없이 동일하다.
      • C 또는 C++로 작성한 프로그램은 컴파일 하는 프로세서에 따라 정수 타입이 다르다.
      • long 정수 리터럴은 L을 붙여서 작성한다. byte는 (byte)127 처럼 캐스트표기법을 사용한다.
      • 16진수 리터럴에는 접우더 0x를 붙인다. 2진수는 0b를 붙힌다.
      • 숫자 리터럴은 ”_“를 사용할 수 있으며 사람이 구분하는 용도이고 컴파일 할땐 밑줄을 삭제한다.
      • float 타입 숫자에는 접미어 F를 붙인다. 3.14 처럼 부동 소수점 리터럴에 접미어를 붙이지 않으면 double 타입이 된다.
      • double에서 무한대는 Double.POSITIVE_INFINITY로 나타내고 숫자가 아님은 Double.Nan등 특별한 부동 소수점 값이 있다.
      • 부동 소수점 타입은 반올림 오류가 있어서 정확한 숫자 계산이 필요할 때는 BigDecimal 클래스를 사용해야한다.
  13. char 타입은 자바가 사용하는 UTF-16 문자 인코딩의 코드 유닛을 나타낸다.

    • 작은 따옴표로 리터럴을 표시할 수 있다.
    • 특수코드 \n: line feed \r: carriage return \t: tab \b: backspace 가 있다.
    • 백 클래시 또는 작은 따옴표를 나타낼 때는 앞에 \를 붙힌다.
  14. boolean은 숫자 타입이 아니며 0과 1사이에는 관련없다.
  15. 자바는 타입 결합이 강한 언어라서 변수에는 해당 타입 값만 저장할 수 있다. 변수를 선언할 때는 타입과 이름을 지정해야되며 필요하면 초기값도 지정할 수 있따.
  16. 객체 생성은 new 표현식으로 한다.
  17. 변수 이름은 문자로 시작해야하며 문자,숫자,기호_과 $로 구성되지만 $는 자동 생성되는 이름용으로 직접 이름을 지을때는 사용하지 않는다.
  18. 보통 변수와 메서드의 이름은 소문자로 시작하고 클래스이름은 대문자로 시작하며 낙타 표기법을 선호한다.
  19. 메소드 안에 변수를 선언했다면 변수를 반드시 초기화 후에 사용해야한다.
  20. 자바에서는 변수를 사용하기 직전까지 변수 선언 시기를 늦추는 것을 좋은 방식으로 여긴다.
  21. final 키워드는 한번 할당하면 변경할 수 없는 값에 사용한다. 상수는 보통 변수를 대문자로 선언안다. static 키워드로 상수를 메서드 외부에 선언할 수 있다.

    • 하지만 System.out처럼 상수에 대문자를 쓰지 않는 몇가지가 존재한다.
  22. final은 값을 할당하면 최종 값이 되어 절대로 변경할 수 없는 뜻으로, 할당하기 전까지 초기화를 나중으로 미룰 수 있다.
  23. 서로 관련있는 상수의 집합을 enumerated type으로 정의할 수 있다.

    • class 이다.
    • static이다.

2.Feelings

  • 자바를 새로 공부하니까 마음이 새롭다.
  • 언어를 깊게 파는 중인데 기초적인 이론이 필요하다 보니 어려운 부분이 좀 있다.
  • 웹지탱을 두번째 읽는 중인데도 아직도 외우지 못한게 많다..

3.Findings

  • enum은 클래스이고 static이다.
  • 클래스를 패키지 안에 넣어 관련있는 클래스들을 함께 묶어 이름이 같은 클래스가 여러 개 있더라도 서로 충돌하지 않게 하면 좋다.
  • 자바 프로그램은 두단계에 거쳐 실행된다

    1. javac 명령으로 자바 소스코드를 특정 기계에 종속되지 않은 중간 표현인 바이트 코드로 컴파일 해서 클래스 파일에 저장한다.
    2. java 명령으로 가상머신을 구동하고 클래스 파일을 로드해서 바이트 코드를 실행한다.

4.Future Action Plan

  • 부동 소수점을 컴퓨터가 어떻게 처리하는지 공부하고, 부동소수점의 반올림 오류 문제에 대해서 알아본다.
  • enum class가 어떻게 static 으로 동작하는지 알아본다.
  • java statement, expression, block에 대해서 정리하기.

5.FeedBack


Written by@Zero1
This blog is for that I organize what I study and my thinking, feeling and experience.

GitHub