Dec 7-17, 2021

Sung Hyun Hong (Jenny)·2022년 1월 25일
0

Dec 7th, Idea conference

어느덧 실전 프로젝트를 마감하고, 또다시 선택하는 순간이 왔다. 알고리즘을 할 것인가 프로젝트를 할 것인가 고민이 많았지만, 프로젝트를 선택하는 것이 오히려 맞다는 생각이 들어서 선택하게 되었고, 부족했던 부분을 다시 하자는 마음으로 선택하게 되었다. 내 선택에 대한 후회는 사실 없다 하지만, 이 분야에 있어서 공부해야 할 것은 늘 있다보니, 속도를 따라가 주지 못한 것에 대해서 내 자신을 더 밀어붙어야 한다고 생각한다. 새봄님과 민갑님, 유빈님과 정민님, 모두 좋은 팀원들인 만큼 잘해내고 싶다. 이번 주제는 고민을 해결하지 못한 사람들을 위해 만들어진 웹이다. 속마음을 터놓지 못할 때가 많은데, 익명으로 고민해결을 할 수 있는 거라 잘 만들어진 기획이라고 생각한다. 주제선정만 하는데 있어서 4시간정도 회의를 했지만, 모두가 지치지 않고, 최선을 다해주어서 팀원들께 감사했다.

Dec 8th, wireframe conference

이번에 백엔드에서도 아이디어 회의 및 와이어 프레임에 회의를 같이 진행했다. 역시나 프론트 따로 백엔드 따로가 아닌 서로 진행했기에, 다투는 문제는 없었다. 그동안 백엔드에서 api 수정하고, 고치고 2번의 작업을 거쳐 완료했다. 기능 파트에서는 로그인 구현과 고민 파트를 맡기로 했지만, 로그인 파트를 하고 싶은 마음이 새로운 파트를 도전하는 만큼 설레었다.

Dec 9-10th, Disappointment

이번에 내가 맡은 파트는 사실 소셜 로그인 기능과 고민 파트였다. 일단 웹에서 기본으로 되어야 하는 소셜 로그인 파트를 하기 위해 열심히 구글링도 해보고 node교과서도 찾아보기도 해서 코드부분은 완성되었다 생각했지만, 무슨 문제였는지 잘 작동되지 않았다. 그래서 그 다음날까지 밤을 새어서라도, 최선을 다해보았다. 하지만, 터미널 창에 남겨진건, 데이터베이스 전송 완료 라면서, 카카오 소셜 로그인과 연결되지 않아, 뒤로 미룬채, 고민 CRUD 작업에 들어갔다. 그리고 그 파트를 맡지 않았던 정민님에게 SOS를 청했고, 구글 소셜 로그인에 그 다음날, 성공했다. 시간을 들였던만큼 정말 해보고 싶었던 기능이었지만, 되지 않아서 내 자신에게 실망스러웠고, 아직도 배울점이 많다는 것을 느끼고, 조금 더 열심히 하기로 했다.

Dec 11th, 고민 게시판 CRUD 작업

오늘은 게시판 작업에 들어갔다. 초기에 노드를 시작했을때, 게시판 작업 시도해보고 오랫만에 해보는 것 같은데, 그때와 지금과 비교해 보면, CRUD를 구사할 수 있는 실력은 어느정도 되었다. 게시글 작성파트와 조회, 그리고 app.js 까지 최종적으로 기능은 성공했지만, 문제는 Cannot find module 'ejs' 라는 에러가 계속 떴고, 이 에러가 떴을때, 흔히 해 볼수 있는 ejs 파일을 설치했다. npm install ejs —save 라는 방식으로 그리고 나서 npm -i를 하고 진행했지만 여전히 같은 에러가 났다. package.json 파일에 ejs 파일은 잘 설치 되어있는데, 왜 문제일지 생각하고, 다시 app.js를 살펴보았다. views에 ejs파일이 없는데, app.set("view engine", "html")이라는 line이 없어서 생긴 문제임을 깨달아서 고쳐주었고, 그걸 ejs로 나타내는 app.set('views', __dirname + '/views');
app.set('view engine', 'ejs'); 두 줄 처리 덕분에 문제를 해결할 수 있었다.

Dec 13th, 고민 게시글 좋아요 기능 및 댓글 작업, 그리고 멘토링

