<aside> 💡
가장 먼저 데이터가 살 집을 만들어야 합니다.
MySQL 설치: 로컬(내 컴퓨터)에 MySQL을 다운로드 받아 설치하세요. (참고링크)
설치 과정 중에 **'Authentication Method'**나 'Accounts and Roles' 설정 단계가 나올 텐데, 여기서 막히는 경우가 많습니다.
root 계정의 비밀번호를 설정하게 됩니다. 이 비밀번호는 절대 잊어버리면 안 됩니다! 나중에 노드 서버 코드(server.js)에 직접 적어야 하거든요.3306으로 두시면 됩니다."Use Legacy Authentication Method" (MySQL 5.x 호환)를 선택하는 것이 좋습니다. 최신 방식(Strong Password)은 가끔 Node.js의 mysql2 라이브러리와 연결할 때 추가 설정이 필요해서 번거로울 수 있습니다.DBeaver 설치: MySQL은 터미널에서 검은 화면으로 보면 힘드니까, DBeaver 같은 GUI 툴을 써서 눈으로 확인합니다. (참고링크)
왼쪽 상단의 **플러그 아이콘(새 데이터베이스 연결)**을 누릅니다.
목록에서 MySQL을 선택하고 Next를 누릅니다.
Connection Settings에 아까 메모해둔 정보를 입력합니다.
localhostroot[Test Connection] 버튼을 꼭 눌러보세요!
💡 주의: 만약 "Driver files are missing"이라는 팝업이 뜨면, 당황하지 말고 [Download] 버튼을 누르시면 됩니다. DBeaver가 알아서 MySQL 연결에 필요한 파일을 내려받습니다.
데이터 생성: DBeaver에서 dd_post 테이블을 만들고, 연습용 데이터를 1~2개 직접 넣어보세요.
localhost 항목을 마우스 우클릭합니다.my_portfolio라고 지어볼까요? **[OK]**를 누릅니다.my_portfolio 항목의 화살표 클릭: 왼쪽 localhost 항목 왼쪽에 있는 **작은 화살표(> 또는 +)**를 눌러서 하위 목록을 펼쳐주세요.Databases**라는 이름의 폴더 모양 아이콘이 있을 거예요.localhost 자체가 아니라, 그 밑에 있는 Databases 폴더를 마우스 우클릭하세요.Create New Database 메뉴가 나타날 겁니다!-- 1. 테이블 생성
create table dd_post (
id INT auto_increment primary key,
title VARCHAR(255) not null, -- 제목
subtitle VARCHAR(255), -- 부제목
thumbnail VARCHAR(500), -- 썸네일 이미지 URL
tags VARCHAR(255), -- 태그
content TEXT,
views INT default 0,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
);
-- 2. 테스트 데이터 삽입
insert into dd_post (title, subtitle, thumbnail, tags, content)
values (
'모든 카테고리를 아우르는 게시글을 등록했어요',
'mysql에 직접 등록한 데이터',
'https://mulqhihyyqaszphmrysv.supabase.co/storage/v1/object/public/thumbnails/post-thumbnails/1766068109815.png',
'저축, 부동산, 대출, 생활, 상식, 뉴스, 투자',
'<h2>이것은 제목 문장이예요</h2><p></p><h3><strong>연금계좌의 세제 혜택에 대해 궁금한 5가지</strong></h3><p><strong>Q1. 연금계좌를 통해 얻는 구체적인 세제 혜택은 무엇인가요?</strong></p><p>→ 연금계좌에서 얻을 수 있는 세제 혜택은 연금을 납입할 때, 연금을 수령할 때 각각 적용됩니다.</p><p><strong>연금을 납입할 때<br></strong>• 매년 연말정산 시, 연금저축과 IRP에 납입한 금액에 대해 세액공제 혜택을 받을 수 있어요.<br>• 연금계좌는 투자수익에 대한 세금 납부를 연금 수령 시까지 미루는 과세이연 혜택이 있어, 수익을 재투자하며 복리 효과를 키울 수 있어요.<br>• 건강보험료 산정 시 사적 연금 납입액(연금저축, IRP 등)은 제외되어, 은퇴 후 건강보험료 부담도 줄일 수 있어요.<br>• ISA(개인종합자산관리계좌) 해지 후 연금계좌로 이전 시 세액공제 한도가 최대 300만 원까지 추가됩니다. 이전시키는 금액의 10%, 최대 300만 원까지 절세 효과를 더 얻을 수 있어요.</p><p><strong>연금을 수령할 때<br></strong>연금 수령 시 최대 1,500만 원까지 연금소득세율(3.3~5.5%) 적용 등 다양한 혜택을 누릴 수 있어요. 단, 연금수령액이 연 1,500만 원을 초과하는 경우에는 연금수령 전액을 다른 소득과 합산해 종합과세(6.6%~49.5%)하거나, 분리과세(16.5%)하는 방법 중 본인에게 유리한 방식을 선택해야 합니다. 그러므로 가급적 연1,500만 원 이하로 연금수령액을 맞추는 게 좋습니다.</p><p></p><p></p><p>• 투자 유연성이 더 중요하다면 → 연금저축<br>• 절세 + 안정성이 더 중요하다면 → IRP<br>• 유연성과 안정성을 모두 잡아 장기 복리 효과를 극대화하려면 → 두 계좌를 병행해 꾸준히 납입하는 것이 가장 효율적</p><p></p>'
);
-- 3. 데이터가 잘 들어갔는지 확인하려면 아래 쿼리를 실행해 보세요.
select * from dd_post
thumbnail이 왜 VARCHAR(500)(문자열)인가요?VARCHAR 타입을 씁니다.255는 너무 딱 맞을 수 있어서, 실무에서는 넉넉하게 500이나 2083(인터넷 익스플로러 최대 주소 길이) 정도를 할당합니다.https://picsum.photos/200)를 DBeaver에서 직접 thumbnail에 넣어둡니다.multer 라이브러리를 설치해서 **"진짜 내 컴퓨터에 이미지 업로드하고 URL 만들기"**를 진행하는 거죠.이제 자바스크립트(Node.js)로 DB의 문을 두드려볼 차례입니다.
프로젝트 생성: 빈 폴더를 만들고 npm init -y
필수 패키지 설치: npm install express mysql2 dotenv cors
환경 변수 작성: .env 파일 생성
DB_HOST=localhost
DB_USER=root
DB_PASS=아까설정한비밀번호 //1234
DB_NAME=my_portfolio
PORT=4000
연결 코드 작성: server.js 파일을 만들고 아래 흐름으로 코드를 짭니다.
// server.js 예시 (간략형)
const express = require('express');
const mysql = require('mysql2');
require('dotenv').config();
const app = express();
const port = process.env.PORT || 4000;
// MySQL 연결 설정
const db = mysql.createConnection({
host: process.env.DB_HOST,
user: process.env.DB_USER,
password: process.env.DB_PASS,
database: process.env.DB_NAME
});
// DB 연결 확인
db.connect(err => {
if (err) {
console.error('DB 연결 실패:', err);
return;
}
console.log('MySQL 연결 성공!');
});
// 게시글 목록 가져오는 API 엔드포인트
app.get('/api/posts', (req, res) => {
const sql = 'SELECT * FROM dd_post';
db.query(sql, (err, results) => {
if (err) return res.status(500).json(err);
return res.json(results);
});
});
app.listen(port, () => {
console.log(`서버가 ${port}번 포트에서 실행 중입니다.`);
});
<aside> 💡
node server.js 입력.http://localhost:4000/api/posts를 입력해 보세요.
</aside>