[Java] 53. HTTP 서버 만들기
·
Java/IO, Network
HTTP 서버 만들기#Java/adv2/HTTP/HTTP 서버1 - 시작싱글 스레드로 serverSocket에서 socket을 받아, HTTP 요청 메시지를 받아 출력하고, 간단한 html 문서를 HTTP 응답 메시지로 내려주는 서버BufferedReader reader = new BufferedReader(new InputStreamReader(socket.getInputStream(), UTF_8));PrintWriter writer = new PrintWriter(socket.getOutputStream(), false, UTF_8))false는 AutoFlush 옵션이다. flush 옵션이 false면 print해도 바로 전송되는게 아니라, 버퍼에 모였다가 flush 해줘야 전송된다. 마지막에 꼭..
[Java] 52. 채팅 프로그램(feat. Command Pattern)
·
Java/IO, Network
채팅 프로그램(feat. Command Pattern)#Java/adv2/Network/채팅 프로그램 - 설계/채팅 프로그램 설계 - 클라이언트기존 클라이언트는 콘솔에서 입력받는 부분에서 블로킹되기 때문에, 메시지가 도착해도 콘솔에 바로 출력할 수 없다. 콘솔 입력과 서버로부터 메시지를 받는 부분을 별도의 스레드로 분리/채팅 프로그램 설계 - 서버서버에서 모든 세션을 관리해야, 하나의 클라이언트가 보낸 메시지를 서버가 받아서 모든 클라이언트에게 메시지를 전송할 수 있다. 이전 챕터의 세션 매니저를 잘 활용하자./채팅 프로그램 - 클라이언트ReadHandler, WriteHandler : 두 작업을 별도의 스레드로 분리..
[Java] 51. 네트워크 - 프로그램(2)
·
Java/IO, Network
네트워크 - 프로그램(2)#Java/adv2/Network/네트워크 프로그램4 - 자원 정리1: 네트워크 프로그램에 try-catch-finally 도입스트림, 소켓은 여러 곳에서 닫는다 유틸리티 클래스로 뽑자close하다가 예외 발생시 단순히 로그만 남기자input, output, socket 닫는 것 각각을 메서드로 뽑아서, 각각 예외를 잡도록 하자. 하나를 닫는 과정에서 예외가 발생해도 다음 자원을 닫을 수 있다.순서에 신경쓰자(여기선 socket을 마지막에 닫자)Client자원 선언은 try 밖으로 빼고, 자원 정리 시 finally 코드 블럭에서 SocketCloseUtil.closeAll() 만 호출Ses..
[Java] 50. 네트워크 - 프로그램(1)
·
Java/IO, Network
네트워크 - 프로그램(1)#Java/adv2/Network/네트워크 프로그램1 - 예제 , /네트워크 프로그램1 - 분석Client소켓(socket)Socket socket = new Socket("localhost", PORT);서버쪽의 주소, PORT 지정내부에서 InetAddress를 사용. IP주소를 통해 TCP 접속을 시도한다 (3-way handshake)연결이 성공적으로 완료되면 Socket 객체를 반환한다.남는 포트 하나를 로컬 포트로 자동 할당 해줌(클라이언트쪽 포트)Socket 객체를 통해 서버와 통신할 수 있다.네트워크 스트림클라이언트-서버간 통신은 Socket이 제공하는 스트림을 사용한다.socket.getInputStream()socket.getOutputStream()보조 스트림..
[Java] 49. File, Files
·
Java/IO, Network
File, Files#Java/adv2파일이나 디렉토리를 다루는 객체 File 또는 Files, Path 클래스/FileFile은 파일과 디렉토리를 둘 다 다룬다.File file = new File("temp/example.txt");File directory = new File("temp/exampleDir");주요 메서드createNewFile(): 새 파일을 생성. 단순히 객체를 생성한다고 파일이 생성되는게 아니라, 이 메서드를 호출해야 생성된다.exists(): 파일이나 디렉토리의 존재 여부를 확인mkdir(): 새 디렉토리를 생성delete(): 파일이나 디렉토리를 삭제isFile(): 파일인지 확인isDi..
[Java] 48. 자바 I/O 활용
·
Java/IO, Network
I/O 활용#Java/adv2회원 데이터를 관리하는 콘솔 프로그램 예제(Create, Read)Member 클래스 정의 및 Repository 인터페이스 정의/회원 관리 예제1 - 메모리ArrayList에 저장하는 방법문제: 자바 프로그램 종료 시 모든 회원 정보가 사라진다/회원 관리 예제2 - 파일에 보관파일에 저장해서 데이터를 영구 보존해보자.한 줄 단위로 회원 데이터를 파일에 저장(ID,Name,Age)BufferedReader, BufferedWriter 보조 스트림을 이용.try-with-resource로 스트림 선언 및 해제코드 블록이 끝나면 자동으로 close()가 호출try (BufferedWriter bw = new BufferedWriter(new FileWriter(FILE_PATH,..
[Java] 47. 자바 IO 기본(2)
·
Java/IO, Network
IO 기본(2)#Java/adv2문자를 스트림에서 편리하게 사용하기/문자 다루기1 - 시작기본적으로 스트림에는 byte를 전달해야 한다 String을 byte로 변환한 다음 전달byte[] writeBytes = writeString.getBytes(인코딩)fos.write(writeBytes)String readString = new String(readBytes, UTF_8) fis.readAllBytes()문자를 byte로 변환해야하는 번거로움 문자를 byte로 변환해주는 기능을 대신 처리해주는 클래스 등장/문자 다루기2 -..
[Java] 46. 자바 IO 기본(1)
·
Java/IO, Network
IO 기본 (1)#Java/adv2/스트림 시작1: 자바 프로세스의 데이터를 외부로 입출력 입력/출력 스트림(단방향)을 사용. byte 단위 입출력/스트림 시작 - 예제1new FileOutputStream(파일경로): 파일에 데이터를 출력하는 스트림파일 없으면 자동 생성. 폴더는 자동 생성Xfos.write(int): byte 단위로 값 출력new FileOutputStream(파일경로, appned 유무):append 옵션이 true이면 기존 파일의 끝에 이어서, false(기본값)이면 지우고 처음부터 다시 작성new FileInputStream(파일경로): 파일에서 데이터 읽어오는 스트림fis.read(): by..