개발자가 되고 싶은 사람

UML이란?

|

UML이란?

UML(Unified Modeling Language)

  • 프로그램 설계를 표현하기 위해 사용하는, 주로 그림으로 된 표기법을 의미한다.
  • 객체지향 언어와 밀접한 관련이 있기에 객체지향 모델링 언어라고도 한다.
  • 소프트웨어 시스템, 업무 모델링, 시스템의 산출물을 규정하고 시각화하며 문서화하는 언어이다.
  • 모델링 언어일뿐 방법론은 아니며, 프로그래밍 언어도 아니다.

사용목적

  • sw시스템을 구축하기 전에 모델을 설계함으로서 아키텍처를 건전히 하고 프로젝트를 위한 의사소통을 원할하게 하기 위함.
  • 한번에 이해하기 힘든 시스템이 늘어나면서 시각적 모델링은 필수가 되고 있다.

종류

  • 클래스 다이어그램(Class Diagram) : 클래스 명세와 클래스 간의 관계를 표현
  • 복합 구조 다이어그램(Composite Structure Diagram) : 클래스 명세와 클래스 간의 관계를 표현
  • 객체 다이어그램(Object Diagram) : 인스턴스 간의 연관 관계를 표현.

등 등…

출처

Node Express 프로젝트 시작하기

|

Node Express 프로젝트 시작하기

Express 설치하기

1) node를 설치한 뒤, 어플리케이션을 보관할 디렉토리 설정 후, 그 디렉토리를 작업디렉토리로 설정.
2) npm init 명령을 이용해 어플에 대한 package.json파일을 작성.
npm init

3) 이 명령을 실행하면 애플리케이션의 이름 및 버전과 같은 몇 가지 정보에 대해 프롬프트한다. 지금은 다음의 항목을 제외한 대부분의 항목에서 ENTER 키를 눌러 기본값을 수락할 수 있다.
entry point: (index.js)

4) 기본파일의 이름을 app.js로 입력하거나 자유롭게 입력. 기본파일의 이름을 index.js로 입력하기 원하는 경우에는 ENTER기를 눌러 제안된 기본 파일이름을 수락한다.
이제 app 디렉토리에 Express를 설치한 후 종속 항목 목록에 저장한다.
npm install express --save

5) Express를 임시로 설치하고 종속 항목 목록에 추가하지 않으려면 다음과 같이 –save옵션을 생략한다.
npm install express

--save 옵션을 통해 설치된 Node 모듈은 package.json 파일 내의 dependencies 목록에 추가됩니다. 이후 app 디렉토리에서 npm install을 실행하면 종속 항목 목록 내의 모듈이 자동으로 설치됩니다.

NPM 노드 패키지 모듈

  • 코드 재사용을 위한 라이브러리들

Express

  • Express는 노드를 만든 패키지의 일종. 웹 서버를 만들기 위한 것.
  • node base web server
  • 프레임워크
  • 사용법
var express = require('express'); //node 모듈에 있는걸 가져옴
var app = express(); //express의 반환값이 함수이기때문에, 또다른 app에 함수정보를 담는다. //세미콜론 생략가능
  • 서버 응답처리
app.listen(3000, function(){
	console.log("start express server port 3000!")
});

node_module

  • express가 필요로하는 모듈들이 모두 있는 곳.

package.json

  • 노드 프로젝트가 의존하고 있는 라이브러리를 모두 package.json이 등록하고 있다.
  • 다음에 노드 프로젝트를 받았을때 쉽게 같은 환경을 가지고 설치할 수 있도록 도와준다.

package-lock.json 이란?

  • package.json이 생성될때 같이 사용 됨.
  • Package-lock.json 파일에는 package.json 파일에 나열된 종속성과 설치할 특정 종속성 버전이 들어 있습니다
  • npm이 node_modules 트리 또는 package.json을 수정하는 모든 작업에 대해 package-lock.json이 자동으로 생성됩니다. 생성 된 정확한 트리를 설명하므로 후속 설치가 중간 종속성 업데이트에 관계없이 동일한 트리를 생성 할 수 있습니다.
  • 이 파일은 소스 저장소에 커밋되고 다양한 용도로 사용됩니다.
  • 이 패키지의 이름은 패키지 잠금입니다. 이것은 package.json의 내용과 일치해야합니다.
  • 팀원, 배포 및 지속적인 통합을 통해 동일한 종속성을 설치할 수 있도록하는 종속성 트리의 단일 표현을 기술할때 사용.

