백엔드감자's Today I Learned : 부트캠프 재공부의 시작.

BE_{Potato.}·2023년 2월 3일
0
post-thumbnail

앞으로의 공부내용들을 블로그에 작성해보려고 한다.

부트캠프에서 인프런 강좌를 제공해주어서, 인프런 부트캠프강좌가 메인이 될 것이고 서브로 컴공 기본공부로 1. 데이터베이스 / 2.자료구조와 알고리즘 / 3.운영체제 / 4.네트워크 를 메인과 병행하려고 한다.

( 기본을 중요시하지만 컴퓨터공학의 모든 과목을 다 공부하기엔 시간적으로 너무 오래 걸릴 것 같아 백엔드 실무 기준으로 꼭 필요한 순서로 구성했다. )
블로그 구성은 부트캠프 공부내용과 컴공 기본공부, 두 파트로 나뉠 것이다.
오늘부로 부트캠프 인프런 강의를 듣기 시작했다. 부트캠프가 끝나고 1주 반 정도 내 나름대로의 공부계획을 짜서 했었는데 효율이 그닥 좋지 않아 이 방법으로 변경했다.
본론으로 들어가서

🏄‍♂️ 부트캠프 공부내용

부트캠프 강의의 소개와 개요를 우선 들었는데
이 강좌의 핵심내용은 "로그인, 결제, 파일 업로드 API 구현, 검색"이라고 한다. (명심하고 들어야겠다.)

  • API는 통신의 연장선. (API는 "프론트엔드와 백엔드를 연결해주는 다리"이다.) '백엔드 개발자'를 쉽게 말하면 'API와 데이터베이스를 연결해서 API들을 안정적으로 만드는 사람'이라고 정의할 수 있다.

앞으로 5일 기간동안 회원가입에 관련된 기능들을 만들어볼 것인데, 웹 사이트의 회원가입 창에 '휴대폰 인증하기' 버튼을 누르면 인증번호를 생성해 유저의 휴대폰으로 보내는 것까지 해볼 것이다.

본격적으로 들어가면서 Node.js와 yarn에 대한 설명으로 시작한다.

자바스크립트는 웹서비스, 홈페이지를 만드는 데에 쓰이는 언어인데, 이 웹에만 한정되어 쓰이는 것이 너무 아쉬웠다. 이걸 내 컴퓨터에도 실행되게 해보자 해서 나온 것이 Node.js이다.(노드.js는 언어가 아니다=>프로그램 형태로 js를 실행시킬 수 있다.)

  • NPM은 js기반 사람들이 만든 기능들을 공유할 수 있는 공간. 근데 좀 느려서 페이스북이 업그레이드 버전으로 yarn을 만듬.
  • github는 소스코드를 저장하는 저장소이다. 내가 작성한 코드를 팀 프로젝트 등 공유하기가 좋다.
  • npm, yarn이 있는 이유는 0에서 다 만드는 것이 아니라 다른 사람들이 만든 좋은 기능 쓰면 시간적인 이점이 굉장히 많아서.
  • GUI는 아이콘처럼 눈에 보이는 것, 터미널은 CLI.
  • mkdir은 디렉토리를 만들겠다는 뜻.
  • 터미널 CLI에서 "node 파일명"은 노드js로 파일을 실행시키겠다는 뜻.
  • 실무에서는 코드의 재사용을 선호한다. 시간적으로 굉장히 단축시킬 수 있어서 => 재사용 가능한 코드에 초점을 맞추자.
  • 함수에서의 인자(Arguement)와 매개변수(Parameter)에 대한 설명을 했다. 인자는 함수안에서 받아와서 사용하는 값이고 매개변수는 인자가 들어갈 수 있게 만들어줌.
< 함수의 필수개념들 정리 >
- 함수 선언하기
- 함수 실행하기
- 더할 값 전달하여 재사용성 높이기 => 인자와 매개변수로... 인자는 두개 이상도 가능하다.(인자가 여러개 들어가는 것을 줄임말로 Args라고 부른다. 매개 변수 Parameter의 줄임말은 Param.)
- 스코프 : 쉽게 말해서 범위. 지역변수와 전역변수. 내 범위 안에 없으면 바깥꺼 가져와서 사용 => 스코프체인.
- (중요!) 실무규칙에서 하나의 함수는 하나의 기능만.
- 함수 안에서 return을 쓰면 원래 자리의 값이 지워지고 리턴값이 들어온다. 리턴은 값을 지우고 값을 돌려준다.돌려주는 동시에 함수를 종료함.
(정리) return은 1.결과 반환 / 2.함수 종료

함수의 안정성을 높이는데 인자로 얼토당토 않는 값이 들어오는 것을 검사를 하는 과정을 넣어준다.(인증번호로 예를 들면 -1자리,1000000자리 등등) => if문으로 처리해준다.

  • undefined와 null의 차이?
    일반적으로 undefined를 기본으로 삼는데,강제로 변수 안을 비울 때는 null을 씀.=> 개발 안의 암묵적 룰.
