데이터는 아날로그이거나 디지털이다. 아날로그 데이터는 연속적인 정보이고 디지털 데이터는 이산적인 데이터이다. 예를 들어, 아날로그 시계는 시간,분,초침이 연속적인 형태로 정보를 준다. 반대로 디지털 시계는 8:05분에서 8:06분으로 바뀔때처럼 시간과 분이 갑자기 바뀐다. Analog Signal 아날로그 신호는 단순(simple)하거나 복합적인(composite) 신호들로 구성된다. Sign Wave 주기적 신호는 여러개의 sine waves로 이루어져있다. sine waves란 모든 아날로그 신호의 기본이되는 형태다. 1초에 12번 진동한다하고면 주기는 진동수에 반비례하므로 1/12초가 된다. 1초에 6번 진동한다고하면 주기는 1/6초가 된다. 예를 들어, 우리 가정에서 사용하는 전력의 진동수는 60..
소수 구하기의 핵심이론 대표적인 판별법으로는 에라토스테네스의 체를 들 수 있다. 에라토스테네스의 체란? 구하고자 하는 소수의 범위만큼 1차원 배열을 생성한다. 2부터 시작하고 현재 숫자가 지워지지 않을 때는 현재 선택된 숫자의 배수에 해당하는 수를 배열에서 끝까지 탐색하면서 지운다. 이때 처음으로 선택된 숫자는 지우지 않는다. 배열의 끝까지 2를 반복한 후 배열에서 남아 있는 모든 수를 출력한다. 에라토스테네스의 체를 사용할 때 시간 복잡도는? 일반적으로 에라토스테네스의 체를 구현하려면 이중 for문을 이용하므로 시간 복잡도가 O(N²) 라고 판단 할 수 있다. 하지만 실제 시간 복잡도는 최적화의 정도에 따라 다르지만, 일반적으로 O(Nlog(logN))이다. 그 이유는 배수를 삭제하는 연산으로 실제 구..
Process Control Modes of Execution (실행 모드) - User mode(사용자 모드) 운영체제 서비스를 제공받을 수 없는 실행 모드 일반적인 응용 프로그램은 기본적으로 사용자 모드로 실행 입출력 명령어와 같이 하드웨어 자원에 접근하는 명령어를 실행할 수 없다. - kernel mode(커널 모드) 운영체제 서비스를 제공받을 수 있는 실행 모드 자원에 접근하는 명령어를 비롯한 모든 명령어를 실행할 수 있음. 커널 모드의 기능들 두 개의 모드를 나누어 사용하는 이유 - OS 와 OS tables를 보호하기 위해서다. 즉, 응용 프로그램들이 CPU, 메모리, 하드 디스크 등에 마음대로 접근하고 조작할 수 있다면 자원이 무질서하게 관리될 것이고, 응용 프로그램이 조금만 실수해도 컴퓨터..
ArgumentResolver HandlerMethodArgumentResolver Spring MVC에서 컨트롤러 메서드의 각 파라미터가 어떻게 해석되어야 할지 결정하는 전략을 제공하는 인터페이스 즉, HTTP 요청과 관련된 데이터를 어떤 방식으로 컨트롤러 메서드의 인자로 전달할지 결정하는 역할을 함 -> (@RequestParam, @PathVariable 등) 으로 처리할 수 없는, 더 복잡하거나 특수한 요구사항을 가진 파라미터 바인딩을 구현할 수 있다. ArgumentResolver - HandlerMethodArgumentResolver의 구현체를 지칭하는 말 HandlerMethodArgumentResolver 인터페이스는 주로 두 가지 메소드를 정의한다. 핵심메소드 supportsParame..
JSP서블릿과 자바 코드만으로 HTML을 만든다면 매우 복잡하고 비효율 적이다. 차라리 HTML 문서에 동적으로 변경해야 하는 부분만 자바 코드로 넣을 수 있다면 더 편리한데 이것이 바로 템플릿 엔진이 나온 이유이다. 템플릿 엔진을 사용하면 HTML 문서에서 필요한 곳만 코드를 적용해서 동적으로 변경할 수 있다.템플릿 엔진에는 JSP, Thymeleaf, Freemarker, Velocity등이 있다. MVC 패턴 Model, View, Controller- 하나의 서블릿이나, JSP로 처리하던 것을 컨트롤러(Controller)와 뷰(View)라는 영역으로 서로 역할을 나눈 것을 말한다. 컨트롤러 : HTTP 요청을 받아서 파라미터를 검증하고, 비즈니스 로직을 실행한다. 그리고 뷰에 전달할 ..
서블릿 컨테이너 동작 방식 스프링 부트를 실행하면 내장 톰캣서버를 띄우고 톰캣서버는 내부에 서블릿을 생성하고 위와 같은 요청을 보낸다. 웹 브라우저에서 HTTP 요청 메시지를 기반으로 request 객체를 만들어 전달하여 helloServlet을 호출하여 Response 객체 정보로 반환하여 웹 브라우저에서 볼 수 있게된다. HttpServletRequest서블릿은 아래와 같은 HTTP 요청 메시지를 파싱해서 HttpServletRequest에 담아준다.POST /save HTTP/1.1Host: localhost:8080Content-Type: application/x-www-form-urlencodedusername=kim&age=20 "임시 저장소 기능"해당 HTTP 요청이 시작부터..
Protocol Layering 프로토콜은 송신자와 수신자 또는 디바이스들 사이에서 효과적으로 통신을 할 수 있게하는 규칙이다. 통신이 간단하면 하나의 프로토콜이 필요하지만, 통신이 복잡하다면 각 층마다 프로토콜이 필요할 것이다. 이를 프로토콜 계층화(Protocol Layer)라고한다. 프로토콜 계층화를 사용하면 복잡한 작업들을 작고 간단한 작업들로 나누는 것을 가능하게 한다. 계층화를 사용하지 않는다면 암호화/복호화 방식을 바꿔야한다면 전체를 바꿔야할 것이다. 하지만 암호화/복호화 만을 담당하는 계층을 만든다면 다른 계층들은 신경쓸 필요가 없어진 것이다. => 모듈화(Modularity) 라고한다. Advantage of Protocol Layering 서비스와 구현을 분리시켜준다. 계층은 하위 계층..
그리디 알고리즘이란 현재 상태에서 보는 선택지 중 최선의 선택지가 전체 선택지 중 최선의 선택지라고 가정하는 알고리즘이다. 그리디 알고리즘의 핵심 이론 해 선택: 현재 상태에서 가장 최선이라고 생각되는 해를 선택한다. 적절성 검사: 현재 선택한 해가 전체 문제의 제약 조건에서 벗어나지 않는지 검사한다. 해 검사: 현재까지 선택한 집합이 전체 문제를 해결할 수 있는지 검사한다. 전체 문제를 해결하지 못한다면 1. 로돌아가 같은 과정을 반복한다. 문제 풀이 먼저 선택된 카드 묶음이 비교 횟수에 더 많은 영향을 미친다. 따라서 카드 묶음의 카드의 개수가 작은 순서대로 먼저 합치는 것이 전체 비교 횟수를 줄일 수 있는 방법이다. 즉, 현재 데이터 중 가장 작은 카드의 개수를 가진 묶음 2개를 ㅃㅂ고 다시 데이터..
문제의 핵심은 이진탐색이다. 이진탐색은 데이터가 정렬돼 있는 상태에서 원하는 값을 찾아내는 알고리즘이다. 대상 데이터의 중앙값과 찾고자 하는 값을 비교해 데이터의 크기를 절반씩 줄이면서 대상을 찾는다. 핵심이론은 다음과 같다. 현재 데이터셋의 중앙값을 선택한다. 중앙값 > 타깃 데이터일 때 중앙값 기준으로 왼쪽 데이터셋을 선택한다. 중앙값 < 타깃 데이터일 때 중앙값 기준으로 오른쪽 데이터셋을 선택한다. 과정 1~3을 반복하다가 중앙값 == 타깃 데이터일 때 탐색을 종료한다. 문제에서는 블루레이의 크기가 모두 같고 녹화순서가 바뀌지 않아야 함 이라는 문제 조건이 이진 탐색 알고리즘을 선택하게 하는 실마리이다. 이진탐색의 시작 인덱스는 최대 레슨 시간인 9, 종료 인덱스는 레슨 시간을 모두 합한 45이다...
목차 Process Description * 실선 : 프로세스를 할당함. * 점선 : 할당 요청은 했으나 할당 받지 못함. P1이 프로세스를 할당받았기 때문에 P2는 할당을 기다리는 상태이다. Pn은 메인 메모리에 메모리 요청을 했으므로 이는 new 상태일수도 있고 suspended 상태일 수도 있음. 운영체제가 관리하는 개체에 대해 테이블을 생성한다. Memory Table I/O Table File Table Process Table Memory Table - 메인 메모리에서 프로세스로 할당 - 보조기억장치에서 프로세스로 할당 - 공유 메모리 영역에서 접근에 대한 보호 - 가상 메모리를 관리하기 위한 정보 I/O Table - 입출력장치를 할당한다. - 입출력장치의 상태 - 입출력 전송의 목적지 또는..