var mysql = require('mysql'); // mysql 변수에 mysql 모듈을 할당
var connection = mysql. createConnection({ //커넥션변수에 mysql변수에 있는 크리에이드커넥션 메소드를 호출(객체를 받음) 할당
host : 'localhost', //host객체 - 마리아DB가 존재하는 서버의 주소
user : 'root', //user객체 - 마리아DB의 계정
password : 'password', //password객체 - 마리아DB 계정의 비밀번호
database : 'opentutorials' //database객체 - 접속 후 사용할 DB명
});
connection.connect(); // (위에 선언한 객체들을 가진)커넥션변수의 connect() 메소드를 호출하면 DB에 접속이 됨
connection.query('SELECT * FROM topic', function(error, results, fields){
// 커넥션.query 메소드를 호출해서(첫번째인자는 SQL문을주고, 두번째 인자로 콜백함수를 줌).
// 첫번째 인자 쿼리가 실행되고 나서 두번째 콜백함수가 실행됨(에러가발생했으면error에 할당, 접속결과는 results에 할당)
if (error) {
console.log(error);
} //에러에 값이 있다면 에러값을 콘솔에 출력
console.log(results);
});
connection.end();
위 소스로 만든 mysql.js파일을 node로 실행시켜보면 topic 테이블의 내용이 객체 형태로 반환됩니다.
node.js를 이용한 마리아DB 테이블 내용 셀렉트 출력
DB접속정보를 db.js파일로 만들고 main.js 파일에서 모듈로 불러 들여서 쿼리로 사용 할 수도 있습니다.
먼저 db.js파일을 만듭니다.
var mysql = require('mysql'); // mysql 변수에 mysql 모듈을 할당
var db = mysql. createConnection({ //db변수에 mysql변수에 있는 크리에이드커넥션 메소드를 호출(객체를 받음) 할당
host : 'localhost', //host객체 - 마리아DB가 존재하는 서버의 주소
user : 'root', //user객체 - 마리아DB의 계정
password : 'password', //password객체 - 마리아DB 계정의 비밀번호
database : 'opentutorials' //database객체 - 접속 후 사용할 DB명
});
// db.connet();
module.exports = db;
다음은 main.js에서 require('./db.js')로 접속정보를 가져와 변수에 집어 넣습니다.
이후 변수명.query('쿼리내용', function(에러시값받는변수, 성공시값받는변수)로 쿼리내용을 객체로 변수에 받습니다.
var db = require('./db.js'); // 현재폴더에 있는 db.js 파일 모듈로 가져오기(DB접속 정보가 있음)
var http = require('http'); // 모듈 사용하기 - 변수 = require('사용할모듈명')
var app = http.createServer(function(request,response){
db.query(`SELECT * FROM topic`, function(error, result){
// 커넥션.query 메소드를 호출해서(첫번째인자는 SQL문을주고, 두번째 인자로 콜백함수를 줌).
// 첫번째 인자 쿼리가 실행되고 나서 두번째 콜백함수가 실행됨(에러가발생했으면 임의변수 error에 에러값 할당, 접속결과 성공시 결과값 임의변수 topics에 할당)
console.log(result)
var html = // 변수 html에 아래 html 코드를 입력
`
<!doctype html>
<html>
<head>
<title>nodejs - mysql </title>
<meta charset="utf-8">
</head>
<body>
nodejs - mysql
</body>
</html>
`
response.writeHead(200); // 응답: 상태 성공(200)
response.end(html); // 웹에 띄워줄 내용 (html변수)
});
})
app.listen(8088); // http.createServer()가 할당된 변수 app를 8088로 오픈
이제 위에 html변수 안에 들어가는 html코드 내용에 result 변수로 받은 sql객채들을 꺼내서 표현해 봅니다.
var db = require('./lib/db.js'); // 현재폴더에 있는 db.js 파일 모듈로 가져오기(DB접속 정보가 있음)
var http = require('http'); // 모듈 사용하기 - 변수 = require('사용할모듈명')
var app = http.createServer(function(request,response){
db.query(`SELECT * FROM topic`, function(error, result){
// 커넥션.query 메소드를 호출해서(첫번째인자는 SQL문을주고, 두번째 인자로 콜백함수를 줌).
// 첫번째 인자 쿼리가 실행되고 나서 두번째 콜백함수가 실행됨(에러가발생했으면 임의변수 error에 에러값 할당, 접속결과 성공시 결과값 임의변수 topics에 할당)
console.log(result)
var html = // 변수 html에 아래 html 코드를 입력
`
<!doctype html>
<html>
<head>
<title>nodejs - mysql </title>
<meta charset="utf-8">
</head>
<body>
<p>${result[0].id} / ${result[0].title} / ${result[0].description} </p>
<p>${result[1].id} / ${result[1].title} / ${result[1].description} </p>
<p>${result[2].id} / ${result[2].title} / ${result[2].description} </p>
</body>
</html>
`
response.writeHead(200); // 응답: 상태 성공(200)
response.end(html); // 웹에 띄워줄 내용 (html변수)
});
})
app.listen(8088); // http.createServer()가 할당된 변수 app를 8082로 오픈
// 업데이트 예시
var name = '이름'
var profile = '프로필'
var id = '1234';
db.query(`
UPDATE topic SET name=?, profile=? WHERE id=?`, // DB topic 테이블에 UPDATE하기. ?로 선한한 부분은 (,)뒤에 []로 표현된 값이 입력됨
[name, profile, id], // 윗줄 ?인 name에 '이름' 넣고, profile에 '프로필' 넣고, id에 '1234' 넣기
function(error, result){ // 쿼리문 실행 후 변수에 값을 받음. 에러시 error변수에, 성공시 result변수에 값을 받고 {} 안에 내용 실행
if(error){ // error 변수에 값이 존재할 경우
throw error; //빠저나가기
}
response.writeHead(302, {Location: `/`}); // 응답: 리다이렉션(302). 주소는 /
response.end();
}
// 인서트 예시
var name = '이름'
var profile = '프로필'
db.query(`
INSERT INTO topic (name, profile) VALUES(?, ?)`, // DB topic 테이블에 인서트 인투(name, profile)
[name, profile], // name에 '이름' 넣고, profile에 '프로필'넣기
function(error, result){ // 쿼리문 실행 후 변수에 값을 받음. 에러시 error변수에, 성공시 result변수에 값을 받고 {} 안에 내용 실행
if(error){
throw error;
}
response.writeHead(302, {Location: `/`}); // 응답: 리다이렉션(302). 주소는 /
response.end();
}
)
// 딜리트 예시
var id = '1234'
db.query(`
DELETE FROM topic WHERE id=?`, // DB topic 테이블에서 id가 아래줄에 선언한 id와 같은 값 지우기
[id], // id에 '1234' 넣기
function(error, result){ // 쿼리문 실행 후 변수에 값을 받음. 에러시 error변수에, 성공시 result변수에 값을 받고 {} 안에 내용 실행
if(error){
throw error;
}
response.writeHead(302, {Location: `/`}); // 응답: 리다이렉션(302). 주소는 /
response.end();
}
)
6주 동안 애드센스 핀번호를 기다리며 이것저것 검색을 해봤더니 작년까지는 재발송이 2회까지 추가 신청이 가능했고, 그 이후에도 핀번호가 미도착하면 신분증 등을 스캔하여 제출하는 방식으로 인증이 됐었다고 합니다.
하지만 금년도부터는 신분증 제출로 인증하는 방식은 더이상 불가능하며 대신 재발송 요청이 4~5회까지 늘어 났다는 글을 봤습니다.
저는 오늘이 딱 2번째 재발송 요청하는 날이라 오늘까지 안오면 회사로 해놨던 주소를 집으로 변경해서 재발송 요청을 하려고 했는데 딱 오늘 와버렸네요.
최근 1년간 애드센스 핀번호를 받으셨다는 분들을 보면 2주만에 받으셨다는 분도 계시고 4달이 다 되도록 못받으신 분들도 계셨습니다. 이게 우편물이다 보니 어디서 어떻게 분실되는지도 알 수도 없고 또 애드센스와 연락을 하기도 어려워서 기다리는 동안 혹시나 안오면 어쩌지란 생각이 자주 들었습니다.
애드센스에서 좀 전자적인 방식으로 핀번호 인증을 바꿔주면 참 좋을텐데 말이죠.
인증방법은 간편했습니다. 애드센스에서 핀번호를 발송하면 애드센스 홈 화면에 인증관련 메뉴가 하나 생깁니다.
청구소 수신 주소 확인 메뉴에서 확인을 클릭합니다.
(아래 나오는 11월 3일은 재가 재발송을 요청한 날짜입니다.)
핀번호 입력 화면으로 전환되면 우편물로 받은 핀번호 6자리 숫자를 넣고 제출을 클릭합니다.
숫자를 정확히 넣으시면 PIN이 올바르게 입력되었다고 알려줍니다.
청구서 수신 주소가 인증되었다는 메세지도 나옵니다.
위에서처럼 청구서 수신 주소를 인증했다고 알려주기까지 하는걸 보면 애드센스에서는 사용자의 주소를 취득해놔야 하는 이유가 있나 봅니다. 이사가면 바뀔 주소를 왜 이리 집착하는 것일까요. 차라리 영구적인 이메일 주소로 인증을 하는게 요즘 시대에 더 맞다고 생각됩니다.
혹시나 애드센스 핀번호가 도착을 하지 않아 재발송을 신청하고 기다리고 계시다면,
그러다 제 글이 검색되어 여기까지 오신거라면 6주만에 온 사용자도 있으니 안심하시고 조금만 더 기다려 보시기바랍니다.
PS.
12월 1일(화) 2번째 애드센스 우편물이 도착했습니다.
이 우편물은 11월 3일(화)에 재발송으로 신청했던 2번째 우편물 입니다.
재발송 신청한 2번째 우편물은 도착하는데 4주가 걸렸네요.
우편물이 어딘가로 증발해버린게 아닌가 걱정을 많이 했는데 기우였나 봅니다. 늦기는 하지만 결국 도착을 하네요.
2020년 11월 2일 라즈베리파이 홈페이지에 신제품 라즈베리파이(Raspberry Pi) 400 제품에 대한 내용이 올라왔습니다.
Raspberry Pi 400 (키보드에 내장된 라즈베리파이)
사진으로 보시는 바와 같이 라즈베리파이를 기존에 컴팩트 기기 하우징에서 벗어나 키보드 내부에 탑재한 제품으로 출시를 하였습니다.
제품명은 Raspberry Pi 400으로 출시하였습니다. 램은 4G로 발매되었습니다.
이 제품은 자체 기기 가겨은 70달러로 책정 되었으며, 부가 장치를 포함한 키트의 경우 가격을 100달로 책정하였습니다.
키트구성품
Raspberry Pi 400 기기
공식 USB 마우스
공식 USB-C 전원 공급 장치
Raspberry Pi OS가 설치되어 있는 SD카드
micro HDMI to HDMI 케이블
공식 Raspberry Pi 초보자 가이드
키트 구성품 사진
라즈베리파이 400의 하우징 내부 보드는 기본적으로 라즈베리파이 4 장치이지만 새로운 하우징에 맞춰 PCB 디자인을 가로로 길게 만들어졌습니다. 라즈베리파이4와 마찬가지로 USB 및 이더넷 포트가 제공되지만 USB2.0 포트중 하나는 키보드 전용으로 사용됩니다.
라즈베리파이 400 PCB
PCB보드에서 보이는것과 같이 USB 포트와 이더넷 포트는 좌측에 모여있습니다. 유선 마우스를 사용하시는 분들께서는 아무래도 마우스 사용시 파워선, HDMI선, 파워선등을 가로 질러 우측에 배치해야 되는 상황이 발생합니다. 가능하면 무선 USB 사용이 선관리에 깔끔할 것 같습니다.
GPIO 커넥터는 이번 라즈베리파이400 제품에서도 유지가 되었습니다.
라즈베리파이 400은 회로 레이아웃이 라즈베리파이4와 동일하지만 CPU 클럭이 1.8GHz까지 사용 가능해졌습니다.
라즈베리파이 400에는 기기 전면과 후면에 열을 발산하는 열 분산기가 포함되어 있어 가능했다고 합니다.
또한 이전 라즈베리파이 기기에는 없었던 전원 on/off 버튼이 생겼습니다.
Fn + F10을 2초 동안 누르면 전원이 꺼집니다. 이렇게 꺼도 Linux 소프트웨어에서 전원을 종료시키는 컨트롤을 이용하여 종료하는 것이기에 메모리카드나 USB 드라이브를 손상시키지 않습니다.