728x90
반응형

1. 검색 가능한 이름을 사용하기 (Use a searchable name.)
2. 함수명은 반드시 동사로. 함수는 동작 하나만. 
3. 함수의 인수는 3개이하 적당. 많을 경우에는 Object로 정리해서 param 사용.
4. 함수의 파리미터에 boolean 을 둬서 액션 2개 이상을 구현하기 보다는, 함수를 2개로 구분하는 것을 추천. 
5. 변수명은 너무 축약하지 말것. 이해할 수 있는 변수명으로~! 

[주의] 문제 해결하려는 코딩 초반부에는 우선 동작에 초점 맞춰서 작업~! 

그 후에 깔끔하게 코딩 정리(5개 팁 참고)하는 것을 추천~!

728x90
반응형

'코딩공부' 카테고리의 다른 글

탑바 메뉴만들기(노말라이즈, 라이브러리)  (0) 2022.10.20
CSS 일정비율 조절  (0) 2022.10.20
이미지 링크주소  (0) 2022.10.07
자식선택자와 후손선택자  (0) 2022.10.06
클래스101 개발자 로드맵  (1) 2022.10.01
728x90
반응형

좋은 코드란 무엇인가?

‘좋은 코드’의 기준이 조금씩 다르고 각각의 경험을 기반으로 좋은 코드를 정의하고 있다. 세간에 좋은 코드의 정의는 정말 많다.

  • 읽기 쉬운 코드
  • 중복이 없는 코드
  • 테스트가 용이한 코드

결론은? 좋은 코드를 왜 작성해야 하는지부터 고민했던 과정을 글로 정리해보았다.

  • 코드 간의 의존성을 고민하자.
  • 합의된 규칙으로 일관성있게 작성하자.
  • 적절하게 확장 가능하도록 설계하자.
  • 어쩔 수 없는 코드는 주석과 함께 격리하자.
  • 답은 테스트 코드 기반의 자동화 테스트다.

 


 

객체지향 프로그래밍 (OOP)

객체 지향적 설계 원칙

  1. SRP(Single Responsibility Principle) : 단일 책임 원칙클래스는 단 하나의 책임을 가져야 하며 클래스를 변경하는 이유는 단 하나의 이유이어야 한다.
  2. OCP(Open-Closed Principle) : 개방-폐쇄 원칙확장에는 열려 있어야 하고 변경에는 닫혀 있어야 한다.
  3. LSP(Liskov Substitution Principle) : 리스코프 치환 원칙상위 타입의 객체를 하위 타입의 객체로 치환해도 상위 타입을 사용하는 프로그램은 정상적으로 동작해야 한다.
  4. ISP(Interface Segregation Principle) : 인터페이스 분리 원칙인터페이스는 그 인터페이스를 사용하는 클라이언트를 기준으로 분리해야 한다.
  5. DIP(Dependency Inversion Principle) : 의존 역전 원칙고수준 모듈은 저수준 모듈의 구현에 의존해서는 안된다.

 


 

RESTful API

 

우선, 위키백과의 정의를 요약해보자면 다음과 같다.

월드 와이드 웹(World Wide Web a.k.a WWW)과 같은 분산 하이퍼미디어 시스템을 위한 소프트웨어 아키텍처의 한 형식으로 자원을 정의하고 자원에 대한 주소를 지정하는 방법 전반에 대한 패턴

REST란, REpresentational State Transfer 의 약자이다. 여기에 ~ful 이라는 형용사형 어미를 붙여 ~한 API 라는 표현으로 사용된다. 즉, REST 의 기본 원칙을 성실히 지킨 서비스 디자인은 'RESTful'하다라고 표현할 수 있다.

REST가 디자인 패턴이다, 아키텍처다 많은 이야기가 존재하는데, 하나의 아키텍처로 볼 수 있다. 좀 더 정확한 표현으로 말하자면, REST 는 Resource Oriented Architecture 이다. API 설계의 중심에 자원(Resource)이 있고 HTTP Method 를 통해 자원을 처리하도록 설계하는 것이다.

