Hello World

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

Quick Start

Create a new post

1
$ hexo new "My New Post"

More info: Writing

Run server

1
$ hexo server

More info: Server

Generate static files

1
$ hexo generate

More info: Generating

Deploy to remote sites

1
$ hexo deploy

More info: Deployment

Comments

node.js 게시판 만들기 첫 포스팅

시작

node.js의 전반적인 내용을 훑고 공부할 겸 게시판만들기 프로젝트를 시작했다.
이것저것 생각하며 만들다보니 영 속도도 안나고 삽질만 하고있지만..


삽질

어제까지 routemodule들을 하나하나 잡으며 고생했는데 알고보니
express framework쓰니까 내가 이틀 고생해서 만든 것보다 더 깔끔하고 알찬 형태로
구성해 주더라..


local mySQL

로컬 mySQLdatabase를 연동시키려고 했는데 웬걸, 실행이 안되고 있었다.
이전에 일하던 회사에서 익숙해진김에 hediSQL을 사용하는데 로그인이 안됐다.

알고보니 내 컴퓨터의 mySQL서비스가 꺼져있던것!
내컴퓨터 - 왼쪽에 있는 내 PC를 우클릭하면 나오는 관리 - 서비스 및 응용 프로그램 - 서비스 - mySQL또는 mySQL56(버전마다 다를듯)을 실행하고나서 다시 hediSQL접속 시도하니까 접속가능!


routing 문제

게시판 종류를 두 개로 하려다보니 각각의 CRUD용 페이지를 구성하는게 고민이다.
어떤 부분을 하나로 쓰고 어떤 부분을 나누는게 가장 효율적일지는 좀더 생각해봐야 할 것 같다.

Comments

OKKY세미나 IT회사 탐방기 - 18.02.27

TGL경복빌딩의 eBrain에서 있었던 OKKY세미나에 형들과 다녀왔다.
마이다스 아이티에서 10년 3개월 5일(?) 일하다가 나오신 황후순님이 세미나를 해주셨고,
주제는 IT회사 탐방기 였다.

황후순님의 이력에 대한 간단한 설명을 듣고
(안전도 시뮬레이션등을 하는 회사, 인공지능 면접 솔루션 개발 등),

어떻게 많은 회사들을 다녀오실 수 있었는지도말씀해주셨는데,
facebook등과 같은 SNS를 활용하신다고 한다.

예를 들면 회사는 내가 누구인지 모르니 나를 알려야 하므로, 그 회사에 다니는 사람 등의
게시물에 댓글을 달거나 하는 식으로 인맥을 확장해 나가는 방식!
SNS에서 소통하다가 방문하는 방식이라고 한다.


연사님은 개발자로 10년을 일을 하셨는데 퇴사를 하게 된 계기는 두가지라고 했다.

  1. 데이터 사이언스, AI 에 흥미가 있었고, TensorFlow 등에서 가져다 쓰는것보다는 직접 개발해보고 싶었다
  2. 영어를 활용하는 환경

싱가폴로!


기업탐방 - 해외(싱가폴)

싱가폴 페이스북

  • 식당이 좋다, 다양한 종류의 사람들이 있으므로 음식도 종류별로 준비된다.
  • 성과위주이기에 업무에 도움이 되거나 휴식을 위해 음주가 가능하지만 대부분 안함
  • 모니터에 코드만 안찍히면 구경가서 사진촬영도 가능
  • 모든 층이 계단으로 연결되어있고, face to face 를 선호한다 - 전화 잘 안울림
  • 포토존이 많다. 왜..?
  • 면접
    1. 길다 - 한두달걸림
    2. 기술면접을 분야별로 본다
    3. 면접마다 평가해서 회사가 연봉을 측정
    4. 통과하면 면접자에게 희망연봉을 묻는다
    5. 측정치랑 일치하거나 측정치보다 낮으면 계약서, 측정치보다 높으면 협상
      일단 한 10억 던지고 협상ㄱㄱ
  • 몸값을 제대로 받아야 일도 제대로함 - 연봉만큼의 일이 들어옴
  • 순수개발자의 비중이 생각보다 작음 - 로컬화 위주이기 때문


