728x90

타이타닉 데이터셋을 이용하여 상관관계 분석을 해본다.

 

1. 데이터 수집

데이터셋은 Kaggle에 있는 taitanic-train을 이용하였다.

 

taitanic-train

Taitanic-train-dataset

www.kaggle.com

 

타이타닉 데이터를 가져온다.

import pandas as pd
titanic = pd.read_csv("taitanic_train.csv")

 

2. 데이터 탐색 및 가공

데이터의 정보를 확인한다.

titanic.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 12 columns):
 #   Column       Non-Null Count  Dtype  
---  ------       --------------  -----  
 0   PassengerId  891 non-null    int64  
 1   Survived     891 non-null    int64  
 2   Pclass       891 non-null    int64  
 3   Name         891 non-null    object 
 4   Sex          891 non-null    object 
 5   Age          714 non-null    float64
 6   SibSp        891 non-null    int64  
 7   Parch        891 non-null    int64  
 8   Ticket       891 non-null    object 
 9   Fare         891 non-null    float64
 10  Cabin        204 non-null    object 
 11  Embarked     889 non-null    object 
dtypes: float64(2), int64(5), object(5)
memory usage: 83.7+ KB

Age에서 결측치가 있으므로, 중앙값으로 결측치를 채워준다.

titanic['Age'] = titanic['Age'].fillna(titanic['Age'].median())

 

3. 상관관계 분석

피어슨 상관 계수를 적용하여 상관관계를 구한다.

titanic_corr = titanic.corr(method='pearson')
titanic_corr

상관관계 분석 결과는 다음과 같다.

상관관계는 -1 ~ +1 사이의 값으로 나타난다.
음수는 음의 상관관계, 양수는 양의 상관관계를 가진다.

Survived 와 Pclass 는 음의 상관관계를 가지므로, 등급이 낮을 수록 생존율은 높다.
Survived 와 Fare 은 양의 상관관계를 가지며, 요금이 높을 수록 생존율은 높다
728x90
728x90

gitHub에 ssh key를 등록하여 ssh로 쉽게 git을 받아오는 방법을 알아본다.

 

먼저 ubuntu 서버에서 ssh key를 생성한다.

# ssh-keygen -t rsa

 

생성된 키를 열어 복사한다.

# vim /root/.ssh/id_rsa.pub

 

복사한 키를 gitHub에 붙여넣는다.

 

설정 - SSH and GPG keys - New SSH key

 

이제 ubuntu에서 ssh를 이용하여 쉽게 git을 받을 수 있다.

# sudo git remote add origin git@github.com:yewon-Noh/test.git

 

728x90

'서버 > ubuntu' 카테고리의 다른 글

[ubuntu] mysql 설치  (0) 2021.07.11
[ubuntu/git] ubuntu 서버에서 git 사용하기  (0) 2021.07.08
728x90

express 에서 템플릿으로 html 을 사용하는 방법을 알아보려고 한다.

 

먼저 ejs 모듈을 설치해야 한다.

npm install ejs

 

그 후 app.js 에 아래 코드를 작성한다.

app.engine('html', require('ejs').renderFile);
app.set('view engine', 'html');

 

이렇게 하면 템플릿으로 html을 사용할 수 있게 된다.

728x90

'Web > Node.js' 카테고리의 다른 글

[NodeJS] Google 로그인 API 구현하기  (0) 2022.03.25
[NodeJS] WebSocket을 이용한 채팅  (0) 2022.02.24
[NodeJS] express 서버 구축  (0) 2022.02.18
[NodeJS] Nodemon, Babel  (0) 2022.02.18
728x90

Numpy 라이브러리 만을 이용하여 단순 선형회귀 모델을 구현해 본다.

Numpy 에서는 경사하강법을 이용해 구현할 수 있다.

 

1. 환경 준비

필요한 라이브러리를 임포트 한다.

그래프로 시각화를 하기 위해 맷플롯립도 추가하였다.

import numpy as np
import matplotlib.pyplot as plt

 

