MySQL이 테이블이름을 쓸 때 대소문자를 구분하는 바람에 불편했다. 

(Ubuntu 16.04에서 MySQL 5.7 버전 사용 )

 

 

대소문자 구분하지 않게 하려면 lower_case_talbe_names 서버가 쓰는 변수를 수정해야 한다. 

 

근데, read only 변수다. 

 

my.cnf 가  없길래 뒤져보니까

 

mysql server 설정 파일 mysqld.cnf 파일이 있었다. sudo로 열어야 한다. 

$sudo vim mysqld.cnf

여니까 서버 설정파일이라고 써있다. 

 

[mysqld] 밑에 lower_case_talbe_names = 1 이라고 추가해주고 저장하자. 

 

설정 하나를 바꿨으니까 mysql 을 재시작 해보자.

mysql -uroot -p로 접속하고 변수명을 조회해보니까 잘 바뀌어 있다. 

적용이 되었는지 mysql 커맨드라인에서 확인해보자. 

아래처럼 명렁을 쳐보니까 0으로 잘 바뀌어 있다. 

 

 

728x90

virtual box 에서 우분투16.04LTS 가상머신을 쓰는데,

재로그인 하거나 재부팅 할 때 자꾸 화면이 찌그러지거나 모니터 못쓴다는 경고가 나왔다. 

 

아래와 같은 증상이다. 

 

검색해보니, 해결책은 monitors.xml 을 삭제하거나 이름을 변경하라는 내용이었다. 

 

$rm $HOME/.config/monitors.xml

 

monitors.xml 은 모니터구성을 저장하는 설정파일이다.

내 경우에는 rm으로 파일을 지우고 재부팅했더니 팝업이 뜨지 않고 화면도 안찌그러졌다. 

 

 

참고 (askubuntu.com)

https://askubuntu.com/questions/67337/how-do-i-get-rid-of-this-monitor-error

 

How do I get rid of this monitor error?

I have an Nvidia card and two monitors. Every time I log in to Unity on Ubuntu 11.10, I get this error: "Could not apply the stored configuration for monitors" I have tried opening nvidia-settin...

askubuntu.com

 

728x90

가상머신 만들고 다룰때 유의할 사항을 모아 포스팅한다. 

 

우분투 가상머신의 디스크 크기를 10GB로 잡은 바람에... 크기를 재할당하는데도 애를 먹어서 가상머신을 다시 올리게 된 적이 있다. 

 

앞으로 디스크 크기는 항상 32GB 이상으로!

 


우분투 가상머신 설치 (virtual box 사용)

 

https://hiiambk.tistory.com/482

 

1. 가상머신(VirtualBox)에 우분투 설치(Ubuntu 16.04)

http://releases.ubuntu.com/16.04/ ubuntu-16.04.6-desktop-amd64.iso 다운로드 1시간 이상 소요 D:\Ubuntu16.04 폴더 생성 새로 만들기 이름 설정_종류와 버전은 자동 선택됨, 확인 메모리 크기 설정(4096..

hiiambk.tistory.com

 

 

가상머신 화면사이즈 조정

 

가상머신 실행 후, 버추얼박스의 메뉴 중 [장치 > 게스트 확장 CD 이미지 삽입]을 선택한다.

실행해서 root암호를 넣는다. 

설치가 끝나면 enter 치고 재부팅한다. 

재부팅후에 까만화면만 나오는 경우가 있는데, 가상머신 화면을 드래그로 죽 늘여보거나 하면 제대로 켜진것을 확인할 수 있었다.

참고 - https://technote.kr/157

 

버추얼박스의 메뉴 중 [보기 > 가상화면1 > 원하는해상도 클릭] 하면 편하다. 

 

 

영문 디렉토리명으로 변경

 

터미널을 연다 (ctrl + alt + t )

ls 명령으로 현재 디렉토리명이 한글로 되있는지 확인한다. '다운로드'이런식이면 영문으로 바꾸자. 

아래와 같은 명령 두줄을 입력한다. 

$export LANG=C

$xdg-user-dirs-gtk-update 

 

Update 버튼을 누르자. ls 명령어로 디렉토리명이 제대로 변경되었는지 확인하자. 

 

 

한글 사용 세팅 

 

fcitx를 설치한다. 

# sudo apt-get install fcitx-hangul

 

한영키를 설정한다. 

 

Setting -> Text Entry 에 가서 Korean이 아니라, Hangule 을 추가해놓는다.

 

https://gomcine.tistory.com/entry/%EC%9A%B0%EB%B6%84%ED%88%AC-1604-LTS-%ED%95%9C%EA%B8%80-%EC%84%A4%EC%B9%98-%EB%B0%8F-%ED%95%9C%EA%B8%80%EC%A0%84%ED%99%98-%EC%84%B8%ED%8C%85

