웹소켓에 대해 외부접속도 가능하게 하려고 그간 많은 노력을 했으나 번번이 실패하여 어느덧 3주-4주의 시간이 흘렀다.

로컬 환경에서는 여러 번 성공하였으나 외부접속 부분에서 계속 실패. 방향을 바꿔버렸다.

 

`그냥 로컬로 돌리자`

 

간단한 서버가 될 코드 내용이다. index.js 등으로 구현

const express = require('express');
const app = express();
const http = require('http');
const server = http.createServer(app);
const { Server } = require("socket.io");
const io = new Server(server, {
  cors: { origin: "*"  }
});

app.get('/', (req, res) => {
  res.sendFile(__dirname + '/index.html');
});

io.on('connection', (socket) => {
  console.log('a user connected');
});

server.listen(3000, () => {
  console.log('listening on *:3000');
});
// websocket으로 데이터 받아오기
const socket = io('ws://localhost:3000');

io.on('connection', (socket) => {
  console.log('a user connected');
});

나를 괴롭혔던 몇 가지의 문제들이 있었다.

1. Port 처리
2. CORS (Access-Control-Allow-Origin) 에러
3. REST API

 

첫째로 포트 문제였다.

공인 아이피로 접속해야하는데 자꾸 접속이 안됐었다. 서버를 돌려도 안되었고, 등등..
원인은 포트포워딩이었다. 과거에 서버를 설치하는데 내가 직접 건들지 않았던 부분이었기 때문에 신경 자체를 쓰지 못했다.

내 능력부족일 뿐,, ㅠㅠ

그리고 이번 기회로 네트워크 단의 공부를 잘 하게 되었다. 어떤 식으로 흘러가는지 대충 알았던 모습을 그림도 그려가면서 공부하며 이해를 할 수 있었다. ㅂㄷㅂㄷ.. 시간 잡아먹은거 생각하면 치가 떨림.

두 번째로 CORS 에러. 

프론트엔드 개발자들이 가장 자주 보고 친숙한 에러 중의 하나라고 하는데, 이해가 된다. 
걸핏하면 CORS에러에요~ 뿌잉뿌잉하면서 빨간 글씨로 나타나는 녀석이다.

서버에서 분명히 아래와 같이 주었는데도, 계속 에러나고 ㅋㅋㅋ 열받아 죽겠다.

cors: {  origin: "*"  }

ORIGIN * 는 함부로 주면 안된다.

그래도 어느정도 해결해서 다행이다. 전체적인 프로세스도 잘 알았고, 역시 부딪히는만큼 알게 되는 법

마지막으로 REST API 이다.

그래도 위의 두 녀석보다는 훨씬 애를 덜 먹였다. 왜냐하면 기존에도 자주 사용하는 방식이었기 때문. 
RESTFUL API 환경구성을 하기 위해 프론트와 백을 일부로 구분하여 사용하였다.

기존에는 Legacy였기 때문에 코드를 직접 보기 너무나도 끔찍하여 토할 것 같았으나, PHP를 백으로 놓고 데이터만 내뱉게 만들어놓고, Javascript로 나머지를 충당했다. 쓴 라이브러리 등은 ajax를 처음에는 사용하였으나, vue.js를 공부하면서 axios에 대해 알게되었고, 이제는 axios위주로 사용한다. 
axios에 대해서는 과거에 작성한 내용을 참고 바랍니다.

 

[ React.js ] Axios 사용하는 방법

안녕하세요 상훈입니다. 리액트에서 Axios 요청을 사용하는 방법(chart ... etc)을 알아보도록 하겠습니다. $ npm install axios react-chartjs-2 --save 터미널에 복사 붙여넣기 해주시면 됩니다. Axios는 js의 A..

code-hoon.tistory.com

 

[ Vue.js ] Axios 사용하는 방법 / json

안녕하세요 상훈입니다. Vue.js 에서 Axios를 사용하여 화면에 출력하는 예제를 작성해보도록 하겠습니다. 비동기 통신 방법으로는 Axios와 Ajax 등이 있는데, 이 중 Axios를 사용하도록 하겠습니다. 생

code-hoon.tistory.com

 

 

 

 

반응형

■ 환경 및 툴

→ Linux(Ubuntu), Apache, Nodejs, socket.io, javascript, html, css, vscode

 

■ 특이점 

→ 외부 접속을 허용하였는데, 해당 서버가 제대로 작동하지 않는 상황

Apache + Node.js + Express 를 통해 3000포트 접속을 허용하고 웹서버를 띄웠다.

 

이 때 외부 IP를 입력해서 들어간 경우에는 안되었고, vscode에서 웹브라우저를 띄웠을 때 및 localhost:3000 로 접속하였을 때는 동작하였다.

localhost를 통해 접속하였을 땐 동작 / 성공 CONSOLE

외부 아이피 주소 112.~ 로 접속하였을 때는 실패하였다. CORS 오류나면서.

 

아무래도 이전 포스팅과 연결되는 말인 것 같지만,

 

처음 이 현상을 발견하게 된 것이 VSCODE에서 뇌가 하얗게 되어 무지성으로 클릭하다가 우연찮게 발견하여 클릭하고 발견한 웹 브라우저 띄우기. 

cors 오류 반환.

예전에도 localhost 환경에서 axios를 사용할 때 해당하는 CORS 오류가 출력되었는데, 이 때 비슷한 에러가 출력되었던 것도 같다.

즉, 내부포트로 접속할 수 있는 환경에서 왜 굳이 외부포트로 접속하냐 이런 느낌.

실패 사진

 

 

 

 

[ Socket.io ] 웹소켓을 이용해 데이터 전달 방식의 사고 및 결정

지난 3주동안 업무 중에 웹소켓 구현에 대해 공부하고, 해당 내용을 구현할 방법을 구상하였다. ■ 서버를 통한 외부 접속 방식 - 데이터가 인터넷을 통해 서버로 송출, - 서버에서 (외부 접속을

code-hoon.tistory.com

 

반응형

 

nodejs로 서버를 구성하고, socket.io 를 통해서 웹소켓을 구성하려고하는데 해당 에러가 발생하였다.

 

node.js TypeError: path must be absolute or specify root to res.sendFile [failed to parse JSON]

이유인즉슨, result.sendFile( ) 에서 [절대 경로 설정 or Root 경로 설정] 을 해주지 않았기 때문이다.

(라고 stackoverflow에서 말함)

 

그래서 해결방법은 간단하다.

__dirname 을 추가해주면 된다. -> 요청한 경로를 따라옴

app.get('/', function(req, res){
        res.sendFile(__dirname + '/index.html');
        });

 

일단 그래서 해당 에러는 해결이 되었다.

 

 

 

 

node.js TypeError: path must be absolute or specify root to res.sendFile [failed to parse JSON]

[add] So my next problem is that when i try adding a new dependence (npm install --save socket.io). The JSON file is also valid. I get this error: Failed to parse json npm ERR! Unexpected string n...

stackoverflow.com

 

 

 

반응형

+ Recent posts