Web frameworkμ λνμ¬(1)
μΉ νλ μμν¬μ λν΄ νμ΅νκ³ κ³΅μ νλ κΈμ λλ€.
μ°λ¦¬λ ν΄μ»€ν€ λ± λΉ λ₯΄κ² νλ‘μ νΈλ₯Ό ꡬνν΄μΌν λ, μ£Όλ‘ expressλ₯Ό μ¬μ©ν΄ λΈλΌμ°μ μ μνΈμμ©μ ꡬννκ³€ νμ΅λλ€. κ·Έλ°λ° μ΄λ²μ λμμΈ ν¨ν΄μ 곡λΆνλ©°, ν μ΄ νλ‘μ νΈλ₯Ό μμ±ν΄ μμ νλλ° λ¬Έλ express μμ΄ μΉ μλ²λ₯Ό ꡬνν μ μλ λ°©λ²μ΄ μμκΉλΌλ κ³ λ―Όμμ μΆλ°νμ¬ νμ΅ν λ€, μ μ κ²½νμ λ°νμΌλ‘ κΈμ λ¨κ²¨λ΄ λλ€.
expressλ 무μμΈκ°
κ°λ¨νκ² Express.jsλ Node.jsλ₯Ό κΈ°λ°μΌλ‘ ν μΉ νλ μμν¬μ λλ€. μΌλ°μ μΈ λͺ©μ μΌλ‘λ Node.js κΈ°λ° μΉ μλ² κ°λ°μ λ¨μννκΈ° μν΄ μ¬μ©λ©λλ€.
κ·ΈλΌ μΉ νλ μμν¬λ 무μμΌκΉμ?
μΉ νλ μμν¬(Web framework)λ μΉ μ ν리μΌμ΄μ κ°λ°μ λ¨μννκ³ ν¨μ¨ννκΈ° μν΄ μ¬μ©λλ λꡬλ λΌμ΄λΈλ¬λ¦¬μ λͺ¨μμ λλ€. μΉ νλ μμν¬λ μΉ κ°λ°μ νμν κΈ°λ³Έ ꡬ쑰, κΈ°λ₯, ν¨ν΄ λ±μ μ 곡νμ¬ κ°λ°μκ° μ ν리μΌμ΄μ μ λΉμ¦λμ€ λ‘μ§μ μ§μ€ν μ μλλ‘ λμμ€λλ€.
μΉ νλ μμν¬μ μ 곡 κΈ°λ₯μ?
- λΌμ°ν (Routing): URLκ³Ό μμ² νΈλ€λ¬λ₯Ό μ°κ²°ν΄μ£Όλ κΈ°λ₯μ μ 곡ν©λλ€. μμ²μ΄ λ€μ΄μ€λ©΄ ν΄λΉνλ νΈλ€λ¬λ₯Ό μ€ννμ¬ μ μ ν μλ΅μ λ°νν©λλ€. μ΄λ₯Ό ν΅ν΄ μΉ μ ν리μΌμ΄μ μ λ€μν μλν¬μΈνΈλ₯Ό κ΄λ¦¬ν μ μμ΅λλ€.
- ν νλ¦Ώ μμ§(Template Engine): λμ μΈ μΉ νμ΄μ§ μμ±μ μν΄ ν νλ¦Ώ μμ§μ μ 곡ν©λλ€. ν νλ¦Ώ μμ§μ λ°μ΄ν°μ ν νλ¦Ώμ κ²°ν©νμ¬ λμ μΈ HTML νμ΄μ§λ₯Ό μμ±νλ κΈ°λ₯μ μ 곡ν©λλ€.
- λ°μ΄ν°λ² μ΄μ€ μ°λ: μΉ μ ν리μΌμ΄μ μμ λ°μ΄ν°λ² μ΄μ€μμ μνΈμμ©μ μ½κ² ν μ μλλ‘ λμμ€λλ€. λ°μ΄ν°λ² μ΄μ€ 쿼리μμ μνΈμμ©μ μΆμννκ³ , ORM(Object-Relational Mapping)μ ν΅ν΄ κ°λ°μκ° κ°μ²΄ μ§ν₯μ μΈ λ°©μμΌλ‘ λ°μ΄ν°λ² μ΄μ€λ₯Ό λ€λ£° μ μλλ‘ ν©λλ€.
- μΈμ λ° μΈμ¦ κ΄λ¦¬: μ¬μ©μμ μΈμ κ΄λ¦¬μ μΈμ¦μ μ²λ¦¬νλ κΈ°λ₯μ μ 곡ν©λλ€. λ‘κ·ΈμΈ, λ‘κ·Έμμ, μΈμ μ μ§ λ±μ μ½κ² ꡬνν μ μλλ‘ λμμ€λλ€.
- 보μ κΈ°λ₯: μΉ νλ μμν¬λ CSRF(Cross-Site Request Forgery) 곡격, XSS(Cross-Site Scripting) 곡격 λ±κ³Ό κ°μ μΉ λ³΄μ μνμΌλ‘λΆν° μ ν리μΌμ΄μ μ 보νΈνκΈ° μν 보μ κΈ°λ₯μ μ 곡ν©λλ€.
- μλ¬ νΈλ€λ§: μμΈ μ²λ¦¬ λ° μ€λ₯ νμ΄μ§ κ΄λ¦¬λ₯Ό λμμ€λλ€. κ°λ° μ€ λ°μνλ μ€λ₯λ₯Ό μ μ νκ² μ²λ¦¬νκ³ , μ¬μ©μμκ² μ€λ₯ λ©μμ§λ₯Ό μ 곡ν μ μλλ‘ ν©λλ€.
μΉ νλ μμν¬μ μ’ λ₯λ?
Express.js(Node.js κΈ°λ°), Django(Python κΈ°λ°), Ruby on Rails(Ruby κΈ°λ°), Laravel(PHP κΈ°λ°) λ±μ΄ μμ΅λλ€. μ΄λ¬ν μΉ νλ μμν¬λ₯Ό μ¬μ©νλ©΄ κ°λ°μλ μΉ μ ν리μΌμ΄μ μ κΈ°λ°μ΄ λλ λΆλΆμ ꡬννλ λ° λλ μκ°κ³Ό λ Έλ ₯μ μ μ½νκ³ , μμ°μ±μ ν₯μμν¬ μ μμ΅λλ€.
μ΄μ μΉ νλ μμν¬κ° 무μμ΄κ³ , κΈ°λ₯μ μ΄λ€μ§, μ΄λ€ μ’ λ₯κ° μλμ§ μμμ΅λλ€. κ·ΈλΌ μ΄μ λ€μ λμμ μ΄λ¬ν μ μ©ν κΈ°λ₯μ μ¬μ©νμ§ μκ³ μΉμλ²λ₯Ό ꡬννλ€λ©΄ μΌλ§νΌ νΌκ³€ν΄μ§κΉμ? ν λ² κ΅¬νν΄λ³΄μμ΅λλ€.
Expressμμ΄ nodejsλ‘ μΉμλ² κ΅¬ννκΈ°
κ°λ¨ν μΉμλ²λ₯Ό λ§λ€μ΄λ³΄κ² μ΅λλ€.
const http = require("http");
const hostname = "127.0.0.1";
const port = 3000;
const server = http.createServer((req, res) => {
res.statusCode = 200;
res.setHeader("Content-Type", "text/plain");
res.end("Hello, World!");
});
server.listen(port, hostname, () => {
console.log(`Server running at http://${hostname}:${port}/`);
});
κ°λ¨ν μ½λ μ€λͺ μ νμλ©΄ http μλ²λ₯Ό μμ±νκ³ , μμ²μ΄ λ€μ΄μ€λ©΄ Hello, World!λ₯Ό μλ΅μΌλ‘ λ°νν©λλ€. μ΄λ κ² μ½λλ₯Ό μμ±νκ³ , nodejs λ°νμ λͺ λ Ήμ΄λ₯Ό μ¬μ©νμ¬ νμΌμ μ€νμν€λ©΄ μ½μμ Server running at http://127.0.0.1:3000/ λ©μΈμ§κ° νμλ©λλ€.
κ°λ¨ν μΉμλ²λ‘ μΉ λΈλΌμ°μ μ μ£Όμ μ°½μ http://127.0.0.1:3000/ λ‘ μλ²μ μ κ·Όμ΄ κ°λ₯ν΄μ‘μ΅λλ€.
λ€μ ν¬μ€ν μμ expressμμ΄ λΌμ°ν μ ꡬννλ λ²μ λν΄ λ€λ£¨λλ‘ νκ² μ΅λλ€.