내배캠 126일차

·2023년 3월 19일
0

내일배움캠프

목록 보기
129/142

중간발표회 이후 기술면접 질문

  1. Joi같은 데이터 유효성검사를 프론트에서 해야될까요 백에서 해야될까요? 이유도 말씀해주세요.

이 부분에 대해서 고민을 굉장히 많이 했었다.
처음 프로젝트 할 때는 프론트에서만 진행했었고, 그 다음에는 백에서만 진행했었고, 그 다음번에는 양쪽에서 모두 유효성검사를 하였다.

그러면서 프론트에서 or 백에서 유효성검사를 하는데 또 굳이 다른 쪽에서 해줄 필요가 있을까? 라는 생각을 했었는데 정답은 둘 다 하는게 맞다고 결론지었다.

사실상 프론트에서의 유효성 검사는 UI/UX를 위한 것이지 다른 용도로는 쓸 수 없다!
그렇다면 UX/UI를 위해서 굳이 프론트에서 검사할 필요가 있을까?
입력 폼을 검사하지않고 api를 날린 뒤 서버 검증에서 실패하고 받아온 에러 코드들로 사용자에게 정보를 주면 되지 않을까?

정답은 No다!
에러가 날 데이터를 거르지않고 서버에 요청을 해서 리소스를 잡아먹는 단점이 있기 때문이다.

서로 상호보완적이 가능하게 데이터 변조로 서버에 들이밀었을 때 거를 수 있게 해주는 백 검증,
사용자에게 빠른 응답을 줄 수 있게 서버에 리소스를 덜 먹게하기 위한 프론트 검증
양쪽 다에서 해주는 것이 옳다.

  1. nest.js가 객체지향 프로그래밍과 모듈화를 쉽게 할 수 있는데, 이 두가지를 쉽게 하면 좋은 이유는?

모듈 : 소프트웨어 설계에서 기능단위로 분해하고 추상화 되어 재사용 및 공유 가능한 수준으로 만들어진 단위

모듈화의 장점
1. 소프트웨어의 성능을 향상시키거나
2. 시스템의 디버깅, 시험, 통합 및 수정을 용이하게 함.
3. 또 기능의 분리가 가능하고,
4. 인터페이스가 단순해지고
5. 오류의 범위를 최소화 시킬 수 있으며
6. 모듈의 재사용 가능으로 개발과 유지보수가 용이해진다.

객체 지향 프로그래밍(Object-Oriented Programming, OOP) : 컴퓨터 프로그램을 어떤 데이터를 입력받아 순서대로 처리하고 결과를 도출하는 명령어들의 목록으로 보는 시각에서 벗어나 여러 독립적인 부품들의 조합, 즉 객체들의 유기적인 협력과 결합으로 파악하고자 하는 컴퓨터 프로그래밍의 패러다임을 의미합니다.

객체 지향적으로 소프트웨어를 설계한다는 말의 의미는 어떤 프로그램의 일부분에 해당하는 작은 부품, 즉 객체를 먼저 만들고 이렇게 만들어진 여러 객체들을 조립해서 하나의 완성된 프로그램을 만드는 프로그래밍 방법론을 뜻합니다.

객체 지향 프로그래밍의 4가지 특징
추상화, 상속, 다형성, 캡슐화

객체 지향 프로그래밍의 장점
1. 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다.
2. 코드의 변경을 최소화하고 유지보수를 하는 데 유리하다.
3. 코드의 재사용을 통해 반복적인 코드를 최소화하고, 코드를 최대한 간결하게 표현할 수 있다.
4. 인간 친화적이고 직관적인 코드를 작성하기에 용이하다.

  1. websocket이 어떻게 작동하는가?

웹소켓 : 서버와 클라이언트 간의 메시지 교환을 위한 통신 규약(프로토콜)
http 에서 업그레이드 방식
http는 일정주기마다 통신 실시간이라고 보기어려움
(예시로 http는 전화 1초마다 계속 전화를 하는거랑 웹소켓은 끊지않고 계속 통화하는 것!)

웹 소켓 동작 과정은 크게 세가지로 나눌 수 있다.

위 이미지의 빨간 색 박스에 해당하는 Opening Handshake
위 이미지의 노란 색 박스에 해당하는 Data transfer
위 이미지의 보라 색 박스에 해당하는 Closing Handshake

Handshake
정상적인 통신을 하기 전에, 일련의 과정을 거쳐 연결을 성립시키는 것
접속 요청은 HTTP 로 한 뒤, 웹소켓 프로토콜로 변경된다. (WS)
연결을 수립할 때는 3way-HandShake,
연결을 종료할 때는 4way-HandShake를 사용한다.

Data Transfer
Opening HandShake에서 승인이 나고나면,
웹 소켓 프로토콜로 노란색 박스 부분인 Data transfer 이 진행된다.
여기서 데이터는 메시지라는 단위로 전달된다.

총정리
클라이언트가 서버에 연결요청
서버가 연결 수락
양방향 통신 - 데이터 전송
클라이언트 또는 서버가 연결 종료 요청
요청 받은쪽에서 종료 프로세스 진행 → 상대방에게 연결 종료 응답 보냄
연결 종료

참고)
1.데이터 유효성검사
2.객체지향 프로그래밍과 모듈화
3.websocket

profile
개발자 꿈나무

10개의 댓글

comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㄹ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㄹ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㅇㄹ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㅇㄹ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㅀ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㅎㅇㄹ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄹㅇㅎㄹㅇ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㅇㅀㄹㅇㅎ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㅇㄴㄹㄴㅇㄹㅇㄴㄹ

답글 달기
comment-user-thumbnail
2023년 3월 20일

ㄴㅇㄹㅇㄴㄹ

답글 달기