FDT, FT, IT - FDT(파일디스크립터 테이블) : 프로세스마다 한개씩 가지고있음. 0:stdin, 1:stdout, 2:stderr로 자동할당, 3부터 파일 open시 할당된다. 파일을 시스템 프로그래밍 차원에서 바이트단위의 입출력으로 다룰 수 있게 한다. - FT(파일 테이블) : 모든 프로세서가 오픈한 파일에 대한 참조. 파일디스크립터 테이블에서 참조하는 수 - IT(아이노드 테이블) open(2) 파일을 열거나 생성할 때 사용하는 system call 함수 #include #include #include int open(const char* pathname, int oflag); int open(const char* pathname, int oflag, mode_t mode); @param..
개요 ㆍ 표준 입출력 라이브러리를 사용하기 위해서는 stdio.h를 포함시켜야 한다. #include ㆍ 표준 입출력 라이브러리는 고수준 입출력 함수이다. 참고로 저수준 입출력 함수는 system call(시스템 호출 함수)를 의미한다. ㆍ고수준 함수는 스트림형 구조체(FILE, DIR)를 사용한다. 바이트 단위로 입출력을 하는 것이 아니라 버퍼를 통해 읽고 쓰기 작업을 하기 때문에 문자단위, 행단위, 버퍼 단위로 다양하게 입출력이 가능하다. ㆍfopen류 함수호출 성공시 FILE포인터가 리턴되고, 실패시 NULL 리턴. 실패 이유에는 파일이 존재하지 않거나, 접근권한이 없거나, 한번에 파일을 열 수 있는 최대 개수를 초과하는 경우가 있다. 1. fopen(3) 매개변수로 들어온 경로의 파일을 매개변수의..
0. Internet Protocol 다른 계층과 마찬가지로 3계층인 네트워크 계층에도 여러 프로토콜들이 존재한다. 그러나 그 중에 가장 대표적이고 널리사용되는 프로토콜은 인터넷 프로토콜, IP이다. 인터넷을 사용하는 모든 컴퓨터는 자신의 고유 주소를 가지는데, 이러한 주소를 바로 IP주소라고 한다. 따라서 인터넷에서 전송되는 모든 데이터(패킷)들은 네트워크 계층의 IP를 기반으로 송수신되고, 전송 계층의 TCP에 의해 재조립되어 메세지를 전달한다. IP를 사용하여 패킷을 전달하는데는 여러가지 문제가 있다. 송신자는 수신자 서버의 상태를 알 수 없고, 전달 과정 중 패킷이 유실될 수도 있고, 큰 데이터를 여러 패킷으로 나누어 데이터를 전송하는 과정에 패킷의 순서가 뒤바뀔 수도 있다. 이러한 문제는 IP프..
Network layer 네트워크 계층은 전송계층에서 만들어진 세그먼트를 receiving 호스트로 전달한다. 송신 측에서는 세그먼트를 encapsulation하여 데이터그램을 만들고, 수신 측에서는 데이터그램을 decapsulation과정을 거쳐 세그먼트로 분리하여 상위 전송 계층으로 전달한다. 하위 계층인 링크 계층은 바로 옆의 라우터에 패킷을 전송하는 과정만 관리한다. 하지만 바로 옆 라우터의 정보만 안다고 해서 목적지까지 패킷을 최적화된 경로로 전송하는 것은 불가능하다. 따라서 네트워크 계층에서는 링크 계층과 다르게 바로 옆 라우터와의 통신이 아닌 전체적인 송수신 경로에 대한 관리가 이루어진다. Forwarding, Routing네트워크 계층에서 가장 중요한 두 개의 function이다. 포워..
문제를 보고 상하좌우 4방향을 검사하여 방문한 적이 없는 집이 하나도 없으면 새로 방문하는 단지로 풀면 되겠다 생각헸는데, 탐색 순서를 보면 문제 예제의 2번같은 경우 다른 쪽 끝을 먼저 탐색할 경우 단지의 개수를 증가시키는 연산을 하게되어 단지수를 정확하게 계산할 수 없게 되어 문제가 생긴다. 당연하게도 단지 내 집의 개수도 계산할 수 없다. 무엇보다도 이런 좌표탐색 문제의 경우 한 부분을 완료하고 다음 부분으로 넘어가야지 위와 같은 문제가 발생하지 않는다. dfs가 떠오르지 않은 것은 아니지만 dfs는 사용하기 망설여지는게 input이 과하게 클경우 시간초과가 너무 많이나서 꺼려지게됨. > DFS의 시간복잡도는 리스트의경우 O(|V|+|E|), 인접행렬의 경우 O(V^2)이므로 행렬의 최대크기가 25..
https://www.thymeleaf.org/기본 기능: https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf.html공식 메뉴얼 - 스프링 통합: https://www.thymeleaf.org/doc/tutorials/3.0/thymeleafspring.html - 타임리프는 백엔드 서버에서 HTML을 동적으로 렌더링 하는 용도로 사용하는 템플릿 엔진이다.다른 대표적인 SSR(서버사이드 렌더링) 언어인 jsp보다 더 스프링 친화적이기도 하고 jsp와 달리 순수 HTML형태를 유지하기 때문에 서버를 거치지 않고도 동적으로 렌더링된 결과를 확인하기에 좋다. - 기본적으로 타임리프는 기존 HTML태그에 th:*속성을 지정하는 방식으로 동작한다. th:..
@RequestMapping("uri") uri에 들어간 url 호출이 오면 애노테이션이 표시된 메소드가 실행되도록 매핑해준다. RequestMapping에 method속성으로 HTTP메서드(GET, POST, PUT...)를 지정하지 않으면 HTTP메서드와 무관하게 모두 호출되므로, 적절한 사용을 위해서는 method속성을 명시해주자 @RequestMapping(method = RequestMethod.GET) 다음과 같이 메서드를 지정해주면 GET방식의 요청만 받아들이게 되고, POST등의 다른 요청이 오면 MVC는 HTTP 405 상태코드를 반환한다 (Method Not Allowed) 또 @GetMapping 애노테이션 코드를 보면 안에 @RequestMapping 애노테이션의 method가 설정..
네트워크의 전송 계층에서 데이터의 전송을 위해 사용하는 프로토콜에는 여러 가지가 있는데, 그 중에서 대표적인 것으로 UDP와 TCP가 있다. IP를 사용하여 패킷을 전달하는데는 여러가지 문제가 있다. 송신자는 수신자 서버의 상태를 알 수 없고, 전달 과정 중 패킷이 유실될 수도 있고, 큰 데이터를 여러 패킷으로 나누어 데이터를 전송하는 과정에 패킷의 순서가 뒤바뀔 수도 있다. 이러한 문제는 IP프로토콜만으로는 해결할 수 없고, TCP와 같은 추가적인 프로토콜을 사용하여 해결할 수 있다. 1. UDP (User Datagram Protocol)UDP는 '빈 껍데기'같은 프로토콜이라고 할 수 있다.UDP는 "best effort" service이다. best effort라 함은 계층에서 데이터의 전송을 위..
언제 달았대 유형별로 풀어보다가 앞으로는 solved.ac 클래스별로 풀면 될 것 같다
BufferedReader 기존에 java에서 입출력을 관리할때는 흔히 Scanner를 사용했다. Scanner는 정수값으로 int, long, short, 부동소수값으로 float, double, 문자열은 String값으로 구분해서 읽을 수 있다. Scanner sc = new Scanner(System.in); int i = sc.nextInt(); long l = sc.nextLong(); short s = sc.nextShort(); float f = sc.nextFloat(); Double d = sc.nextDouble(); String str = sc.next(); String str2 = sc.nextLine(); 반면 BufferedReader는 문자열만을 읽을 수 있기 때문에 Scann..
0. Transport Layer전송 계층은 다양한 호스트들에서 동작하는 어플리케이션 응용 프로세스 간의 논리적인 통신을 제공한다. 3계층인 네트워크도 통신에 관한 계층인데, 네트워크 계층과의 가장 큰 차이는 'process to process'라는 것이다. 즉 네트워크 계층에서는 호스트간의 통신을, 전송계층에서는 프로세스간의 통신을 관리한다. 전송 계층에서는 오류가 발생하면 데이터의 재전송을 요청하여 신뢰할 수 있는(reliable) 통신이 가능하도록 한다. 프로토콜은 모두 end system에서 동작한다. 코어의 router들은 전송계층의 프로토콜을 구현하고 있지 않다. sender는 세그먼트 단위로 어플리케이션 계층의 메세지들을 잘라서 전송계층의 헤더를 붙이고 네트워크 계층으로 보내고, receiv..
서블릿 웹 서버는 요청에 대해 정적 웹 페이지로 응답하는 방식의 서버이다. 여기에 동적인 응답을 내려주기 위해서 서블릿을 붙인 서버를 WAS(Web Application Server)라고 한다. 하지만 정적 페이지를 내려주기 위한 요청까지 처리하기에는 WAS에 부하가 걸릴 수 있으므로, 현재는 WAS 앞에 WS(웹 서버)를 붙여서 4 tier 아키텍처의 구조로 서버를 구성하는 것이 일반적이다. 그렇다면 서블릿을 붙였다는 것이 무슨 의미일까? HTTP 헤더에는 HTTP Method, Content-type, User-Agent, Host, Connection, Date, Keep-Alive 등의 다양한 옵션들이 존재한다. 만약 개발자들이 이러한 옵션들을 텍스트로 파싱하고 규약에 따라서 응답을 내려주어야 ..