일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- gui
- js
- 데이터베이스
- 자바스크립트
- post
- 깃허브
- 브랜치
- 예외처리
- 백준1654번js
- CS
- 깃
- 리액트
- 프로그래머스
- 모던자바스크립트4장
- 객체
- 백준부분수열의합js
- 타입스크립트
- 리팩토링
- 변수
- 웹
- 좋아요추가
- 자바
- npm
- API
- 오픈소스
- Node.js
- 파이프라인
- var와let과const차이
- 컴퓨터공학
- Express
- Today
- Total
Nevertheless
백엔드(back-end) 본문
백엔드의 구조
- 웹 서버: 정적인 페이지에 대응, 동적인 페이지에 대한 처리는 직접 처리하지 않고, 웹 어플리케이션 서버에게 전달
정적 페이지: 화면의 내용/ 데이터 등의 변동이 없는 페이지
동적 페이지: 데이터 처리/ 연산을 통해 화면의 내용, 데이터가 변하는 페이지
- 웹 어플리케이션 서버: 동적 페이지를 처리, 필요한 데이터 연산을 위해 데이터베이스와 연결돼 있으며 데이터 조회/수정/삭제에 대한 처리를 요청한다.
node.js
node.js 는 자바스크립트를 스크립트 언어 이상으로 프로그래밍 언어 역할을 할 수 있도록 지원하는 플랫폼이다. 즉, 우리는 Node.js를 이용해서 자바스크립트로 백엔드를 구현할 수 있다.
node.js로 서버 만들기(server.js)
let http = require('http'); //node.js가 가지고 있는 모듈(http) 불러오기
function onRequest(request, response) { // 요청, 응답
response.writeHead(200,{'Content-Type':'text/html'}); // 웹 서버가 클라이언트에게 응답을 해줄 때 => 코드 200(정상) , 응답 타입: html
response.write('Hello Node.js'); // 화면에 뿌려줄 데이터
response.end(); // 응답 날아감
}
http.createServer(onRequest).listen(8888); //포트 번호
// localhost:8888
터미널에서 node server.js 라고 치면 localhost:8888 에서 실행되는 것을 확인할 수 있다.
HTTP 프로토콜 템플릿
- HEAD
1) 통신 상태가 어떤지 알려준다.
ex) 200: 정상이다, 404: 클라이언트가 원하는걸 못찾겠다, 500: 서버가 이상하다. => 이와 같은 숫자들을 HTTP (status) code 라고 부른다.
2) 응답이 어떤 형태인지 적어준다. 예를 들어 html 이다.
server.js 모듈화
server.js
let http = require('http'); //node.js가 가지고 있는 모듈(http) 불러오기
function start () {
function onRequest(request, response) { // 요청, 응답
response.writeHead(200,{'Content-Type':'text/html'}); // 웹 서버가 클라이언트에게 응답을 해줄 때 => 코드 200(정상) , 응답 타입: html
response.write('Hello Node.js'); // 화면에 뿌려줄 데이터
response.end(); // 응답 날아감
}
http.createServer(onRequest).listen(8888); //포트 번호
// localhost:8888
}
exports.start = start; // 바깥에서 start를 사용할 수 있게 한다는 뜻
index.js
let server = require('./server');
server.start();
➡️Node.js가 미리 만들어둔 모듈을 우리가 require('모듈 이름'); 이렇게 사용한 것처럼, 우리가 만든 server도 모듈처럼 다른 javascript 파일에서 사용할 수 있다.
Router 를 이용해 역할 분리해주기
- Server: Request 를 받는다.
- Router: Request 의 URL 에 따라 루트를 정해준다. = 어디로 갈지 길만 정해줘요!
1️⃣ index.js 호출
let server = require('./server');
let router = require('./router');
server.start(router.route);
2️⃣ server.js 호출
let http = require('http'); //node.js가 가지고 있는 모듈(http) 불러오기
let url= require('url'); //url 모듈 가져오기
function start (route) {
function onRequest(request, response) { // 요청, 응답
let pathname= url.parse(request.url).pathname;
route(pathname);
response.writeHead(200,{'Content-Type':'text/html; charset=UTF-8'}); // 웹 서버가 클라이언트에게 응답을 해줄 때 => 코드 200(정상) , 응답 타입: html
response.write('Hello Node.js'); // 화면에 뿌려줄 데이터
response.end(); // 응답 날아감
}
http.createServer(onRequest).listen(8888); //포트 번호
// localhost:8888
}
exports.start = start; // 바깥에서 start를 사용할 수 있게 한다는 뜻
3️⃣ router.js 호출
function route(pathname) {
console.log('pathname : '+ pathname);
}
exports.route = route;
➡️ 콘솔에 이와 같이 경로가 찍히는 것을 확인할 수 있다.
👩🏻💻 실습해보기
1. 쇼핑몰 프로젝트 메인 페이지 만들기
2. 서버 만들기 실습
➡️URL 에 따라 다른 화면이 보이도록 구현하였다.
3. start 함수 실행하여 이름 출력하기
response.writeHead(200,{'Content-Type':'text/html; charset=UTF-8'});
➡️한글 깨짐 문제가 있어서 인코딩 방식을 UTF-8로 변경해주어 문제를 해결할 수 있었다.
🌟 배운 점
오늘은 백엔드에 대해 배웠다. 프론트엔드는 좀 익숙했었는데, 백엔드는 새로운 것들이 많다보니 낯설고 좀 어려웠다. 서버 만들기를 해보았는데, 생각보다 복잡하지는 않았지만 서로 서로 어떻게 호출을 하는지를 이해하는 것이 좀 헷갈렸다. 그리고 강의와 다르게 예상치 못하게 오류가 나는 부분들도 있어서 좀 당황했다. 나는 pathname에 자꾸 /favicon.ico 가 떠서 'handle[pathname] is not a function' 이라는 오류가 계속 발생했다.
if(pathname !== '/favicon.ico')
route(pathname, handle, response);
나는 이런 방식으로 문제를 해결했는데, 강의의 뒷 부분에 보니까 오류를 처리하는 방법에 대해 나왔다.
function route(pathname, handle, response) {
console.log('pathname : '+ pathname);
if(typeof handle[pathname] === 'function'){
handle[pathname](response);
}
else {
response.writeHead(404,{'Content-Type':'text/html; charset=UTF-8'});
response.write('찾으시는 페이지가 없습니다.');
response.end();
}
}
나는 단편적인 오류만 해결하려고 했는데, 위와 같은 방법을 사용해야 전체적으로 발생하는 오류를 해결할 수 있을 것 같다. 내가 원하는 답만 출력하고자 하는 것이 아니라 항상 어떤 오류가 생길 수 있을지를 염두해두고 개발을 해야겠다는 생각을 하게 되었다. 오늘 배운 내용이 헷갈리는 것이 많아서 좀 복습을 해야겠다.
'데브코스' 카테고리의 다른 글
백엔드(2) - API (4) | 2024.08.28 |
---|---|
데이터베이스(Database) (0) | 2024.08.24 |
CSS 와 Javascript (1) | 2024.08.21 |
웹(Web) (0) | 2024.08.20 |
협업 Tool (0) | 2024.08.19 |