2. 데이터 준비

공부 시간과 성적 데이터를 준비한다.

공부 시간에 따른 성적을 예측할 것이기 때문에 공부시간을 독립변수(x)로 하고, 성적 데이터를 종속변수(y)로 설정한다.

# 공부 시간 x와 성적 y의 넘파이 배열 생성
x = np.array([2, 4, 6, 8])
y = np.array([81, 93, 91, 97])

 

3. 데이터 분포 확인

그래프로 데이터 분포를 확인한다.

plt.scatter(x, y)
plt.show()

데이터 분포

 

4. 하이퍼 파라미터 설정

이제 선형회귀 모델을 만들기 위해 하이퍼 파라미터를 설정한다.

 

하이퍼 파라미터(Hyper parameter)란?

모델을 만들 때 사용자가 직접 세팅해주는 값으로 학습률, 이웃수(KNN) 등이 있다.

 

경사하강법을 시작 하기 전 기울기와 절편 값을 초기화 한다.

# 기울기 a와 절편 b의 값을 초기화
a = 0
b = 0

 

학습률을 설정한다.

 

학습률(Learning rate)란?

경사하강법에서는 점을 따라 이동하는데, 이 점이 어느 만큼 이동시킬지 정해주는 것이다.

학습률이 작으면 학습이 오래 걸릴 수 있으며, 반대로 학습률이 너무 크면 최소값을 지나쳐 정확한 학습을 할 수 없다.

따라서 적절한 학습률을 설정해줘야 한다.

# 학습률 설정
lr = 0.03

 

에포크(반복횟수)도 설정한다.

# 반복 횟수 설정
epochs = 2001

 

5. 경사하강법을 이용하여 모델 학습

에포크 수 만큼 반복하며 경사하강법을 이용해 모델을 학습시킨다.

# x 값 개수 저장
n = len(x)
# 경사하강법 시작
for i in range(0, epochs):            # 에포크 수 만큼 반복
  y_pred = a * x + b                  # 예측 값 계산
  error = y - y_pred                  # 실제 값과 예측 값의 오차

  a_diff = (2/n) * sum(-x * (error))  # 오차 함수를 a로 편미분
  d_diff = (2/n) * sum(-(error))      # 오차 함수를 b로 편미분

  a = a - lr * a_diff                 # 학습률을 곱해 기존의 a 값을 업데이트
  b = b - lr * d_diff                 # 학습률을 곱해 기존의 b 값을 업데이트

  if i % 100 == 0:                     # 100번 반복될 때마다 현재의 a 값, b 값을 출력
    print("epoch=%.f, 기울기=%.04f, 절편=%.04f" % (i, a, b))
epoch=0, 기울기=27.8400, 절편=5.4300
epoch=100, 기울기=7.0739, 절편=50.5117
epoch=200, 기울기=4.0960, 절편=68.2822
epoch=300, 기울기=2.9757, 절편=74.9678
epoch=400, 기울기=2.5542, 절편=77.4830
epoch=500, 기울기=2.3956, 절편=78.4293
epoch=600, 기울기=2.3360, 절편=78.7853
epoch=700, 기울기=2.3135, 절편=78.9192
epoch=800, 기울기=2.3051, 절편=78.9696
epoch=900, 기울기=2.3019, 절편=78.9886
epoch=1000, 기울기=2.3007, 절편=78.9957
epoch=1100, 기울기=2.3003, 절편=78.9984
epoch=1200, 기울기=2.3001, 절편=78.9994
epoch=1300, 기울기=2.3000, 절편=78.9998
epoch=1400, 기울기=2.3000, 절편=78.9999
epoch=1500, 기울기=2.3000, 절편=79.0000
epoch=1600, 기울기=2.3000, 절편=79.0000
epoch=1700, 기울기=2.3000, 절편=79.0000
epoch=1800, 기울기=2.3000, 절편=79.0000
epoch=1900, 기울기=2.3000, 절편=79.0000
epoch=2000, 기울기=2.3000, 절편=79.0000

 