RESTful 하게 API 를 디자인 한다는 것은 무엇을 의미하는가.(요약)

  1. 리소스 와 행위 를 명시적이고 직관적으로 분리한다.
  • 리소스는 URI로 표현되는데 리소스가 가리키는 것은 명사로 표현되어야 한다.
  • 행위는 HTTP Method로 표현하고, GET(조회), POST(생성), PUT(기존 entity 전체 수정), PATCH(기존 entity 일부 수정), DELETE(삭제)을 분명한 목적으로 사용한다.
  1. Message 는 Header 와 Body 를 명확하게 분리해서 사용한다.
  • Entity 에 대한 내용은 body 에 담는다.
  • 애플리케이션 서버가 행동할 판단의 근거가 되는 컨트롤 정보인 API 버전 정보, 응답받고자 하는 MIME 타입 등은 header 에 담는다.
  • header 와 body 는 http header 와 http body 로 나눌 수도 있고, http body 에 들어가는 json 구조로 분리할 수도 있다.
  1. API 버전을 관리한다.
  • 환경은 항상 변하기 때문에 API 의 signature 가 변경될 수도 있음에 유의하자.
  • 특정 API 를 변경할 때는 반드시 하위호환성을 보장해야 한다.
  1. 서버와 클라이언트가 같은 방식을 사용해서 요청하도록 한다.
  • 브라우저는 form-data 형식의 submit 으로 보내고 서버에서는 json 형태로 보내는 식의 분리보다는 json 으로 보내든, 둘 다 form-data 형식으로 보내든 하나로 통일한다.
  • 다른 말로 표현하자면 URI 가 플랫폼 중립적이어야 한다.

어떠한 장점이 존재하는가?

  1. Open API 를 제공하기 쉽다
  2. 멀티플랫폼 지원 및 연동이 용이하다.
  3. 원하는 타입으로 데이터를 주고 받을 수 있다.
  4. 기존 웹 인프라(HTTP)를 그대로 사용할 수 있다.

단점은 뭐가 있을까?

  1. 사용할 수 있는 메소드가 한정적이다.
  2. 분산환경에는 부적합하다.
  3. HTTP 통신 모델에 대해서만 지원한다.

 


 

TDD

Test-Driven Development(TDD)는 매우 짧은 개발 사이클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 테스트를 통과하는 가장 간단한 코드를 작성한다. 일단 테스트 통과하는 코드를 작성하고 상황에 맞게 리팩토링하는 과정을 거치는 것이다. 말 그대로 테스트가 코드 작성을 주도하는 개발방식인 것이다.

 

 

 


 

함수형 프로그래밍

 

함수형 프로그래밍의 가장 큰 특징 두 가지는 immutable data와 first class citizen으로서의 function이다.

immutable vs mutable

우선 immutable과 mutable의 차이에 대해서 이해를 하고 있어야 한다. immutable이란 말 그대로 변경 불가능함을 의미한다. immutable 객체는 객체가 가지고 있는 값을 변경할 수 없는 객체를 의미하여 값이 변경될 경우, 새로운 객체를 생성하고 변경된 값을 주입하여 반환해야 한다. 이와는 달리, mutable 객체는 해당 객체의 값이 변경될 경우 값을 변경한다.

first-class citizen

함수형 프로그래밍 패러다임을 따르고 있는 언어에서의 함수(function)는 일급 객체(first class citizen)로 간주된다. 일급 객체라 함은 다음과 같다.

  • 변수나 데이터 구조안에 함수를 담을 수 있어서 함수의 파라미터로 전달할 수 있고, 함수의 반환값으로 사용할 수 있다.
  • 할당에 사용된 이름과 관계없이 고유한 구별이 가능하다.
  • 함수를 리터럴로 바로 정의할 수 있다.

