๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

JS๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹ (์ „์—ญ๋ฒ”์œ„, ES6 ๋ชจ๋“ˆ ์‹œ์Šคํ…œ)

์‹œํ๋ฆฌํ‹ฐ์ง€ํ˜ธ 2024. 10. 27.

์š”์ฆˆ์Œ ์›น์‚ฌ์ดํŠธ ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ๋˜๋Š” ํŽ˜์ด์ง€ ์†Œ์Šค ๋ณด๊ธฐ๋ฅผ ํ†ตํ•ด HTML๋ฅผ ํƒ๊ตฌ๋ฅผ ๋งŽ์ด ํ•˜๊ณ  ์žˆ๋‹ค.

 

๊ทผ๋ฐ ๋ฌธ๋œฉ HTML์— ๋ถˆ๋Ÿฌ์˜ค๋Š” JS ํ˜•ํƒœ์— ๋Œ€ํ•ด ๊ถ๊ธˆํ•ด์กŒ๋‹ค.

 

๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ๋˜๋Š” ๋„คํŠธ์›Œํฌ ํƒญ์„ ํ†ตํ•ด ๊ฐ ์š”์ฒญ, ์‘๋‹ต์„ ๋ณด๋Š” ๊ณผ์ •์—์„œ ๋‚ด๊ฐ€ ์ •ํ™•ํ•˜๊ฒŒ ์–ด๋–ป๊ฒŒ ๋ณด๊ณ  ์žˆ๋Š”์ง€๊ฐ€ ๊ถ๊ธˆํ•ด์กŒ๋˜ ๊ฒƒ์ด๋‹ค.

 

 

HTML์—๋Š”  JavaScript ํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ฌ ๋•Œ ๋‘ ๊ฐ€์ง€ ๋ฐฉ์‹์ด ์žˆ๋‹ค.

 

1. ์ „ํ†ต์ ์ธ ๋ฐฉ์‹ (์ „์—ญ ๋ฒ”์œ„)

HTML์—์„œ JavaScript ํŒŒ์ผ์„ ๋ถˆ์–ด์˜ฌ ๋•Œ, <script> ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์ „ํ†ต์ ์ธ ๋ฐฉ์‹์˜ ์˜ˆ์‹œ

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>์ „ํ†ต์ ์ธ JS ๋กœ๋“œ</title>
    <script src="script1.js"></script> <!-- script1.js ๋กœ๋“œ -->
    <script src="script2.js"></script> <!-- script2.js ๋กœ๋“œ -->
</head>
<body>
    <h1>์ „ํ†ต์ ์ธ JS ๋กœ๋“œ ์˜ˆ์‹œ</h1>
    <button onclick="anotherFunction()">ํ•จ์ˆ˜ ํ˜ธ์ถœ</button> <!-- script2.js์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ -->
</body>
</html>

 

 

์ด ๊ฒฝ์šฐ, script1.js์— ์ •์˜๋œ ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, script1.js์— sharedFunction()์„ ์ •์˜ํ•˜๊ณ , script2.js์—์„œ ์ด๋ฅผ ํ˜ธ์ถœํ•  ์ˆ˜ ์žˆ๋‹ค.

 

script1.js

function sharedFunction() {
    console.log("๊ณต์œ ๋œ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋จ!");
}

 

script2.js

function anotherFunction() {
    sharedFunction(); // script1.js์˜ ํ•จ์ˆ˜ ํ˜ธ์ถœ
}

 

์ด๋ ‡๊ฒŒ import  ๊ณผ์ • ์—†์ด ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

ํ•˜์ง€๋งŒ, ์ด ๋ฐฉ์‹์€ ์ „์—ญ์œผ๋กœ ์ง„ํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ค‘๋ณต๋˜๋Š” ํ•จ์ˆ˜ ๋“ฑ์œผ๋กœ ์ธํ•ด ์ถฉ๋Œ์ด ์ผ์–ด๋‚  ์ˆ˜๋„ ์žˆ๋‹ค.]

 

 