WeWork, stashaway(이주원님)

  • 면접
    1. 페이스북과 다르다
    2. 면접자가 연봉을 먼저 제시하고
    3. 그 금액에 맞는 면접을 회사가 준비해온다 - 통과하면 처음 부른 액수 그대로 받는다
  • 한국: 신입은 개발좋아하는 사람, 경력은 필요한 스택에 맞는사람
  • 싱가폴: 지원자가 잘하는 언어로 면접봄(연봉에 맞춘 난이도로), 나머지 언어는 들어와서 배우면됨
  • 개발자에 대한 대우가 다르다 - 대졸4년차 기본연봉1억
  • 회사보다는 가족 - 남들 쉴 때 일하는 것은 혼자 미꾸라지되겠다는 의미로 받아들임


Grab(아시아버전 우버) 그랩

  • 연사님이 만나신 분은 Google Developer신분(?)이셔서 코딩테스트 패스하셨고 화상면접, 라이브코딩 여러번을 거치셨다고 한다.
  • 카카오 입사도 통과하셔서 그 연봉의 2.5배를 제시했는데 바로 계약서가 왔다(회사가 자체 평가한 금액을 넘지 못했다는 의미..)
  • 입사연봉기준으로 다음 연봉협상 이뤄지기 때문에, 첫 연봉이 중요하다.


황후순님이 알려주신 팁!

  • 혼자 공부하는건 오픈소스외에는 큰 프로젝트보기힘들다 따라서 회사에들어가서 배우는게 빠르다.
  • 면접여러번 보다보면 언어도 늘기 때문에 영어에 너무 좌절하지 말것!
  • 영어 회사들어가서 해라
  • 기술을 보고, 사람을 본다
  • 개발자는 개발에도 두려움을 가질 필요가 없다. 배우면되기에!

싱가폴-> 개발자가 일하기 좋은 나라


기업탐방(국내)

Clova(naver)

  • 네이버의 인공지능분야 담당
  • AI관련해서는 면접자가 기여할 부분이 있다면 학사도 뽑음(싱가폴은 학사면 서류에서 이미 거른다고함)
  • 성과중심 - 본인 업무를 다했다면 출근카드 찍기만 하면된다.

    우아한 형제들(배달의 민족)

  • 평생직장따윈 없다, 최고가 되어 떠나라

    카카오

  • 대부분 어떻게든 관리자가 되지 않으려고함. 개발자로 남으려함

    구글코리아

  • 영어 중요하다, 아주 잘해야함
  • 자유로운 문화 - 익히 아는 딱 그 문화
  • 영어보다 소통능력이 더중요함 - 공감능력, 소통, 성과를 잘보여주는 능력
  • 인사평가는 자기PR로 함
  • 구글에 천재가 많음, 하고싶어서 하는 천재, 노력하는 천재가 많다.

    삼성SDS - 애자일 코어팀

  • si회사로 볼 수 있지만 애자일 코어팀은 변화를 이끌고자 하는 조직
  • 삼성의 새로운 문화를 이끌려는 조직

    셈웨어

  • 서울대에 있는 회사
  • math tool개발
  • mathFreeOn
  • 실패라는 단어를 사용하지 않고 실수로 여김, 실수성공하기 위한 과정임
  • 우주의 움직임도 그래픽으로 물리, 지구과학등으로 분야 넒히려고 함 - 동현이?

    데일리 인텔리전스

  • AI플랫폼 - 다빈치(DaVinCi)
  • 은행 및 보험사
  • 더루프 - 루프체인
  • 인프런 - 강사와 사람들을 연결해주는 서비스

    오마이랩

  • 잔디 시작한 개발자(최영근), 이규원 - c#개발자 오마이랩CTO

    코더블/ 상상충전소

  • 교육커리큘럼, 책만듦


프로vs 고수

나는 어느 쪽을 추구하는지 고민해볼 부분

  • 프로
    • 돈에 움직이는 사람,
    • 회사에서 원하는 방향을 따르거나 맞는 곳을 찾아감
    • 고객의 니즈를 맞춰줄 수 있는 사람
    • 자신의 가치를 돈으로 판단

  • 고수
    • 일은 프로처럼함(고객의 니즈) + 자기의 생각을 담음
    • 고객의 니즈를 바꾸지 않고 자신의 생각이 추가됨
    • 자신에 대한 가치를 기술적인 것으로 판단

  • 은거하면서 아트하는데 그걸로돈도 들어오는…??

개발자 테크트리의 끝은?

  • 관리자냐 테크니션이냐… 고민할 필요없다
  • 회사에 필요한 기술을 공부하면됨 필요 한것을 공부
  • 현재는 선택할 것이 많다(두갈래가 아니다)