728x90

쿠키를 이용한 인증 기능을 구현한다. 

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

could not apply the stored configuration for monitors  (0) 2020.04.16
Virtual box에서 우분투 가상머신 만들고 세팅  (0) 2020.04.15
HTTP Cookie  (0) 2020.04.11
Node.js npm pm2  (0) 2020.04.05
MySQL 명명 규칙  (0) 2020.03.23

쿠키란?

서버가 사용자의 웹브라우저에게 보내는 작은 데이터 조각.

인증, 개인화, 트래킹을 위해 쓰인다. 

 

쿠키의 용도 

세션 관리 : 서버에 저장할 로그인, 게임 스코어 등의 정보 관리 

개인화 : 사용자 선호, 테마 등의 세팅

트래킹 : 사용자 행동 기록 및 분석 

 

 

MDN 에서 http cookie를 찾아본다. 

https://developer.mozilla.org/ko/docs/Web/HTTP/Cookies

 

HTTP 쿠키

HTTP 쿠키(웹 쿠키, 브라우저 쿠키)는 서버가 사용자의 웹 브라우저에 전송하는 작은 데이터 조각입니다. 브라우저는 그 데이터 조각들을 저장해 놓았다가, 동일한 서버에 재 요청 시 저장된 데이터를 함께 전송합니다. 쿠키는 두 요청이 동일한 브라우저에서 들어왔는지 아닌지를 판단할 때 주로 사용합니다. 이를 이용하면 사용자의 로그인 상태를 유지할 수 있습니다. 상태가 없는(stateless) HTTP 프로토콜에서 상태 정보를 기억시켜주기 때문입니다.

developer.mozilla.org

 

 

쿠키 생성

 

쿠키는 서버가 사용자에게 응답할 때 실어보내는 것이므로, response의 헤더쪽 안에 작성한다. 

key-value 형태로 여러 쿠키를 보낼 수 있다.

쿠키의 Name은 yummy_cookie이고 Value는 choco 이다. (크롬 기준, F12를 눌러서 개발자 도구의 Network에서 확인해보자.)

var http = require('http');

http.createServer(function(request, response){
    response.writeHead(200, {
        'Set-Cookie':['yummy_cookie=choco', 'tasty_cookie=strawberry']
    })
    response.end('Cookie!!');
}).listen(3000);

 

 

쿠키 읽기

 

생성한 쿠키를 웹브라우저가 서버쪽으로 쿠키를 다시 요청하는 것을 확인해보자. 

 

쿠키를 다루는 NPM 모듈이 있는지 검색해보자.

npm install cookie --save 로 cookie 모듈을 설치한다. 

 

쿠키는 요청의 헤더 안에 있다. 

아래와 같이 request의 headers에서 cookie를 가져온다. 

cookie의 parse() 함수를 이용하여 데이터를 파싱한다. parse()는 undefined를 처리 못하는 함수이므로 if문 내에서 처리한다. 

response.writeHead() 안에 쿠키 값을 여러개 넣을 수 있다. 

var http = require('http');
var cookie = require('cookie');

http.createServer(function(request, response){
    console.log(request.headers.cookie);

    if(undefined !== request.headers.cookie){
        var cookies = cookie.parse(request.headers.cookie);
    }

    console.log(cookies.yummy_cookie);
   
   response.writeHead(200, {
        // 쿠키를 key-value 형태로 생성한다. 
        'Set-Cookie':['yummy_cookie=choco', 
                    'tasty-cookie=strawberry'
        ]
    })
    response.end('Cookie!!');
    
}).listen(3000);

 

 

[ Session 쿠키와 Permanent 쿠키 ]

 

Session 쿠키 : 웹 브라우저를 종료하는 순간 사라진다.

 

Permanet 쿠키: 쿠키가 살아있는 기간을 정할 수 있어서, 웹 브라우저 종료에 영향을 받지 않는다.

Expires, Max-Age 와 같은 설정이 필요하다. 둘 중 하나를 쓰면 된다.   

 

Expires : 쿠키 소멸 시점을 명시한다. (예시 : 2020년 4월 20일까지 살아있어라.)

Max-Age : 현재 부터 얼마동안(1시간, 1달..) 살아있을지 '기간'을 명시한다. 

 

var http = require('http');

http.createServer(function(request, response){
    response.writeHead(200, {
        'Set-Cookie':['yummy_cookie=choco', 'tasty_cookie=strawberry']
    })

    console.log(request.headers.cookie);

    if(undefined !== request.headers.cookie){
        var cookies = cookie.parse(request.headers.cookie);
    }

    //console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        // 쿠키를 key-value 형태로 생성한다. 
        'Set-Cookie':['yummy_cookie=choco', 
                    'tasty-cookie=strawberry',
                    `Permanent=cookies; Max-Age=${60*60*24*30}`
        ]
    })
    response.end('Cookie!!');
}).listen(3000);

