기초 웹 개발 공략서  -제이펍출판사
1.웹 기술 총정리 
2.코딩기초지식
3.설계의 첫걸음
4.데이터베이스 & SQL입문
5.클라우드 시대의 인프라 지식 

1.웹 기술 총정리 
 1-1.웹의 세계
 Www는 다음 세가지 요소로 부터 시작한다. 
Url : 데이터는 어디에 있는가 
Http:// 어떤 방법으로 데이터를 가져갈 것인가? 
Blog.livedoor.ip //서버(host)는 어떤 것인가?
/danko/serarch //서버내의 위치는 어디인가?
?q=web //질의는 무엇인가?
정보 그 자체를 나타내는 URL 

Http : 데이터는 어떻게 손에 넣는가?
Http 이전의 프로토콜은 이것보다 필요 이상으로 복잡함 >> FTP( file Transfer protocol ) 은 메타데이터를 교환하는 포트와 데이터를 교환하는 포트가 별도로 존재하므로 
직적접인 커맨드로 서버와 대화한다는 것은 지극히 여러운 일이었다 

Html: 데이터는 어떻게 표현하는가?
Html 자체는 언어가 아니며 프로그래밍을 위한 기술방법이다. 
초기에 클라이언트는 html의 보기에 전념하고 서버에는 html을 생성하는 프로그램을 만들면 좋지 않을까? 
웹 브라우저는 말 그대로 서버가 전송한 html을 그냥 보기만 하는 도구였다. 하지만 현재 웹 브라우저를 탑재하고 있는 현재의 클라이언트는 고급 처리 능력을 지니고 있다.
 >> 언어를 추가로 넣을 수 있는 언어가 html이다 

예를 들어 펄, php, 파이썬, 루비등 이른바 p 언어에는 정규표현이라는 언어 내 언어가 모두 탑재 되어있다.
현재 html의 필수언어는 자바스크립트 ,css ,html 자신이다. 

자바스크립트 
자바스크립트는 다른 언어이나 마케팅상의 사정으로 그러한 이름이 되었다. 어디까지나 클라이언트측 웹 프로그래밍은의 주류는 자바 애플릿이었고 자바스크립트는 덤의 위치에 있었다. 
 자바 애플릿은 먼저 자바를 컴파일하여 클래스파일을 만든후 html파일에 별도의 obj태그등으로 로딩해야한다. 초기의 jvm은 느렸고 이런 이유로 자바 애플릿은 더 무거웠다. 그러던중 자바애플릿이나 자바스크립트냐의 문제에서 새로 화두된것이 플래시였다.
자바스크립트보다 고기능이고 자바보다 가벼운 플래시는 순식간에 보급되었다. 
 하지마 플래시는 자바 애플릿보다 html의 외부에 있다. 플래시와 같은 웹 브라우저 플러그인의 경우는 웹 페이지 안에 전혀 다른 세계로 구축할 수 밖에 없었다. 그리고 애플은 플래시를 거부했다. 
 오픈되어 있지 않다. 전혀 웹 적이지 않다. 안정적이지 않다. 전력 소비가 많다. 이런 추가적인 이유이다. 
이런 논쟁중에 html5는 플래시를 대체할수있는 언어가 되었다. 

1-2.개발 언어 총정리
처음 등장한 것은 CGI( Common Gateway interface) 이다 
정적인 문서를 살펴보기 위한 도구였다 말 그대로 어떤 인터페이스여도 상관없다. C. C++, java, 파이선이든 모든 ok 이다. 

HTML을 프로그램에 모두 작성하기보다는 HTML 안에 프로그램을 집어 넣으면 좀더 편리 할것이라는 생각으로 적합했던 것이 PHP다.

컴파일 언어 : 소스 코드로 부터 실행파일(바이너리)를 생성한 후 그것을 실행하는 언어이다. 처리속도가 빠르다. ( c.c++ )
스크립트 언어: 자바 스크립트, php, 펄, 파이썬, 루비 대입되 시점에 정해진다. 
  -펄 : 웹프로그래밍의 첫번째 언어이다. 고부하 환경을 요구하는 곳에서 주로 쓰이며 p언어의 대표적이다. 
  -루비 : 동적 언어에서는 드물게 공식 규격을 가지고 있다.
  -파이썬 : 구글 앱 엔젠의 개발언어 
 
