[POSCO x Codingon] MVC, MySQL | 웹개발자 풀스택 과정 12기 7주차 회고 2
hyunh4042024. 4. 11. 10:58
728x90
7주차 회고
7주차 두번째 회고로 작성할 내용은 MVC와 MySQL을 연결하는 과정이다. MVC 구조를 이해하는 과정은 어렵지 않았지만 데이터베이스와 연결하면서 복잡한 부분이 생겨 섬세하게 기록해두고 계속해서 복습하려고 한다. MVC 구조를 생성해보고 MySQL과 연결하는 방법을 연습해볼 수 있었다.
1. MVC
: Model View Controller
=> Model = 데이터를 처리하는 부분 / View = UI관련 처리(사용자에게 보여짐) / Controller = View와 Model 연결
장점 : 패턴을 구분해 개발, 유지보수 용이, 유연성, 확장성 높음, 협업에 용이
단점 : 완벽한 의존성 분리 어려움, 설계단계 복잡 및 시간 오래 걸림, 클래스가 많아짐
대략적으로 폴더의 기능에 대해 설명하자면,
기본적인 폴더 구조에서 model 폴더에는 사용할 데이터를 객체나 배열 형태로 저장했다.
다음으로 views폴더에 렌더링할 페이지를 만들어 주었고, 페이지를 렌더링하고 model폴더에 있는 데이터를 받아오고 다시 데이터를 내보내는 기능은 controller 폴더에 정의했다.
마지막으로 만들어둔 모든 폴더의 경로를 연결해주는 routes폴더에 경로를 지정한 후 app.js에서 router만 불러와 파일을 실행했다.
MVC 구조를 연습하고 이전에 실습했었던 axios post 로그인 구조를 MVC 구조로 바꾸는 과제가 주어졌다.
기본적으로 MVC 구조는 어렵지 않게 완성할 수 있었으나, axios post 요청에 데이터가 제대로 전달되지 않았다.
이부분은 계속해서 고민해서 수정해봐야할 것 같다.
꼭 성공해서 과제를 완료하고 싶다...!!!🔥🔥
일단 기본적인 MVC 폴더 구조는 이렇게 만들어 주었고, model 폴더에 로그인에 사용할 사용자 정보 하나를 저장해주었다.
controller 폴더에서 model의 데이터를 받고 다시 데이터를 전달하는 기능과 페이지 렌더링 기능을 정의해줬으며, routes 폴더를 이용해서 폴더와 파일 경로를 연결해주었다.
마지막으로 app.js에 router를 불러와 페이지를 실행시켰다.
이렇게 MVC 구조를 만드는 것은 어렵지 않았으나, views 폴더에 로그인 페이지를 구현하는 과정에서 axios post 요청에 데이터가 정상적으로 전달되지 않는 것을 발견했다.
이부분은 오류를 찾아서 다른 방법을 시도해 꼭 해결해보려한다.
2. MVC - MySQL 연결
: MVC 구조를 활용해 데이터를 MySQL과 연결해 저장된 데이터를 활용하고, 데이터베이스에 추가 및 삭제가 가능하도록 연결하는 실습을 진행했다.
=> 데이터 베이스를 연결해 방명록을 만드는 실습을 진행했다.
먼저 mysql을 연결해주기 위해 mysql2라는 모듈을 설치해줬다.
=> npm install mysql2
model 폴더에 js파일을 생성해 데이터베이스를 연결했다.
constmysql=require('mysql2');
constconn=mysql.createConnection({
host:'localhost',
user:'root',
password:'1234',
database:'kdt'
})
데이터베이스를 연결해준 다음 페이지가 렌더링됐을 때 화면에 저장된 데이터가 보여지고 버튼을 누르면 데이터 베이스에 데이터가 추가 및 삭제, 수정 등이 가능하도록 퀴리를 이용해 함수를 정의했다.
정의한 후 다른 파일에서도 이를 사용할 수 있게끔 exports까지 정의해줬다.
exports.allVisitorsList= (cb)=>{
conn.query('select * from visitor', (err,rows)=>{
console.log('select *');
cb(rows)
})
}
// 데이터 추가
exports.postVisitor= (data, cb)=>{
constsql='insert into visitor (name,comment) values (?,?)'
constvalues= [data.name, data.comment]
conn.query(sql, values, (err,rows)=>{
cb(rows.insertId)
})
}
// 1명의 방문자 보기
exports.getShowAvisitor= (id, cb)=>{
constsql='SELECT * FROM kdt.visitor where id=?';
conn.query(sql, id, (err, rows) => {
if (err) throwerr;
cb(rows[0]);
})
}
// 수정 버튼 > 변경
exports.patchContent= (data, cb)=>{
constsql="UPDATE visitor SET name =? , comment =? WHERE id = ?";
constvalues=[data.name, data.comment, data.id]
conn.query(sql, values, (err, rows)=>{
cb(rows)
})
}
// 삭제 버튼 > 삭제
exports.deletedb= (id, cb)=>{
constsql="delete from visitor WHERE id = ?";
conn.query(sql, id, (err, rows)=>{
cb(rows)
})
}
다음으로 controller에 model의 데이터를 받아서 페이지를 렌더링하고 다시 데이터를 내보내는 함수를 정의했다.