< API란 무엇인가? >
쉽게 얘기하면 우리가 만든 함수를 API라고 부를 수 있다.
## > 회원가입 창을 예로 들면 '인증번호요청' 버튼을 누르면 백엔드로 요청이 오는데 이를 처리할 함수를 만들어야 한다. '인증완료','가입하기=> 회원가입을 시켜주는 함수실행'도 마찬가지. => 그래서 DB랑 연결된 함수를 만드는 것이 백엔드의 역할이다.
API 함수를 만들 때 인자로 무엇을 받아올 수 있는지, 만들고자 하는 API의 역할은 무엇일지 고민해보는 시간이 필요.
함수는 특정한 하나의 기능이라면 API는 여러가지 순서를 가지고(1번은 뭐하고,2번은 뭐하고 등등...) 순서를 담고 있는 내용.

- 백엔드 API는 검증의 역할이 있다.(중요)

API가 1,2,3,4,... 숫자가 많아지면 복잡해진다. 이것을 어떻게 효율적으로 간편히 만들 수 있을까? 코드 리팩토링의 과정이라 부르고 '퍼사드패턴'이라는 것이 있다.

  • 퍼사드 패턴에는 import,export가 쓰이는데 최신 문법이라 터미널 CLI에 yarn init 먼저 쳐줘야 한다. 하면 package.json 파일이 생기는데 안에 "type":"module" 써주면 된다.
  • 실무 나가면 함수 하나 엄청 복잡해질 수 있다. 최대한 간결한 코드,유지보수가 쉬운 코드를 지향해야 한다.=> 리팩토링.조금더 깔끔하게 다시 만든다.
  • 퍼사드 패턴을 정리하면 무지성으로 한페이지에 다 작성하면 너무 가독성도 떨어지고 다른사람들이 유지보수도 어려움. 그래서 함수 이름들만 깔끔하게 보이게 로직들만 함수 이름들만 봐도 알수 있게 만들고, 그 함수들 세부내용들은 다른 공간에 빼 놓는것. 이 과정에서 import,export를 해줘야하고 최신문법이라 초기에 설정해줄 것이 조금 있다.
  • 변수,함수의 이름을 어떻게 지을 것인가도 유지보수에 포함이 된다.
  • 웹서비스를 만드는 코드를 짤 때 조금 길더라도 알아보기 쉽게 하는 코드를 작성하는 것이 중요하다.=> 실무에서 쓰는 방식과 유사하게.

휴대폰 인증번호를 지나서 회원가입을 하면 유저이메일로 회원가입 알림메일을 보내는 것을 해보려고 한다.

  • Template literal: 백틱 안에 문장을 적고 변수 앞에 ${변수} 이런 식으로 작성하는 것을 말하고, 이렇게 쓰면 지저분하게 쓰지 않아도 되게 깔끔하게 문장코드를 작성할 수 있다. => 여러줄 쓰는 것이 가능해진다.
  • 브라우저의 각 칸의 입력내용이 백엔드 함수의 인자로 들어온다.-> 헷갈리지 말아야 할 것이 브라우저에서 받아온 인자들과 함수의 매개변수는 이름이 안 같아도 된다.
    *브라우저에서 받아온 인자들과 백엔드 함수의 매개변수를 맞춰주는 과정에서 너무 복잡하면 중간중간에 요소를 빼먹을 수도 있다. => 그래서 객체형태로 전달하는 방법을 택함. 객체로 묶어서 객체명을 지은 다음 백엔드함수에 객체명을 인자로 넣어서 객체명.key의 이름으로 값을 받아오는 방식이 되었는데,,, 이 객체명.~~를 다 적어줘야 하는게 좀 비효율적이라 생각해서 구조분해할당이 나왔다. => 구조분해할당의 자세한 원리와 내용은 다음 시간에 알아보기로 함.

< 첫날 수강후기 >
솔직히 요즈음에는 부트캠프에 대한 엄청 부정적인 생각들이 가득했다...여태까지 살면서 자존감이 바닥을 찍은 기간이였기에...내가 못난 것도 아닌데 따라가지 못하는 상황이 너무 짜증이 났다. 지금 와서 보면 부트캠프는 노베이스가 가는 곳이 아니다 열정만 가지고 오라는건 좀 너무 심한 마케팅인 것 같다.지금이야 전체적으로 한 바퀴를 돌아보니 다시 강의내용을 들으니 내용들이 잘 들린다. 오늘 부트캠프 강의를 처음부분 다시 들으면서 느낀 것인데 강의내용이 정말 좋다. 솔직히 공부하면서 재밌다는 느낌도 받은 것 같다. 다만 정말 아쉬운 것은 캠프기간이 끝나고 나서야 이를 알게 된 것이다. 복습시간도 안주고 과제하기에 급급하고 멘토님 말씀도 좀 많이 느리셔서 인강 1.5배를 해야 정상적인 흐름을 잡을 수 있는 속도라는 생각이 들었다.
그래도 강의 내용이 참 좋다는 생각을 많이 했고, 예전의 부정적인 감정들을 바꿔보려는 생각을 가지고 여기서 배우는 것들을 잘 다져야겠다. 부트캠프 인강이 어느정도 적응이 되면 컴공필수과목 공부내용들도 같이 적어보려고 한다.

profile
항상 '기본'을 중요시하는 예비 백엔드개발자입니다!

0개의 댓글