자바스크립트는 웹 브라우저간 다르다. Ie와 firefox의 쓰임은 동일한 중국어라 할지라도 북경어와 광동어 차이처럼 다르다. 
이걸 해소시켜주는 것이 j-query이다. 
 
그리고 필요한 데이터만 서버에 질의하여 그것을 클라이언트가 가공하여 표시할 필요가 있다에서 나온 것이 ajax이다. 

1-3 서버 총정리
웹 어플리케이션이란 무엇인가? 
Http/https라는 프로토콜을 통해 요구돈 기능을 제공하는 것이다. 

현재 웹 서비스들은 정적 콘텐츠 + 동적콘텐츠를 조합하여 만들어져있다. 
 다수의 클라이언트로 부터 접속을 기다리다가 수신된 요청에 대해 적절한 형식을 적절한 응답을 반환한다. 그떄 동시에 접속을 허가하는 클라이언트수의 제한 및 각종 안전과 보안, 로그의 기록, 인증 제어 및 암호화 처리등 http/https의 제어에 필요한 여러가는 기능한다. 
 
 애플리케이션 서버(AP) : 클라이언트로부터의 요청을 해석하여 그 클라이언트에 반환해야 할 다양한 정보를 모아 최종적으로 문자 데이터로 교환해 html로 출력한다. 
 역 프록시 서버 : 받은 요청에 대응하는 어플리케이션 서버중 하나를 선택하여 요청을 보다고 응답을 받아 반환한다. 
                         클라이언트로부터의 접속수를 제한하고 로그의 기록, 페일오버, 라우팅 역할을 한다. 
 캐시서버 : 클라이언트에 반환되는 응답의 내용을 일시적을 보관하여 동일요청이 있을때 고속으로 반환한다. 

실제 웹 어플리케이션은 이러한 각종 서버를 조합하여 구성한다. 
그리고 이러한 서버로 자주 사용되는 몇가지가 있다.
 -Apache http server 
 -nginx
 -microsoft internet information( IIS ) .. 

AP 서버 전용의 소프트웨어
애플리케이션 서버는 동작시키는 프로그램이 어떤 언어로 작성되었는가가 중요하다.

1-4 데이터베이스의 총정리
1-5 클라우드 총정리 
인프라 구축/운용
 서버 머신의 설치 장소, 전원의 확보
 네크워크 회선
 Os와 미들웨어
 각 하드웨어 고장 시의 대응, 중복화 
 각종 모니터링
 운용 플로우 

클라우드란 인터넷 상에서 서비스로서 존재하는 컴퓨팅 리소스를 사용하여 사용자에게 애플리케이션 서비스나 하드웨어 리소스를 제공하는 새로운 컴퓨터의 이용형태를 가르킨다. 
>> 인터넷상에서 미리 준비된 서버나 스토리지, 또는 애플리케이션을 이용 시간이나 이용량에 따라 대여할 수 있다는 것이다. 

시스템 운용을 아웃소싱하기 >> aws 
 스토리지의 용량 및 파일 엑세스에 관한 동시접속수, 중복화, 재해복구, 스토리지의 유지보수등 많은 제한이 해결된다. 

클라우드의 종류
SaaS software as a service 클라우드 서비스를 제공하는 모델 
 >> 웹 브라우저만 설치되어 있으면 곧바로 메일 송수신을 할 수 있다  >>지메일, 구글 드라이브등 

PaaS platform as a service 시스템의 플랫폼을 클라우드 서비스로 제공하는 모델
>> 애플리케이션을 동작시키기 위한 웹 서버나 엔진, 데이터베이스등이 있고 백업, 중복화, 자동확장, 시스템 관리툴이라는 운용과 관련된 구성이다. 일반적으로 애플리케이션을 구현하고 그것을 구동시키기 위해 설비, 네크워크, 하드웨어, 미들웨어, os 등 플랫폼을 제공할 필요가 있다. 
>> 구글 웹 엔진 , 헤로쿠

