RAILEND

    2021-12-18 TIL

    Facts (사실, 객관) 엘리스 SW트랙 1차 프로젝트 진행 중 API 로직 구현 Feelings (느낌, 주관) mongoDB 특정 컬렉션의 데이터를 바꾸기 위해선 관계(참조)하고 있는 다른 컬렉션의 필드(?)도 함께 수정해줘야 한다. 일일이 대상을 찾아 바꾸는 게 과연 옳은 방식일지 의구심이 들었다. 다른 방법을 고민하던 차에, 함께 백엔드를 담당하고 있는 동료님이 SQL에선 cascade라는 개념이 있다고 알려주셨다. mongoDB cascade라고 검색하니 mongoose middleware 작성을 통해 cascade와 유사한(?) 작업을 할 수 있음을 알게 되었다. 다만 스키마에서 미들웨어를 정의하는 부분에서 다른 모델을 참조하기 위해 import하는 부분과 미들웨어의 내부 로직을 좀 더 고민..

    2021-12-17 TIL

    Facts (사실, 객관) 엘리스 SW트랙 1차 프로젝트 진행 중 댓글 및 대댓글 API 기본 로직 구현 Feelings (느낌, 주관) 더 좋은 프로젝트 설계를 위한 다양한 주제로 대화가 오고 갔던 하루였다. DB를 다루는 방법, 댓글 수정/삭제 요청에 관한 로직, CSR과 SSR 등 여러 흥미로운 이야기들을 나누면서 어떤 선택이 좋을지 고민해 볼 수 있는 시간이었다. 내 자신이 부족한 점을 파악하기에 좋았고 약간 아리송했던 내용이 좀 더 선명해지는 것을 느꼈다. Findings (배운 점) 무언가를 말 하기 위해선 좀 더 잘 정리해서 준비해야 한다. Things to do (해야 할 것들) 알고리즘 한 문제라도 풀기 Affirmation(자기 선언) 코드를 좀 더 살펴보고 모르는 것이 없게 하자.

    2021-12-16 TIL

    Facts (사실, 객관) 엘리스 SW엔지니어 트랙 - 팀 프로젝트 진행 게시글, 댓글 관련 API 로직 작성 Feelings (느낌, 주관) 백엔드 코치님과 첫 미팅을 진행했다. 프로젝트 규모에 따라 어떤 디자인 패턴을 가져가야 하는지 고민해 볼만한 단서를 제공해 주셨다. mongodb나 express와 같은 특정 tool에 의존하지 않도록 고려한 설계도 있지만, 프로젝트 규모에 걸맞지 않은 과한 설계로 오버 프로그래밍을 하는 것도 좋지 않을 수 있다고 조언해주셨다. 댓글 생성 로직을 구현하고 테스트하는 과정에서, 댓글 컬렉션에서 댓글을 삭제하더라도 댓글을 참조하는 게시글 데이터에는 여전히 댓글이 남아있는 것을 확인했다. 삭제 요청이 들어오면 두 컬렉션에서 모두 삭제될 수 있도록 로직을 구현했다. 좀 ..

    2021-12-15 TIL

    Facts (사실, 객관) 엘리스 SW엔지니어 트랙 - 팀 프로젝트 진행 MongoDB Atlas 연동 및 라우터 로직 구현 Feelings (느낌, 주관) 오늘 MongoDB 클라우드에 연결하는 과정에서 발생한 에러 원인을 찾지 못해서 오랜 시간을 소모했다. Atlas에 각각의 컬렉션이 생성되는 것까지는 구현이 되었는데, mongoose 메서드를 사용하면 undefined 오류가 발생했다. 나중에 알고 보니 라우터 로직에서 유저 모델이 아닌 스키마를 불러오도록 경로 설정을 잘못해서 생긴 문제였다. 다소 허탈하긴 했지만 CRUD가 잘 되는 것을 확인하고 나니 조금은 뿌듯했다. 구현한 API의 CRUD를 테스트하면서 postman보다 httpie가 더 편리하다고 느꼈다. 터미널에서 한 줄의 명령어로 다양한..

    2021-12-14 TIL

    Facts (사실, 객관) 엘리스 SW엔지니어 트랙 팀 프로젝트 시작 기초 개발환경 설정 및 서버, DB 코드 작성 Feelings (느낌, 주관) 엘리스에서 첫 팀 프로젝트를 진행하게 되었다. 프로젝트 기간만이라도 기록을 남기면 의미가 있을 듯하여, 간만에 회고를 꾸준히 작성해 보려 한다. 오전에 프로젝트에 대한 간단한 안내와 함께 애자일 방법론에 대한 강의를 들었다. 작은 목표를 짧은 주기로 체크하며 프로젝트를 관리하는 스크럼, 1~4주 정도의 기간 동안 집중하여 결과를 만들어 내고 리뷰와 함께 회고를 진행하는 스프린트 등 대표적인 애자일 방법론에 대해 알게 되었다. 최근 읽고 있는 김창준님의 책 '함께 자라기'에서는 애자일에 대해 이렇게 소개하기도 한다. 애자일은 불확실성이 높은 프로젝트에 더 적합..

    Node.js - Express로 서버 만들기

    Express 프레임워크를 써서 서버를 만들어 보자. 어플리케이션 익스프레스 인스턴스를 어플리케이션이라 한다 서버에 필요한 기능인 미들웨어를 어플리케이션에 추가한다 라우팅 설정을 할 수 있다 서버를 요청 대기 상태로 만들수 있다 익스프레스 인스턴스(= 어플리케이션 = 익스프레스 객체 = 서버 객체) 만들기 const express = require('express'); const app = express(); app.listen(3000, function(){ console.log('Server is running'); }) 미들웨어 미들웨어는 함수들의 연속이다 미들웨어로 어플리케이션에 기능을 추가할 수 있다 logger: log를 찍는 미들웨어 const express = require('express..

    Node.js - http모듈로 서버 만들기

    http 모듈로 서버 생성하기 const http = require('http'); // http 모듈 불러오기 const hostname = '127.0.0.1'; // 서버의 주소는 호스트 네임이라 한다. const port = 3000; // 서버의 여러 포트 중 3000번을 열어서 클라이언트와 통신 // http의 createServer 메서드로 서버 객체 생성 // createServer에 전달되는 콜백함수는 클라이언트가 접속했을 때 동작함 const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Hello World\n'); //..

    Node.js - 모듈/동기/비동기

    모듈 생성 모듈은 최소 한가지 이상의 기능을 갖는 코드 덩어리이다. 특정 기능을 수행하는 코드를 별도로 분리시켜 모듈로서 관리하면, 코드의 재활용성이 높아진다. nodejs에서는 파일 하나하나가 모듈이 될 수 있다. 두 수를 더해주는 모듈을 만들어 본다면, // math.js function sum (a, b){ return a+b; } module.exports = { sum: sum } math라는 모듈을 만들고 다른 곳에서 사용할 수 있도록 exports 해준다. // index.js const math = require('./math.js'); const result = math.sum(1, 2) console.log(result) require 메서드를 통해 외부 모듈을 불러올 수 있다. nod..

    코어 자바스크립트 - 클래스

    이 챕터를 읽고 난 후 다음의 질문에 답할 수 있어야 한다. 클래스와 인스턴스란 스태틱 및 인스턴스 멤버 in JS 상위 클래스의 인스턴스를 부여함으로써 상속을 할 때 발생할 수 있는 문제는 ES6 이전의 상속 ES6 클래스 상속 클래스 클래스는 계급, 집단, 집합 등으로 번역된다. 객체지향 프로그래밍에서의 클래스도 동일한 의미를 갖고 있다. 클래스는 상대적이고 추상적인 개념이다. 음식이라는 카테고리가 있다면, 그 하위 분류로는 중식, 양식, 한식 등이 있을 것이다. 여기서 음식은 상위 클래스이고 중식, 양식, 한식은 각각의 서브 클래스이다. 더 구체적으로 짜장면, 짬뽕 등과 같은 각각의 개체는 인스턴스라고 할 수 있다. 인스턴스란 특정 클래스의 속성을 지니는 구체적인 예시 또는 개체를 의미한다. 범주와..