• 다시 블로그 시작

책 :스프링부트로 배우는 웹 개발

##1

  • 웹 서버 : html파일 같은 정적 파일들을 전달해 주는 역할을 하는 서버
  • 웹 어플리케이션 컨테이너 = 웹 어플리케이션 서버
    • php,jsp,asp,js 등 언어들 사용해서 동적인 페이지들이 생성 가능한 서버
  • 클래스 로더 : JVM에 class를 loading 한다
    • 계층 구조 : Bootstrap (최상위)-> Extension -> System -> User-Define Class loader (최하위)
    • Bootstrap Class loader : <JAVA_HOME>/jre/lib에 위치한 자바 핵심 라이브러리를 로딩
    • Extension Class loader : <JAVA_HOME>/jre/lib/ext또는 java.ext.dirs 시스템 속성에 지정된 기타 디렉터리의 코드를 로딩
    • System Class loader : ClassPath 환경변수에 매핑
    • https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_%ED%81%B4%EB%9E%98%EC%8A%A4%EB%A1%9C%EB%8D%94
  • 쿠키(Cookie) : 클라이언트의 상태 관리
  • 세션(Session) : 서버의 상태 관리
    ##2
  • 자바 웹 개발에서 IoC가 인기를 끄는 이유
    • 프로그램의 생명주기에 대한 주도권이 웹 애플리케이션 컨테이너에 있기 때문에
  • IoC
    • 하이레벨 모듈은 로우레벨 모듈에 의존해서는 안 되고, 모두 인터페이스에 의존해야 한다.
    • 추상화는 세부 사항에 의존해서는 안된다. 세부 사항이 추상화에 의존해야 한다.
    • = 인터페이스를 사용해 결합도 낮추는것이 목적
    • 하지만 인터페이스 구현체가 필요해 완전히 분리할수 없다.
    • 인스턴스화할 수 있는 코드에 대한 의존성을 해결하는 것이 의존성 주입이다.
    • 인터셉터 : @Controller가 요청을 처리하기 전, 후에 대해 로직 추가 할수 있다

      3

  • REST(Representational State Transfer) : 분산 네트워크 프로그래밍의 아키텍쳐 스타일, 로이 필딩이 처음 제안
  • 특징
    • 클라이언트/서버 : 클라이언트와 서버가 독립적으로 구분되어야하고,
      서버 또는 클라이언트 증설 시에 서로간의 의존성 때문에 확장에 문제가 되는 일이 없어야 한다.
    • 무상태성 : 클라이언트와 서버 간의 통신에 상태가 없어야한다. 서버는 클라이언트 상태를 기억할 필요가 없다.
    • 계층형 구조 : 서버와 클라이언트 사이에 게이트웨어, 방화벽, 프록시가 있는 것처럼 다계층 형태로 레이어를 추가하거나 수정하거나 제거할 수 있어야 한다.
    • 캐시 : 서버의 응답들은 캐시를 가지고 있거나 없거나 둘 중의 하나인데, 캐시를 가지고 있을 경우에는 클라이언트가 캐시를 통해서 응답을 재사용할 수 있고 이를 통해서 서버의 부하를 낮추어서 서버의 성능이 향상될 수 있다.
    • 코드 온 디멘드 : 요청이 오면 코드를 준다는 의미로 특정 시점에 서버가 특정 기능을 수행하는 스크립트 또는 플러그인을 클라이언트에 전달해서 해당 기능을 동작하도록 하는 것이다. 예로는 애플릿, 자바스크립트, 플래시가 있다.
    • 통합 인터페이스 : 서버와 클라이언트 간의 상호 작용은 일관된 인터페이스들 위에서 이뤄져야 한다. 그 내용은 아래와 같다.
      • 인터페이스 규칙
        • 리소스 식별 : 웹 안에서 서로 구분할 수 있는 개념으로 URI와 같은 고유 시별자를 통해 표현할 수 있다.
        • 표현을 통한 리소스 처리 : 같은 데이터에 대해서 표현할 때 JSON, XML, HTML 페이지와 같이 다양한 콘텐츠 유형으로 표현할 수 있다. 그렇지만 데이터는 변경되지 않는다.
        • 자기 묘사 메세지 : HTTP 통신을 할 때도 Header에 메타 데이터 정보를 추가해서 실제 데이터와는 관련 없지만 데이터에 대한 설명을 나타내는 정보를 담을수 있다.
        • 애플리케이션의 상태에 대한 하이퍼미디어(HATEOS) : 웹은 여러 페이지들과 그 페이지들이 이동할 수있는 링크 정보들로 구성되어 있다. REST API를 개발할 때도 단순히 데이터만 전달하지 않고 링크 정보까지 포함한다면 좀 더 웹에 친숙한 REST API가 될 것이다.