[Linux] wsl 환경에서 로그인,회원가입 만들기

김동욱·2021년 12월 23일
0

목적

wsl 환경에서 node.js+react(+nginx)를 활용해 웹페이지를 만들어 보면서
ubuntu 환경에서 서버를 어떻게 구축하는지에 대한 감을 익히고 서버 구성에 대해 알아볼 것이다.

📢본 작업은 wsl상에서 서버를 어떤 식으로 구축하고 연동이 되는지 흐름을 확인 해보기 위함으로 세세한 코드내용은 넣지 않았습니다.

1 . 사전 작업

1-1) node 설치

[추후에 별도 업로드 예정] ubuntu 내에서 node.js 설치

1-2) mariaDB 설치

[추후에 별도 업로드 예정] ubuntu 내에서 mariaDB 설치

1-3) nginx 설치

[추후에 별도 업로드 예정] ubuntu 내에서 nginx 설치

2. 폴더 구성

  • 서버 (react 활용)

  • 클라이언트 (node.js 활용)

    (build 폴더는 추후에 생성되는 폴더라 초기에는 없는 상태로 보시면 됩니다)

중간 요약

  • ubuntu내 node.js / mariaDB / nginx 설치
  • ubuntu내 home폴더에 프로젝트 폴더 생성
  • 프로젝트 폴더 내에 client / server 폴더를 위와 같이 구성 및 코딩

3. Nginx 설정 및 client 연결 확인

nginx설정관련 자세한 부분은 추후에 업로드 예정

1) 설정하기에 앞서 client폴더 내에서 작업한 내용들을 build 한다.

$ npm run build

2) nginx 설정파일(default.conf) 열기

$ cd /etc/nginx/sites-available/
$ sudo vi default

3) nginx 설정(default.conf)

# default.conf 파일 내부
server {
  listen 80;
  location / {
    root   /home/kdw/linux/client/build;
    index  index.html index.htm;
    try_files $uri /index.html;
  }
# node api reverse proxy
    location /api {
            proxy_pass http://localhost:5000;
    }
}

간략하게만 설명을 하자면

  • server{...} : 서버 블록
    => 하나의 웹 사이트를 선언하는데 사용되며, 가상 호스팅 개념이 적용되기 때문에 하나의 서버에 추가된 가상 서버도 운영할 수 있다.

  • location{...} : 로케이션 블록
    => server 블록 내에서 특정 URL을 처리하는 방법을 정의한다.

  • listen 80; => 80번 포트로 들어오는 요청 받는다

  • location / => 포트 뒤에 '/' 가 있을 때 location블록 내부로 들어간다

  • root => 80번포트의 '/' 로 시작되는 요청이 들어올 때 즉,http(s)://url:80/ 으로 접근해 올 때 수행할 파일의 경로

  • index => root 경로안에서 수행될 파일

  • try_files => 경로 오류가 생길경우 재 요청 시도시 수행할 파일

위와 같이 설정 후 nginx가 켜져 있다면 재시작 꺼져 있다면 시작시킨다

$ sudo service nginx stop  # 종료
$ sudo service nginx start # 시작

4) wsl의 ip주소:포트(80)을 입력해 root경로에 지정되었던 build 폴더 내의 index.html과 연결되는 지 확인한다.

4. DB연동 (mariaDB)

1) server폴더 내에서 npm start

$ npm start 

🚩이슈 발생

  • 상황 : npm run start시 에러 나타남
  • 에러명 :
    connectionerror sequelizeconnectionerror access denied for user 'root'@'localhost'
  • 파악 : sequelize 에서 mariaDB 연동시 user에 대한 접근 관련한 문제로 보임
  • 원인 :
    현재 mariaDB에서 사용중인 계정의 plugin이 unix_socket으로 지정되있음 . unix_socket은 mariaDB접근 시 root 권한여부만으로 증명하기 때문에 sequelize에서 password로 인증하는 방식과 맞지 않음.
  • 해결 :
    비밀번호 재지정을 통해 unix_socket >> mysql_native_password 로 변경
 ** 비밀번호로 로그인이 될 경우 **
 1) $ sudo mysql -u root -p
 2) mysql 비밀번호 입력 후 접속
 3) MariaDB [(none)]> set password = password("새로운 비밀번호 입력");
 4) MariaDB [(none)]> SELECT user,authentication_string,plugin,host FROM mysql.user; #plugin 확인  
 5) $ sudo service mysql restart 

 ** 비밀번호로 로그인이 안 될 경우 **
 1) $ sudo mysql -u root
 2) MariaDB [(none)]> USE mysql;
 3) MariaDB [(none)]> UPDATE user SET plugin='mysql_native_password' WHERE User='root';
 4) MariaDB [(none)]> FLUSH PRIVILEGES;
 5) MariaDB [(none)]> exit;
 6) $ sudo service mysql restart

2) db 연동 확인 완료

5. client - server간 요청(로그인/회원가입) 확인

1) 앞서 nginx상에 열어놓은 홈페이지로 접속

2) 회원가입/로그인 확인

3) 생성된 db 확인

$ sudo mysql -u root -p
# 패스워드 입력
use 데이터베이스명;
SELECT * FROM users;

가입된 정보들이 정상적으로 mariaDB에 들어가는 걸 확인할 수 있다.

profile
웹 개발 관련 공부한 내용 기록하는 블로그입니다.

0개의 댓글