node 프로젝트

node 프로젝트 실행 시 비동기성

  • 노드는 거의 다 비동기로 실행된다.
  • 아래코드 생성시, end of server code,… 먼저 콘솔로그에 찍힌다. (비동기로 실행되기 때문에!!)
app.listen(3000, function(){
	console.log("start express server port 3000!")
});

console.log('end of server code,...'); 

nodemon, supervisor, forever,, etc

  • 자동으로 파일의 변화를 감지해 노드를 스타트 시켜준다. npm install nodemon -g
  • -g : 글로벌 , 내 pc의 어느 디렉토리에서도 실행할 수 있다. (–save는 현재 프로젝트 내)

라우팅을 통한 모든 요청 처리

app.get('/', function(req, res){
	res.sendFile(__dirname + "/public/main.html");
})
  • __dirname : node에서 최상의 절대 경로가 담겨있음

static처리

  • static 한 것들. js, css, img …자바스크립트 같은 파일들을 정적인 파일들이라고 함. 이런 파일들은 page가 요청받는 대로 자동으로 처리해주는게 좋다.
  • static directory를 express에 설정하여 처리한다.
  • app.use(express.static('public')) 이렇게 하면 public에서 알아서 읽음.

출처

Node Express 프로젝트 POST 처리, 그리고 GET과 POST차이

|

GET vs POST

  • GET은 주소줄에 값이 ?뒤에 쌍으로 이어붙고 POST는 숨겨져서(body안에) 보내진다.
  • GET은 URL에 이어붙기 때문에 길이제한이 있어서 많은양의 데이터는 보내기 어렵고 POST는 많은 양의 보내기에도 적합하다.(역시 용량제한은 있지만)
  • 즉 http://url/bbslist.html?id=5&pagenum=2 같이 하는 것이 GET방식이고 form을 이용해서 submit을 하는 형태가 POST입니다.

언제 GET을 쓰고 언제 POST를 써야 하는가

  • 원래의 목적에 맞게 기술을 사용하고 있는가?에 대한 고민 필요.
  • 클라이언트에서 서버로 데이터를 전송하려면 GET 아니면 POST밖에 없습니다.(사실 HTTP에는 PUT, DELETE등등 몇가지 더 있다..)
  • GET은 가져오는 것이고 POST는 수행하는 것입니다.

GET

  • GET은 Select적인 성향을 가지고 있습니다.
  • GET은 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태등을 바꾸지 않습니다. 게시판의 리스트라던지 글보기 기능 같은 것이 이에 해당하죠.(방문자의 로그를 남긴다거나 글읽은 횟수를 올려준다거나 하는건 예외입니다.)
  • GET을 사용해야 하는 이유 : Link문제. 기본적으로 웹에서 모든 리소스는 Link할 수 있는 URL을 가지고 있어야 합니다.(퍼머링크(permalink)1퍼머링크라면 더 좋겠지만 꼭 퍼머링크가 아니라고 하더라도) 그래야 Link를 할 수 있으니까요. 쉽게 말하면 어떤 페이지를 보고 있을때 다른 사람한테 그 주소를 주기 위해서 주소창의 URL을 복사해서 줄 수 있어야 한다는 것입니다. POST를 할 결우에는 값이 내부적으로 전달되기 때문에 URL만 전달할 수 없죠. 글을 저장하는 경우에는 URL을 제공할 필요가 없기 때문에 POST를 해도 상관이 없는 것이고요.

POST

  • POST는 서버의 값이나 상태를 바꾸기 위해서 사용합니다.
  • 글쓰기를 하면 글의 내용이 디비에 저장이 되고 수정을 하면 디비값이 수정이 되죠. 이럴 경우에 POST를 사용.

Node Express 프로젝트 POST 처리

