글은, 확실히 바로바로 써야한다. 지난주에 약간 여유있다고 느꼈는데도 결국 밀려서 이번주에 2주치 회고를 하고 있다. 이건 카테고리를 ILT ( leard for two weeks !! 영어맞나? ㅎㅎ ) 로 바꿔야 될 지경. 반성하고 좀 더 자주 포스팅을 하자.
2주 동안 무엇을 했는가.
16주차 - sql 및 mysql 공부
mysql 을 설치하고, sql문법들을 학습했다. 처음에는 또 언어를?! 이라는 느낌 때문에 다소 어려웠지만, 생각보다 함수도 별로 없고 해서 나중에는 그냥 엑셀 느낌이었다. 데이터 뽑아내는 방식도 단순해서 페어프로그래밍 시간내에 90% 해결.
오피스 아워때 설치가 짜증(?)난다는 얘기를 해주셨는데, 약간 짜증나기는 한다. 한번에 설치가 안되고, 비밀번호 설정하는 부분에서 약간 막혀서 에러메세지 구글링을 통해 해결했다. 어떻게 해결했는지 기억 안날 정도로 간단하게 해결했고, 관련된 블로그글과 스택오버플로우 질문들도 많았던거 보니 범용적 에러(?)로 추정된다.
17주차 - mysql로 클라이언트-서버-데이터베이스 연결
1step
일단 과제(=스프린트)의 요구사항 파악. 클라이언트와 서버와 데이터베이스를 연결하라.
셋의 구조를 파악하기위해 기본 주어진 코드들을 확인하다가 일단 서버와 데이터베이스를 연결해야겠다 싶어서 공부시작.
nodejs와 데이터베이스 연결 방법을 공부.
https://www.w3schools.com/nodejs/nodejs_mysql.asp
CREATE DATABASE하고, CREATE TABLE을 동시에 사용할 수 없는지 궁금하다. 일반적인 질문이 아닌지 구글링을 해도 나오지 않고, 관련 질문자체가 없어서 일단은 패스. 헬프데스크에 문의해볼 생각이다.
관련 구글링을 하던중 nodejs에 sql을 연결하는 법을 설명하는 생활코딩 강의를 찾았다.
https://opentutorials.org/course/3347
두가지 방법을 사용해서 스프린트와는 별도로, nodejs와 mysql을 vscode에서 연결해보고 오전 공부시간 종료.
2step
오후부터는 페어프로그래밍을 시작했다.
일단 sql schema 디자인 부터 시작. 여기서 또 이해안가는 부분이 단순히 과제라서 그런지 몰라도,
왜 user하고 messages를 테이블을 분리해야하는지 이유가 아해가 가지 않았다. 아마도 초간단 클라이언트라 복잡하기 않기 때문에 연습용으로 분리시키라고 요구조건을 만든것 같긴하다만.
이 사이트에서 다양한 sql schema를 디자인 할 수 있다.
https://dbdiagram.io/d/5f41f05a7b2e2f40e9de6c39
1과 *을 관게를 나타내는데, 1대 다(한자로 많을다) 관계이다. 유저는 여러개의 메세지를 쓸 수 있지만, 메세지는 유저 한명만 가지니까!
vscode의 구조는 다음과 같았는데, 매우 복잡해서 중간중간 길을 잃지 않는게 굉장히 어려웠다.
라우터의 역할, 그리고 컨트롤러, 모델의 역할을 이해하는게 시간이 오래걸렸다. 또한 이해하고 나서도, 코드로 많이 고민했다.
특히 node.js와 mysql을 연결하는 방법을 다루는 대부분의 기초 강좌에서 컨트롤러로 파일을 분리시켜 사용하고 있지 않았기 때문에 이부분을 해결하기가 굉장히 어려웠다.
const con = mysql.createConnection({
host: host,
user: "root",
password : password,
database : "chat"
})
db.query(sql, queryArgs, function(err, result){
if(err) throw err;
res.end(result);
})
----> 대부분의 예제에서는 이렇게 바로 응답을 쿼리안쪽에서 던져버린다.
----> query() method 안쪽에 있는걸 대체 컨트롤러로 어떻게 옮길까?
정답은 promise였다.
promise는 예전부터 공부했지만 완벽하게 이해를 못하고 있었는데, 이번 과제를 하면서 보다 잘 이해하게 되었다. promise를 하면 리턴 값을 통해서 객체를 생성해서 결과값을 그 다음 함수에 콜백으로 넣어줄 수 있다.
let promise = new Promise ((resolve,reject)=>{
resolve("hi")
})
---> 이코드를 실행시키면, 다음과 값은 프로미스를 반환한다.
즉 프로미스를 통해서, then을 쓸 수 있다는 점이 포인트이다. 프로미스에 담아서 컨트롤러에게 넘겨준 다음에, 컨트롤러에서는 받아서 클라이언트에 res.end를 날려주는 것!
3step
모델구현시 쿼리문을 짤때 처음에는 일일히 수기로 넣어주었다.
post: function ( req ) {
return new Promise((resolve,reject) =>{
***********************************************
let sql = `INSERT INTO
messages (username, text, roomname)
values ( req.username, req.text, req.roomname ) `
--> 한땀한땀 넣기.
***********************************************
db.query(sql, queryArgs, function(err, result){
if(err) throw err;
resolve(result);
})
})
}
그러나 테스트가 통과가 안되서 기존 선배들의 코드(?) 확인 및 구글링 과정중 sql의 ???문법을 알게되었다.
이 문법에 관해서는, 정말, 엄청, 찾기 힘들었다. 검색어를 한글로 했다면 좀 더 빠르게 찾았을 것 같지만. 이부분은 페어분이 레퍼런스를 찾았고! 그래서 해결 할 수 있었다.
레퍼런스.
https://github.com/mysqljs/mysql#performing-queries
2번째 방식 + 구조분해할당을 통해서 코드를 간소화 할 수 있었다.
post: function ( { username, text, roomname } ) {
return new Promise((resolve,reject) =>{
let sql = `INSERT INTO
messages (username, text, roomname)
values ( ?, ?, ? ) `
var queryArgs = [ username, text, roomname ];
db.query(sql, queryArgs, function(err, result){
if(err) throw err;
resolve(result);
})
})
}
추가 보완점이 있다면 환경변수를 설정하는 부분이다. 놀랍게도, 터미널이 꺼질때 마다! 환경변수가 리셋되어, Acess denied err를 리턴했다. 이부분은 dotenv와 .env파일 설정을 통해 해결할 수 있을 것 같은데, 일단 토이알고리즘 진도가 밀려서 먼저 따라잡은 후 복습할 예정이다.
잘 작동하는데 테스트 케이스 통과를 못하길래 짜증나 있었는데, 서버와 테스트케이스를 2개의 터미널에서 동시에 돌려야 했는데 서버를 끈 후에 테케를 돌리니 통과가 안되는 것이었다. 한땀한땀 코드를 지워가며.. 약 한시간 반이상 헤메었으나 urclass 요구조건에 해당 내용이 있었다.. 역시 막히면 문제를 다시 봐야한다.
마지막으로, 동기분중 잘하는 분이 있는데 그분은 함께 작업했다가도 코드를 지워서 혼자 다시 해보시는것 같다! 라는 얘기를 듣고 충격. 하기사, 배운 직후에 다시 처음부터 풀어보면 기억에 훨씬 오래 남을 텐데. 나는 진도 나가기 바빠서 그렇게까지 못해봤다.
그래도 어쨌든 우선순위는 학습. 하지만 30대에 이 길로 접어든 만큼, 방향을 못정하고 흐트러질때가 아닌것 확실하다. 결정했으니,
이제 달리자. 시간은 빛의 속도로 흐르니 40대도 될텐데, 그때도 진로를 고민하고 있고 싶지 않다.
++) 알고리즘 문제인 toy 24,25,26번을 풀었다. 체크인이라고 선배와의 상담(?)같은 시간이 있었는데, 이때 본인은 코스 수료시에 매일 누적으로 토이를 풀었다는 얘기를 듣고 또 한번 충격. 누적으로까지는 못해도, 기출문제 돌리듯 여러번 돌려야겠다. 토이 알고리즘에 대한 리뷰는 2회차때 해야겠다.
17주차- 공태기 극복을 위한 딴짓들.
1. 스터디
공태기(?) 극복 방법의 일환으로 개발스터디에 참가하게 되었다. 확실히, 오전에 나가서 공부하니까 그 시간에 공부를 하게 되어서 좋았다. 물론 혼자서 불타오를 때보다는 효율이 떨어진다. 왔다갔다 하는 시간들이 소요되니까.
하지만 장기간에 뚜렷한 목적없이 주어지는 학습들을 반복적으로 해나가야하는 지금 시점에서는 꽤 리프레쉬 되었다. 다음주 모임이 또 기다려질 정도. 현업분들이랑 같이 한다는 것도 좋다. 모각코라 딱히 뭔가는 없지만 시작할때와 끝날때 서로 리뷰하는데 신선하고 재밌었다.
2. 유튜브 동기부여 영상보기
EO!! 영상 너무 좋다. 보면 아주 열심히 해야겠다는 의지가 불타오른다. 그리고 코드스테이츠 공식 블로그에 제로초님의 개발자라면 블로그를 하자 라는 컨텐츠가 있었는데, 보고서 블로그를 꾸준히 해야할 이유가 한개 더 생겼다.
포스팅을 하는데 꽤나 시간이 소요되기 때문에 WIL로 잡은 건데, 생각보다 한주간 공부했던 레퍼런스들이 방대해서 글이 자꾸 길어진다. 이 포스팅도 되짚어 가는 과정은 좋았지만 그림까지 그리느라 2시간 정도 걸렸다. 매일 공부에 쏟을 수 있는시간이 세시간인데, 그 중 2시간이라면 너무나도 긴시간.
한주에 포스팅 한개. 이걸 목표로 해야겠다!
'WIL' 카테고리의 다른 글
이머시브 12~15 주차(파트타임) (0) | 2020.08.08 |
---|---|
이머시브 10,11주차(파트타임) (0) | 2020.07.13 |
이머시브 8,9 주차 (파트타임) (0) | 2020.07.02 |
이머시브 7주차 (파트타임) 및 이전 글 (0) | 2020.06.12 |
댓글