IaaS - infrastructure as a service 
Cpu나 메모리, 디스크 하드웨어 리소스를 클라우드 서비스로 제공하는 모델 
이전부터 존재하던 인터넷상의 랜탈 서버 형식의 호스팅 서비스등을 말한다. PaaS와의 차이점은 플랫폼이다 밴더가 제공하는 플랫폼을 사용할수밖에없지만 Iaas에서는 os보다 위의 레이어르 자유롭게 커스터마이즈 할수있다. 플랫폼을 자유롭게 설계할수있으므로 기존 자사의 운용하고있는 시스템을 클라우드로 이행할때는 유용하다. 
>>아마존 웹 서비스 












































vert.x 

verticle 생성 후 작업중인 스케줄러 동작시 서버관리 및 failover시 처리   


-cluster

서버 클러스터링이랑 두대 이상의 서버가 하나의 서버가 처리하는 것 처럼 보이도록 서버들 간의 확립된 연결을 만들어 놓은 것을 말한다. 

장애 대응 시스템 및 부하분산 시스템, 병렬 처리 프로세싱에 사용 될수있는 기술이다. 

클러스터링 서버들간의 데이터의 동기화 

 

-fail over 

운영중인 서버가 멈췄을때 대기 중인 서버를 운영서버로 장애처리 작업을 해야한다. 

master 서버와 standby 서버를 구성하고 있는 master 서버가 fail시 stanby 서버가 자동으로 서버의 역활을 한다. 

stanby서버는 평상시에 대기상태로만 있다가  master서버가 fail될 경우만 작동을 한다. 이 구성을 fail over라고 한다. 


LoadBanlancing

서버의 로드를 클러스터링된 서버별로 균등하게 나누어 주는 서버 , 서버의 사양과 처리량에 따라 차별적으로 분배해준다. 

장애 대처 능력이 향성되며 유지 관리에 효율적이다. 

 역프록시의 한계 

 많은 엑세스가 증가하는 서비스인 경우 프록시 서버가 모든것을 해결할수없다. 이러한 경우 역프록시 서버나 웹 서버보다도 앞에 로드 밸린서라는 것을 도입한다. 

 네트워크 기능과 서버 소프트웨어의 중간과 같은 존재이다. 또한 다른 서버와 동일하게 리눅스등이 인스톨된 서버를 두어 LVS(Linus Virtural server) 사용하는 경우도 있다. 



high Availability(HA)

 서버와 네크워크 등 시스템이 지속적으로 정산 운영 가능하도록 하는 기술 


https://ko.wikipedia.org/wiki/%EC%BB%B4%ED%93%A8%ED%84%B0_%ED%81%B4%EB%9F%AC%EC%8A%A4%ED%84%B0


>> verrtx.sharedData().getLockWithTimeout()를 이용하여 lock 실행한후 어느 서버가 마스터 인지 체크 후 master 서버에서만 스케줄러가 작동한다.  

>> 자신이 설계한 로직들이 서버에 어떤 부하를 줄지, failover의 상황에 어떤 결과를 줄지 고려하여 설계할 것


'STUDY > PROGRAMMING' 카테고리의 다른 글

웹 개발 공략서  (0) 2018.09.02
2. GRADLE ( 도서: gradle 철저입문 )  (0) 2018.08.27
1. Blocing / NonBlocking & Synchronous / Asynchronous  (1) 2018.08.27

빌드 툴 : 정형화 된 작업을 자동화 하기 위한 소프트웨어 


빌드

1. 소스 코드( .java)를 컴팰해서 클래스 파일(.class)를 생성한다.

2. 코딩 규약에 맞게 작성했는지 확인한다.

3. 코드를 정적으로 해석한다.

4. 테스트를 하고 테스트 결과나 커버리지 측정 결과를 리포트로 출력한다. 

5. javsdoc과 같은 문서를 작성한다.

6. 클래스 파일과 리소스 파일을 패키지이해서 압축 파일을 만든다.(.jar 과 .war 파일)

7. 압출파일을 테스트 환경이나 스테이징 환경에 배포한다.

8. 압축 파일을 저장소에 등록한다. 