오늘은 게시판 좋아요와 취소 및 댓글 부분을 진행했다. 그 기능을 하는데 있어서는 문제가 없었지만, 사실 오늘 멘토링이 있었기 때문에, 걱정이 조금 되었다. 그 이유는 소셜로그인을 끝내지 못한 내 책임을 다하지 못했기 때문이다. 그 부분에 대해 멘토님이 어떤 말씀을 해주실지 스스로 고민이 좀 있었고, 궁금했다. 멘토링 시간에 민영튜터님이 로그인은 추후에 개인 작업을 해보고, tdd, Mock 작업에 대해 시도해 보라고 조언을 해주셨다. 또한 프로그램을 작성할 때, 변수명이나 함수명은 중복된 거가 없도록 해야 한다고 팁을 주셨다. 추상화와 모듈화에 대해서는 응집도와 결합도의 차이니까 그 부분에 대해 공부해 보라고 링크를 주셨다. 면접을 대비해서 Network(ex. IP, TCP, 7계층구조) 에 대해 공부해보라고 조언해 주셨다. 저녁 시간엔 항해 99 협력사에서 이큐브랩 회사 소개 및 채용 세션이 있었는데, 그 회사가 폐기물 처리하는 점에 있어서 개인적으로 환경에 관심있었던 만큼 흥미가 되었고, 열심히 노트정리하면서 들었다. 어떠한 스펙 혹은 기술이 없어도 되니까 지원은 가능했지만, 내가 지원할 수 없는 이유는 코딩테스트 때문에 망설였다는 점이다. 그보다 더 중요한 건, 인터뷰 면접에서 가장 중요한 게, 어떠한 질문이 주어졌을때, 제대로 대답할 수 있는가였다. 거기서 내가 느낀 건, 하나를알아도 제대로 알아야 한다는 점을 느꼈다. 내가 실수없이 그 부분에 대해서는 막힘없이 서술해서 풀어낼 수 있어야 한다.

실전 프로젝트 기간에 충분히 개념에 대해 공부할 수 있는 기간도 있었지만, mysql, sequelize에 적응하는데도 시간이 걸렸고, 프론트와 내내 회의하면서 진행했기 때문에, 여유의 시간이 부족했다. 하지만 마지막 프로젝트가 끝나고 나면, 그때는 알고리즘을 차곡차곡 공부해서, 개념보다 왜 사용하려고 했는지에 대해 설명할 수 있을 만큼 공부하고, 정리해야 겠다고 느꼈다. 더불어, 추상화에 대한 단어에 대해 여러번 설명하신 만큼, abstract 에 대해 정리하고 머릿속에 생각해 두어야겠다.

Dec 14th glass mental

오늘은 내내 작업을 하는데 아무것도 집중이 되질 않았다. 소셜로그인을 하지 못한 상실감이 커서일까 아니면 내가 맡은 파트를 제대로 된 시퀄라이즈 방법을 활용을 못해서일까 둘 중에 하나는 답이 있을 거 같은데, 잘 모르겠다. 지난 번에 배웠던 것들이 하나 둘씩 리셋 되고, 구글링을 해도 내가 원하는 대로 찾을 수가 없어서 답답했다. 밤에는 내가 맡은 기능 중에서 포스트맨을 돌려가며 기능을 구현해 보았지만, 해결이 되지 않아 팀 동료에게 요청을 했고, 몰랐던 부분에 대해서 배울 수 있어서 좋았다. 다했다고 생각해서 main 브랜치로 넘겼는데, 조 팀원들과 확인해보니, 원하고자 하는 데이터를 제대로 불러올 수 없어서 새벽4시까지 작업했고, 결국 성공을 못한 채 잠이 들었다.

멘탈이 마치 유리멘탈처럼, 깨질 것 처럼 아무것도 생각이 나질 않았고, 노력한 결과도 기억이 나지 않아 힘이 들었다. 프로젝트 기간 얼마 남지 않았는데, 멘탈을 붙잡도록 더 노력해야 겠다.

Dec 15th, mid-배포

중간 배포가 오후 4시에 있어서, 서둘러 내가 맡은 기능을 완성하려고 했지만, 카운트 함수 적용 및 메인페이지 조회 파트가 덜 마무리되었다. 지난 토요일에 멘토링 했을 당시, 모든 팀원들의 멘탈이 버티기 힘들었던 만큼, 이번에는 기능에 초점을 맞추고 열심히작업들을 해주었다. 프론트에서는 어느정도의 view가 완성되었고, 백엔드에서도 기능적인 부분에 대해 완성이 되었다. 이번 중간 배포 때, 피드백을 받을 당시, 프론트는 에러바운더리 처리에 신경써달라고 했고, 백엔드는 가능하면 테스트코드를 작성해 보라고 했지만, 나로써는 기능이 덜 완성되었기 때문에, 마지막날까지 기능에 조금 더 초점을 맞추기로 했다. 17일 마감일을 앞두고, 과연 끝낼 수 있을까하는 의문을 품고, 오늘도 열심히 작업하기로 스스로에게 약속했다.

