세번째 회고록
웹 풀사이클 데브코스의 세번째 회고록이다. 국비지원교육이 시작된지 절반이 지났다.
공부했던 것들
노드 백엔드
- Http 상태코드를 숫자가 아니라 문자형식으로 사용할 수 있는 모듈에 대해서 학습하였다.
- 기존의 express 코드에서 router와 controller를 분리하는 방법에 대해 배웠다. 두 코드를 분리하여 비즈니스 로직과, url 라우팅의 기능을 분리해 단일 책임원칙에 더 가까워질 수 있다.
- 비밀번호 암호화를 위해 crpto 라이브러리를 사용하는 방법을 배웠다. 비밀번호는 salt 값과 함께 해싱해서 데이터베이스에 저장한다.
- picsum 이라는 더미 이미지 사이트를 알게 되었다. url을 통해 간단하게 이미지를 가져올 수 있다.
- jwt 예외처리와 이를 위해 try catch 문에 대해서 익혔다.
- jwt 유효기간을 설정하고 이를 잡기 위해 error 객체들에 대해서 학습하였다.
- 에러를 의도적으로 발생시키는 throw 에 대해 학습하였다.
- 객체가 어떤 객체인지 판단하기 위해 instanceof 연산자를 사용해보았다.
- jwt 부분은 auth.js 모듈로 분리하였다.
데이터베이스
- 데이터베이스 조인 연산의 사용법에 대해서 배웠다. Left join을 사용하였다.
- Mysql 시간 범위를 구하는 연산에 대해서 배웠다. 또한 페이징 기법에 대해서도 학습하였다.
- 서브쿼리문과 Exists 문에 대해서 배웠다.
- Constraint 와 index의 이름을 변경해주는 방법과 이름 규칙에 대해서 알아보았다.
- 데이터베이스의 IN 문법에 대해서 배웠다. IN은 여러개의 값 중 존재 여부를 따진다.
- 노드에서 IN 값에 변수로 직접 넘겨줄 방법을 배웠다.
- DB에 방금 Insert 한 pk 값을 가져오는 방법으로 Max 함수에 대해 배웠다.
- Delete, Drop, Truncate 의 차이에 대해 학습하였다.
비동기 처리
- 자바스크립트는 비동기 I/O 처리를 한다.
- 비동기가 필요없는 부분을 동기 처리해주기 위해 여러가지 방법을 익혔다.
- Promise 객체를 사용하는 방법을 배웠다.
- 더 발전된 방법인 async & await를 배웠다. await은 async 함수 안에서만 동작하고 promise 객체가 일을 다할때까지 기다려준다.
- 동기 처리를 이용해서 하나의 핸들러에서 query 문을 여러개 실행할 때 발생하는 비동기 문제를 해결하는 방법에 대해서 학습하였다.
리팩토링, 랜덤 데이터 프로젝트
- 코드의 어느부분을 중점적으로 리팩토링해야 할지 들었다.
- 중복코드 제거, 패키지 구조 개선, 예외처리, 유효성 검사 등등
- 랜덤 데이터를 생성해주는 외부 api인 faker에 대해서 학습하였다.
- 가짜 사용자를 만드는 실습을 해보았다.
새로운 스프린트 타입스크립트
- 타입스크립트의 학습에 앞서서 프로그래밍 언어에 대한 기본 지식을 학습하고 컴퓨터 구조의 이해를 위해 C언어에 대해 학습하였다.
C언어
- 변수와 메모리 영역에 대해서 학습하였다. 메모리 영역에는 코드,스택,힙,데이터 4가지 영역이 있다.
- 분기문, 조건문, 상수, 반복문 등 C언어의 문법들을 학습하였다.
- 함수, 변수의 범위, 배열, 문자열 등에 대해 학습하였다.
- 포인터에 대해 학습하였다. 포인터는 주소값을 가리키는 변수이다. 이를 활용해 함수포인터도 학습하였다.
- 구조체,공용체, 열거형에 대해 학습하였다.
- 메모리의 동적할당에 대해서 학습하였다. 동적할당을 하면 힙메모리에 저장된다.
객체지향
- 객체지향의 4가지 특성 추상화, 캡슐화, 다형성, 상속에 대해 학습하였다.
- 클래스에 대해서 알아보고, 접근지정자, 객체 등 클래스와 함께 학습하였다.
- 오버로딩과 오버라이딩의 차이에 대해서 학습하였다. 오버로딩은 함수가 이름은 같아도 전달인자 타입이나 갯수가 다른경우 다른 함수로 취급한다는 것이고, 오버라이딩은 무언가에 올라타서 기존의 것을 덮어 버린다는 개념으로 상속된 클래스에서 기존 함수를 덮어쓰기한다.
- 인터페이스에 대해서와 인터페이스를 사용하는 이유에 대해서 학습하였다.
- 람다식에 대해서 학습하였다.
배운점
Express 백엔드 프로젝트를 이어서 진행하였다. 프로젝트가 점점 고도화 되면서 노드의 jwt, 암호화, 예외처리, 모듈 분리 등에 대해서 심층적으로 학습하였다. 데이터 베이스도 단순한 CRUD를 넘어서 조인, 서브 쿼리, Exists, In, Truncate 등 다양한 기능을 사용하였고 이를 노드와 어떻게 연동하여 사용할 지도 배웠다. 또 한가지 배운 중요한 개념은 비동기 처리이다. 노드는 기본적으로 비동기 처리로 진행되지만 동기 처리가 필요한 부분에는 Promise 객체, async await등 동기 처리 문법을 도입하여 사용하는 법에 대해 배울 수 있었다.
코드의 리팩토링할 때 중점적으로 살펴봐야할 부분도 알게 되었다. 중복코드 제거부터 패키지 구조 개선, 변수명 통일, 예외처리 등 다양한 방법에 대해 알 수 있었다.
랜덤 데이터를 생성해주는 모듈에 대해서도 학습하였다. 개발과정에서 유용하게 사용할 수 있을 것 같다.
타입스크립트를 배우는 새로운 스프린트도 시작하였다. 새로운 스프린트에 앞서서 프로그래밍에 대한 심층적인 이해를 위해 C언어를 먼저 학습하였다. C언어를 통해 컴퓨터의 메모리 구조와 포인터의 개념에 대해 심층적으로 학습하였다. 이 개념들은 향 후 타입스크립트 이해에 있어서도 도움이 되었다.
객체지향의 개념에 대해서 학습하였다. 객체지향에 대해서 모든것을 배우진 않았지만 기본적인 지식들을 쌓을 수 있었다.
앞으로
백엔드 프로젝트를 마무리 하였고, 이제 타입스크립트에 대해 본격적으로 배우고 리액트에 대한 학습을 진행할 것이다. 이전에 경험해보았던 백엔드와는 달리 프론트엔드는 많은것을 모르는 새로운 영역이라서 기대가 된다. 프론트엔드 기술을 익혀두면 개인 프로젝트를 하는데 자유도도 더 높아질 것이고, 또 프로젝트를 진행하는데 눈에 보이는 화면이 생기니 더 재미있어질 것 같다.
키워드: 프로그래머스 데브코스, 국비지원교육, 코딩부트캠프, 국비지원교육 현실, 국비지원 교육 추천
'프로그래머스 풀스택 데브코스 > 데브코스 회고록' 카테고리의 다른 글
웹 풀사이클 데브코스 회고록 2월 (0) | 2024.03.03 |
---|---|
웹 풀사이클 데브코스 회고록 12월 (0) | 2023.12.29 |
웹 풀사이클 데브코스 회고록 11월 (1) | 2023.11.30 |