Reactive Programming

반응형 프로그래밍(Reactive Programming)은 선언형 프로그래밍(declarative programming)이라고도 불리며, 명령형 프로그래밍(imperative programming)의 반대말이다. 또 함수형 프로그래밍 패러다임을 활용하는 것을 말한다. 반응형 프로그래밍은 기본적으로 모든 것을 스트림(stream)으로 본다. 스트림이란 값들의 집합으로 볼 수 있으며 제공되는 함수형 메소드를 통해 데이터를 immutable 하게 관리할 수 있다.

 

 



MVC패턴

다음 링크로 대체

http://asfirstalways.tistory.com/180

 

1. MVC 아키텍쳐에 대한 이해

Things 1. MVC 아키텍쳐에 대한 이해떠도는 여러 이미지들과 책에 나온 구성도를 내 나름대로 재구성해보았다. MVC에 대한 기본 개념은 모두 동일하기 때문에 Servlet과 JSP를 기준으로 설명하여 보다

asfirstalways.tistory.com

 

 


 

깃과 깃허브

 

Git 이란 VCS(Version Control System)에 대해서 기본적인 이해를 요구하고 있다.

Git 을 사용하기 위한 각종 전략(strategy)들이 존재한다. 해당 전략들에 대한 이해를 기반으로 Git 을 사용해야 하기 때문에 면접에서 자주 물어본다. 주로 사용되는 strategy 중심으로 질문이 들어오며 유명한 세 가지를 비교한 글을 첨부한다.

많은 회사들이 GitHub 을 기반으로 협업을 하게 되는데, (BitBucket 이라는 훌륭한 도구도 존재합니다.) GitHub 에서 어떤 일을 할 수 있는지, 어떻게 GitHub Repository 에 기여를 하는지 정리한 글을 첨부한다.

 

 


 

출처: https://github.com/JaeYeopHan/Interview_Question_for_Beginner#%EB%A9%B4%EC%A0%91%EC%97%90%EC%84%9C-%EB%B0%9B%EC%95%98%EB%8D%98-%EC%A7%88%EB%AC%B8%EB%93%A4

 

GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy: Technical-Interview guidelines written for those who started studying

:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - GitHub - JaeYeopHan/Interview_Question_for_Beginner: :boy:...

github.com

 

 

 

728x90
반응형
728x90
반응형

1. Call by value와 Call by reference에 대해 설명해주세요.

자바스크립트에서는 원시 타입(primitive type)의 값은 call by value(값에 의한 호출)로 전달되고,
객체 타입(object type)은 call by reference(참조에 의한 호출)로 전달됩니다.

Call by value는 변수에 저장된 값을 복사해서 전달하는 방식입니다. 
이 방식에서는 변수의 복사본이 전달되므로
함수 내부에서 전달 받은 값을 변경해도 원래 변수의 값은 변경되지 않습니다.

반면에 call by reference는 변수 자체가 전달됩니다. 
이 방식에서는 해당 변수의 주소를 전달하므로 함수 내부에서 
전달 받은 값을 변경하면 원래 변수의 값도 변경됩니다.

Call by value는 변수에 저장된 값을 복사해서 전달하는 방식입니다.
장점은 복사하여 처리하기 때문에 매개변수로 전달된 값이 보존되고 안전합니다.
단점으로는 복사를 하기 때문에 메모리 사용량이 늘어납니다.

call by reference는 변수 자체가 전달됩니다. 
장점은 복사하지 않고 직접 참조를 하기 때문에 실행 속도가 빠릅니다. 
단점은 직접 참조를 하기 때문에 원래의 값이 영향을 받습니다.

 

🔥꼬리질문🔥

<  >

 

 

2. DDD와 MSA에 대해 설명해주세요.

DDD(Domain-Driven Design)는 도메인 주도 설계로 도메인 모델을 중심으로
설계하고 구현하는 것을 의미합니다.