공부는 공부의 결과를 낳는다.

  • 언어는 도구다!
  • 책보다는 도큐먼트!
  • 책은 모르고 쓰는 사람도 많다 - 책을 볼때는 다 코드짜보고 맞는지도 확인할것!
  • 기술공부도 좋지만 시야와 그릇을 넓힐것.

개발은 80까지!!

Comments

why hexo blog changes the language automacitally

Almost whenever I check my hexo github blog no matter local or github,
the language kept being changed like an alive creature.

One time that was in English, next time it was in Spanish, next time it was in
French, and then it was in Indonesian.

yeah it was so crazy

So I checked hexo‘s document.
-> https://hexo.io/docs/internationalization.html

And I found the reason and how to SET your blog’s language.

hexo says that if we set i18n_dir as lang, they will detect the language within the first segment of URL. For example:

1
2
3
/index.html => en
/archives/index.html => en
/zh-tw/index.html => zh-tw

The string will only be served as a language when the language file exists. So archives in /archives/index.html (example 2) will not get served as a language.

But it was odd. When my blog shows French, request headers message’s language part setting was right(in Korean or English).

I don’t know why the other languages appeared but after setting languageoption
as en in _config.yml and then deleted, it became ok.

Until now I think it’s about hexo-i18n but I don’t understand why;;
If this blog’s language is weird then notice me. In case I will see again,
I will try to find the reason again

Comments

Node.js server starting module

#Server Strting module
This module can be used without abstracting by require()method.

When this module is installed, the code uses -g option. -g makes the installing globally.
Then the modules which are installed with -g option are placed in {prefix}/lib/node_modules and the executable files are placed in {prefix}/bin

We will install supervisor and forever modules with the option like this.

1
2
npm install -g supervisor
npm install -g forever

#supervisor module
Node.js programming makes us stop and restart the server again and again whenever we need to change the code because though the files are changed, the script executing doesn’t get impact. But, supervisor module recognizes the difference and restarts the server automatically.

we can check their document here -> https://github.com/petruisfan/node-supervisor

supervisor module’s basic usage is supervisor (file name) .

We will see what happens with the module from now on.

I made a code for showing the changing. When I made this code,

1
2
3
4
5
6
7
8
var http = require("http");

http.createServer(function ( request, response){
response.writeHead(200, {'Content-Type':'text/html'});
response.end('<h1>Supervisor test - 1</h1>');
}).listen(52273, function(){
console.log("Server Running at http://127.0.0.1:52273");
});

I see the page when I enter http://127.0.0.1:52273 or localhost:52273

And I change and save the server code file like this without restarting,

1
2
3
4
5
6
7
8
var http = require("http");

http.createServer(function ( request, response){
response.writeHead(200, {'Content-Type':'text/html'});
response.end('<h1>Supervisor test - 2</h1>');
}).listen(52273, function(){
console.log("Server Running at http://127.0.0.1:52273");
});

and then refresh the web page, the page is changed like this.

supervisor module restarts any programs when the code ends no matter what the programs are. This means in the case we run some short code like

1
console.log("Run with supervisor");

the program gets infinite restarting.
so we should use the module when we start server program.

Comments

Node.js File System 모듈

모든 HTML 페이지를 자바스크립트로 작성하기는 힘들다.
file system모듈은 서버에 있는 HTML페이지를 사용자들에게 보여줄 수 있게 해준다.

HTML페이지(HTMLPage.html)을 사용자에게 제공하기 위해서 자바스크립트 파일을 다음과 같이 작성해보았다.

1
2
3
4
5
6
7
8
9
10
11
const fs = require("fs");
const http = require("http");

http.createServer(function(request, response){
fs.readFile("HTMLPage.html", function(error, data){
response.writeHead(200, {"Content-Type:":"text/html"});
response.end(data);
});
}).listen(52273, function(){
console.log("server running at http://127.0.0.1:52273/");
});

만약 다른 종류의 파일을 제공하고 싶다면, 5번째 줄의 MIME타입을 바꿔서 제공할 수 있다.
예를 들어 jpeg파일의 경우는 text/htmlimage/jpeg로 변경하여 제공할 수 있다.
또한 다른 MIME 타입들도 동일한 방식을 적용할 수 있다.

MIME 타입들 예시

  • text/plain — 기본 텍스트
  • text/html — HTML 문서
  • text/css — CSS 문서
  • text/xml — XML 문서
  • image/jpeg — JPG/JPEG 이미지 파일
  • image/png — PNG 이미지 파일
  • video/mpeg — MPEG 영상 파일
  • audio/mp3 — MP3 음악 파일
