목록프로그래밍 (408)
쌓고 쌓다
View 환경설정 메인 함수를 실행시키고 localhost:8080에 접속해 보자. 에러 페이지가 나온다. SpringBoot에서는 static/index.html 을 올려두면 Welcome Page로 자동으로 읽는다. resources/static/index.html Hello Link 다시 웹 서버를 실행시키면 처음 도메인을 치고 들어왔을 때 보여지는 웰컴 페이지(index.html)가 나온다. 이것은 그냥 정적 페이지다. 서버가 index.html을 웹 브라우저에 그냥 응답으로 던지는 것이다. 템플릿 엔진이라는 것을 쓰면 html의 모양을 바꿀 수 있다. Controller 만들기 controller 패키지를 만들고 그 안에 HelloController.java를 만들어 보자. HelloContro..
비정형적으로 메뉴를 배치하는 방법으로 position 옵션을 사용한다. html 코드 프로그래밍 강좌 HTML 강좌 CSS 강좌 파이썬 강좌 C# 강좌 JAVA 강좌 JS 강좌 css * { margin: 0; padding: 0; } h3 { margin: 10px auto; width: 650px; text-align: center; border: solid 1px black; } #box { margin: 0 auto; width: 650px; height: 530px; background-color: green; position: relative; } #box div { background-color: yellow; width: 100px; height: 70px; text-align: cente..
서버에 요청을 보낼 때는 주소를 통해 요청의 내용을 표현한다. 주소가 /index.html이면 서버의 index.html을 보내달라는 뜻이다. 물론 html이나 css, 이미지 같은 파일도 요청이 가능하고, 특정 동작을 행하는 것을 요청할 수도 있다. 서버의 요청이 주소로 표현되니 서버가 이해하기 쉽게 주소를 사용하는것이 좋다. 여기서 REST가 등장한다. REST(REpresentational State Transfer)는 서버의 자원을 정의하고 자원에 대한 주소를 지정하는 방법을 뜻한다. 자원이라 해서 파일만 뜻하는 것이 아니라 서버가 행할 수 있는 것들을 통 들어서 의미한다. REST를 따르는 서버를 RESTful하다라고 한다... REST API? API(Application Programming..
요청과 응답 클라이언트에서 서버로 요청(request)을 보내고, 서버에서는 요청에 따라 처리하여 응답(response)을 보낸다. 따라서 서버에는 요청을 받는 부분과 응답을 보내는 부분이 있어야 한다. 요청과 응답은 이벤트 방식이라고 생각하자. 클라이언트로부터 요청이 왔을 때 어떤 작업을 할지 이벤트 리스너를 미리 등록해둔다. createServer.js const http = require('http'); http.createServer((req, res) => { // 응답을 어떻게 할지 적음. } http 서버가 있어야 웹 브라우저의 요청을 처리할 수 있으니 http 모듈을 사용했다. req 객체는 요청에 관한 정보들을, res 객체는 응답에 관한 정보들을 담고 있다. 현재 요청에 대한 응답을 넣..
레이아웃 많이 들어봤지만 정확히 알진 못했다. 레이아웃은 HTML 요소들을 브라우저 화면에 배치하는 작업을 말한다. 레이아웃 작업은 기본적으로 화면의 상단에서 시작하여 좌측에서 우측 방향으로 이루어진다. 하단까지 모두 작업을 한다면 전체 레이아웃이 완성되는 것이다. 박스 요소 중앙 배치 태그 같은 박스형 요소를 화면에 배치하여 그 속에 세부적인 레이아웃 작업을 하는 경우가 있다. 이 박스를 중앙에 배치하는 방법을 알아보자. html 안녕하세요. 반갑습니다. - 박스의 중앙 배치 태그와 같은 박스 요소를 배치할 때 상하단 마진을 0으로 좌우측 마진을 auto로 설정한다. margin: 0 auto; - 글자와 이미지의 중앙 정렬 글자만 중앙 정렬할 때 사용하는 속성 text-align은 아니다. 이미지 또..
파일을 읽고 쓸 때 크게 두 가지 방식이 있다. 버퍼를 이용하거나 스트림을 이용하는 방식이다. 버퍼 fs 모듈에서 사용한 readFile 메소드 또한 버퍼 방식을 사용한다. 파일을 읽을때 메모리에 파일 크기만큼 공간을 마련한 뒤, 그 공간에 데이터를 저장하고 사용자가 사용한다. 이때 메모리에 저장된 데이터를 버퍼라고 한다. 일정한 크기로 데이터를 모은 것이다. 일정한 크기가 되면 한 번에 데이터를 처리하며, 버퍼링은 버퍼에 데이터가 찰 때까지 모으는 작업을 말한다. Buffer 클래스로 버퍼를 다룰 수 있다. 스트림 버퍼 방식에서 100MB 파일을 읽을 때 100MB 버퍼를 만들어야 했었다. 이게 10개가 되면 1GB가 된다. 메모리의 문제가 발생할 수 있다는 말이다. 게다가 버퍼에 다 써야지 파일 읽기..
노드를 공부하고 있는데 아래의 코드에서 의문이 생겼다. pipeline.mjs import { pipeline } from 'stream/promises' import zlib from 'zlib' import fs from 'fs' await pipeline( fs.createReadStream('./readme.txt'), zlib.createGzip(), fs.createWriteStream('./readme.txt.gz') ) import { pipeline } from 'stream/promises'를 다음 줄의 import zlib from 'zlib'처럼 왜 작성 안 했을까? import pipline from 'stream/promises'로 작성해도 모듈의 메소드를 가져오는 건 동일할 것..
fs 모듈 fs 모듈은 파일 시스템에 접근하는 모듈이다. 이 모듈로 파일의 생성과 삭제, 읽기, 폴더 생성도 가능하다. 1. 파일 읽기 - readFile readme.txt 리드미입니다. readFile.js const fs = require('fs') fs.readFile('./readme.txt', (err, data) => { if(err) { throw err } console.log(data) console.log(data.toString()) }) * 읽은 파일의 경로가 현재 파일 기준이 아니라 node 명령어를 실행하는 콘솔 기준이다. C:\ 디렉토리에서 node folder/readFile.js를 실행하면 C:\folder\readme.js가 실행되는 것이 아니라 C:\readme.txt..