#2 선수 정보 프로젝트 (Node.js)

2023. 8. 29. 01:05·🔥 부트캠프-웹 개발 🔥/Node

두산베어스 선수 정보 프로젝트 제작중 naver API를 이용한 news 호출시 CORS 에러가 발생하였다.

이번엔 Node.js 백엔드를 추가하여 CORS 에러를 해결해 보았다.

 

https://github.com/yeonhub/PP-doosan_bears_node

 

GitHub - yeonhub/PP-doosan_bears_node: [개인 프로젝트] 두산 베어스 선수 정보 (Node.js)

[개인 프로젝트] 두산 베어스 선수 정보 (Node.js). Contribute to yeonhub/PP-doosan_bears_node development by creating an account on GitHub.

github.com

 

1) CORS 에러

서로간의 공유(CORS)

원격 소스 공유 (Cross-Origin Resource Sharing, CORS )는 추가 HTTP 헤더를 사용하고, 한 소스 에서 실행 중인 웹 참여가 다른 소스를 거부할 수 있는 권한을 부여하도록 브라우저에 존재합니다. 웹 서버는 서버 자신의(도메인, 서버, 소스 포트)과 관련하여 HTTP 요청을 실행합니다.특별 출처의 예시: https://domain-a.com의 프론트 엔드 JavaScript 코드를 XMLHttpRequest사용하여 https://domain-b.com/data.json요청하는 경우.보안 문제 때문에 브라우저에서 계속해서 HTTP 요청을 제한합니다. 예를 들어, XMLHttpRequest와 Fetch API 는 동일하게 보호를 받으려면 들어갑니다. 즉, 이 API를 사용하는 웹사이트는 자신의 소스와 동일한 리소스만 불러올 수 있으며, 다른 소스의 리소스를 불러오려면 그 소스에서 올바른 CORS 헤더를 포함하여 응답을 반환해야 합니다.

출처 : https://developer.mozilla.org/ko/docs/Web/HTTP/CORS
 

교차 출처 리소스 공유 (CORS) - HTTP | MDN

교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라

developer.mozilla.org

CORS 에러의 발생 이유에 대해 검색해본 결과 한가지 예로 간단하게 정리할 수 있었다.
A에서 B로 API 요청했을 때 API를 호출하는 곳이 A가 아닌 AA일 때 문제가 발생한다.
여기에서 출처는 도메인, 프로토콜, 포트를 나타내며 이 3가지가 동일해야 같은 출처로 판단한다.


도움 글 : https://escapefromcoding.tistory.com/724

 

CORS란 무엇인가?

개요 웹 프로그래밍에서 프런트와 백엔드 작업을 하면, 한번씩 발생하는 문제가 CORS 문제입니다. 현재 하는 업무가 이런 경우는 없었지만, 개인 프로젝트 시 발생했던 문제를 기억하며 해당 문

escapefromcoding.tistory.com

 

2) Node.js 추가

const express = require('express');
const axios = require('axios');

// CORS 문제 해결

const cors = require('cors');

require('dotenv').config();

const app = express();

// port 5000번

const port = 5000;

app.use(cors());

const NAVER_API_URL = 'https://openapi.naver.com/v1/search/news.json';

app.get('/news', async (req, res) => {
    const query = req.query.query;
    try {
        const response = await axios.get(NAVER_API_URL, {
            headers: {

                // API키 환경변수 관리

                'X-Naver-Client-Id': process.env.NAVER_API_CLIENT_ID,
                'X-Naver-Client-Secret': process.env.NAVER_API_CLIENT_SECRET,
            },
            params: {

                // 정확히 원하는 데이터를 받기 위해 params 작성

                query: query,
                display: 5,
                start: 1,
                sort: 'sim',
                news_type: 'sports',
                title: 'true',
            },
        });
        res.json(response.data);
    } catch (error) {
        console.error(error);
        res.status(500).json({ error: 'Internal Server Error' });
    }
});

app.listen(port, () => {
    console.log(`${port}번 서버 실행`);
});

node server 실행
news

'🔥 부트캠프-웹 개발 🔥/Node' 카테고리의 다른 글
  • [DAY - 109] Node / MySQL 연결
  • [DAY - 107] Node / MVC 디자인 패턴
  • [DAY - 106] Node / params, Todo예제
  • [DAY - 103] node 기초
Yeonhub
Yeonhub
✨ https://github.com/yeonhub 📧 lsy3237@gmail.com
  • Yeonhub
    비 전공자의 Be developer
    Yeonhub
  • 전체
    오늘
    어제
    • 전체보기 (169)
      • 🔍 Tech 🔍 (19)
        • Front-End (11)
        • Back-End (4)
        • AI (1)
        • Server (1)
        • Etc (2)
      • 💡 원티드 프리온보딩 챌린지 💡 (14)
        • PRE-ONBOARDING_AI (11월) (1)
        • PRE-ONBOARDING_FE (2월) (2)
        • PRE-ONBOARDING_FE (1월) (2)
        • PRE-ONBOARDING_FE (12월) (9)
      • 🔥 부트캠프-웹 개발 🔥 (118)
        • HTML5 (7)
        • CSS3 (21)
        • JavaScript (27)
        • JavaScript_advanced (9)
        • React (24)
        • Next (1)
        • MYSql (5)
        • Node (5)
        • 오늘하날(개인프로젝트) (12)
        • 이젠제주투어(팀프로젝트) (7)
      • 💻 CS 💻 (1)
        • 알고리즘 (1)
      • ⚡ 코딩테스트 ⚡ (11)
        • JavaScript (11)
      • 📚 Books 📚 (6)
        • 클린 아키텍처 (2)
        • 인사이드 자바스크립트 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • Github
  • 공지사항

  • 인기 글

  • 태그

    node cron
    라스콘4
    react native firebase analytics
    expo admob
    expo deep linking
    expo fcm
    react native analytics
    node crontab
    react native expo fcm
    Node
    javascript fcm
    bottom sheet
    node.js fcm
    expo google map
    expo fcm push
    react native bottom sheet
    rn bottom sheet
    python node
    react vite
    expo 지도
    프론트엔드 테스트코드
    expo node fcm
    php node
    라스콘
    expo map
    expo 길찾기
    react native admob
    node fcm
    컴파운드 컴포넌트 패턴
    rn admob
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
Yeonhub
#2 선수 정보 프로젝트 (Node.js)
상단으로

티스토리툴바