Comments

Node.js http 모듈

우리가 치킨을 시켜먹을때, 전화로 이렇게 말한다

“여기는 A아파트구요, B동 C호에요… 치킨 한마리 배달해주세요”

그러면 우리는 약간의 시간 뒤에 우리가 주문한 치킨을 집(전화로 말한 주소)에서 받게 된다.

이러한 맥락에서 URL을 웹 브라우저에 입력하는 것은 치킨을 시키는 전화로 볼 수 있고,
웹페이지를 웹브라우저으로부터 받는 것을 치킨집으로부터 치킨을 받는 것으로 볼 수 있다.
이러한 비유가 웹페이지의 요청과 응답에 대한 기본적인 이해이다.

서버는 요청을 보내는 방법에 따라 http 웹서버 또는 https 웹서버 등으로 불린다.
요청메시지를 사용하면, 유저들에게 더 적합한 웹페이지를 보여줄 수 있다.
응답메시지를 사용하면, 쿠키를 사용, 저장하거나 페이지 강제 이동 등의 추가 기능을 사용할 수 있다
http모듈에서 가장 중요한 객체는 server객체이다.
server객체는 http 모듈의 createServer()메소드를 사용하여 만들 수 있다.

server객체의 메소드

  • listen(port[, callback]) — 서버를 시작한다
  • close([callback]) — 서버를 중지한다

server객체의 이벤트

  • request — 사용자가 무언가를 요청할 때 발생
  • connection — 사용자가 서버에 접속할 때 발생
  • close — 서버가 닫힐 때 발생
  • checkContinue — 사용자가 서버를 계속 열고 있을 때 발생
  • upgrade — 사용자가 HTTP 업그레이드를 요청할 때 발생
  • clientError — 사용자가 에러를 발생시키면 발생

웹페이지를 제공하고자 할 때, 요청메시지를 작성해야한다.
요청메시지의 작성은 request 이벤트 리스너의 두번째 매개변수인 response객체를 통해 할 수 있다.

Response객체의 메소드

  • writeHead(statusCode[, statusMessage][, headers]) — response header를 작성할 때
  • end([data][, encoding][, callback]) — response객체의 본문을 작성
Comments

Node.js ejs, jade module basic 템플릿 모듈 기본

ejs module

ejs모듈을 다운로드할때는 다음 코드를 사용한다.

1
npm install ejs;

위의 코드를 실행하면, npm이 외부 모듈을 설치하게된다.

설치가 끝나면 밑의 코드처럼 기존의 내부 모듈 사용법과 마찬가지로 변수에 담아서 사용이 가능하다.

1
var ejs = require('ejs');

ejs 모듈은 템플릿 엔진 중 하나이기 때문에 특정 형태의 스트링을 HTML 타입의 스트링으로 변환시켜준다.

ejs페이지를 HTML 페이지로 변환시키는 서버 페이지를 만들고자 한다.
이때에는 ejs모듈에 내장된 render(str, data, option)메소드를 사용한다.

변수를 사용할 때, ejs 안에서 변수를 선언하여 사용할 수도 있지만,
일반적으로 자바스크립트에서 선언한 변수를 ejs로 전달하여 사용한다.

자바스크립트의 변수를 ejs로 넘겨줄때는, 아래 코드의 9, 10번째 줄처럼 render() 메소드의 두 번째 매개변수에 담아 전달한다.

Tip — 파일을 저장할때 반드시 utf8로 인코딩해서 저장해야한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var http = require("http");
var fs = require('fs');
var ejs = require('ejs');

http.createServer(function ( request, response){
fs.readFile("ejsPage.ejs", 'utf8', function(error, data){
response.writeHead(200, {'Content-Type':'text/html'});
response.end(ejs.render(data, {
name: 'booski',
description : 'Hellow ejs with node.js'
}));
});
}).listen(52273, function(){
console.log("Server Running at http://127.0.0.1.52273");
});

ejs 페이지를 작성할때, 몇가지 특수한 태그들을 사용할 수 있다.

  • <% Code %> → 자바스크립트 코드를 넣는다
  • <%= Value %> → 데이터를 출력한다

위의 태그들을 사용하여 ejsPage.ejs파일을 작성해보았다.