그래들 특징

  빌드스크립트 생산성이 높다 : 규칙 기반 빌드 접근법을 사용한다. 규칙예외사항은 스크립트를 추가할 수 있어 유연하게 대응할 수 있다.  

  빌드 순서를 제어하기 쉽다 : 그레들의 빌드 순서는 테스크 의존관계에 따라 정해진다. (메이븐과 앤드의 중간단계) 

  멀티 프로젝트에 대응한다. 

  컴포넌트로 만들기 쉽다. : 빌드 스크립트에서 메서드나 클래스 추출 / 빌드 스크립트의 분할과 재사용 

                                        / 프로젝트에서만 사용할 수 있는 확장 모듈 / 여러 프로젝트에서            

                                         범용적으로 사용할 수 있는 라이브러리

 별도로 설치할 필요가 없다. : 그래들 래퍼 태스크를 실행해서 부트스트랩을 생성하기만 하면 된다. 


그래들의 설치 

JDK 6이상 필요하다 

Gvm 설치


gvm 

$ gvm install gradle

$ gvm install gradle <version>

$ gvm list gradle 


1. 자바 프로젝트

build.gradlew 

=============================================================

진행 프로젝트 빌드 스크립트 전문


apply plugin: 'java'

apply plugin: 'eclipse'

apply plugin: 'application'


mainClassName = 'VerticleManager'

def defaultEncoding = 'UTF-8'

compileJava.options.encodind = defaultEncoding; // 소스 세트 main을 컴파일 할때 적용하는 인코딩 지정 

sourceCompatibility = 1.8  // java jdk 버전 설정 컴파일할때 생성하는 클래스 파일의 jdk버전설정은 targetCompatibility 이다. 

def vertxVersion = '3.5.3'


//의존 관계 해결위치로 매이븐 저장소 사용

repositories {

mavenCentral();

}


dependencies {

compile "io.vertx:vertx-core:${vertxVersion}"

compile "org.slf4j:slf4j-api:1.7.25"

compile "io.vertx:vertx-hazelcast:${vertxVersion}"

}


sourceSets {


main {

java {

srcDirs = ['src/main/java']

}

resources {

srcDirs = ['src/main/resources']

}

}

}


//기타 설정들 예시

//jar {

baseName : 'example'

appendix = 'bin'

}


//compileJava{

options.fork = true

}

=============================================================


그레들의 핵심 기능 

 - 전형적인 반복 작업을 자동화하기 위한 구조 

 - 자동화된 처리를 실행하기 위한 부품

자동화 대상이 되는 구체적인 작업들은 모드 플로그인으로 구현되어 있으며 핵심기능과 분리되어 있다.


 apply plugin: 'java' 

>>그레들에게 자바 프로젝트를 빌드할 때 반드시 팔요한 java 플러그인 사용한다는 선언문

자바 플러그인이란 자바 빌드에 필요한 테스크 설정을 단순화하는 규칙, 그것을 구현하기 위한 속성 및 소스 세트가 패키지로 구성된 빌드 기능 컴포넌트이다. 


 -Source set

빌드 스크립트에 자유롭게 추가할수있으며 컴파일 대상인 자바 코드와 리소스를 세트로 지정 할 수 있다. 

컴파일 출력 경로를 지정할 수 있다. 

 자바 플러그인에는 이미 main과  test 두가지 소스 세트가 정의되어 있다. 따라서 프로덕션 코드의 단위 테스트 코드 이렇게 두 가지 소스 세트만으로 대응 가능한 자바 프로젝트라면 다른 소스 세트를 추가하지 않아도 된다. 


 - task

자바 플러그인이 제공하는 테스크는

 1 .complie.Java : 프로덕션 코드를 컴파일 한다. 대상 소스세트 main의 java. srcDirs 속성에서 지정한 디렉터리에 있는 코드 중 확장자가 .java 인 파일이다. 


 2. processResources : 프로덕션 코드의 리소스르르 클래스 패스에 복사한다. compileJava 디렉터리중 .java를 제외한 모든 파일 

 3. classes : 1.2번 실행

 4.. compileTest.java

 5. processTestResources 

 6 etc : testClasses / jar/ javadoc / test/ clean/ clean<tastname>.assemble/ build/ uploadArchives /check / buildNeeded / buildDependents

 

=============================================================

현재 진행중인 프로젝트 task 출력


:compileJava UP-TO-DATE

:processResources UP-TO-DATE

:classes UP-TO-DATE

:jar

:startScripts UP-TO-DATE

:distTar

:distZip

:assemble

:compileTestJava NO-SOURCE

:processTestResources NO-SOURCE

:testClasses UP-TO-DATE

:test NO-SOURCE

