어제 리뷰를 못해서 오늘 리뷰를 하려고 한다.
20.08.30 토요일
페어프로그래밍 하는날.
sequelize cli세팅까지는 금방 완료.
cli 설치: https://sequelize.org/master/manual/migrations.html
Manual | Sequelize
Migrations Just like you use version control systems such as Git to manage changes in your source code, you can use migrations to keep track of changes to the database. With migrations you can transfer your existing database into another state and vice ver
sequelize.org
마이그레이션 개념을 잡는데 좀 오래걸렸다. 지금도 궁금한 점이 마이그래이션이 커밋처럼 기록하는 것이라는 건 알곘는데, 매번 undo를 해주었다가 다시 migrate를 해주어야하나..? 여러개의 상태값을 저장하되 내가 migrate한 상태값만 데이터 베이스에 반영하는 방식인지 궁금하다. migrate 할때마다 업데이트 될 것이라고 생각해서, 좀 헤맸다. 가이드를 처음부터 보다가 + 블로그를 보고 + 그다음 마이그레이션 공식문서를 봐서 더 헤맨것 같다. 처음부터 마이그레이션 문서를 봤으면 덜 헤맸을 텐데. 페어분이 해보자고 하신대로 먼저 해보고 나서 했으면 더 빨리 해결했을것 같긴하다.
더불어 모델생성이 되었는데 테스트 케이스를 통과하지 못해 2시간 넘게 잡아먹었는데, 테이블명 문제였다.. HAHAHAH!!!
테스트케이스를 무한 콘솔로깅한 결과 알아낼 수 있었다.
마이그레이션 하는데만 2시 부터.. 8시까지 ... 걸렸다. 이렇게 쓸데없이 시간을 잡아 먹고 나니 컨트롤러 구현은 시간이 촉박. 대략적인 구조 파악정도 하다가 끝나버렸다.
20.08.31 일요일
공부시간: 10시부터 1시까지 약 3시간.
어제 대략 파악한 구조를 기반으로 controller구현. 헷갈리는 부분이 많아서 레퍼런스 코드를 참조했다.
구조분해할당 개념이 헷갈려서 연습 및 적용을 해보고 finOrCreate 가 sequelize에서 제공하는 메소드라는 점을 알아냈다.
.findOrCreate(
//findOrCreate 는 sequlize에 존재하는 메소드.
// DB에 특정 요소가 존재하는지 검사합니다. 만약 존재한다면 해당하는 인스턴스를 반환하고, 그렇지 않으면 새로 생성합니다.
//https://velog.io/@cadenzah/sequelize-document-1
//컨트롤러에서 모델 메소드를 사용..?
post method를 구현하던중, 레퍼런스에는 utils를 사용하고 있고 문제에서도 타이틀 등 sql의 나머지 부분 값을 얻기 위해서 해당 코드를 참조하라고 되어 있었다. 이 utils 코드 분석하는데 2시간 가량 걸린것 같다.
const request = require('request');
// controller로 부터 url을 받아온다음 콜백함수를 받는다.
// request(url,f)
// console.log("오이오잉" , request)을 찍어봤을때 (utils.js)
// request는 함수이다. 다양한 메소드들이 존재하는 것 같다.
// 콘솔창에 url이라는 키값은 없길래
// console.log("url무엇",request(url))을 찍어봄.
// https://opentutorials.org/module/3549/21046
// 생활코딩 강의를 보니, 생각났다. request에 url값이 있었다.
// 아 그런데 request.url이 아니라.. request(url).. xjosfhaojlk!23#..후우
// https://senticoding.tistory.com/38 --> 구글링 끝에, nodejs 모듈 require라는걸 알아냄.
// https://www.npmjs.com/package/request --> 가이드도 찾았다.
// 하지만 더 공부가 필요할듯. 형식에 대한 부분은 이해되었다.
// body로 변수명을 바꿔주어도 정상동작한다.
const request = require('request');
const rValidUrl = /^(?!mailto:)(?:(?:https?|ftp):\/\/)?(?:\S+(?::\S*)?@)?(?:(?:(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[0-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]+-?)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})))|localhost)(?::\d{2,5})?(?:\/[^\s]*)?$/i;
exports.getUrlTitle = (url, cb) => {
request(url, function (err, res, body) {
if (err) {
console.log('Error reading url heading: ', err);
return cb(err);
} else {
const tag = /<title>(.*)<\/title>/;
const match = body.match(tag);
console.log(body)
const title = match ? match[1] : url;
return cb(err, title);
}
});
};
exports.isValidUrl = url => {
return url.match(rValidUrl);
};
결국 이 함수가 컨트롤러로 부터 url을 받아와서, html문서에서 타이틀 부분을 찾아서 타이틀 값을 리턴해 주는 함수라는 것을 이해했다.
내일은 controller파트에서 findOrCreate부분을 좀 더 살펴봐야 될 것 같다.
댓글