'IT' 카테고리의 다른 글

대문자, 소문자 변환  (0) 2024.06.10
split() 함수로 문자열 자르기  (0) 2024.06.09
Integer.parseInt()  (0) 2024.06.09
배열(Array) 정렬하기  (0) 2024.06.09
재귀함수란?  (0) 2024.06.09

'IT' 카테고리의 다른 글

split() 함수로 문자열 자르기  (0) 2024.06.09
replace() / replaceAll() 사용법  (0) 2024.06.09
배열(Array) 정렬하기  (0) 2024.06.09
재귀함수란?  (0) 2024.06.09
Docker(도커)란?  (1) 2024.06.08

'IT' 카테고리의 다른 글

replace() / replaceAll() 사용법  (0) 2024.06.09
Integer.parseInt()  (0) 2024.06.09
재귀함수란?  (0) 2024.06.09
Docker(도커)란?  (1) 2024.06.08
정적 웹 페이지와 동적 웹 페이지  (0) 2024.06.08

-재귀함수란 자기 자신을 호출하는 함수를 말한다. 종료 조건이 충족될 때까지 반복적으로 스스로를 불러내면서 주어진 작업을 수행하는 것이다. 

재귀함수는 호출될 때마다 메모리의 스택에 쌓이게 된다. 한계치 이상으로 호출돼서 스택이 넘처버리면 메모리 부족으로 에러가 발생하게 된다. 

속도 면에 있어서도 재귀함수는 jump가 잦아서 반복문에 비해 시간을 더 소모한다. 
이런 문제를 해결하기 위해 많은 언어들에서 꼬리 재귀 최적화 (Tail Call Optimization) 라는 기능을 제공한다. 

재귀함수를 컴퓨터가 재해석해서 선형 알고리즘으로 만들어 실행한느 것이다. 

그럼 아무리 반복이 많아도 스택이 넘치는 일은 일어나지 않는다. 

재귀함수가 꼬리 재귀가 되려면 return하는 값이 함수 그 자체만 호출하는 형태이여야 한다.    ex) canTailRecurse(arg)

다른 것(들)이 섞여 return: 꼬리재귀 불가   ex) n * canTailRecurse(arg)

 


 

하노이의 탑을 재귀함수로 수행하는 코드

function hanoi(num, from, to, other) {
	if(num == 0) return;
	hanoi(num - 1, from, other, to);
	console.log(${from}번에서 ${to}로 옮긴다.);
	hanoi(num - 1, other, to, from);
}

 

인자로는 출발지와 목적지, 그리고 나머지 기둥의 번호를 받는다. 
스스로를 호출하는 코드가 두 번있고, 그 사이에 원반을 어디에서 어디로 한 번 옮길지를 출력

첫 번째 호출에서는 받아온 원반 개수보다 하나 적은 원반들을 목적지가 아닌 곳으로 재귀적으로 이동시킨다. 그 다음에는 맨 아래 원반을 목적지로 이동시키고 마지막으로, 다른 곳으로 옮겼던 원반들을 그 위에 얹는 것

'IT' 카테고리의 다른 글

Integer.parseInt()  (0) 2024.06.09
배열(Array) 정렬하기  (0) 2024.06.09
Docker(도커)란?  (1) 2024.06.08
정적 웹 페이지와 동적 웹 페이지  (0) 2024.06.08
TCP, UDP  (0) 2024.06.06

도커

도커는 애플리케이션을 신속하게 구축, 테스트 및 배포할 수 있는 소프트웨어 플랫폼이다. Docker는 소프트웨어를 컨테이너라는 표준화된 유닛으로 패키징하며, 이 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는 데 필요한 모든 것이 포함되어 있다. 

 


 

도커 이미지들은 DockerHub이라는 곳에 업로드돼서 공유되고 다운받아질 수 있다.
그리고 이렇게 이미지로 저장된 항목들이 함께 연결돼서 동작하도록 설정된 상태를 명령어 텍스트나 문서 형태로 저장할 수도 있다.

 

 

- 도커는 컴퓨터에 바로 설치하지 않는다. 각각을 컨테이너라고 불리는, 독립된 가상 공간을 만들어내서 복원한다. 다른 버전의 자바를 돌리는 서비스들도 각각의 컨테이너 안에서, 서로 방해받는 일 없이 돌아갈 수 있는 것이다.

도커는 OS까지 내려가지 않고 실행 환경만 독립적으로 돌리는 거라서 컴퓨터에 직접 요소들을 설치한 거랑 별 차이 없는 성능을 낼 수 있고 가상 컴퓨팅보다 훨씬 가볍고 빠르게 각각을 설치하고 실행하고 켜고 끄고 서로 연동하고 할 수 있다.

서버를 고쳐야하거나 일부를 업그레이드 해야하는 경우에는, 일일이 요소들을 정지하고 지우거나 새로 깔거나 할 필요없이 그냥 컨테이너들을 통째로 교체해서 새로 실행해버리면 된다.