도메인은 사건의 집합이라 생각하고,
여러 도메인들이 서로 상호작용하여 설계하는 것이 도메인 주도 설계입니다.
DDD의 핵심은 도메인을 서비스별로 분리하는 것 입니다.

MSA(Microservice Architecture)는 서비스를 작은 단위의 마이크로서비스로 분리하여
개발하는 아키텍처 패턴입니다. 이는 각 마이크로서비스가 독립적으로 배포 및 확장 가능하도록 설계됩니다. MSA의 핵심은 설계 및 정의할 때는 그 경계를 정하는 것이 핵심입니다.

DDD와 MSA는 객체지향과 많은 관련이 있습니다.
DDD와 MSA는 함께 사용하면 대규모 애플리케이션을 설계하고 개발하는 데 도움이 될 수 있습니다.
DDD를 사용하면 애플리케이션의 도메인 지식을 이해하고
MSA를 사용하면 애플리케이션을 작은 서비스로 분해할 수 있습니다.

 

DDD - 우아한 테크톡

참고 링크

https://huisam.tistory.com/entry/DDD

https://learn.microsoft.com/ko-kr/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/ddd-oriented-microservice

 

🔥꼬리질문🔥

<  >

728x90
반응형
728x90
반응형

1. Nest.js 라이프사이클에 대해 설명해주세요.

💘 NestJS는 Node.js를 위한 프레임워크로, 서버 사이드 애플리케이션 개발을 위해 사용됩니다.

기본적인 순서는 다음과 같습니다.

Middleware => Guards => Pre-Interceptors => Pipes => Controller => Service => Post-Interceptors => ExceptionFilter => Response

1. Middleware

전역으로 바인딩 되어있는 미들웨어를 가장먼저 실행 합니다. (main.ts 에 app.use로 바인딩 되어있는 미들웨어들)

Express와 비슷한 방식으로 바인딩 된 순서대로 순차적으로 실행 됩니다.

2. Guards

사용자의 권한을 체크하는 로직이 들어간다 예를들어 jwt를 사용한다면 @UseGuards()를 통해 jwt의 값이 유효한지 검사 할 수 있습니다.

3. Interceptor

인터셉터는 컨트롤러에 접근하기 전, 후에서 바인딩 시킬 수 있습니다.

컨트롤러에 전에 접근하기 전에 사용하려면 return 전에 사용을하면 되고 컨트롤러 접근후에 사용하려면 return 문에서 사용하면 됩니다.

4. Pipes

요청이 들어오는 파라미터의 validation 혹은 형변환이 필요할 때 파이프에서 진행 합니다.

5. Controller

routing ,http method, Request에 담긴 페이로드, Response에 담을 페이로드를 Controller에서 관리할 수 있습니다.

6. Service

실제 비지니스 로직을 Service 단 에서 관리 할 수 있습니다.

7. ExceptionFilter

익셉션 필터는 로직을 처리하다가 오류가 발생 하면 HttpException을 throw 하게 됩니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형

 

1. 자료구조 및 알고리즘 개념에 대해 설명해주세요.

자료구조는 데이터를 저장하고 관리하는 방법입니다.
궁극적인 목표는 데이터를 빠르고 안정적으로 처리하는 것입니다.
알고리즘은 어떠한 문제를 해결하기 위해 정해진 절차로 특정 문제를
효율적이고 빠르게 해결하는 것을 목표로 합니다.

 

🔥꼬리질문🔥

<  >

 

 

2. 주소창에 “www.google.com” 쳤을때 일어나는 일을 설명해주세요.

첫째 DNS 조회를 합니다.입력받은 주소를 DNS서버에 보내 해당 도메인 IP주소로 변환합니다.
둘째 서버 연결을 합니다. 받은 IP주소로 해당 서버에 연결을 시도합니다.
셋째 서버에 HTTP요청을 합니다.
넷째 서버는 요청받은 값에 대한 응답을 생성합니다.
다섯째 응답받은 값을 렌더링합니다.
여섯째 렌더링 된 값을 웹페이지에 표시합니다. 

 