6. 결과 확인

실제 값과 예측 값을 출력하여 결과를 확인한다.

예측 결과 실제 값과 큰 차이가 없이 비슷한 값이 나왔다.

print("실제 값:", y)
print("예측 값:", y_pred)
실제 값: [81 93 91 97]
예측 값: [83.59999984 88.19999992 92.8        97.40000008]

 

7. 그래프를 이용하여 결과 확인

그래프를 이용해 결과를 확인할 수 있다.

# 앞서 수한 최종 a 값을 기울기, b 값을 y 절편에 대입하여 그래프를 그림
y_pred = a * x + b
# 그래프 출력
plt.scatter(x, y)
plt.plot(x, y_pred, 'r')
plt.show()

결과

 

이렇게 Numpy를 이용해 단순 선형회귀를 구현할 수 있다.

728x90
728x90

Google에서 제공하는 API를 이용하여 Google 로그인을 구현해본다.

 

1. API 사용을 위한 애플리케이션 등록

Google 로그인 API를 사용하기 위해서는 애플리케이션을 등록해줘야한다.

등록 방법은 매우 간단하다.

먼저 사이트에 접속하여 로그인한다.

 

클라우드 컴퓨팅, 호스팅 서비스 및 API  |  Google Cloud

Google Cloud는 비즈니스의 발전을 위해 설계된 유연한 인프라, 엔드 투 엔드 보안, 지능형 통계를 제공합니다.

cloud.google.com

 

Google Cloud Platform 로고 옆의 드롭다운을 눌러 '새 프로젝트'를 생성한다.

 

 

프로젝트 이름과 위치를 선택 한 뒤 만들기를 눌러 생성한다.

 

 

앱에서 사용자 데이터를 사용할 수 있도록 사용자 인증정보를 만들어야 한다.

왼쪽의 사용자 인증 정보 메뉴에서 '사용자 인증 정보 만들기'를 선택한 뒤 'OAuth 클라이언트 ID'를 누른다.

 

 

OAuth 클라이언트 ID를 만들기 위해서는 먼저 동의 화면을 구성해야 한다.

'동의 화면 구성'을 눌러 시작한다.

 

 

 

대상 사용자를 선택한다. 

모든 Google 계정을 대상으로 할 것이므로 외부를 선택한다.

 

 

 

그 다음 앱 이름과 이메일을 작성한다.

필수 입력 부분 위에는 모두 건너 뛴다.

 

 

 

동의 화면 구성을 완료한 뒤에는 다시 '사용자 인증 정보 만들기' - 'OAuth 클라이언트 ID'를 선택하여 진행한다.

localhost의 3000번 포트를 열어 사용할 것이기 때문에 URI은 'http://localhost:3000'으로 입력하였다.

 

 

위의 과정을 마치면 애플리케이션 등록이 완료된다.

클라이언트 ID를 사용해 애플리케이션을 만들면 된다.

그러기 위해 클라이언트 ID를 복사해둔다.

 

 

2. 로그인 구현

서버는 간단히 express로 구현하였다.

아래에 정리해두었기 때문에 생략하였다.

 

2022.02.18 - [Web/Node.js] - [NodeJS] express 서버 구축

 

[NodeJS] express 서버 구축

노마드 코더의 줌 클린코딩을 공부한 내용입니다. 채팅 서버를 만들기 위한 express 서버를 구축한다. 폴더 구조 📁 chat ┣ 📁 src ┃ ┣ 📁 public ┃ ┃ ┗ 📁 js ┃ ┃ ┃ ┗ 📄 app.js ┃ ┗ 📁 views

hello-x5957.tistory.com

 

그 외 작업은 home.ejs에 구현하였다.

 

먼저 구글 API를 사용하기 위해 Google Platform 라이브러리를 로드하고 생성한 클라이언트 ID를 지정해준다.