자바스크립트 변수를 넣기 위해 ( ` ) 그레이브 엑센트를 썼다. 

 

 

[ 쿠키 옵션 ]

1. Secure

웹브라우저가 HTTPS를 사용하는 경우에만 쿠키를 전송한다는 뜻이다. 

'Secure=Secure; Secure'

쿠키의 이름과 값이 둘다 Secure이고, 끝에 붙인 Secure 가 중요한 키워드이다. 

 

2. HttpOnly

웹브라우저와 웹서버가 통신할 때 만 쿠키를 발행하는 것이다. 

자바스크립트를 통해서도 쿠키값을 읽을 수 있다. 이를 방지하기 위해서 Http를 이용하여 통신할 때만 쿠키가 보이도록 한 것이다. 

 

var http = require('http');
var cookie = require('cookie');

http.createServer(function(request, response){
    console.log(request.headers.cookie);

    if(undefined !== request.headers.cookie){
        var cookies = cookie.parse(request.headers.cookie);
    }

    //console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        // 쿠키를 key-value 형태로 생성한다. 
        'Set-Cookie':['yummy_cookie=choco', 
                    'tasty-cookie=strawberry',
                    `Permanent=cookies; Max-Age=${60*60*24*30}`,
                    'Secure=Secure; Secure',
                    'HttpOnly=HttpOnly; HttpOnly'
        ]
    })
    response.end('Cookie!!');
}).listen(3000);

 

[ 쿠키 확인 하기 ] 

Chrome 브라우저를 기준으로 F12 개발자도구를 열고 Console에서 

document.cookie를 입력하면 쿠키 데이터를 확인할 수 있다. 

3. path

특정 디렉토리에서만 쿠키가 활성화되도록 하고싶을 때 사용한다. 

(그 디렉토리 하위에서도 활성화된다. )

 

쿠키에 Path를 추가해본다. 

Path값은 /cookie로 한다.

var http = require('http');
var cookie = require('cookie');

http.createServer(function(request, response){
    console.log(request.headers.cookie);

    if(undefined !== request.headers.cookie){
        var cookies = cookie.parse(request.headers.cookie);
    }

    console.log(cookies.yummy_cookie);
    response.writeHead(200, {
        // 쿠키를 key-value 형태로 생성한다. 
        'Set-Cookie':['yummy_cookie=choco', 
                    'tasty-cookie=strawberry',
                    `Permanent=cookies; Max-Age=${60*60*24*30}`,
                    'Secure=Secure; Secure',
                    'HttpOnly=HttpOnly; HttpOnly',
                    'Path=Path; Path=/cookie'
    ]
    });
    response.end('Cookie!!');
}).listen(3000);

http://localhost:3000/로 접속해보자. (루트 디렉토리로 접속) 

 

Response Cookies 를 보자. (서버의 응답 쿠키들)

아래와 같이 Path라는 이름의 쿠키가 추가되었고, Path값이 /cookie 임을 확인할 수 있다. 

 

'Set-Cookies' 코드 전체를 주석처리 하고 서버를 재시작해보자. 

http://localhost:3000/ 접속해보자.  Path라는 이름의 쿠키가 안보인다. 

 

다시 http://localhost:3000/cookie로 접속해보자. Path라는 쿠키가 보인다. 

 

/cookie/sub 디렉토리에서도 Path라는 쿠키가 보인다. 즉, /cookie의 하위 디렉토리에서도 보인다는 것.

 

 

4. domain 

특정 도메인 에서만 쿠키를 살아남도록 하는 옵션이다. 

 

 

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

Virtual box에서 우분투 가상머신 만들고 세팅  (0) 2020.04.15
쿠키를 이용한 인증 기능 구현  (0) 2020.04.11
Node.js npm pm2  (0) 2020.04.05
MySQL 명명 규칙  (0) 2020.03.23
MySQL 웹앱 - 글목록  (0) 2020.03.21

Node.js 로 서버 개발을 할 때, 파일 수정 후에 서버를 재시작해야 하는 불편함이 있다. 

pm2는 코드 수정이 감지되면 자동으로 서버를 재시작해주기 때문에 개발할 때 재시작의 불편함을 없애준다.

 

서버 무중단이 가능하다는 것!

 

https://www.npmjs.com/package/pm2

 

pm2

Production process manager for Node.JS applications with a built-in load balancer.

www.npmjs.com

$ npm install pm2 -g 

-g 옵션으로 pm2를 설치한다. 

 

$ pm2 start app.js

pm2로 관리할 서버를 실행한다.

 

$ pm2 monit

지금 pm2로 매니징되는 것을 모니터링 할 수 있다. 

 

$ pm2 start main.js --watch

무중단 서비스 가능.

수정할 때마다 재시작 하는 불편함을 없애줌.

페이지 리로드만 하면 수정한 코드가 반영됨.

 

$pm2 log 

코드 수정시의 로그, 에러 등을 바로 볼 수 있다. 

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

쿠키를 이용한 인증 기능 구현  (0) 2020.04.11
HTTP Cookie  (0) 2020.04.11
MySQL 명명 규칙  (0) 2020.03.23
MySQL 웹앱 - 글목록  (0) 2020.03.21
MySQL select insert delete update  (0) 2020.03.21

MySQL DB 설계를 할 때 명명 규칙을 참고할 일이 생겼습니다.
잘 정리된 포스팅을 발견해서 기록합니다.
출처 : https://purumae.tistory.com/200


공통

  1. 소문자를 사용한다.
  2. 단어를 임의로 축약하지 않는다. register_date (O) / reg_date (X)
  3. 가능하면 약어의 사용을 피한다. 약어를 사용해야 하는 경우, 약어 역시 소문자를 사용한다.
  4. 동사는 능동태를 사용한다. register_date (O) / registered_date (X)

TABLE

  1. 단수형을 사용한다.
  2. 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.
  3. 교차 테이블 (many-to-many) 의 이름에 사용할 수 있는 직관적인 단어가 있다면 해당 단어를 사용한다.
  4. 적절한 단어가 없다면 relationship을 맺고 있는 각 테이블의 이름을 "and" 또는 "has" 로 연결한다.

예시

article, movie : 단수형
VIP_member : 약어는 대문자 & 단어의 연결에 underbar를 사용
article_and_movie : 교차 테이블을 "and" 로 연결

COLUMN

  1. auto increment 속성의 PK를 대리키로 사용하는 경우, "테이블 이름"_id 의 규칙으로 명명한다.
  2. 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.
  3. foreign key 컬럼은 부모 테이블의 primary key 컬럼 이름을 그대로 사용한다.
  4. self 참조인 경우, primary key 컬럼 이름 앞에 적절한 접두어를 사용한다.
  5. 같은 primary key 컬럼을 자식 테이블에서 2번 이상 참조하는 경우, primary key 컬럼 이름 앞에 적절한 접두어를 사용한다.
  6. boolean 유형의 컬럼이면 "_flag" 접미어를 사용한다.
  7. date, datetime 유형의 컬럼이면 "_date" 접미어를 사용한다.

예시

article_id, movie_id : "테이블 이름" + "_id"
complete_flag : boolean 유형의 컬럼
issue_date : 날짜 유형의 컬럼

 

INDEX

  1. 이름을 구성하는 각각의 단어를 hyphen 으로 연결하는 snake case 를 사용한다.

접두어
unique index : uix
spatial index : six

index : nix

"접두어"-"테이블 이름"-"컬럼 이름"-"컬럼 이름"

예시

uix-account-login_email

FOREIGN KEY

  1. 이름을 구성하는 각각의 단어를 hyphen 으로 연결하는 snake case 를 사용한다.

"fk"-"부모 테이블 이름"-"자식 테이블 이름"

같은 부모-자식 테이블에 2개 이상의 foreign key가 있는 경우, numbering합니다.

예시

fk-movie-article : article 테이블이 movie 테이블을 참조
fk-admin-notice-1 / fk-admin-notice-2 : notice 테이블이 admin 테이블을 2회 이상 참조하여 numbering

 

VIEW

  1. 접두어 "v"를 사용한다.
  2. 기타 규칙은 TABLE과 동일

예시

v_privilege

stored procedure

FUNCTION

  1. 접두어 "usf"를 사용한다.
  2. 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.

예시

usf_random_key

TRIGGER

  1. 이름을 구성하는 각각의 단어를 underscore 로 연결하는 snake case 를 사용한다.
  2. 접두어
    tra : AFTER 트리거
    trb : BEFORE 트리거

"접두어""테이블 이름""트리거 이벤트"

예시

tga_movie_ins : AFTER INSERT 트리거
tga_movie_upd : AFTER UPDATE 트리거
tgb_movie_del : BEFORE DELETE 트리거


도움이 되셨다면 하트🤍꾸욱 부탁드립니다.

728x90

'프로그래밍 > Node.js' 카테고리의 다른 글

HTTP Cookie  (0) 2020.04.11
Node.js npm pm2  (0) 2020.04.05
MySQL 웹앱 - 글목록  (0) 2020.03.21
MySQL select insert delete update  (0) 2020.03.21
MySQL 사용  (0) 2020.03.18

+ Recent posts