자세한 내용은 다음의 링크를 참고

 

주소창에 'www.google.com'을 쳤을때 일어나는일 쉽게 설명하기

DNS 조회(DNS Lookup): 웹 브라우저는 입력한 주소를 가지고 DNS(Domain Name System) 서버에 해당 도메인의 IP 주소를 요청합니다. DNS는 도메인 이름을 해당 도메인의 IP 주소로 변환해주는 역할을 합니다.

velog.io

 

728x90
반응형
728x90
반응형

1. TypeORM 및 Query builder 개념에 대해 설명해주세요.

TypeORM은 Node.js에서 관계형 데이터베이스를 사용하는 데 사용되는 ORM입니다. 
ORM은 객체 지향 프로그래밍 언어와 
관계형 데이터베이스 간의 매핑을 제공하는 소프트웨어 도구입니다.
Query Builder는 TypeORM의 기능 중 하나로 SQL 쿼리에 대한 깊은 이해없이
데이터베이스에 대한 복잡한 쿼리를 작성할 수 있습니다.

 

🔥꼬리질문🔥

< N+1 문제에 대해 설명해주세요.  >

N+1 문제는 데이터베이스 쿼리 성능 문제로, 1번의 쿼리로 N건의 데이터를 가져왔는데, 
관련 컬럼을 얻기 위해 쿼리를 N번 추가로 수행하는 문제를 말합니다. 
이 문제는 쿼리결과 건수마다 참조 정보를 얻기 위해 건수만큼 반복해서 쿼리를 수행하게 되는 경우 발생합니다.

N+1 문제는 성능에 큰 영향을 줄 수 있기 때문에 해결하는 것이 중요합니다. 
해결 방법은 연관된 데이터를 한 번에 조회하는 방법입니다. 
예를 들어 게시물 엔티티를 조회할 때, 댓글 엔티티를 조인하여 한 번에 조회하는 방식으로 구현할 수 있습니다.
다른방법으로는 Fetch Join은 엔티티를 조회할 때 연관된 엔티티를 미리 조회하는 방법입니다.

 

2. JWT와 세션과 쿠키의 차이점을 설명해주세요.

쿠키는 클라이언트에 저장되는 작은 데이터 파일입니다. 
서버가 클라이언트에게 쿠키를 전송하면, 클라이언트는 이후 요청 시 
쿠키를 함께 전송하여 서버가 클라이언트를 식별할 수 있도록 합니다.

세션은 서버에서 클라이언트의 상태 정보를 저장하는 기술입니다. 
세션은 쿠키와 달리 서버에 저장되며, 클라이언트는 세션 ID를 쿠키에 저장하여 서버와 통신합니다. 
서버는 세션 ID를 통해 클라이언트의 상태 정보를 식별합니다.

JWT는 토큰 기반 인증 방식으로, 서버가 클라이언트에게 토큰을 발급하고 클라이언트는 
이후 요청 시 토큰을 함께 전송하여 서버가 클라이언트를 식별할 수 있도록 합니다. 
JWT는 헤더, 페이로드, 서명으로 구성되며, 
페이로드에는 클라이언트의 정보가 포함될 수 있습니다.

세 가지 방식의 차이점은 저장 위치와 보안성에 있습니다. 
쿠키는 클라이언트에 저장되며 보안성이 낮습니다. 세션은 서버에 저장되며 보안성이 높습니다. 
JWT는 클라이언트에 저장되지만, 서명을 통해 보안성을 유지합니다..

 

🔥꼬리질문🔥

< 엑세스토큰과 리프레쉬 토큰에 대해 간략하게 설명해주세요.  >