<meta name="google-signin-scope" content="profile email">
<!-- Google Platform 라이브러리로드 -->
<script src="https://apis.google.com/js/platform.js" async defer></script>
<!-- 앱의 클라이언트 ID 지정 -->
<meta name="google-signin-client_id" content="복사해둔 클라이언트 ID">

 

그 다음 로그인, 로그아웃 버튼을 생성하고 코드를 작성한다.

<!-- 버튼 추가 -->
<div class="g-signin2" data-onsuccess="onSignIn" data-theme="dark"></div>
<a href="#" onclick="signOut();">Sign out</a>

<script>
<!-- 코드 작성 -->
</script>

 

 

로그인 코드를 구현한다.

로그인을 완료하면 사용자 프로필 정보와 토큰 ID를 받아와 표시해준다.

function onSignIn(googleUser) {
  // 사용자 프로필 정보
  var profile = googleUser.getBasicProfile();
  console.log("ID: " + profile.getId());
  console.log('Full Name: ' + profile.getName());
  console.log('Given Name: ' + profile.getGivenName());
  console.log('Family Name: ' + profile.getFamilyName());
  console.log("Image URL: " + profile.getImageUrl());
  console.log("Email: " + profile.getEmail());
  
  // 사용자 토큰 ID
  var id_token = googleUser.getAuthResponse().id_token;
  console.log("ID Token: " + id_token);
}

 

로그아웃 코드를 구현한다.

