์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 |
- ์๋ฐ
- JavaScript
- Python
- html
- ํ์ด์ฌ
- ์ฑ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ๋ง์ผ๋ด๊ฐ์ธ์์๋ค์์ฐ๋ค๋ฉด
- K๋ฐฐํฐ๋ฆฌ๋ ๋ณผ๋ฃจ์
- ์ฝ๋ฉ
- css
- ํ๋ก๊ทธ๋๋ฐ
- database
- ๋ผํ๋ผ์ค์๋ง๋
- K๋ฐฐํฐ๋ฆฌ
- ์ฅํธ์์ค
- Java
- ๊น๋ฏธ๊ฒฝ
- ์๋ฐ์คํฌ๋ฆฝํธ
- ์ปดํจํฐ๊ณผํ
- ComputerScience
- ๋ ์
- ๊นํ๋จ
- ๊ฐ๋ฐ
- ์นํผ๋ธ๋ฆฌ์ฑ
- ์ํ
- ์นํ์ด์ง๋ง๋ค๊ธฐ
- ๋ฐ์ํ
- ์ค๋ผํด
- ๊น๋ฏธ๊ฒฝ์๋งํ์์
- Today
- Total
๋ชฉ๋กfull stack/Back-End (19)
JiYoung Dev ๐ฅ
controller : ๋ทฐ๋ฐํ restcontroller : ๋ฐ์ดํฐ ๋ฐํ Application.java ์์น ๊ธฐ์ค ํ์์ ์๋ ๊ฒ๋ค๋ง ๊ฐ์ฒด ์์ฑ ๋ชจ๋ ์ปจํธ๋กค๋ฌ, ์๋น์ค ๋ฑ์ ๋ชจ๋ boot package ํ์์ ์กด์ฌํ ์ ์๋๋ก ๋ง๋ค์ด์ผ ํจ spring์์ ์ฌ์ฉํ๋ class => ์ด๋ ธํ ์ด์ @์ ๋ถ์ฌ์ผํจ. ์ด๋ค ๊ธฐ๋ฅ์ ํ๋์ง JPA object์ ๊ด๊ณํ ํ ์ด๋ธ ๋งคํ jpa ์ฌ์ฉ์ ์ฃผ์์ - ์์ฒด์ ์ผ๋ก ๊ฐ๊ฐ์ ๊ฐ๋ค์ ๊ตฌ๋ถํ ์ ์๋ (ex.sequence)๋ฅผ ์์ฑํ์ฌ ์ด ์์ด๋ฅผ primary ํค๋ก ์ฌ์ฉ ์ญ์จ object-json ์ฝ๊ฒ ๋ณํ ๊ฐ๋ฅํ๋๋ก ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ Stringํํ์ json์ java Object๋ก ๋ณํํ๊ธฐ ์ํด ์ฌ์ฉ ๋ฐํ์ ์๋ฌ ์ฒ๋ฆฌ 1. throw : ์ฝ๋๊ฐ ๊น๋ํ๋ค 2. try-..
nunjucks ํ ํ๋ฆฟ ์์ง์ ํ๋ HTML์ ์ ์ ์ธ ์ธ์ด๋ก Javascript์ ๋์ ์ธ ์ฐ์ฐ๋ค์ HTML์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ์ ๋ถํธํจ ํ ํ๋ฆฟ ์์ง์ ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํด์ HTML์ ๋ ๋๋ง์ ๋๋ ์ผ์ข ์ ๋๊ตฌ nunjucks ์ค์น npm install nunjucks nunjucks ํ๊ฒฝ ์ค์ const express = require('express') const nunjucks = require('nunjucks') const app = express() //view๋ indexRouter์์ ์ฌ์ฉํ๋ฏ๋ก ์์ชฝ์์ ์์ฑํด์ผ ํจ app.set('views', __dirname+'/views') app.set('view engine', 'html') nunjucks.configure('views', { expr..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bqi9SZ/btsmRoeTffB/t7D519udj3kEVdLSLLkKOK/img.png)
http ํต์ ํต์ ์์ : ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋ค์ด์์ผ ์๋ฒ์ชฝ์์ ๊ทธ์ ์๋ง๋ ์๋ต์ ์งํํ๋ ๋ฐฉ์ ์๋ฒ๊ฐ ๋จผ์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๋ ๊ฒ ๋ถ๊ฐ๋ฅํจ socket ํต์ ์๋ฒ์ ํด๋ผ์ด์ธํธ ์๋ฐฉํฅ ์ฐ๊ฒฐ์ด ์ด๋ฃจ์ด์ง๋ ํต์ ์ผ๋ก, ํด๋ผ์ด์ธํธ๋ ์๋ฒ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์๊ณ ์๋ฒ๋ ํด๋ผ์ด์ธํธ๋ก ์์ฒญ์ ๋ณด๋ผ ์ ์๋ ํต์ ์๋ฅผ๋ค์ด ์ค์๊ฐ ์๋ฆผ Node.js์์๋ Socket.IO npm ๋ชจ๋์ ์ด์ฉํ์ฌ ๊ฐ๋จํ๊ฒ ์ฌ์ฉํ ์ ์์ ๋ชจ๋ ์ค์น npm install socket.io ์๋ฒ์ชฝ ์์ผ //์๋ฒ์ชฝ ์์ผ ์์ฑ const socketIO = require('socket.io') //์ด๋ ์๋ฒ์ ์ฐ๊ฒฐ์ด ๋ ์ํ๋ก ์ธ ๊ฒ์ธ์ง ์ ์๋ฅผ ํด์ค์ผ ํจ (ex.port) //express server module.exports = (serve..
DB์ฐ๋ํ๊ธฐ ๋ ธ๋์์ ์ฌ์ฉํ๋ ํ ํ๋ฆฟ ์์ง : nunjucks html ์์์ ๋ฐ๋ณต๋ฌธ, ์กฐ๊ฑด๋ฌธ์ ๊ฐ์ด ์ฌ์ฉํ ์ ์์ npm install nunjucks nunjucks ์ค์น ํ ๊ฒฝ๋ก์ ํ์ ์ค์ nunjucks๋ ํ์ฅ์ html ๊ทธ๋๋ก ์ฌ์ฉ๊ฐ๋ฅ //nunjucks ํ์ฉ์ ์ํ ์ค์ //html ๋ฌธ์ ๊ฒฝ๋ก, ํ์ //1. views ๊ฐ ์ค์ : view๋ฅผ ์ ์ฅํ๊ณ ์๋ ํด๋์ ๊ฒฝ๋ก app.set("views", __dirname + "/views"); //2.view engine : ๊ธฐ๋ณธ์ ์ผ๋ก ์ฌ์ฉํ ํ์ app.set("view engine", "html"); //nunjucks ์ค์ nunjucks.configure("views", { express: app, //app(express) ๊ฐ์ฒด ์ฐ๊ฒฐ ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/bGXEif/btsmBhTm4pt/jRuNx7qQKIISPLY635JmRK/img.png)
์ฟ ํค์ ์ธ์ ์ ์ฌ์ฉํ๋ ์ด์ → HTTP์ ํน์ฑ ๋๋ฌธ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด์๋(์์ฒญ, ์๋ต) ์ฐ๊ฒฐ์ ์ ์ง๋์ด์ผ ํจ ๊ทธ๋ฐ๋ฐ ์์ฒญ, ์๋ต์ด ๋๋ฌ๋๋ฐ๋ ๊ณ์ ์ฐ๊ฒฐ์ ์ ์งํ๋ค๋ ๊ฒ์ ๊ณ์ ์์์ ์ด๋ค๋ ๊ฒ → ๋นํจ์จ์ ๊ทธ๋์ HTTP๋ ๋น์ฐ๊ฒฐ์ฑ์ ํน์ง์ ๊ฐ์ง๊ณ ์์ ์ด๋ก์ธํด ํ์๋๋ ํน์ง์ธ ๋ฌด์ํ(Stateless) ์์ฒญ๊ณผ ์๋ต์ด ๋๋๋ ์๊ฐ ์๊ณ ์์๋ ์ฌ์ฉ์์ ๋ฐ์ดํฐ๋ฅผ ๋์ด์ ๊ธฐ์ตํ์ง ์์! ์ด๋ฌํ ์ด์ ๋ก ์ฌ์ฉ์์ ์ํ ์ ๋ณด๋ฅผ ์ ์งํ๊ธฐ ์ํด ์ฟ ํค์ ์ธ์ ์ด ํ์ํจ ์ฟ ํค ์ ์งํด์ผํ๋ ์ํ ์ ๋ณด๋ฅผ ๋ณด๊ด ํด๋ผ์ด์ธํธ(๋ธ๋ผ์ฐ์ )์ ์ ์ฅ ๋ง๋ฃ๊ธฐ๊ฐ์ด ๋จ์์์ผ๋ฉด ์ปดํจํฐ๋ฅผ ๋๋๋ผ๋ ๋ฐ์ดํฐ๊ฐ ์ ์ฅ๋์ด ์์ ์์ฑ์ ์๋ฒ์์, ๋ณด๊ด์ ํด๋ผ์ด์ธํธ ์ชฝ์์ ์งํํ๋ฏ๋ก ์๋ตํ ๋ ์ฟ ํค๋ฅผ ํฌํจ์์ผ ์๋ตํด์ผ ํจ ์๋ฒ์์ ํด๋ผ์ด์ธํธ๋ก ์๋ตํ๋..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/AwMdC/btsmrFVdxKO/2LfTEzsJynsdkif1hZUrd0/img.png)
Express์์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ์ค๊ฐ์ ์์นํ๊ฒ ๋๋ ํจ์๋ค ์ด๋ ๋ฃจํธ๋ก ๊ฐ๋๊ฒ ํจ์จ์ ์ธ์ง ๋ผ์ฐํฐ๊ฐ ํ์ธ > ๋คํธ์ํฌ์์ ๋งํ๋ ๋ผ์ฐํฐ ํด๋ผ์ด์ธํธ์ ์์ฒญ๊ฒฝ๋ก(url)์ ๋ณด๊ณ ์ด๋์์ ์ฒ๋ฆฌํ๋ฉด ๋๋์ง ์ ๋ฌํด์ฃผ๋ ์ญํ > express์์์ ๋ผ์ฐํฐ http ๋ชจ๋์์๋ ์กฐ๊ฑด์ ์ ์ฌ์ฉํ์ app ์ธ์คํด์ค : ์์ฒญ๋ฐ๊ณ , ์๋ตํ๋ ๋ชจ๋ ์์ ์ app ์ธ์คํด์ค๋ฅผ ํตํด์ ์งํํจ ์ธ์คํด์ค๋ ? - ์์ฑ๋ ์๋ก ๋ค๋ฅธ ๊ฐ์ฒด ์ ๋ฆฌ http ๋ชจ๋ : ์์ฒญ ๋ฉ์๋๋ฅผ ์กฐ๊ฑด๋ฌธ์ผ๋ก ์์ฑํด์ค์ผ ํจ >> ๋ถํธ >> express ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉ ํ๋ ์์ํฌ์ ํน์ง : ์ด๊ธฐ์๋ ๊ณต๋ถํ๋๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆผ / ์ฌ์ฉ๋ฐฉ๋ฒ์ ์ตํ๋ฉด ์ฌ์ฉํ๊ธฐ๊ฐ ํธํ๋ค. Express ์ฌ์ฉ๋ฐฉ๋ฒ ์ตํ๊ธฐ 1. ์ค์น : terminal - npm install expre..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/chdxIN/btsiWSCuR7j/UkDd3SRFFktqeJekVQpsS1/img.png)
Spring Boot ๊ฐ๋ฐ ํ๊ฒฝ ์ค๋น ๐ ํ๋ก๊ทธ๋จ ์ค์น (Spring & MySQL) spring tool suite 4 Spring | Tools spring.io C๋๋ผ์ด๋ธ ๋ฐ๋ก ์๋์ ์ค์น (ํ์๋ ์๋!) jarํ์ผ๋ ์์ถํ์ผ์ด๋ผ ์์ถํ๊ธฐํ๋ฉด ๋จ ๊ทธ๋ฐ๋ฐ ์๋๋ ๊ฒฝ์ฐ๊ฐ ์์ด์ cmdํ์ฉ cmd ์ฐฝ ์ฐ ํ cd / >> c๋๋ผ์ด๋ธ๋ก ์ด๋ java -jar spring-tool-suite-4-4.18.1.RELEASE-e4.27.0-win32.win32.x86_64.self-extracting.jar ์ ๋ ฅ sts-4.16.1.RELEASE ๋จ๋ฉด ์ ์ ์์ถ ํ๊ธฐ ์๋ฃ ์ํฌ์คํ์ด์ค ๋ง๋ค๊ธฐ ๊ฒฝ๋ก์ ํ๊ธ์ด ์์ผ๋ฉด ์คํ์ ๋ฌธ์ ๋ฐ์๋๋ฏ๋ก ๊ผญ ํ์ธ! workspace ์ ํ ํ Launch My SQL MySQL ..
๐ AJAX (Asynchronous JavaScript and XML) ํด๋ผ์ด์ธํธ์ ์๋ฒ๊ฐ ๋น๋๊ธฐ์ ์ ๋ณด ๊ตํ์ด ๊ฐ๋ฅํ ํต์ ๊ธฐ๋ฅ ** ํ๋ฉด ์ ํ ์์ด ์๋ฐ์คํฌ๋ฆฝํธ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ค ํ๋ ๋ฐ์ดํฐ๋ฅผ ์ด๋ํ๊ณ ํ๋ฉด์ ๊ตฌ์ฑํ๋๋ฐ ์์ด์ ์น ํ๋ฉด์ ๊ฐฑ์ ํ์ง ์๊ณ ํ์ํ ๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ๋ณด๋ด๊ณ ๊ฐ์ ธ์ค๋ ๋ฐฉ๋ฒ ํ๋ฉด ๊ฐฑ์ ์ด ์์ด์ ์ฌ์ฉ์ ์ ์ฅ์์ ๋งค์ฐ ํธ๋ฆฌํ๊ณ ๋น ๋ฅด๊ฒ ์์ ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ฒ๋ผ ๋๊ปด์ง๊ฒ ํจ ํ์ง๋ง, ๋์ ์ผ๋ก ํ๋ฉด์ ๊ตฌ์ฑํ๋ ๋งํผ ๊ฐ๋ฐ์์ ๊ตฌํ์ ๋ณต์กํด์ง ๐ Ajax ์ฅ์ ํ์ด์ง์ ๊ฐฑ์ ์์ด ์๋ฒ์ ๋น๋๊ธฐ ํต์ ์ ๊ฐ๋ฅํ๊ฒ ํด์ค ํ๋ฉด์ด ์๋ก ๋ก๋ฉ๋๋ ๊ฒ์ด ์๋๋ฏ๋ก ์๋๋ฉด์์ ์ฑ๋ฅ ๊ฐ์ (์นํ์ด์ง ์๋ ํฅ์) ๋ณ๋์ ํ๋ฌ๊ทธ์ธ์ด ํ์ํ์ง ์์ Http ์ ์ก ์ค์๋ ํด๋ผ์ด์ธํธ๊ฐ ์น ์ดํ๋ฆฌ์ผ์ด์ ๊ณผ ์ํธ์์ฉ ํ ์ ..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/U8Orv/btsg4jbWSjQ/c9lPZgIHJVGRjgYJjodBD1/img.png)
๐ FrontController๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๐ FrontController ์ฌ์ฉํ๊ธฐ ์ JoinController, LoginControll๋ฅผ ๋ชจ๋ servlet์ผ๋ก ์์ฑ servlet์ Httpservlet ๊ฐ์ฒด๋ฅผ ๋ฐ๊ธฐ ๋๋ฌธ์ ์ผ๋ฐ class๋ณด๋ค ๋ฌด๊ฑฐ์ → servlet์ด ๋ง์์ง๋ฉด ํ๋ก์ ํธ ์์ฒด๊ฐ ๋ฌด๊ฑฐ์์ง ๋ฐ๋ผ์ FrontController๋ผ๋ ํ๋์ ์ปจํธ๋กค๋ฌ(servlet)๋ฅผ ๋ง๋ค๊ณ , ๊ทธ ์์์ ๊ฐ๊ฐ์ ๊ธฐ๋ฅ์ ๋ํ ํด๋์ค๋ฅผ ๋ง๋ค์ด ์ฒ๋ฆฌํ๋๋ก ๋ง๋ฆ! ๐ FrontController ์ฌ์ฉํ๊ธฐ ๐ ์ฌ์ฉ์ ์์ฒญ ๊ตฌ๋ถ ๋ฐฉ๋ฒ FrontController๋ฅผ ์ฌ์ฉํ๋ฉด mapping๊ฐ์ด ํ๋ > mapping๊ฐ๋ง ๋ณด๋ฉด ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ํ๋์ง, ํ์๊ฐ์ ๊ธฐ๋ฅ์ ํ๋ ์ง๋ฑ์ ์ด๋ค ์ฒ๋ฆฌ๋ฅผ ํ๋์ง ๊ตฌ๋ถํ ์ ์์ ์ฌ์ฉ์..
![](http://i1.daumcdn.net/thumb/C150x150.fwebp.q85/?fname=https://blog.kakaocdn.net/dn/Go5Yl/btsgEg1Mg8x/K7Inqz1j6iaS9419LrH2BK/img.png)
๐ Build ํฉ์ด์ง ์์๋ค์ WAS๊ฐ ์ธ์ํ ์ ์๋ ๊ตฌ์กฐ๋ก ๋ง์ถฐ์ฃผ๋ ๊ฒ ex. ํ๋ฉด์ ๋ณด์ฌ์ผ ํ๋ ๊ฒ์ web-app ๋ด๋ถ์ ๋ค์ด๊ฐ์ผ ํจ. WEB-INF๋ ํด๋ผ์ด์ธํธ๊ฐ ์ง์ ์ ๊ทผ ๋ถ๊ฐํ ๊ณณ์ผ๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ฑ์ ์ ์ฅ ๊ณผ๊ฑฐ์๋ ๊ตฌ์กฐ๋ฅผ ๋ง๋ค์ด์ค์ผ ํ์ >> ์๋ํ๋ฅผ ์ํ ๋ง๋ค์ด์ง ๋๊ตฌ >> ๋น๋ ๋๊ตฌ ๐ ๋น๋๋๊ตฌ โ Ant ์๋ฐ ํ๋ก์ ํธ์ ๋น๋๋ฅผ ์๋ํํด์ฃผ๋ ๋น๋ ํด โ Maven ์๋ฐ ํ๋ก์ ํธ์ ๋น๋๋ฅผ ์๋ํํด์ฃผ๋ ๋น๋ ํด ์ปดํ์ผ๊ณผ ๋น๋๋ฅผ ๋์์ ์ํ, ํ ์คํธ๋ฅผ ๋ณํํ๊ฑฐ๋ ์๋ฒ ์์์ ๊ด๋ฆฌํ ์ ์๋ ํ๊ฒฝ ์ ๊ณต Ant๋ฅผ ๊ฐํธํํ ๊ฒ - Ant์ ๊ฒฝ์ฐ - Maven์ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ผ์ ์ง์ ๋ค์ด๋ฐ์ ๋ฃ์ด์ฃผ๋๊ฒ ์๋๋ผ pom.xml์ ์ ๊ธฐ๋ง ํ๋ฉด ๋จ ๐ Maven ์ค์ต ๐ Maven ํ๋ก์ ํธ ์์ฑ Gr..