액세스 토큰은 서버에 대한 일시적인 액세스 권한을 부여하는 데 사용됩니다. 
서버에 리소스에 대한 액세스를 요청할 때마다 클라이언트는 액세스 토큰을 전송합니다. 서버는 토큰을 확인한 다음 요청을 승인하거나 거부합니다.

리프레시 토큰은 새 액세스 토큰을 요청하는 데 사용됩니다. 
액세스 토큰이 만료되면 클라이언트는 리프레시 토큰을 사용하여 새 액세스 토큰을 요청할 수 있습니다. 서버는 토큰을 확인한 다음 새 액세스 토큰을 발급합니다.

액세스 토큰은 짧은 시간 동안만 유효하고 리프레시 토큰은 더 오랜 시간 동안 유효합니다. 
이를 통해 클라이언트는 서버에 리소스에 대한 지속적인 액세스 권한을 유지하면서 액세스 토큰을 자주 새로 고칠 필요가 없도록 할 수 있습니다.

728x90
반응형
728x90
반응형

1. Redis와 Memcached의 차이점에 대해 설명해주세요.

Redis와 Memcached는 모두 키-값 저장소이지만 몇 가지 주요 차이점이 있습니다.
Redis는 Memcached보다 더 광범위한 데이터 유형을 지원합니다. Redis는 정수, 문자열, 목록 및 해시와 같은 다양한 데이터 유형을 저장할 수 있는 반면 Memcached는 문자열만 저장할 수 있습니다.
Redis는 Memcached보다 더 많은 기능을 제공합니다. Redis는 스트림, 큐 및 세션을 포함한 다양한 기능을 제공하는 반면 Memcached는 이러한 기능을 제공하지 않습니다.
Redis는 Memcached보다 확장성이 뛰어납니다. Redis는 분산된 방식으로 실행할 수 있는 반면 Memcached는 분산된 방식으로 실행할 수 없습니다.
전반적으로 Redis는 Memcached보다 더 기능적이고 확장성이 뛰어나고 다양한 데이터 유형을 지원하는 더 광범위한 데이터베이스입니다. 그러나 Memcached는 Redis보다 단순하고 사용하기 쉬우며 더 빠릅니다.

 

🔥꼬리질문🔥

<  >

 

2. XSS와 CSRF에 대해 설명해주세요.

XSS는 공격자가 악성 스크립트를 웹 페이지에 삽입하여 사용자가 악성 스크립트를 실행하도록 유도하는 공격입니다. 
공격자가 사용자의 쿠키나 세션 정보를 훔치거나 사용자를 다른 웹사이트로 리디렉션하는 데 사용할 수 있습니다.
CSRF는 공격자가 사용자가 웹 애플리케이션에 요청을 보내도록 유도하여 의도하지 않은 작업을 수행하는 공격입니다. 
공격자는 사용자의 계정을 제어하거나 돈을 훔치거나 기타 피해를 입히는 데 사용할 수 있습니다.

 

🔥꼬리질문🔥

<  >

728x90
반응형
728x90
반응형

1. RDBMS과 NoSQL에 대해 설명해주세요.

RDBMS는 관계형 데이터베이스로 데이터를 테이블에 저장하는 데이터베이스입니다.
엔티티 간의 관계를 정의하고 스키마를 엄격하게 관리합니다.
반면 NoSQL은 키-값, JSON문서, 그래프 등의 다양한 방법으로 데이터를 저장하는 데이터베이스입니다.
일관성이 낮은 대량의 데이터를 저장하는 애플리케이션에 적합합니다.

 

 

<데이터 모델>

RDBMS는 데이터를 테이블에 저장하는 관계형 데이터 모델을 사용합니다. 

NoSQL 데이터베이스는 JSON 문서, 키-값 쌍 또는 그래프와 같은 다양한 방법으로 데이터를 저장할 수 있습니다.

 

<일관성>