1
2
3
4
5
6
<h1><%=name%></h1>
<p><%=description%></p>
<hr/>
<%for(var i = 0;i<10;i++){%>
<h2>The Square of <%= i %> is <%= i*i%></h2>
<%}%>


Jade module

Jade 모듈도 ejs와 마찬가지로 템플릿 엔진 중 하나이다.

Jade모듈을 설치할 때에도 다음과 같이 ejs와 같은 방식(외부 모듈 설치)을 사용한다.

1
npm install jade

Jade 모듈이 jade페이지를 HTML페이지로 변환할 때는 모듈의 내장 함수 중
compile(String, option)을 사용한다.
ejs모듈의 render()함수와 한가지 다른 점은 render()함수는 스트링을 리턴하지만,
jadecompile()함수는 함수 자체를 돌려준다.
같은 맥락에서 jade에 자바스크립트의 변수를 전달할 때는 아래 코드의 11, 12번째 줄처럼
compile()함수가 리턴한 함수의 매개변수로 전달한다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
var http = require("http");
var fs = require('fs');
var jade = require('jade');

http.createServer(function ( request, response){
fs.readFile("jadePage.jade", 'utf8', function(error, data){
var fn = jade.compile(data);

response.writeHead(200, {'Content-Type':'text/html'});
response.end(fn({
name: 'booski',
description : 'Hellow jade with node.js'
}));
});
}).listen(52273, function(){
console.log("Server Running at http://127.0.0.1.52273");
});

Jade를 사용할 때도 ejs처럼 특별한 방식으로 코드를 작성해야한다.
가장 중요한 부분은 들여쓰기이다.
jade모듈은 들여쓰기를 기준으로 새로운 HTML태그를 만들기 때문이다.

Tip: jade에서 들여쓰기를 할 때는 탭 또는 스페이스바 중 하나로 통일해야한다.
그렇지않으면 에러가 발생한다.

태그 안에 글을 넣고 싶을 때는 해당 태그의 다음 줄에서 들여쓰기를 한 뒤 작성하면 된다.
또한 어떤 태그에 속성을 부여하고 싶을 때는, 괄호 ()를 이용하면 된다.(여러 속성을 주고 싶으면 각 속성을 ,로 구분한다.)

Jadedoctype과 주석 등 몇 가지 코드를 특수한 형태로 변환하는데 그 형태는 다음과 같다.

  • doctype html<!DOCTYPE html>
  • // JADE String<!-- JADE String -->

특히 새 div태그를 만들 때는 ‘div’를 직접 쓸 필요가 없다.

#header의 형태로 jade를 작성하면, ‘header’를 id로 갖는 div태그가 만들어진다.
같은 방식으로, .article의 경우는 ‘article’을 class로 갖는 div태그가 만들어진다.

Jade 역시 ejs처럼 특수한 태그를 갖는다.

  • -Code → 자바스크립트 코드를 적는다
  • #{Value} → 값을 출력한다.(내용 중간에 값을 집어넣음)
  • =Value → 값을 출력한다.(전체 내용이 값이 됨)
    이러한 태그들을 사용해서 아래 코드의 11번째 줄처럼 for 반복문도 구현 가능하다.

지금까지 언급한 내용을 바탕으로 아래와 같은 코드를 작성할 수 있다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
doctype html
html
head
title index Page
body
// JADE String
#header
h1 hello jade...!
h2 #{name}, we are the World
h3= description
hr
- for(var i = 0; i< 10;i++) {
.article
p
a(href="https://medium.com/@booski/", data-test="attribute added") Go to new world #{i}
- }

그리고 서버를 실행하면 아래의 화면을 브라우저에서 확인할 수 있다.

Comments

MySql updating many columns by A query

When we want to update many columns in one query,
we can just connect them with ,.
Let’s say we want to update A column to 1 and B column to 2 in one query.
Then we can do like this,

1
update table name set A = 1, B = 2;

Comments

MySql adding or subtracting value by update statement

When we want to add or subtract some value like +1 or -1,
we can do like this( in the case we want to add 1)

1
update table name set column's name = column's name + 1;

This query adds 1 in all values of that column.
So we can use this like this

1
update table name set column's name = column's name +1 where column's name = A;

This query adds 1 if the column’s value is A.

ex) Waiting line in a bank

If new person came to line ‘6’ in the back,

1
update bank set waiting = waiting +1 where line_num = '6';

then we add 1 to waiting column in the row having 6 as its line_num column’s value.

Comments