POST

  • HTTP 메서드. url에 담겨있는게 아님. 서버에 있는 data를 처리할 시 사용한다.
  • GET은 중요한 정보가 노출될 위험이 있다.
  • post요청인 경우 ‘req.param(‘email’)’와 같은 형태로 받을 수 없음.
  • body parser라는 별도의 모듈이 필요함!
    npm install body-parser --save (–save 를 써서 package.json에 설치하기.)

    1) app.js에 모듈 export
    var bodyParser = require('body-parser');

    2) express서버에 바디 파서를 사용한다는걸(use) 알려줘야함.

  • 아래 명령은 그냥 외운다고 생각하기.
    • askii형태 데이터만 주고 받는데, 한글같은건 다른 문자로 치환해야함. 이걸 인코딩해서 처리하는걸 이렇게 표기함. ==> app.use(bodyParser.urlencoded({extend:true}))
    • 클라이언트도 브레이스 해서 보낼 수 있는데 json으로., 이렇게 표기해서 처리하겠다. ==> app.use(bodyParser.json())
app.use(bodyParser.json()) 
app.use(bodyParser.urlencoded({extend:true}))
  • req.body –> 보통 object형태로 들어옴.
    res.send("<h1>welcome!"+req.body.email+"</h1>")!

출처

Node Ajax처리(Javascript)

|

Node Ajax처리(Javascript)

AJAX란?

페이지 일부분을 업데이트 하기 위한 정보를 서버에 요청할 수 있다. 서버로부터 받은 데이터로 작업을 한다.

  • Ajax는 ‘Asynchronous JavaScript + XML’을 줄인말로써, “서버 처리를 기다리지 않고 비동기(Asynchronous)요청이 가능하다”란 의미.
  • AJAX란 비동기 JavaScript와 XML을 말한다. 간단히 말하면, 서버측 Scripts와 통신하기 위한 XMLHttpRequest객체를 사용하는 것을 말한다.
  • 서버측으로 다양한 형식(JSON, XML, HTML 및 일반 텍스트 형식 등)의 정보를 주고 받을 수 있다.
  • AJAX의 강력한 특징은 페이지 전체를 리프레쉬 하지 않고서도 수행 되는 “비동기성”. 이러한 비동기성을 통해 사용자의 Event가 있으면 전체 페이지가 아닌 일부분만을 업데이트 할 수 있게 해준다.

Ajax 장점, 단점

  • 장점
    • 페이지 이동없이 고속으로 화면 전환
    • 서버처리를 기다리지 않고, 비동기 요청이 가능
    • 수신하는 데이터의 양을 줄일 수 있고, 클라에 처리를 위임 가능
  • 단점
    • Ajax를 쓸 수 없는 브라우저에 대한 문제
    • http클라이언트의 기능 한정
    • 페이지 이동없는 통신으로 인한 보안상의 문제
    • 지원하는 charset의 한정
    • 스크립트로 작성되므로 디버깅이 용이하지 않다
    • 요청을 남발하면 역으로 서버 부하가 늘어날 수 있음

동기/비동기 통신 매커니즘

이미지

Node Ajax처리(Javascript)

  • 클라이언트 폼을 json으로 만들어서 send로 서버로 보냄
  • app.js서버에서는 포스트로 받아서 /url를 라우팅 한 뒤, 콘솔찍고, 다시 결과값을 포함해서 email에 결과적으로 잘되었는지 ok해서 보낸다.
  • form.html에서 만약 result가 ok이면 return else처리
  • form.html
  • var xhr = new XMLHttpRequest(); 이후에 세미콜론 표기 주의! 빼먹지 말기. 빼먹으면 response가 제대로 안됨..
//입력값 전송
document.querySelector(".ajaxSend").addEventListener('click', function(){
    var inputdata = docoment.form[0].elements[0].value;
    sendAjax('http://127.0.0.1:3004/ajax_send_email', inputdata);
})