2. ES6 ๋ชจ๋“ˆ ์‹œ์Šคํ…œ

ES6 ๋ชจ๋“ˆ ์‹œ์Šคํ…œ์„ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ, ๊ฐ ๋ชจ๋“ˆ์—์„œ export ์™€ import๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ช…์‹œ์ ์œผ๋กœ ํ•จ์ˆ˜๋ฅผ ๋‚ด๋ณด๋‚ด๊ณ  ๊ฐ€์ ธ์™€์•ผ ํ•œ๋‹ค.

 

ES6 ๋ชจ๋“ˆ ์‚ฌ์šฉ ์˜ˆ์‹œ

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>ES6 ๋ชจ๋“ˆ ๋กœ๋“œ</title>
    <script type="module" src="script2.js"></script> <!-- script2.js๋ฅผ ๋ชจ๋“ˆ๋กœ ๋กœ๋“œ -->
</head>
<body>
    <h1>ES6 ๋ชจ๋“ˆ ๋กœ๋“œ ์˜ˆ์‹œ</h1>
    <button onclick="anotherFunction()">ํ•จ์ˆ˜ ํ˜ธ์ถœ</button>
</body>
</html>

 

 

script1.js

// script1.js
export function sharedFunction() {
    console.log("๊ณต์œ ๋œ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋จ!");
}

 

 

script1.js

// script2.js
import { sharedFunction } from './script1.js'; // script1.js์—์„œ ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

export function anotherFunction() {
    sharedFunction(); // ๊ฐ€์ ธ์˜จ ํ•จ์ˆ˜ ํ˜ธ์ถœ
}

 

์š”์•ฝํ•˜์ž๋ฉด,

 

  • ์ „ํ†ต์ ์ธ ๋ฐฉ์‹ : <script> ํƒœ๊ทธ๋กœ JSํŒŒ์ผ์„ ๋ถˆ๋Ÿฌ์˜ค๋ฉด ํ•ด๋‹น ํŒŒ์ผ์—์„œ ์ •์˜ํ•œ ๋ชจ๋“  ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ์ „์—ญ์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด ๊ฒฝ์šฐ export์™€ import ๊ฐ€ ํ•„์š”๊ฐ€ ์—†๋‹ค.
  • ES6 ๋ชจ๋“ˆ ์‹œ์Šคํ…œ : ์ด ๋ฐฉ์‹์„ ์‚ฌ์šฉํ•˜๋ฉด ํŒŒ์ผ ๊ฐ„์˜ ์˜์กด์„ฑ์„ ๋ช…์‹œ์ ์œผ๋กœ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, export์™€ import๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•จ์ˆ˜์™€ ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•ด์•ผ ํ•œ๋‹ค. ๋ชจ๋“ˆ์€ ๊ธฐ๋ณธ์ ์œผ๋กœ ์ „์—ญ ์Šค์ฝ”ํ”„์™€ ๋…๋ฆฝ์ ์ด๋ฏ€๋กœ, ๋ณ€์ˆ˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์ฝ”๋“œ์˜ ๊ฐ€๋…์„ฑ์„ ๋†’์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์ข€ ๋” ๊ตฌ์ฒด์ ์ธ ์˜ˆ์‹œ

 

ES6 ๋ชจ๋“ˆ์„ ์‚ฌ์šฉํ•˜์—ฌ HTML์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ์ด๋ฅผ POST ์š”์ฒญ์œผ๋กœ ์ „์†กํ•˜๋Š” ์˜ˆ์ œ๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์•˜๋‹ค.

 

1. api.js - POST ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ

 

์ด ํŒŒ์ผ์—์„œ๋Š” POST ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๋‚ด๋ณด๋‚ธ๋‹ค.

 