RDBMS는 데이터가 항상 일관되게 유지되도록 하는 ACID 속성을 지원합니다. 

NoSQL 데이터베이스는 일관성 속성을 지원하지 않을 수 있습니다.

 

<확장성>

RDBMS는 일반적으로 수직 확장(성능업)을 통해 확장됩니다.

NoSQL 데이터베이스는 일반적으로 수평 확장(서버 추가)을 통해 확장됩니다.

 

<사용>

RDBMS는 일반적으로 OLTP(온라인 트랜잭션 처리) 애플리케이션에 사용됩니다. 

NoSQL 데이터베이스는 일반적으로 OLAP(온라인 분석 처리) 애플리케이션 및 대량 데이터 애플리케이션에 사용됩니다.

 

 

🔥꼬리질문 : 관계형 데이터베이스는 왜 관계형이란 이름이 붙을까요?🔥
관계형 데이터베이스는 데이터가 서로 관련된 방식으로 테이블에 저장되기 때문에 관계형이라고 합니다. 테이블은 행과 열로 구성되며 행은 데이터 레코드이고 열은 데이터 필드입니다. 테이블은 관계를 통해 함께 연결할 수 있으며 관계는 데이터의 논리적 관계를 나타냅니다. 예를 들어 고객 테이블과 주문 테이블은 고객 ID 열을 통해 연결될 수 있습니다. 즉, 특정 고객 ID에 대한 모든 주문을 검색할 수 있습니다.

🔥꼬리질문 : 프로젝트에서 RDBMS를 사용한 이유는?🔥
저희 최종프로젝트의 주제는 맛집SNS였습니다. 팔로워와 팔로잉간의 관계, 게시물의 좋아요와 댓글 등 다양한 데이터들이 서로 관계가 있기 때문에 NoSQL보다는 RDBMS에 적합하다 생각하여 RDBMS를 채택하게 되었습니다.

 

🔥꼬리질문 : NoSQL를 사용하는 이유는 무엇일까요?🔥
NoSQL을 사용하는 이유는 다양합니다.

첫째, RDBMS보다 많은 리소스가 필요하지 않기 때문에 대량의 데이터를 저장할 수 있습니다.

둘째, 수직확장(기능업)하는 RDBMS보다 NoSQL의 수평확장(서버추가)이 확장하기 용이합니다.

셋째, NoSQL은 복잡한 쿼리문을 사용하지 않기 때문에 사용하기가 편합니다.

그래서 NoSQL은 로그기록과 같이 데이터 일관성이 낮은 대량의 데이터를 처리할때 적합합니다.

 

🔥꼬리질문 : 트랜젝션에 대해 설명해주세요.🔥
트랜잭션(Transaction)은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위 또는 한꺼번에 모두 수행되어야 할 일련의 연산들을 의미합니다. 트랜잭션의 주요 목적은 데이터의 무결성과 일관성을 보장하는 것입니다. 여러 작업을 단일 트랜잭션으로 그룹화하여 트랜잭션 내의 모든 작업이 성공적으로 실행되거나 아무 것도 실행되지 않도록 할 수 있습니다.

트랜잭션은 신뢰할 수 있고 일관된 데이터 처리를 보장하는 ACID속성을 따릅니다.

트랜잭션은 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 지속성(Durability)의 4가지 특징을 가집니다.

 

원자성은 트랜잭션이 데이터베이스에 모두 반영되던가, 아니면 전혀 반영되지 않아야 한다는 것을 의미합니다.
일관성은 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야 한다는 것을 의미합니다.
독립성은 둘 이상 트랜잭션이 동시 실행시 어떤 트랜젝션이라도 다른 트랜잭션 연산에 끼어들 수 없다는 점을 의미합니다.
지속성은 트랜잭션이 성공적으로 완료됬을 경우, 결과는 영구적으로 반영되어야 한다는 점입니다.

 

2. REST API에 대해 설명해주세요.