//데이터 송수신 처리
function sendAjax(url, data){

    //데이터 문자열 처리
    var data = {'email' : data};
    data = JSON.stringify(data);

    //데이터 송신, Context-Type 설정
    var xhr = new XMLHttpRequest();
    xhr.open('POST', url);
    xhr.setRequestHeader('Context-Type', "application/json");
    xhr.send(data);

    //데이터 수신
    addEventListener('load', function(){

        //받을 결과를 json object로 변환
        var result = JSON.parse(xhr.responseText);

        //받은 결과에 따라 분기처리
        if(result.result !== 'ok'){
            return;
        } else {
            document.querySelector(".result").innerHTML = result.email;
        }
    })

}
  • app.js (서버단 처리!)
app.post('/ajax_send_email', function(req, res){
    console.log(req.body.email);
    //check validation about input value ==> select db
    var responseData= {'result' : 'ok', 'email' : req.body.email};
    res.json(responseData); //json
})

express.json

  • JSON 페이로드로 들어오는 요청을 구문 분석하고 body-parser를 기반으로합니다.
  • JSON 만 구문 분석하고 Content-Type 헤더가 type 옵션과 일치하는 요청 만 조사하는 미들웨어를 반환. 이 파서는 본문에 대한 유니 코드 인코딩을 허용하고 gzip 및 압축 인코딩의 자동 팽창을 지원.
  • 구문 분석 할 본문이 없거나, Content-Type이 일치하지 않거나, 구문 분석 할 본문이 없으면 구문 분석 된 데이터를 포함하는 새 본문 개체가 미들웨어 (예 : req.body) 다음에 요청 개체 또는 빈 개체 ({}) 오류가 발생한다.

javascript ajax method

요청전

  • querySelector : .ajaxsend 라는 클래스를 사용하는 문서의 첫번째 element를 반환(element는 element object) document.querySelector('.ajaxsend')
  • addEventListener : javascript에서 이벤트를 붙이는 방법. on + event형식에 비해 여러 이벤트를 등록할 수 있고, 특정 이벤트를 제거할 수 있다.
  • XMLHttpRequest : ajax 요청을 하는 자바스크립트 API. 이 메서드는 서버와 브라우저간의 네트워크 요청을 보낸다((XHR) is a JavaScript API to create AJAX requests. Its methods provide the ability to send network requests between the browser and a server.)
  • 사용
var xmlhttp;

if (window.XMLHttpRequest) {
    xmlhttp = new XMLHttpRequest();
    xmlhttp.open("GET", filepath, false);
    xmlhttp.send(null);
}
  • 요청(request)을 하기 위해서는 HTTP request class의 open()과 send()를 아래와 같이 호출하여야 한다.
httpRequest.open('GET', 'http://www.example.org/some.file', true);
httpRequest.send(null);
  • setRequestHeader : 만약 “POST” type을 보내려 한다면, 요청(request)에 MIME type을 설정 해야 합니다. 예를 들자면 send()를 호출 하기 전에 아래와 같은 형태로 send()로 보낼 쿼리를 이용해야 합니다.
    http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');

요청후

  • ajax 로 착신 데이터 처리할시(server-side systems 처리 이후), responseText 또는 responseXML 로 처리(데이터를 텍스트 또는 DOMDocument로 수신)
  • XMLHttpRequest 오브젝트를 생성하여 HTTP 요청을 준비한 후, 서버에 접속하여 데이터 및 요청을 보내고, responseText 또는 responseXML 프로퍼티로 수신한다.

출처

JSON

|

JSON

  • JSON 페이로드로 들어오는 요청을 구문 분석하고 body-parser를 기반으로합니다.
  • JSON 만 구문 분석하고 Content-Type 헤더가 type 옵션과 일치하는 요청 만 조사하는 미들웨어를 반환합니다. 이 파서는 본문에 대한 유니 코드 인코딩을 허용하고 gzip 및 압축 인코딩의 자동 팽창을 지원합니다.
  • 구문 분석 할 본문이 없거나, Content-Type이 일치하지 않거나, 구문 분석 할 본문이 없으면 구문 분석 된 데이터를 포함하는 새 본문 개체가 미들웨어 (예 : req.body) 다음에 요청 개체 또는 빈 개체 ({}) 오류가 발생합니다.

JSON.stringify()

  • stringify 메소드는 JSON 객체를 String 객체로 변환시켜준다.

JSON.parse()

  • parse 메소드는 string 객체를 JSON 객체로 변환시켜준다.

출처