서버를 관리하고 서비스들을 배포하는 일이 전과는 비교를 할 필요없이 쉬워진 것이다.

'IT' 카테고리의 다른 글

배열(Array) 정렬하기  (0) 2024.06.09
재귀함수란?  (0) 2024.06.09
정적 웹 페이지와 동적 웹 페이지  (0) 2024.06.08
TCP, UDP  (0) 2024.06.06
테스트  (0) 2024.06.05

정적 웹 페이지

  • 정적 웹은 언제 접속해도 같은 리소스를 건네주는 웹사이트를 말한다. 이미 프로그래머가 작성해 놓은 파일들을 그대로 클라이언트의 브라우저에 건내준다.
  • 정적 웹의 기준은 접속할 때마다 받게 되는 HTML, CSS, JavaScript 코드들 그리고 동봉된 이미지, 동영상 등의 파일들이 같은가 이다. 서버에서 이걸 매번 가공해서 제공하는게 아니라 프로그래머가 작성해서 갖다 준 제품들이 진열되어 있는 걸 그대로 가져가게 하냐는 것

접속 시마다 내용이 변할 필요가 없는 사이트들, 예를 들어 어떤 회사나 학교의 소개 페이지라던가 댓글 기능이 없는 블로그 페이지 등에 사용될 수가 있다.


동적 웹 페이지

  • 데이터베이스로부터 정보를 읽어서 접속할 때마다 최신 정보를 보여주는 웹페이지
  • 웹 서버는 데이터베이스에 액세스하고 트랜잭션 절차를 수행할 수 있는 하드 디스크에 있는 프로그램을 호출한다. 응용 프로그램이 웹 서버에서 HTTP 응답을 생성하는 데 사용되는 HTML 출력을 생성하는 경우 웹 서버는 생성된 HTTP 응답을 다시 웹 브라우저로 보낸다.

동적 웹 페이지는 주식 가격, 날씨 정보, 뉴스 및 스포츠 업데이트와 같이 정보가 자주 변경되는 곳에 사용된다.

동적 웹 페이지를 만드는 데 사용되는 도구는 CGI (Common Gateway Interface), ASP (Active Server Pages), JSP (Java Server Pages), ASP.NET, AJAX (Asynchronous JavaScript and XML) 등이 있다.

'IT' 카테고리의 다른 글

재귀함수란?  (0) 2024.06.09
Docker(도커)란?  (1) 2024.06.08
TCP, UDP  (0) 2024.06.06
테스트  (0) 2024.06.05
변수? 객체? 클래스?  (1) 2024.06.04

Transport Layer (전송계층)

End point 간 신뢰성 있는 데이터 전송을 담당하는 계층

  • 신뢰성 : 데이터를 순차적, 안정적인 전달
  • 전송 : 포트 번호에 해당하는 프로세스에 데이터를 전달

만약 전송 계층이 없다면??

  1. 데이터의 순차 전송이 원활히 안될 것이다.
  2. Flow(흐름 문제), 송수신자 간의 데이터 처리 속도 차이
  3. Congestion(혼잡 문제), 네트워크의 데이터 처리 속도 (ex. 라우터)

결과적으로 데이터의 손실이 발생할 것이다.

TCP (Transmission Control Protocol)

  • 신뢰성있는 데이터 통신을 가능하게 해주는 프로토콜
  • 특징 : Connection 연결 (3 way-handshake) - 양방향 통신
  • 데이터의 순차 전송을 보장
  • Flow Control(흐름 제어)
  • Congestion Control (혼잡 제어)
  • Error Detection (오류 감지)

TCP의 문제점

  1. 전송의 신뢰성은 보장하지만 매번 Connection을 연결해서 시간손실 발생
    (3 way - handshake)
  2. 패킷을 조금만 손실해도 재전송

UDP (User Datagram Protocol)

  • TCP보다 신뢰성이 떨어지지만 전송 속도가 일반적으로 빠른 프로토콜
    (순차전송 x, 흐름제어 x, 혼잡 제어 x)
  • Connectionless (3 way-handshake x)
  • Error Detection
  • 비교적 데이터의 신뢰성이 중요하지 않을 때 사용 (ex. 영상 스트리밍)

 TCP, UDP의 특성을 파악하고 상황에 따라 적합한 프로토콜을 사용할 수 있다.
TCP, UDP의 헤더에 대해 파악하고 성능 개선에 이용할 수 있다. 

 

 

movie

'IT' 카테고리의 다른 글

Docker(도커)란?  (1) 2024.06.08
정적 웹 페이지와 동적 웹 페이지  (0) 2024.06.08
테스트  (0) 2024.06.05
변수? 객체? 클래스?  (1) 2024.06.04
컴파일 언어 & 인터프리터 언어  (0) 2024.06.04

+ Recent posts