๋ณธ๋ฌธ์œผ๋กœ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๋ฐ˜์‘ํ˜•

์ฐจํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€๊ณตํ•˜์—ฌ API ์‘๋‹ต ์†๋„ ์ตœ์ ํ™”

์„œ๋ฒ„์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€๊ณต (Preprocessing)

โœ” ์ฐจํŠธ์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์ถ”์ถœํ•ด์„œ API ์‘๋‹ต์„ ์ตœ์†Œํ™”
โœ” ๋ณต์žกํ•œ SQL ์ฟผ๋ฆฌ๊ฐ€ ์•„๋‹ˆ๋ผ, ์‚ฌ์ „ ์—ฐ์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑ(Cache) ๋˜๋Š” ๋ฏธ๋ฆฌ ์ €์žฅ

 

์˜ˆ์‹œ: ์ผ๋ฐ˜์ ์ธ ๋ฐฉ์‹ (๋น„ํšจ์œจ์ ์ธ ๋ฐฉ์‹)

SELECT * FROM climate_data WHERE year BETWEEN 1990 AND 2023;

 

  • ์š”์ฒญ์ด ๋“ค์–ด์˜ฌ ๋•Œ๋งˆ๋‹ค ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋งŽ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰ → ์†๋„ ๋А๋ฆผ

์ตœ์ ํ™”๋œ ๋ฐฉ์‹ (Preprocessing + ์บ์‹ฑ)

  • ์„œ๋ฒ„์—์„œ ๋ฏธ๋ฆฌ ์—ฐ์‚ฐ๋œ ๋ฐ์ดํ„ฐ๋ฅผ JSON ํ˜•ํƒœ๋กœ ์ €์žฅํ•˜๊ณ  API ์š”์ฒญ ์‹œ ๋น ๋ฅด๊ฒŒ ์‘๋‹ต
{
  "year": [1990, 2000, 2010, 2020],
  "temperature": [15.2, 15.5, 15.8, 16.2]
}

 

์ฆ‰, ๋ฐ์ดํ„ฐ๋ฅผ API ์š”์ฒญ ์‹œ๋งˆ๋‹ค ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๊ณ , ๋ฏธ๋ฆฌ ๊ฐ€๊ณตํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋น ๋ฅด๊ฒŒ ์ œ๊ณต! 

ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ (Lazy Loading)

์ฐจํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋กœ๋“œ

โœ” fetch() ๋˜๋Š” Axios๋ฅผ ์ด์šฉํ•ด API ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ ์š”์ฒญ (AJAX)์œผ๋กœ ๊ฐ€์ ธ์˜ด
โœ” ํŽ˜์ด์ง€๊ฐ€ ๋จผ์ € ๋กœ๋“œ๋œ ํ›„, ์ฐจํŠธ ๋ฐ์ดํ„ฐ๋Š” ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ถˆ๋Ÿฌ์™€์„œ ํ‘œ์‹œ

์˜ˆ์‹œ ์ฝ”๋“œ (JavaScript + Chart.js)

fetch("")
  .then(response => response.json())
  .then(data => {
      let ctx = document.getElementById("chart").getContext("2d");
      new Chart(ctx, {
          type: "line",
          data: {
              labels: data.year,
              datasets: [{
                  label: "Temperature",
                  data: data.temperature
              }]
          }
      });
  });

ํŽ˜์ด์ง€ ๋กœ๋”ฉ์„ ๋ง‰์ง€ ์•Š๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ€์ ธ์™€ ์ฐจํŠธ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง!

3. ํด๋ผ์ด์–ธํŠธ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์บ์‹ฑํ•˜์—ฌ ์ค‘๋ณต ์š”์ฒญ ์ตœ์†Œํ™”

โœ” ๋ธŒ๋ผ์šฐ์ € localStorage ๋˜๋Š” sessionStorage๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๊ฐ™์€ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ๋ฐฉ์ง€
โœ” IndexedDB ๋˜๋Š” Service Worker๋ฅผ ํ™œ์šฉํ•˜์—ฌ ์ฐจํŠธ ๋ฐ์ดํ„ฐ ์บ์‹ฑ ๊ฐ€๋Šฅ

์˜ˆ์‹œ: ๋ฐ์ดํ„ฐ ์บ์‹ฑ ํ™œ์šฉ (localStorage)

let cachedData = localStorage.getItem("chartData");
if (cachedData) {
    renderChart(JSON.parse(cachedData));
} else {
    fetch("")
        .then(response => response.json())
        .then(data => {
            localStorage.setItem("chartData", JSON.stringify(data));
            renderChart(data);
        });
}

๋™์ผํ•œ ์ฐจํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์‹œ ์š”์ฒญํ•˜์ง€ ์•Š๊ณ , ๋ธŒ๋ผ์šฐ์ €์—์„œ ์บ์‹ฑํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง!

4. ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ตœ์ ํ™” (WebGL ๊ธฐ๋ฐ˜)

Highcharts, Chart.js, D3.js ๊ฐ™์€ ์ตœ์ ํ™”๋œ ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์‚ฌ์šฉ

โœ” WebGL์„ ํ™œ์šฉํ•˜๋Š” ECharts, Plotly.js ๊ฐ™์€ ๊ณ ์„ฑ๋Šฅ ์ฐจํŠธ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ Œ๋”๋ง ์†๋„๊ฐ€ ํ–ฅ์ƒ๋จ
โœ” requestAnimationFrame()์„ ํ™œ์šฉํ•ด ๋ถ€๋“œ๋Ÿฌ์šด ์• ๋‹ˆ๋ฉ”์ด์…˜ ํšจ๊ณผ ์ ์šฉ

์˜ˆ์‹œ: ECharts (WebGL ๊ธฐ๋ฐ˜์œผ๋กœ ๋น ๋ฅธ ์ฐจํŠธ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ)

var chart = echarts.init(document.getElementById("chart"));
chart.setOption({
    xAxis: { type: "category", data: ["1990", "2000", "2010", "2020"] },
    yAxis: { type: "value" },
    series: [{ data: [15.2, 15.5, 15.8, 16.2], type: "line" }]
});

Canvas/WebGL์„ ํ™œ์šฉํ•˜๋ฉด ๋ณต์žกํ•œ SVG ๊ธฐ๋ฐ˜ ์ฐจํŠธ๋ณด๋‹ค ํ›จ์”ฌ ๋น ๋ฅด๊ฒŒ ๋ Œ๋”๋ง ๊ฐ€๋Šฅ!

 

5. ์„œ๋ฒ„ ์„ฑ๋Šฅ ์ตœ์ ํ™” (CDN ๋ฐ API ์†๋„ ๊ฐœ์„ )

โœ” API ์‘๋‹ต ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด CDN(Content Delivery Network) ์‚ฌ์šฉ
โœ” RESTful API ๋Œ€์‹  GraphQL์„ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ์š”์ฒญํ•˜์—ฌ ํŠธ๋ž˜ํ”ฝ ์ ˆ๊ฐ

์˜ˆ์‹œ: GraphQL API๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ ๊ฐ€์ ธ์˜ค๊ธฐ

query {
  climateData(years: [1990, 2000, 2010, 2020]) {
    year
    temperature
  }
}

ํ•„์š” ์—†๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค์ง€ ์•Š์œผ๋ฏ€๋กœ API ์‘๋‹ต ์†๋„ ํ–ฅ์ƒ!

 

๊ฒฐ๋ก 

์ตœ์ ํ™” ๊ธฐ๋ฒ• ์„ค๋ช…
๋ฏธ๋ฆฌ ๊ณ„์‚ฐ๋œ ๋ฐ์ดํ„ฐ ์‚ฌ์šฉ (Preprocessing) API ํ˜ธ์ถœ ์†๋„๋ฅผ ๋น ๋ฅด๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ๋ฏธ๋ฆฌ ๊ฐ€๊ณต
๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ (Lazy Loading) ์ฐจํŠธ ๋ฐ์ดํ„ฐ๋ฅผ ๋น„๋™๊ธฐ๋กœ ๋ถˆ๋Ÿฌ์™€ ํŽ˜์ด์ง€ ๋กœ๋”ฉ ์†๋„ ์ตœ์ ํ™”
๋ธŒ๋ผ์šฐ์ € ์บ์‹ฑ (localStorage, IndexedDB) ๋™์ผํ•œ ๋ฐ์ดํ„ฐ ์š”์ฒญ์„ ๋ฐฉ์ง€ํ•˜์—ฌ ๋น ๋ฅด๊ฒŒ ํ‘œ์‹œ
WebGL ๊ธฐ๋ฐ˜ ์ฐจํŠธ (ECharts, Plotly.js) ๋น ๋ฅธ ๋ Œ๋”๋ง์„ ์œ„ํ•ด WebGL์„ ํ™œ์šฉ
CDN ๋ฐ API ์ตœ์ ํ™” (GraphQL, RESTful API ๊ฐœ์„ ) ์„œ๋ฒ„ ๋ถ€ํ•˜๋ฅผ ์ค„์ด๊ณ  API ์‘๋‹ต ์†๋„๋ฅผ ํ–ฅ์ƒ 

 

์„œ๋ฒ„ & ํ”„๋ก ํŠธ์—”๋“œ & ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”๊ฐ€ ์กฐํ•ฉ๋˜์–ด ๋น ๋ฅธ ์†๋„๋ฅผ ์œ ์ง€ํ•˜๋Š” ๊ฒƒ

๋ฐ˜์‘ํ˜•