:check UP-TO-DATE

:build

=============================================================



 -규칙

프로덕션 코드 파일은 src/main/java 디렉터리 아래 둔다.

프로덕션 리소스 파일은 src/main/resources에 아래 둔다. 


 -속성

 태스크를 제어하거나 규칙을 구현하기 위해 속성을 제공한다. 


https://docs.gradle.org/current/userguide/java_plugin.html


$ gradlew build: task 실행

$ gradlew run: 프로젝트가 실행 

$ gradlew clean: 빌드 결과물을 삭제함 



'STUDY > PROGRAMMING' 카테고리의 다른 글

웹 개발 공략서  (0) 2018.09.02
failover cluster / LoadBanlancing  (0) 2018.08.30
1. Blocing / NonBlocking & Synchronous / Asynchronous  (1) 2018.08.27
동기와 비동기 
동기 : 호출이 종료된 이후에 처리 결과를 응답 받을 수있다. 서비스 처리가 완료 된 후에 처리 결과를 알 수 있는 방식을 동기식 호출이라고 한다. 
비동기 : 실제로 처리가 완료되지 않았음에도 종료가 이루어 지며 그 응답을 호출자에게 전달한다. 
비동기 호출을 지원하는 패턴은 다양하다. 퓨쳐 패턴, 이벤트 리스너는 옵저버 패턴,  node.js는 콜백함수 , 네티는 리액터 패턴을 사용한다. 

블로킹과 논 블로킹
소켓 동작 방식은 블로킹 모드와 논블로킹 모드로 나눈다. 
블로킹은 요청한 작업이 성공하거나 에러가 밠행하기 전까지 응답을 돌려주지 않는 것을 의미하여 논 블로킹은 요청한 작업의 성공 여부와 상관없이 바로 결과를 돌려준다. 이때 요청의 응답값에 의해서 에러나 성공 여부를 판단한다. 
 블로킹 소켓은 serverSocket, socket 클래스, 논블로킹 소켓은 serverSocketChannel, SocketChannel 클래스를 사용한다. 

블로킹 소켓은 데이터입출력에서 스레드의 블로킹이 발생하기 때문에 동시에 여러 클라이언트에 대한 처리가 불가능하다. 이 단점을 보완하기 위해 해결한 모델이 연결된 클라이언트 별로 스레드를 할당한다. 
 접속 클라이언트별 스레드르 생성한다면 OOM뿐 아니라 대기시간이 길어질 수 있다. 이를 방자하기 위해 서버에 생성되는 스레드 수를 제한하는 방법인 스레드 풀링을 사용하기도 한다. 
 처음부터 너무 많은 풀링을 사용하게 되면 시간이 흐름에 따라 가비지 콜렉션이 작동하고 자바 프로세스는 가비지를 작동시키는 동안 다른 스레드를 멈추는데 이때  어플리 케이션이 먹통이 된것처럼 보일 수 있다.
 특히 힙의 크기가 클수록 가비지 컬렉션에 드는 시간이 길어진다.
 힙 크기와 생성 가능한 스레드 수는 비례하고 힙에 할당된 메모리가 클수록 가비지 컬렉션이 수행되는 횟수는 줄어들지만 수행시간은 상대적으로 길어진다. 
  
 두번째는 컨텍스트 스위칭에 대한 고찰이다. 한 프로세스에 수행되는 스레들이 cpu점유를 위해서 자신의 상태를 변경하는 작업이다. 이때 수많은 스레드가 cpu자원을 획득하기 위하여 경쟁하면서 cpu 자원을 소모하기 때문에 실제로 작업에 사용할 cpu가 줄어들게 된다. 

>> Blocing / NonBlocking
호출된 함수가 바로 리턴해서 호출한 함수에게 제어권을 넘기는가? 
제어권은 메인프로세스에서 어디로 가고 있는가? 
=제어권의 문제 

>>Synchronous / Asynchronous
호출되는 함수에게 callback을 전달해서 사용하고 있는가?
=작업 완료 여부 


'STUDY > PROGRAMMING' 카테고리의 다른 글

웹 개발 공략서  (0) 2018.09.02
failover cluster / LoadBanlancing  (0) 2018.08.30
2. GRADLE ( 도서: gradle 철저입문 )  (0) 2018.08.27

+ Recent posts