☑️ What I Learn
라우팅
node.js의 Express 에서도 react처럼 app.js로 라우팅 할 수 있다.
express.Router()
각 내보내려는 파일을 모듈화 해서 exports 한 다음, app에서 require로 모듈 미들웨어를 생성하고, 모듈을 사용한다.
if 문
if 문이 너무 많을때, 논리연산자, includes 배열, 비구조화(삼항연산자) try catch 문 사용해서 생략
그런데 백엔드에서는 백엔드 구현 시에는 언제 또 복잡한 로직으로 수정될지 모르기 때문에, 가급적 if 문을 그대로 사용하는 것이 좋을것 같다.
includes() 메서드 - 배열
일련의 배열 데이터에서 특정 값이 존재하는지 여부를 확인
여러 if 문을 사용하는 대신 includes 메서드를 활용하는 예시 코드
const userInput = "apple";
// 여러 if 문을 사용한 경우
if (userInput === "apple" || userInput === "banana" || userInput === "orange") {
console.log("과일입니다.");
} else if (userInput === "carrot" || userInput === "broccoli" || userInput === "celery") {
console.log("채소입니다.");
} else {
console.log("과일 또는 채소가 아닙니다.");
}
// includes 메서드를 사용한 경우
const fruits = ["apple", "banana", "orange"];
const vegetables = ["carrot", "broccoli", "celery"];
if (fruits.includes(userInput)) {
console.log("과일입니다.");
} else if (vegetables.includes(userInput)) {
console.log("채소입니다.");
} else {
console.log("과일 또는 채소가 아닙니다.");
}
정규화
설계 변경에 쫄지 마라! 그치만… 해커톤에서 설계땜에 구현못한 백엔드를 한둘 본게 아니란 말이다…
정규화 > 테이블 분리, 중복 방지 > 성능 문제, 이상현상 발생 > 반정규화 > 데이터 일관성, 무결성 문제 발생 > …
실무에서는 3정규화까지만 사용된다. - 도부이결다조....
DBA 설계 전문가 직종. 관계형 또는 설계에 재미가 있다면 고려해볼만한 직종이다. 여기가 SQLP 전문가 자격증을 가진 분야인것 같다.
SQL 날짜 시간 타입 - datetime과 timestamp의 차이점
- 시간대 변환, 저장공간, UTC 저장 유무
`datetime`은 정확한 시간 정보가 필요한 경우에 사용.
`timestamp`는 시간 경과를 측정하고 날짜 및 시간을 효율적으로 저장할 때 사용.
workbench
SQL을 GUI로 사용할 수 있는 workbench 너무 신세계다. 학교수업때 CLI 따라치면서 자괴감과 멘붕을 느낀게 한두번이 아니었는데…. GUI 사용이 정말 편하고 직관적이다! 오늘 감격하면서 강의를 보았다… CLI의 오타를 해결할 수 있는 방법이어서 너무 좋았다.
AUTO_INCREMENT 빈공간 재활용?
id를 auto로 만든다면, 순서가 꼬이거나 빈공간이 생길 가능성이 있으니, 컴퓨터가 작업하도록 맡긴다는것. → 회원탈퇴나 게시글 삭제 같은 경우도 마찬가지로 빈공간이 발생한다. 이때 빈공간을 인지하고 새로 할당하는 방법이 있을까?
2가지 의견
- 데이터 무결성 깨지기 대문에 한번 건너뛴 숫자는 절대로 사용해서는 안되고, 중복이 생겨서도 안된다. 이럴때는 빈공간을 제거하는 db 축소 과정을 가지게 된다.
- 삭제 레코드 추적해 새로운값 할당하거나, 언제 재활용할지 결정하는 정책을 가져서 규칙을 지킨다. 무결성과는 무관하다
??? 해결하지 못했다.
관련 기능을 지원하는 ORM(Object-Relational Mapping) 도구
코드와 DB 연동
코드와 db 연결하는게 진짜 어려운 건줄 알았는데, mysql2 npm 모듈을 사용하면 간단하다는 것을 알았다. 실제 플젝에서도 이렇게 스무스하게 연결되면 좋겠다.
☑️Liked, Learned, Lacked, Longer for
workbench 사용 너무 좋았다.
스프린트 1, 2 과제와 라이브세션이 있었는데, 두 과제 모두 좋았다.
ERD 그리는 과제는, 세세한 부분에서 실수가 들통났다. 연관관계 뿐만 아니라 변수명과 예약어를 고려하고, 통일된 규칙을 고려해야 한다. 면접에서는 ERD를 토대로 정규화에 대한 질문을 많이 한다고 한다. 또한 ERD 데이터의 데이터 형식과 크기도 고려해야한다. 이 부분을 잘 몰라서 실수가 많았다. 설계에 대해 더 자세히 학습하고 싶다.
깃 포폴 사이트를 생성하는 기회가 있어서 좋았다. 23년 초에 동아리를 지원하면서 다른 개발자 학생의 포트폴리오 사이트를 찾아보았는데 인상 깊었다. 이제 원하는 정보는 표현할 수 있겠는데.. 내가 원하는 포폴의 형태는 딱 보고, `어? 이 사람 좀 치는데?` 하는 생각이 들 수 있는 정도로 만들고 싶다.ㅋㅋㅋㅋ 이번 제출때는 시간이 많이 없어서 노션 포폴 페이지처럼 만들었지만, 곧이어 리액트로 리팩토링하고, 아주 화려한 애니메이션 기술을 적용해서 디벨롭 할 것이다!
저번 주와 마찬가지로 시간이다. 이번주는 추가 학습에서 궁금한 부분은 찾아서 학습할 수 있었지만, 알고리즘 학습을 부족하게 하였다. 다음주는 코딩테스트 놓치지 않겠다!
이제 플젝에서 CICD 적용해서 AWS Route 53으로 프론트 배포 완료했고, 개발하는 과정만 남았다. 완료한 배포 부분 복습해서 다음번 내가 배포할때 잘 적용할 수 있을 정도로 학습하고, 성능 고려하면서 개발하는 경험을 쌓고싶다. 주먹구구식이 아닌!
아자자!