관리 메뉴

제뉴어리의 모든것

[Section2] 기술면접 본문

코드스테이츠/정리 블로깅

[Section2] 기술면접

제뉴어리맨 2022. 10. 17. 22:30

선택 질문

  • 이진 탐색 알고리즘(BST)이 데이터를 효율적으로 찾기 위해 탐색하는 과정을 설명해주세요.
  • URL과 URI의 차이점이 무엇인가요?
  • 트랜잭션에 대해 설명해주세요.

 


이진 탐색 알고리즘(BST)이 데이터를 효율적으로 찾기 위해 탐색하는 과정을 설명해주세요.

오름차순으로 정렬된 리스트에서 특정한 값의 위치를 찾는 알고리즘으로
임의의 중간값을 선택하여, 그 값과 찾고자 하는 값의 크고 작음을 비교하는 방식을 채택 배열 혹은 이진 트리를 이용하여 구현할 수 있음

  • 시간복잡도: O(log n)
  • 장점: 검색이 반복될 때마다 목표값을 찾을 확률은 두 배가 되므로 속도가 빠름
  • 단점: 검색 원리상 정렬된 리스트에만 사용할 수 있음

 

 

 

URL과 URI의 차이점이 무엇인가요?

 

URI
통합 자원 식별자(Uniform Resource Identifier, URI)는 인터넷에 있는 자원을 나타내는 유일한 주소이다.
URI의 존재는 인터넷에서 요구되는 기본조건으로서 인터넷 프로토콜에 항상 붙어 다닌다.
URI의 하위개념으로 URL, URN 이 있다


URL
URL(Uniform Resource Locator, 문화어: 파일식별자, 유일자원지시기)은 네트워크 상에서 자원이 어디 있는지를 알려주기 위한 규약이다.
즉, 컴퓨터 네트워크와 검색 메커니즘에서의 위치를 지정하는, 웹 리소스에 대한 참조이다.
흔히 웹 사이트 주소로 알고 있지만, URL은 웹 사이트 주소뿐만 아니라 컴퓨터 네트워크상의 자원을 모두 나타낼 수 있다. 그 주소에 접속하려면 해당 URL에 맞는 프로토콜을 알아야 하고, 그와 동일한 프로토콜로 접속해야 한다.


URN
URN(Uniform Resource Name, 통합 자원 이름)은 urn:scheme 을 사용하는 URI를 위한 역사적인 이름이다.
URN은 영속적이고, 위치에 독립적인 자원을 위한 지시자로 사용하기 위해 1997년도 RFC 2141 문서에서 정의되었다.

 

예를 들어 http://opentutorials.org:3000/main?id=HTML&page=12 라고 되어있는 주소가 있다고 가정하자.

여기서 http://opentutorials.org:3000/main 여기까지는 URL이고(URI이기도 한)

http://opentutorials.org:3000/main?id=HTML&page=12 

 

 

트랜잭션에 대해 설명해주세요.

트랜잭션(Transaction 이하 트랜잭션)이란, 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위를 뜻한다.

해당 작업들에는 SELECT INSERT DELETE UPDATE존재한다.

트랜잭션의 특징은 크게 4가지로 구분된다. 

    1. 원자성
      트랜잭션이란 화학에서 말하는 원자처럼,
      더이상 쪼갤 수 없는 작업단위여야 한다는것이다.
      물론, 트랜잭션 안에는 여러 작업이 존재 할 수 있으나 그 여러 작업이 부분 성공, 부분 실패가 불가능하다는것이다.
      트랜잭션의 결과는 "성공" 혹은 "실패"의 결과만 존재한다.

    2. 일관성
      트랜잭션이 성공할 경우, 항상 의도한 대로 일관된 결과를 도출해야한다는 것이다.
      트랜잭션의 성공시에 의도하지 않거나, 일관되지 않은 결과가 나와선 안된다.
      예를 들어, 고객이 상품을 하나 구매할때마다 1포인트씩 적립이 되기로 했는데
      어떤 고객은 상품을 구입하니까 2포인트가 올라가거나 하는 일관적이지 않은 결과가 존재해선 안되고 의도한대로 1포인트씩 적립되어야 한다는것이다.
      그러나, 상품의 가격마다 적립되는 포인트가 다른 적립 방법도 있을것이다.
      마치 일관성이 없는것처럼 보이지만, 상품의 가격에따라 적립되는 포인트 규칙이 있고, 해당 규칙에 따라 적립이 되는것이므로 의도한 대로 결과가 도출되는것이므로 일관성을 지킨다고 할 수 있다.

    3. 격리성
      여러 트랜잭션이 존재할 경우 각각의 트랜잭션은 다른 트랜잭션의 작업에 관여하거나, 영향을 주어선 안되며 자신의 작업만을 수행하여야 한다는것이다.

    4. 지속성
      성공한 트랜잭션의 결과는 휘발되는것이 아니라, 지속 가능해야 한다는것이다.
      DB를 예를 들자면, update, create, delete 같은 처리들을 한 후 최종적으로 commit 까지 하여 성공한 결과는 계속 DB에 반영이 되어 있어야 한다는것이다. commit을 한 후 갑자기 데이터가 rollback 되거나 해선 안된다.
      물론 처리 결과는 이후에 또 다른 update, create, update 로 인해 달라 질 수는 있다.
      그러나 그것은 다른 트랜잭션의 처리 이므로 지속성과는 관련이 없다.