Connectionless Protocol 서버의 부하를 줄일 수 있는 장점이 있으나, 클라이언트 요청 시마다 서버와 매번 새로운 연결이 생성되기 때문에 일반적인 로그인 상태 유지, 장바구니 등의 기능을 구현하기 어렵다. 이러한 불편함을 해결하기 위해서 세션과 쿠키를 이용한다. 세션과 쿠키는 클라이언트와 서버의 연결 상태를 유지해주는 방법으로, 세션은 서버에서 연결 정보를 관리하는 반면 쿠키는 클라이언트에서 연결 정보를 관리하는데 차이가 있다. 세션이란? 일정 시간동안 같은 사용자(정확하게는 브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고 그 상태를 일정하게 유지시키는 기술이다. 방문자의 요청에 따른 정보를 방문자 메모리에 저장하는 것이 아닌 웹 서버가 세션 아이디 파일을 만들어 서비스가 돌아..

서블릿의 실행 과정 1. init() 호출 -컨테이너에서 서블릿 객체를 생성한 다음에 호출한다. service() 이전에 실행 -서블릿 객체를 초기화 -초기화할 내용(DB 접속 등)이 있는 경우 재정의 2. service() 호출 -클라이언트의 요청 후 컨테이너에서 쓰레드를 이용하여 호출 -요청의 HTTP 메소드(GET, POST)를 참조하여 해당 메소드(doGet(), doPost()) 호출 판단 -거의 재정의 하지않음 3. doGet() / doPost() 호출 -service() 메소드에서 HTTP 메소드(GET, POST)를 참조하여 호출 -비즈니스 로직을 구현 또는 호출 -두 메소드 중 하나는 반드시 재정의하여 구현해야한다. 4. destroy() 호출 -컨테이너에서 서블릿 객체를 제거할 때 호..

서블릿에 대하여 웹 브라우저의 요청을 받아 해당하는 웹 페이지를 찾아서 보내주는 일을 하는 컴퓨터를 웹 서버라고 한다. 웹 서버는 웹 브라우저로부터 URL을 받아서 그에 해당하는 HTML 문서를 찾아서 웹 브라우저로 보내주는 일을 한다. 웹 서버는 HTML문서 파일을 찾아서 보내주는 일 뿐만 아니라 HTML문서를 생성하는 프로그램을 호출해서 그 프로그램의 실행 결과를 보내주는 일도 한다. 이때 호출 되는 프로그램을 "웹 애플리케이션이라" 한다. 최초의 앱 애플리케이션 기술인 CGI에서는 웹 애플리케이션을 웹 서버와 동등한 독립적인 프로그램 형태로 작성함 하지만 CGI에는 커다란 두 가지 문제점이 있었다. 첫째 : 독립적인 프로그램을 실행하기 위해서는 시스템 자원이 많이 필요했다. 둘때 : 운영체제에 의해..

표준입출력 - System.in, System.out, System.err 표준입출력은 콘솔을 통한 데이터 입력과 콘솔로의 데이터 출력을 의미한다. 자바에서는 표준 입출력을 위해 3가지 입출력 스트림 System.in, System.out, System.err을 제공하는데, 이 들은 자바 어플리케이션의 실행과 동시에 사용할 수 있게 자동적으로 생성되기 때문에 개발자가 별도로 스트림을 생성하는 코드를 작성하지 않고도 사용이 가능하다. 자바를 처음 시작할 때부터 지금까지 줄 곧 사용해온 System.out을 스트림의 생성없이 사용할 수 있었던 것이 바로 이러한 이유다. File 파일은 기본적이면서도 가장 많이 사용되는 입출력 대상이기 때문에 중요하다. 자바에서는 File클래스를 통해서 파일과 디렉토리를 다룰..

입출력이란? I/O란 input과 output의 약자로 입력과 출력, 간단히 줄여서 입출력 또는 아이오라고 한다. 즉, 컴퓨터 내부 또는 외부와의 장치와 프로그램간의 데이터를 주고 받는 것을 말한다. 스트림(stream) 자바에서 입출력을 수행하려면, 어느 한쪽에서 다른 쪽으로 데이터를 전달하려면, 두 대상을 연결하고 데이터를 전송할 수 있는 무언가가 필요한데 이것을 스트림이라고 정의했다. 입출력에서의 스트림은 '람다와 스트림'에서 같은 용어를 쓰지만 다른 개념이다. 스트림이란 데이터를 운반하는데 사용되는 연결통로이다. 스트림이란 연속적인 데이터의 흐름을 물에 비유해서 붙여진 이름인데, 여러 가지로 유사한 점이 많다. 물이 한쪽 방향으로만 흐르는 것과 같이 스트림은 단방향통신만 가능하기 때문에 하나의 스..
스트림이란? 우리는 많은 수의 데이터를 다를 때, 컬렉션이나 배열에 데이터를 담고 원하는 결과는 얻기 위해 for문과 Iterator를 이용해서 코드를 작성해왔다. 그러나 이러한 방식으로 작성된 코드는 너무 길고 알아보기 어렵다. 그리고 재사용성도 떨어진다. 또 다른 문제로는 데이터 소스마다 다른방식으로 다뤄야한다는 것이다. 이러한 문제들을 해결하기 위해 나왔다. 스트림은 데이터 소스를 추상화하고, 데이터를 다루는데 자주 사용되는 메서드들을 정의해 놓았다. 데이터 소스를 추상화하였다는 것은, 데이터 소스가 무엇이던 간에 같은 방식으로 다룰 수 있게 되었다는 것과 재사용성이 높아지는 것. 그래서 스트림을 이용하면 배열이나 컬렉션뿐만 아니라 파일에 저장된 데이터도 모두 같은 방식으로 다룰 수 있다. Stri..
람다식이란? 람다식은 간단히 말해서 메서드를 하나의 식(expression)으로 표현한 것이다. 람다식은 함수를 간략하면서도 명확한 식으로 표현할 수 있게 해준다. 메서드를 람다식으로 표현하면 메서드의 이름과 반환값이 없어지므로, 람다식을 '익명함수'라고도 한다. int[] arr = new int[5]; Arrays.setAll(arr, (i) -> (int)(Math.random()*5)+1); 위 문장에서 ( ) ->(int)(Math.random()*5)+1 이 바로 람다식이다. 이 람다식이 하는 일을 메서드로 표현하면.. int method() { return (int)(Math.random()*5 + 1; } 모든 메서드는 클래스에 포함되어야 하므로 클래스도 새로 만들어야하고, 객체도 생성해야..

쓰레드의 실행제어 쓰레드 프로그래밍이 어려운 이유는 동기화와 스케줄링 때문이다. 앞서 우선순위를 통해 쓰레드간의 스케줄링을 하는 방법을 배웠지만 이것만으로는 한참 부족하다. 효율적인 프로그램을 만들기 위해서는 보다 정교한 스케줄링을 통해 주어진 자원과 시간을 여러 쓰레드가 낭비없게 잘 사용하도록 해야한다. 메서드 설명 static void sleep(long millis) static void sleep(long millis, int nanos) 지정된 시간(천분의 일초 단위)동안 쓰레드를 일시정지시킨다. 지정한 시간이 지나고 나면, 자동적으로 다시 실행대기 상태가 된다. void join() void join(long millis) void join(long millis, int nanos) 지정된 시..