FE - React, js
BE - node express
글올리는 방식 - 관리자 페이지에서 md파일 업로드
말이 좋아 관리자지만 그냥 숨겨놓은거임
기본 UI - mui blog templete 참고하여 변형하였음
디자인 참고링크
MySQL 사용하였고 테이블 하나만 만듬
메인페이지 3개 정도
컴포넌트는 5개 정도 만들어놨다.
src
├── components
│ ├── Footer.js
│ ├── MainContent.js <- BlogBody인데 위치 변경예정이다.
│ ├── MainContent.module.css
│ ├── OtherPost.js <- 게시글 상세 하단에 들어갈 컴포넌트
│ └── Pagination.js
├── pages
│ ├── Blog.js <- 메인화면
│ ├── BlogAdd.js <- 게시글 추가
│ ├── BlogView.js <- 게시글 상세
│ └── BlogView.module.css <- 디자인
백엔드 쪽은 열심히 공부중인 단계인 만큼 소스 코드 첨부
// 리스트 불러오기
app.get('/posts', async (req, res) => {
try {
const [rows] = await pool.query('SELECT * FROM posts ORDER BY created_at DESC');
res.json(rows);
} catch (error) {
console.error('Database Query Error:', error.message);
res.status(500).send('Server Error');
}
});
// 글 상세
app.get('/posts/:id', async (req, res) => {
const { id } = req.params;
try {
const [rows] = await pool.query('SELECT * FROM posts WHERE id = ?', [id]);
if (rows.length === 0) {
return res.status(404).send('Post not found');
}
res.json(rows[0]);
} catch (error) {
console.error('Database Query Error:', error.message);
res.status(500).send('Server Error');
}
});
// 글 업로드
app.post('/posts', async (req, res) => {
const { title, content, mainImg, tag } = req.body;
try {
const result = await pool.query(
'INSERT INTO posts (title, content, mainImg, tag) VALUES (?, ?, ?, ?)',
[title, content, mainImg, tag]
);
res.status(201).send('Post created');
} catch (error) {
console.error(error);
res.status(500).send('Server Error');
}
});
result는 아무곳에서도 안쓰이는데 필요한건지 잘모르겠다 .... 왜 선언만 하는거지..?

검색기능, 페이지네이션 기능 구현해놨고,

그냥 벨로그 짭을 만들어놨다

하단에 다른글 보러가기 개인적으로 젤 맘에든다 ....
이번글은 통쨰로 요약해둔 글이고
재밌게 만든 기능 하나하나 따로 정리해서 올려봐야겠다