본문 바로가기

Language/Java

(32)
소켓은 stateful 서버 vs 웹(HTTP 통신)은 stateless 서버 웹도 소켓이다. 클라이언트는 키보드로부터 주소를 입력받는 버퍼가 있을 것이다. 클라이언트가 브라우저를 이용해 연결 요청 + 데이터 요청 네이버 서버가 요청을 받고 연결이 되면 클라이언트와 서버에 버퍼가 달린다. 네이버 서버는 HTML 코드를 버퍼에 담아서 클라이언트에게 응답해준다. 브라우저는 코드를 받아서 화면에 그림을 그린다. 소켓통신은 계속 연결이 지속된다. 스트림이 끊기지 않는다. = stateful 서버 웹 통신 (HTTP 통신) 은 코드를 넘긴 다음 연결을 끊는다. 즉 스트림이 끊어진다. = stateless 서버
일대일 양방향 소켓통신 서버 소켓과 클라이언트 소켓 간의 일대일 양방향 통신을 해본다. import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.IOException; import java.io.InputStreamReader; import java.io.OutputStreamWriter; import java.net.ServerSocket; import java.net.Socket; public class ServerFile { // 전역변수로 선언 // 클라이언트 연결을 받는 소켓 ServerSocket serverSocket; // 실제 통신을 하는 소켓 Socket socket; BufferedReader br; // 새로운 스레드가 필요하..
일대일 단방향 소켓통신(지속) 저번에 했던 일대일 소켓 통신은 클라이언트 소켓이 키보드로부터 메시지를 입력 받고 서버 소켓으로 전송, 서버 소켓이 읽으면 프로그램이 종료된다. 이번에는 프로그램이 종료되지 않고 계속 메시지를 보낼 수 있도록 만들어본다. import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; public class ServerFile { // 전역변수로 선언 // 클라이언트 연결을 받는 소켓 ServerSocket serverSocket; // 실제 통신을 하는 소켓 Socket socket; BufferedReader br; public ServerFile() {..
포트, 소켓으로 단방향 일대일 통신(종료) 포트(Port) 💡 데이터를 입력하고 출력하는 출입구 : ip주소에 있는 여러 데이터 출입구. 출입구마다 포트 번호가 지정 포트는 0~65535번까지 65536개가 있다. -> 2의 16승 -> 2바이트 -> 16비트 0~1023 포트는 사용할 수 없고 1024번 이상의 포트는 사용할 수 있다. 목적지를 좀 더 상세히 알려주면 배들이 섞이지 않고 잘 도착한다. 아파트 동 호수 와 비슷하게 생각하면 쉽게 이해할 수 있겠다 :) 바이트 스트림은 하나이고 양 끝단에 버퍼를 달고 통신을 한다. 각각 필요한 프로그램이 다른데 하나의 스트림으로 통하니, 포트를 지정해주면 해당 프로그램에 바로 찾아가서 도착할 수 있게 된다. 응용프로그램은 서버와 포트로 통신한다. 소켓통신 💡 양 끝단에 포트를 두고 포트끼리 바이트스..
스트림(Stream), 바이트 스트림, 배열 스트림, 버퍼 스트림 스트림(Stream) 💡 스트림(Stream) : 순서가 있는 데이터의 연속적인 흐름 하나의 스트림은 하나의 방향만 가능(입력 스트림과 출력 스트림) 키보드에 A라는 데이터를 입력하고 전송하려면 키보드랑 컴퓨터 사이 연결된 선이 있어야한다. 이 선이 스트림이다. 스트림은 1바이트 즉 8비트 단위로 데이터가 왔다갔다. 문자를 하나씩 전송하는 방법 Input/Output (I/O) 부호는 숫자로 변환되어 전송된다. 01000001 이 부호와 숫자는 아스키코드 표로 정의되어 있다. 컴퓨터 입장에서는 데이터가 들어오는 것. Input 이다. 아스키코드표 부호화시킴 컴퓨터가 모니터에 출력하는 경우 데이터를 출력하는 것. Output 이다. 바이트 스트림(Byte Stream) 8bit의 바이트 단위로 입출력. 이..
String Constant Pool / 문자열 비교는 equals String Constant Pool 💡 String Constant Pool : literal(큰 따옴표) 로 String 객체 생성 시 저장 공간. Heap 영역 내부에 있음. 장점 : 같은 문자열은 같은 공간을 공유해서 사용하기 때문에 메모리 효율이 좋다. 단점 : 문자열을 변경할 때마다 새로운 공간이 할당된다. 자주 변경하는 경우에는 사용하지 않는 게 좋다. 메모리를 효율적으로 사용하기 위해서는 String literal(큰 따옴표)로 String을 생성하는게 좋다고 한다 ! String 클래스 이해하기 String 은 첫 글자가 대문자 즉 클래스 이다. 기본 자료형이 아니기 때문에 주소를 가지고 있다. String 원리는 char 배열이다. String 객체 생성은 S0, S1 처럼 String..
예외처리(Exception) : try-catch 예외처리(Exception) 📌 예외처리(Exception) ? 프로그래머가 예기치못한 예외의 발생에 미리 대처하는 코드를 작성하는 것으로, 실행중인 프로그램의 비정상적인 종료를 막고, 상태를 정상상태로 유지하는 것이 목적 슈퍼마켓을 운영하려고 한다. 혹시나 발생할 위험에 대비해 1~4를 미리 준비했다. 운영을 시작했는데, 생각지 못한 문제가 발생했다. 운영 전에는 예외를 컴파일 시 잡고 운영을 시작한 다음에는 예외를 런타임 시 잡아야 한다. 강의를 하고 있는데 밖에 화재가 발생하면 강의를 이어갈 수 없다. 나가서 화재를 진압하거나 119에 신고 등 문제를 해결한 다음 다시 강의를 해야겠지. 여기서 이 문제를 해결하는 부분을 예외처리라고 한다. 문제를 해결하지 않고 강의를 계속하면 아주 큰일이 나겠찌 !..
동기적 실행 vs 비동기적 실행 동기 : 일의 순서가 있다. 비동기 : 일의 순서가 없다. (스레드를 사용해야 하기 때문에 컴퓨터에 부하가 많이 생긴다.) 자바는 단일스레드 이기 때문에 동기적이다. 꺽정이가 인쇄해오는 3초를 멍때리고 대기 보고가 인쇄해오는 3초를 멍때리고 대기 순신이가 인쇄해오는 동안 멍때리고 대기 그런데 스레드를 이용하면 꺽정이 일시키고 기다리지 않고 보고에게 일시키고 또 순신이도 바로 일시키니까 멍때리는 시간이 없다. 동기적으로 처리하면 모두 메인 스레드이지만 비동기적으로 처리하면 메인스레드 하나에 서브스레드 3개 멀티 스레드를 왜 사용할까? 1. 눈속임을 위해 사용 스레드는 속도를 위한 게 아니라 UX를 위해서 쓰는것. ex) 화면의 반은 빨강 반은 파랑으로 칠하는 경우 빨강 다 칠하고 저장하고 파랑 다 칠하는 ..