function signOut() {
  var auth2 = gapi.auth2.getAuthInstance();
  auth2.signOut().then(function () {
  console.log('User signed out.');
});

 

이렇게 하여 간단하게 구글 로그인 API를 구현해봤다.

728x90

'Web > Node.js' 카테고리의 다른 글

[Nodejs] express 템플릿으로 html 사용하기  (0) 2022.04.22
[NodeJS] WebSocket을 이용한 채팅  (0) 2022.02.24
[NodeJS] express 서버 구축  (0) 2022.02.18
[NodeJS] Nodemon, Babel  (0) 2022.02.18
728x90
노마드 코더의 줌 클린코딩을 공부한 내용입니다.

 

WebSocket을 이용하여 채팅을 구현한다.

 

express 서버를 구현한 상태에서 진행하며, express 서버 구현은 전 게시글에서 볼 수 있다.

 

[NodeJS] express 서버 구축

노마드 코더의 줌 클린코딩을 공부한 내용입니다. 채팅 서버를 만들기 위한 express 서버를 구축한다. 폴더 구조 📁 chat ┣ 📁 src ┃ ┣ 📁 public ┃ ┃ ┗ 📁 js ┃ ┃ ┃ ┗ 📄 app.js ┃ ┗ 📁 views

hello-x5957.tistory.com

 

폴더 구조

📁 chat
┣ 📁 src
┃ ┣ 📁 public
┃ ┃ ┗ 📁 js
┃ ┃ ┃ ┗ 📄 app.js
┃ ┗ 📁 views
┃ ┃ ┗ 🐶 home.pug
┃ ┗ 📄 server.js

 

WebSocket 기본 구현

server.js 에 Http 및 WebSocket 서버를 구현한다.

express application으로부터 http 서버를 생성하고, 그 위에 Websocket 서버를 생성한다.

서버는 모두 동일포트에서 동작하게 된다.

const app = express();
const PORT = 3000;

const server = http.createServer(app);
const wss = new WebSocket.Server({ server });

server.listen(PORT, handleListen);

 

Websocket 이벤트 구현

여기서는 총 3가지의 이벤트를 사용한다.

- open : 소켓이 연결되면 발생

- close : 소켓 연결이 종료되면 발생

- message : 소켓에서 메시지를 받으면 발생

 

먼저 소켓이 연결되면 "Connected to Browser ✅" 를 콘솔에 출력한다.

wss.on("connection", (socket) => {
    console.log("Connected to Browser ✅");
    ...
});

소켓 연결이 종료되면 "Disconnected from the Browser ❌" 를 콘솔에 출력한다.

socket.on("close", () => console.log("Disconnected from the Browser ❌"))

소켓으로부터 메시지를 받으면 받은 메시지를 브라우저에 다시 전달해준다.

즉, 에코서버의 동작을 하도록 한다.

socket.on("message", (msg) => {
    socket.send(msg);
})

이때 메시지가 Buffer로 출력된다면 인코딩을 해줘야한다.

msg = msg.toString('utf8');

 

app.js 에서 브라우저 접속 시 WebSocket 서버로의 연결을 수행하도록 구현한다.

소켓을 생성한다.

const socket = new WebSocket(`ws://${window.location.host}`);

그 후 open, close, message 이벤트를 구현한다.

소켓의 연결이 열리면 "Connected to Server ✅" 를 콘솔에 출력한다.

웹에서 콘솔은 F12를 눌러 개발자모드에서 확인할 수 있다.

socket.addEventListener("open", () => {
    console.log("Connected to Server ✅");
});

서버가 오프라인 상태가 되어 소켓이 종료되면 "Disconnected to Server ❌" 를 콘솔에 출력한다.

socket.addEventListener("close", () => {
    console.log("Disconnected to Server ❌");
});

서버로부터 메시지를 받으면 "New message: 메시지내용" 을 콘솔에 출력한다.

socket.addEventListener("message", (message) => {
    console.log("New message: ", message.data);
});

또한 서버로 메시지를 전송한다.

socket.send("hello!");

 

여기까지하면

1. 브라우저와 서버가 연결

2. 브라우저 -> 서버로 "hello!" 전송

3. 서버는 받은 메시지를 브라우저로 재전송

4. 브라우저는 받은 메시지를 출력 : "New message: hello!"

위의 기능을 구현하게 된다.

 

 


이제는 본격적으로 채팅을 구현해보자.

채팅 구현

프론트엔드 : 화면

home.pug 에 채팅을 위한 Form을 작성한다.

닉네임 설정 시 사용하기 위한 Form을 "nick", 채팅은 "message"로 하였다.

main 
    form#nick
        input(type="text", placeholder="choose a nickname", required)
        button Save
    ul
    form#message
        input(type="text", placeholder="write a msg", required)
        button Send​

 

프론트엔드 : 기능

app.js 에 버튼을 누르면 닉네임 및 메시지를 전송하도록 구현한다.

먼저 서버로 메시지 전송 시 String 형태로 보내주기 위해, JSON -> String 로 변환하는 함수를 작성한다.

function makeMessage(type, payload){
    const msg = {type, payload}
    return JSON.stringify(msg);
}

채팅을 보낼 때의 기능을 구현하기 위한 함수를 작성한다.

입력한 메시지를 String 형태로 변경하여 타입 및 채팅내용을 서버로 전송한다.

그 다음 내가 보낸 메시지는 닉네임이 아닌 "You"로 표시하여 출력한 뒤, 입력한 채팅을 지워준다.

function handelSubmit(event){
    event.preventDefault();
    const input = messageForm.querySelector("input");
    socket.send(makeMessage("new_message", input.value));

    const li = document.createElement("li");
    li.innerText = `You : ${input.value}`;
    messageList.append(li);

    input.value = "";
}

닉네임 설정 시 기능을 구현하기 위한 함수를 작성한다.

입력한 닉네임을 String 형태로 변환하여 타입 및 닉네임을 서버로 전송한다.

그 다음 입력한 닉네임은 지워준다.

function handelNickSubmit(event){
    event.preventDefault();
    const input = nickForm.querySelector("input");
    socket.send(makeMessage("nickname", input.value));
    input.value = "";
}

Form 의 버튼을 누르면 각 함수를 수행하도록 지정한다.

messageForm.addEventListener("submit", handelSubmit);
nickForm.addEventListener("submit", handelNickSubmit);

서버로부터 메시지를 받을때의 기능을 구현한다.

li 태그를 생성하여 웹에 표시해준다.

socket.addEventListener("message", (message) => {
    const li = document.createElement("li");
    li.innerText = message.data;
    messageList.append(li);
});

 

백엔드

마지막으로 server.js 에 서버의 동작을 구현한다.

먼저 서버에 연결된 소켓을 기억하기 위해 sockets 를 생성한다.

const sockets = [];

소켓이 연결됬을 때의 동작을 connection 이벤트 내에 구현한다.

wss.on("connection", (socket) => {
   ...
});

소켓이 연결되면 sockets에 연결된 소켓을 저장한다.

sockets.push(socket);

연결시 닉네임을 "Anon", 즉 익명으로 설정한다.

닉네임을 설정하지 않은 경우에는 "Anon"으로 표시된다.

socket["nickname"] = "Anon";

소켓으로부터 받은 메시지를 JSON 형태로 변환한다.

socket.on("message", (msg) => {
    const message = JSON.parse(msg);
    ...

받은 메시지의 타입을 이용하여 채팅, 닉네임 설정 중 어느 동작을 수행해야 하는지 구분한다.

채팅의 경우, 받은 메시지 및 보낸 소켓의 닉네임을 전송한 소켓을 제외한 연결된 모든 소켓에 전송해준다.

닉네임 설정의 경우, 소켓의 닉네임을 변경하여 저장한다.

    ...
    switch (message.type) {
        case "new_message":
            sockets.forEach(aSocket => {
            if(aSocket != socket)
                aSocket.send(`${socket.nickname}: ${message.payload}`)
            });
            break;

        case "nickname":
            socket["nickname"] = message.payload;
            break;
    }
})

 

결과

이로써 WebSocket 을 이용한 간단한 채팅을 구현할 수 있다.

WebSocket 채팅 구현 결과

728x90

'Web > Node.js' 카테고리의 다른 글

[Nodejs] express 템플릿으로 html 사용하기  (0) 2022.04.22
[NodeJS] Google 로그인 API 구현하기  (0) 2022.03.25
[NodeJS] express 서버 구축  (0) 2022.02.18
[NodeJS] Nodemon, Babel  (0) 2022.02.18
728x90

카카오 로그인 API를 이용하여 간단하게 로그인을 구현해본다.

 

1. 애플리케이션 등록

먼저 API 사용을 위해 애플리케이션을 등록해줘야 한다.

등록을 위해 Kakao Developers 에서 회원가입을 해준다.

 

회원가입 및 로그인을 완료해준 뒤,  내 애플리케이션으로 이동하여 애플리케이션 추가하기를 누른다.

 

 

애플리케이션의 정보를 입력해준 뒤, 저장을 눌러 추가한다.

 

 

애플리케이션이 추가되면, 추가한 애플리케이션을 눌러 설정으로 이동한다.

 

 

앱 설정에 들어가면 앱 키가 있다. 이 앱 키를 이용하여 로그인 API를 구현한다.

 

 

로그인을 구현하기 전에 플랫폼 등록과 카카오 로그인을 활성화 시켜줘야 한다.

플랫폼으로 이동하여 도메인을 등록해준다. 테스트용으로 사용할 것이기 때문에 http://localhost:3000/ 로 해주었다.

 

 

그리고 카카오 로그인으로 이동하여, 상태를 ON 으로 변경하여 활성화 시켜준다.

 

 

동의항목에서 카카오 로그인으로 서비스를 시작할 때 동의 받을 항목을 설정할 수 있다.

닉네임과 프로필 사진을 사용하기 위해 필수동의로 설정한 뒤 진행하였다.

 

 

이 과정을 거치면 카카오 로그인 API 를 사용하기 위한 설정을 완료한 것이다.

 

2. 카카오 로그인 구현

폴더구조

📁 kakao-api
┣ 📁 public
┃ ┗ 📁 css
┃ ┃ ┗ 📄 kakao.css
┗ 📄 home.html

 

먼저 SDK를  웹페이지에 포함시킨다.

<script src="https://developers.kakao.com/sdk/js/kakao.js"></script>

 

그 후 SDK를 초기화 한다.

이때 JAVASCRIPT_KEY 는 사용할 앱 키로 설정해준다.

<script>
// SDK를 초기화 합니다. 
Kakao.init('JAVASCRIPT_KEY');
    
// SDK 초기화 여부를 판단합니다.
console.log(Kakao.isInitialized());
</script>

 

정상적으로 초기화 된 경우에는 console 에 "true"가 출력되며, "false" 가 출력된 경우에는 초기화에 사용한 앱 키가 잘못된 것이다.

정상적으로 초기화가 된 경우

 

카카오 로그인 API 를 이용하여 로그인, 로그아웃 그리고 탈퇴를 구현해볼것이다.

먼저 화면을 구현한다.

<button class="kakao-btn" onclick="loginFormWithKakao()">카카오 로그인</button>
<button class="kakao-btn" onclick="kakaoLogout()">로그아웃</button>
<button class="kakao-btn" onclick="unlinkApp()">앱 탈퇴하기</button>

<div id="test">
	<!-- 결과 표시 -->
</div>

 

로그인

카카오 로그인 버튼을 누르면 로그인을 진행하고, 로그인 성공 시 사용자의 정보를 가져온다.

// 로그인 + 사용자정보가져오기
function loginFormWithKakao(){
    Kakao.Auth.loginForm({
    success: function(authObj) {
    Kakao.API.request({
        url: '/v2/user/me',
        success: function(res) {
        console.log(JSON.stringify(res)),
        fail: function(error) {
        console.log(
			'login success, but failed to request user information: ' +
			JSON.stringify(error)
        )
        },
    })
    },
    fail: function(err) {
    console.log('failed to login: ' + JSON.stringify(err))
    },
})
}

사용자의 정보는 res 에 담겨져있다. 

크게 id, 연결 시간(connected_at), 내 정보(properties), 카카오 계정(kakao_account) 정보를 담고 있다.

{"id":0000000,
"connected_at":"2022-02-20T13:47:07Z",
"properties":{"nickname":"oo",
	"profile_image":"http://k.kakaocdn.net/dn//img_640x640.jpg",
	"thumbnail_image":"http://k.kakaocdn.net/dn///img_110x110.jpg"},
"kakao_account":{...} }

로그인 성공 시에는 사용자의 정보를 가져와 표시해준다.

var test = document.getElementById("test");
test.innerHTML = "<div class=\"profile-img\"> <img src=" + JSON.stringify(res.properties.profile_image) + " width=300 height=300> </div>"
	+ "<div class=\"profile-box\"> <h1>" + res.properties.nickname + "</h1> <h2> 로그인 시간 | " + res.connected_at + "</h2></div>"      
}

 

로그아웃

로그아웃 버튼을 누르면 로그아웃을 진행하며 성공 여부를 웹에 표시해준다.

// 로그아웃
function kakaoLogout() {
    if (!Kakao.Auth.getAccessToken()) {
        console.log('Not logged in.')
        var test = document.getElementById("test");
        test.innerText =  "로그인 되어 있지 않습니다."
    return
    }
    Kakao.Auth.logout(function() {
        console.log('logout ok\naccess token -> ' + Kakao.Auth.getAccessToken())
        var test = document.getElementById("test");
        test.innerText =  "로그아웃 되었습니다."
    })
}

 

탈퇴

탈퇴 버튼을 누르면 탈퇴를 진행하며 성공 여부를 웹에 표시해준다.

// 앱 탈퇴
function unlinkApp() {
    Kakao.API.request({
    url: '/v1/user/unlink',
    success: function(res) {
        console.log('success: ' + JSON.stringify(res))
        var test = document.getElementById("test");
        test.innerText =  "탈퇴 되었습니다."
    },
    fail: function(err) {
        console.log('fail: ' + JSON.stringify(err))
        var test = document.getElementById("test");
        test.innerText =  "탈퇴에 실패하였습니다."
    },
    })
}

 

결과

웹에 접속

 

로그인 진행

 

로그아웃 진행

 

탈퇴 진행

 

 

728x90
728x90

노마드 코더의 줌 클린코딩을 공부한 내용입니다.

 

채팅 서버를 만들기 위한 express 서버를 구축한다.

폴더 구조

📁 chat
┣ 📁 src
┃ ┣ 📁 public
┃ ┃ ┗ 📁 js
┃ ┃ ┃ ┗ 📄 app.js
┃ ┗ 📁 views
┃ ┃ ┗ 🐶 home.pug
┃ ┗ 📄 server.js

 

프론트엔드

home.pug 에 웹 페이지를 구성한다.
MVP.css 라는 css 프레임워크를 이용하기 위해 link 해준다.

link(rel="stylesheet", href="https://unpkg.com/mvp.css")

본문 내용을 작성한다.

body 
        header 
            h1 Chat
        main 
            h2 hello 

스크립트는 app.js를 사용할 것이기 때문에 이를 명시해준다.

        script(src="/public/js/app.js") 

 

app.js 에 스크립트 내용을 작성한다.
간단히 웹에 접속하면 'hi' 팝업을 띄우도록 한다.

alert("hi")

 

백엔드

server.js 에 웹 서버를 구성한다.
여기서는 express로 웹 서버를 구성한다.

먼저 express 라이브러리를 임포트한다.

const express = require('express');

express로 웹 서버를 구성하고, 포트를 지정하여 열어준다.

const app = express();
const PORT = 3000;

const handleListen = () => console.log(`Listening on http://localhost:${PORT}`);
app.listen(PORT, handleListen);

사용할 view engine 과 views 를 지정해준다.

app.set("view engine", "pug");
app.set("views", __dirname + "/views");

라우팅을 해준다.
localhost의 3000번 포트에 연결하면 home.pug를 보여준다.

app.use("/public", express.static(__dirname + "/public"));
app.get("/", (req, res) => res.render("home"));

 

전체코드

home.pug

doctype html
html(lang="en")
    head
        meta(charset="UTF-8")
        meta(http-equiv="X-UA-Compatible", content="IE=edge")
        meta(name="viewport", content="width=device-width, initial-scale=1.0")
        title Chat
        link(rel="stylesheet", href="https://unpkg.com/mvp.css")
    body 
        header 
            h1 Chat
        main 
            h2 hello 
        script(src="/public/js/app.js") 

app.js

alert("hi")

server.js

const express = require('express');

const app = express();

const PORT = 3000;

app.set("view engine", "pug");
app.set("views", __dirname + "/views");

app.use("/public", express.static(__dirname + "/public"));

app.get("/", (req, res) => res.render("home"));

const handleListen = () => console.log(`Listening on http://localhost:${PORT}`);
app.listen(PORT, handleListen);
728x90

'Web > Node.js' 카테고리의 다른 글

[Nodejs] express 템플릿으로 html 사용하기  (0) 2022.04.22
[NodeJS] Google 로그인 API 구현하기  (0) 2022.03.25
[NodeJS] WebSocket을 이용한 채팅  (0) 2022.02.24
[NodeJS] Nodemon, Babel  (0) 2022.02.18
728x90

Nodemon

프로젝트에 수정사항이 있으면 서버를 재시작해준다.

install

npm install nodemon -D

code

nodemon.json 을 생성하여 아래와 같이 적어준다.

{
    "ignore": ["src/public/*"],
    "exec": "babel-node src/server.js"
}

프로젝트에 변경사항이 있으면 babel-node src/server.js 을 실행한다.
이때 src/public/* 에 위치한 파일의 변경사항은 반영하지 않는다.

Babel

작성한 코드를 컴파일 해준다.

install

npm install @babel/core @babel/cli @babel/node -g
npm install @babel/preset-env -D

code
babel.config.json 을 생성하여 아래와 같이 적어준다.

{
    "presets": ["@babel/preset-env"]
}
728x90
728x90

파이썬 환경 변수를 확인을 하기 위한 명령어.

 

import sys
print(sys.path)

 

728x90

+ Recent posts