RESTful API란 REST 아키텍처 스타일을 따르는 API입니다.
웹 서비스에서 자원을 정의하고 HTTP 메소드를 사용하여 CRUD작업을 수행합니다.
REST의 핵심은 요청의 목적을 명시적으로 드러내도록 작성하는 것 입니다.

 

 

🔥꼬리질문 : URL과 URI 차이점을 설명해주세요.🔥

URL과 URI는 모두 자원을 식별하는데 사용되지만 의미가 다릅니다.
URL은 네트워크에서 자원을 식별하는데 사용되는 URI의 일종입니다. 
예를 들어 http naver.com의 url은 웹사이트의 기본페이지인 index.html 파일이 있는 위치를 식별합니다.

URI는 네트워크에서 자원을 식별하는 것에 사용되는 URI의 일종입니다. URL, URN 및 기타 자원 식별자를 포함하는 포괄적인 용어입니다.
따라서 모든 URL은 URI지만, 모든 URI는 URL은 아닙니다. URI는 파일, 웹 사이트, 이메일 메시지 또는 기타 네트워크 리소스를 식별하는 데 사용할 수 있습니다. URL은 네트워크에서 자원의 위치를 ​​식별하는 데만 사용할 수 있습니다.

결론적으로는 URL은 자료의 위치, URI는 자료의 식별자라고 보시면 됩니다.

 

🔥꼬리질문 : HTTP와 HTTPS 차이점을 설명해주세요.🔥
HTTP와 HTTPS의 주요 차이점은 데이터가 전송되는 방식, 즉 SSL의 유무입니다. 
HTTPS는 HTTP 프로토콜에 보안 기능을 추가한 것으로, 이 보안 기능은 매우 중요합니다.
HTTP는 데이터를 평문으로 전송하는 반면 HTTPS는 암호화된 연결을 사용하여 데이터를 전송합니다. 
즉, HTTPS는 HTTP보다 안전합니다. 

SSL(Secure Sockets Layer)은 웹 서버와 클라이언트 간에 보안 연결을 설정하는 데 사용되는 암호화 프로토콜입니다.
보안강화하는 방법으로는 암호화, 인증, 무결성이 있습니다.

 

🔥꼬리질문 :Stateless Protocol에 대해 설명해주세요.🔥
Stateless Protocol은 서버가 클라이언트에 대한 정보를 저장하지 않는 프로토콜입니다.

즉, 각 요청은 독립적으로 처리되고 서버는 이전 요청이나 다음 요청에 대한 정보를 저장하지 않습니다.

Stateless Protocol에는 다음과 같은 장점이 있습니다.
1. 확장성: 클라이언트 수가 많더라도 확장하기 쉽습니다. 서버는 클라이언트에 대한 정보를 저장할 필요가 없으므로 확장할 때 더 많은 컴퓨팅 리소스가 필요하지 않습니다.
2. 효율성:  서버는 클라이언트에 대한 정보를 저장할 필요가 없으므로 각 요청을 처리하는 데 더 적은 리소스가 필요합니다.
3. 보안: 서버는 클라이언트에 대한 정보를 저장할 필요가 없으므로 공격자가 클라이언트에 대한 정보를 훔칠 가능성이 줄어듭니다.

상태가 없는 프로토콜에는 다음과 같은 단점도 있습니다.
1. 추적하기 어려움:  서버는 클라이언트에 대한 정보를 저장할 필요가 없으므로 각 요청을 추적하기가 어렵습니다.
2. 낮은 사용자 경험: 예를 들어, 로그인한 상태를 유지하려면 서버는 클라이언트에 대한 정보를 저장해야 합니다.

 

전반적으로 상태가 없는 프로토콜은 확장성, 효율성 및 보안성을 제공합니다. 그러나 추적하기 어렵고 사용자 경험이 떨어질 수 있습니다.

728x90
반응형

+ Recent posts