// api.js
export function sendPostRequest(data) {
    fetch('https://example.com/api/endpoint', { // ์‹ค์ œ API ์—”๋“œํฌ์ธํŠธ๋กœ ๋ณ€๊ฒฝ
        method: 'POST',
        headers: {
            'Content-Type': 'application/json',
        },
        body: JSON.stringify(data),
    })
    .then(response => response.json())
    .then(data => {
        console.log('์„ฑ๊ณต:', data);
    })
    .catch((error) => {
        console.error('์‹คํŒจ:', error);
    });
}

 

 

2. formHandler.js - ํผ ๋ฐ์ดํ„ฐ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ชจ๋“ˆ

 

์ด ํŒŒ์ผ์—์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›๊ณ  POST ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ํ•จ์ˆ˜๋ฅผ ์ •์˜ํ•œ๋‹ค.

 

// formHandler.js
import { sendPostRequest } from './api.js'; // api.js์—์„œ ํ•จ์ˆ˜ ๊ฐ€์ ธ์˜ค๊ธฐ

export function handleSubmit() {
    const name = document.getElementById('name').value; // ์ด๋ฆ„ ์ž…๋ ฅ๊ฐ’
    const age = document.getElementById('age').value; // ๋‚˜์ด ์ž…๋ ฅ๊ฐ’

    const postData = {
        name: name,
        age: age
    };

    sendPostRequest(postData); // POST ์š”์ฒญ ๋ณด๋‚ด๊ธฐ
}

 

3. index.html - HTML ํŒŒ์ผ

 

์ด HTML ํŒŒ์ผ์—์„œ๋Š” ์‚ฌ์šฉ์ž๋กœ๋ถ€ํ„ฐ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ๋ฐ›๊ณ , ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ POST ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ธฐ๋Šฅ์„ ํฌํ•จํ•œ๋‹ค.

 

<!DOCTYPE html>
<html lang="ko">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POST ์š”์ฒญ ์˜ˆ์‹œ</title>
    <script type="module" src="formHandler.js"></script> <!-- formHandler.js ๋ชจ๋“ˆ ๋กœ๋“œ -->
</head>
<body>
    <h1>๋ฐ์ดํ„ฐ ์ž…๋ ฅ</h1>
    
    <label for="name">์ด๋ฆ„:</label>
    <input type="text" id="name" placeholder="์ด๋ฆ„์„ ์ž…๋ ฅํ•˜์„ธ์š”"><br><br>
    
    <label for="age">๋‚˜์ด:</label>
    <input type="number" id="age" placeholder="๋‚˜์ด๋ฅผ ์ž…๋ ฅํ•˜์„ธ์š”"><br><br>
    
    <button onclick="handleSubmit()">์ „์†ก</button> <!-- ๋ฒ„ํŠผ ํด๋ฆญ ์‹œ handleSubmit ํ•จ์ˆ˜ ํ˜ธ์ถœ -->
</body>
</html>

 

 

 

๋ชจ๋“ˆํ™”์˜ ์ด์ 

  • ์ฝ”๋“œ์˜ ์žฌ์‚ฌ์šฉ์„ฑ : ํ•œ ๋ฒˆ ์ž‘์„ฑํ•œ ํ•จ์ˆ˜๋ฅผ ๋‹ค๋ฅธ ๋ชจ๋“ˆ์—์„œ๋„ ์žฌ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๋„ค์ž„์ŠคํŽ˜์ด์Šค ๊ด€๋ฆฌ : ๊ฐ ๋ชจ๋“ˆ์€ ๋…๋ฆฝ์ ์œผ๋กœ ๋™์ž‘ํ•˜๋ฏ€๋กœ, ์ „์—ญ ๋ณ€์ˆ˜์˜ ์ถฉ๋Œ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์œ ์ง€ ๋ณด์ˆ˜ ์šฉ์ด์„ฑ : ๊ฐ ๋ชจ๋“ˆ์˜ ๊ธฐ๋Šฅ์ด ๋ถ„๋ฆฌ๋˜์–ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ์ˆ˜์ •์ด๋‚˜ ์—…๋ฐ์ดํŠธ๊ฐ€ ์šฉ์ดํ•ฉ๋‹ˆ๋‹ค.

๋Œ“๊ธ€