TIL 23-06-23

level·2023년 6월 23일

TIL

목록 보기
35/95

업데이트 메서드 put/patch 차이

참고링크
https://programmer93.tistory.com/39
https://velog.io/@vagabondms/%EA%B8%B0%EC%88%A0-%EC%8A%A4%ED%84%B0%EB%94%94-PUT%EA%B3%BC-PATCH-%EC%B0%A8%EC%9D%B4
https://stackoverflow.com/questions/28459418/use-of-put-vs-patch-methods-in-rest-api-real-life-scenarios/39338329#39338329

put: 전체 수정
patch: 일부 수정


정규표현식

참고링크
https://youtu.be/t3M6toIflyQ
https://regexr.com/5mhou
https://regexone.com/

Groups and ranges

|	또는
()	그룹
[]	문자셋, 괄호안의 어떤 문자든
[^]	부정 문자셋, 괄호안의 어떤 문가 아닐때
(?:)	찾지만 기억하지는 않음

Quantifiers

?	없거나 있거나 (zero or one)
*	없거나 있거나 많거나 (zero or more)
+	하나 또는 많이 (one or more)
{n}	n번 반복
{min,}	최소
{min,max}	최소, 그리고 최대

Boundary-type

\b	단어 경계
\B	단어 경계가 아님
^	문장의 시작
$	문장의 끝

Character classes

\	특수 문자가 아닌 문자
.	어떤 글자 (줄바꿈 문자 제외)
\d	digit 숫자
\D	digit 숫자 아님
\w	word 문자
\W	word 문자 아님
\s	space 공백
\S	space 공백 아님

예시)

email찾기

/[a-zA-Z0-9._+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9.]+

유튜브 주소에서 아이디값만 찾기:

(?:https?:\/\/)?(?:www\.)?youtu.be\/([a-zA-Z0-9-]{11})

Q1) mongoose에서 sequelize로 변경했을 때, 많은 코드 변경이 있었나요?
있었다면 어떤 코드에서 변경사항이 많았나요?

  • sql을 사용하기위해 migration과 model을 사용했고, 기존에 mongoose 메서드를 사용했던 부분들을 sql메서드로 바꿨습니다.

Q2) 닉네임과 비밀번호에 대한 요구사항 검증은 어떻게 진행하였나요?
만약 정규표현식을 사용하였다면 어떤 정규표현식으로 구현하였나요?

  • 닉네임 요구사항만 정규표현식 사용 : if (!/^[a-zA-Z0-9]{3,}$/.test(nickname))

Q3) ERD를 먼저 작성 후 개발을 진행했을 때, 좋은 점은 어떤 것들이 있었나요?

  • 테이블간의 관계를 파악하기에 용이했고, 개발진행 중 ERD를 참고하여 빠르게 파악 후 개발을 진행 할 수 있었습니다

Q4) JWT를 이용해 사용자 인증은 진행하였을 때, 어떤 장점과 단점이 존재하였나요?

  • 인증을 위한 별도의 저장소가 필요 없고 인증 처리가 빠르다는 장점이 있고, 토큰의 길이가 길수록 네트워크의 부하가 증가, 특정 토큰을 강제로 만료시키기가 어렵다는 단점이 있습니다

Q5) 게시글 조회 API Response를 어떻게 구성하였나요? 왜 그렇게 구성하였나요?

  • findAll을 사용해서 해당하는 게시글을 찾고 attributes로 원하는 요소를 선택했고, user의 nickname속성을 가져오기 위해 sequelize.literal()을 사용해서 서브쿼리를 직접 작성했습니다.

후발대강의 복습

메모리구조

  • 코드영역
    실행할 프로그램의 코드가 저장되는 영역
    컴퓨터가 이해할 수 있는 바이너리 코드가 저장되는 영역
    CPU (정확히는 PC 레지스터)가 참조하여 프로그램을 실행할때 사용

  • 데이터 영역
    프로그램의 전역 변수, 정적 변수가 저장되는 공간
    프로그램 시작 시 할당되고 종료 시 해제되는 특징
    전역 변수 사용시 편하다는 장점이있고, 메모리가 부족할 수 있다는 단점이 있음

  • 힙(Heap) 영역
    사용자(프로그래머) 에 의해 관리되는 영역
    프로그래머가 할당/해제하는 메모리 공간
    런타임시에 크기가 결정
    예시) 객체 타입 - 클래스, object, array 등

  • 스택(Stack) 영역
    프로그램이 자동으로 사용하는 임시 메모리 영역
    LIFO (Last In First Out) 의 특징
    함수 호출이 완료되면 할당된 영역이 해제
    예시) 함수, 지역 변수 선언시 할당

호이스팅 (Hoisting)

  • 변수의 생성 절차
    - 스코프의 실행 컨텍스트에 해당 변수를 등록
    - 초기화 단계
    - 할당 단계
  • 호이스팅의 정의
    - 코드 실행전 변수/함수 선언을 스코프의 최상단으로 끌어올리는 현상

스코프의 정의

  • 실행 컨텍스트에서 변수에 접근할 수 있는 범위

  • 함수 스코프
    변수(var로 선언됨) 가 호이스팅 되는 시작점의 기준이 가장 가까운 함수

  • 블록 스코프
    let, const 키워드로 선언한 변수가 블록 스코프에 해당
    변수가 호이스팅 되는 시작점의 기준이 가장 가까운 블록이 됨
    블록은 중괄호 {} 로 열고 닫는 영역의 범위

클로저

  • 정의
    (MDN) 함수와 함수가 선언된 어휘적 환경의 조합
    (생활코딩) 내부함수가 외부함수의 맥락(context)에 접근할 수 있는 것
    내부함수에서는 외부함수 스코프에서 선언된 변수에 접근 가능

디버깅

  • 콘솔 로그를 이용한 디버깅
    에러가 발생하면 당황하지 말고 에러 메시지를 확인하고 어떤 종류의 에러인지 파악한 뒤,
    에러가 발생한 line을 파악하고,
    프로그램 흐름상 이상이 있는지 없는지 console.log 를 사용해서 값을 찍어보면서 디버깅

sequelize 특강

sequelize db:create 하기 전에
mysql -u root -p (단, root->admin)
show databases

api.rest 파일을 생성해서 api 호출하는 방법도 있음
extention 설치 : REST client
사용법: api.rest 파일에서: 메서드+호출주소+send request
예)

 GET http://localhost:3000/api -> 상단의 Send Request 클릭
// api 나눌때는 ### 으로 나누고 새 api 요청
###
POST http://localhost:3000/users
Content-Type: application/json

{

}

0개의 댓글