프로그래밍을 하는 도중 다음과 같은 에러가 발생했다.

  1. Cannot add or update a child row: a foreign key constraint fails (talk-to-me.boardLikes, CONSTRAINT boardLikes_ibfk_2 FOREIGN KEY (boardId) REFERENCES boards (boardId) ON DELETE CASCADE ON UPDATE CASCADE)

위와 같은 문제는 모델에 참조하는 데이터가 모델에 추가하지 않았을 때 발생한 것이다. 테이블의 컬럼은 참조하는 것과 일치해야 문제가 발생하지 않는다. 외래키로 연결된 값을 동일하게 해주어야 한다.

  1. error: src refspec master does not match any

    위와 같은 문제는 처음 접하는 거라서, 상당히 당황스러웠던 에러였다. 하지만, 손쉽게 내가 팀프로젝트의 공동작업에서 fork를 뜬 깃헙으로부터 다시 clone해서 푸쉬해서 해결했지만, 그래도 reject 당한다면, 권한 여부를 받아 문제를 해결하는 방법이 있다.

  2. error: failed to push some refs to 'https://github.com/repo~'

위와 같은 문제에서 https://junheejang.tistory.com/221 를 보고 따라했다가 모든 데이터가 초기의 상태로 돌아가는 경험을 해서, 해당하는 위의 tistory 주소로는 해결되지 않는다. 그래서 vscode에서 다시 clone 받고 원상태로 돌려놓음으로써 문제를 해결했다.

  1. [NodeJS] cannot set headers after they are sent to the client 에러

위와 같은 문제는 콜백함수를 두번 불러서 사용했을 경우 발생하는 문제이거나, body에서 전송한 후에 발생하는 에러이다. 따라서, 이 문제를 해결하기 위해, console.log() 방식을 이용하여 중복처리가 된 부분이 있는지 확인해 봄으로써 해결하였다.

위와 같은 문제는 1:N 관계를 맺을때 발생하는 문제이다. 내가 맡으려고 하는 기능에서 보드 게시판과 댓글 테이블을 연결해주려다 보니 발생한 문제임을 알 수 있었고, belongsTo 방식을 설정하여 문제를 해결했다.

https://jamong-icetea.tistory.com/265

멘토님으로부터 공부했을 만한 블로그 정리

[소프트웨어공학] 설계 1 - 추상화, 모듈화, 정보은닉, 응집력, 결합도

https://ahn3330.tistory.com/111

로우쿼리의 짤막 정리

1. OUTER JOIN

INNER JOIN이 JOIN 조건에 부합하는 행만 JOIN이 발생하는 것이라면,

OUTER JOIN은 조건에 부합하지 않는 행까지도 포함시켜 결합하는 것을 의미한다.

자주는 아니지만, 가끔 유용하게 사용될 수 있으므로 꼭 알아둘 필요는 있다.

기본 구문은 아래와 같다.

SELECT <열 목록>
FROM <첫번째 테이블 (LEFT 테이블)>
<LEFT | RIGHT | FULL> OUTER JOIN <두번째 테이블 (RIGHT 테이블)>
ON <조인될 조건>
[WHERE 검색 조건]

INNER JOIN과 유사해 보이지만, LEFT, RIGHT, FULL의 새로운 키워드들이 보인다.

2. LEFT OUTER JOIN

LEFT OUTER JOIN은 왼쪽 테이블의 것은 조건에 부합하지 않더라도 모두 결합되어야 한다는 의미이다.

즉, FROM 첫번째 테이블 LEFT OUTER JOIN 두번째 테이블이라면, 첫번째 테이블의 것은 모두 출력되어야 한다.

예제를 살펴 보자.

    • 전체 회원의 구매기록을 살펴보자.- 단, 구매 기록이 없는 회원도 출력되어야 한다. - LEFT OUTER JOIN이므로, UserTable은 모두 출력된다 SELECT U.ID, Name, GoodName, AddrFROM UserTable U -- LEFT Table  LEFT OUTER JOIN BuyTable B -- RIGHT Table ON U.ID = B.IDORDER BY U.ID

INNER JOIN시 INNER 키워드를 생략 가능했던 것처럼,

LEFT OUTER JOIN 역시 LEFT JOIN만으로 작성해도 무방하다.

profile
오늘 하루도 열심히!

0개의 댓글