Language/Java

    🔦 자바의 강점 : Multi-Thread

    다중 클라이언트 접속과 멀티스레드 📌 Stateful vs Stateless 이번에는 다중 클라이언트 접속에 대해서 알아보자! 다중 클라이언트 접속은 크게 2가지로 나눌 수 있다. Stateful 방식 Stateless 방식 이 개념은 일상생활에 적용시켜보면 매우 쉬운 개념이다. 왜냐하면 이미 우리 모두가 경험한 일이기 때문이다. 첫 번째로 Stateful방식은 상담사화 전화연결을 하는 상황에 빗대어 볼 수 있다. 고객이 상담사에게 전화를 걸면 상담사는 고객이 문의하는 사항을 들어주고 그에 대한 답변을 해주며 추가 질문이 있을 시 서로 대화를 주고받으면서 문제를 해결한다. 문제가 해결되고 나면 연결이 끊어지게 된다. 이 방법은 클라이언트가 끊기 전까지 연결이 유지된다는 점이 특징이다. 하지만 클라이언트가..

    ☎️ Observer design pattern & Listener

    Observer design pattern & listener 옵저버 패턴이라는 것을 알 수 있는 키워드는 "listener"이다. 만약 자바 코드에서 listener를 발견한다면 아! 옵저버 패턴을 적용하였구나로 이해하면 쉽다. 지금부터 옵저버 패턴에 대해서 알아보자! 위의 그림은 옵저버 패턴에 대한 내용을 나타낸 것이다. 보호관찰사와 가석방죄수의 예를 들면 쉽게 이해할 수 있을 것이다. 보호관찰사의 역할은 가석방죄수를 감시하는 것이다. 가석방 죄수는 어떠한 행위를 할 때 보호관찰사에게 보고하도록 시스템화 되어 있다. 즉 보호관찰사가 24시간 감시하는 것이 아니라는 소리다. 이를 똑같이 자바코드에 적용하면 다음과 같다. 어떠한 객체는 Observer 객체의 주소를 가지고 있다. 그리고 해당 객체의 상태..

    📮 자바에서의 네트워크(Network)

    📌 네트워크의 흐름 LAN WAN Gateway Internet NIC ✔️ 비록 같은 컴퓨터일지라도 프로그램사이에 직접적으로 데이터를 전달할 수 없다. ✔️ NIC(Network Interface Card)을 통해서 데이터를 전달할 수 있다. ✔️ 외부의 다른 컴퓨터와 통신하기 위해서는 HUB를 통해 데이터 전달이 가능하며, 중앙 HUB를 지나 Gateway를 지나서 통신사를 거쳐 다른 컴퓨터와 통신할 수 있다. 📌 포트(Port)번호와 소켓(Socket) ✔️ 포트번호는 통신할 대상을 구분하기 위해 부여된 번호를 말한다. ✔️ Client와 Server 모두 포트번호를 가지고 있다. ✔️ 자바에서 내부적으로 네트워크 통신을 가능하게 해주는 것이 바로 소켓이다. ✔️ Client에서 소켓을 만들며, S..

    😆 Network의 필요성 DBMS의 등장?

    파일 시스템에서 DB로 변화하는 과정 📌 현재 사용하고 있는 애플리케이션의 문제점 현재 애플리케이션은 네트워크 통신이 가능하지 않다. 각각의 사람들이 앱에 저속해서 파일을 등록하고 읽어올 수 있는 구조이다. 현재의 구조에서 여러명의 사람들에게 파일을 공유할 수 있는 방법은 무엇일까? 3명의 사람이 1개의 컴퓨터를 공유한다. 한 명이 작업하면 다른 사람에게 파일을 공유한다. 1번, 2번 방식으로 어떻게든 돌릴 수 있겠지만 근본적인 해결책은 아니다. 지금 세상에 누가 1개의 컴퓨터로 작업을 하나? 그리고 일일이 1명 1명 체크하면서 파일을 공유하나? 해결책이 필요해보인다. 📌 데이터를 공유하는 고전적인 방법 : 파일서버 또는 네트워크 드라이브로 파일 공유 하나의 pc에 파일을 저장해놓고 각각의 사람들이 pc..

    🚿 Decorator design patter & stream 2

    decorator design pattern & file I/O 📌 상속의 한계와 데코레이터 패턴의 필요성 📌 기능을 확장하는 방법 : 상속과 포함 📌 데코레이터 패턴의 적용 : 바이트 스트림 클래스 vs 캐릭터 스트림 클래스

    🔋 버퍼(buffer)의 필요성을 느껴보자

    버퍼는 왜 사용하는 것인가? 버퍼(buffer) = 데이터 임시 저장 공간 📌 데이터 읽기 데이터 읽기 시간 = average seek time + data transfer time ex) 1000 바이트를 읽는다고 가정한다면? 1바이트씩 1000번 읽기 1000바이트씩 1번 읽기 1바이트를 여러 번 읽을 경우 매번 바이트의 위치를 찾아야 하기 때문에 평균 탐색시간이 누적되어 한 번에 1000 바이트를 읽는 것 보다 시간이 오래 걸린다. Q. 그러면 한 번에 다 읽으면 되지 않나요? 메모리를 읽을 때 왕창 읽지 왜 깨작깨작 여러번에 걸쳐 읽냐? 하필 8192바이트씩말이지.. 다쓰면 또 다시 읽고 A. PC 처럼 소수의 프로그램이 동시에 실행될 때는 상관없지만, 서버처럼 데이터를 읽는 코드가 동시에 수천개..

    🚿 Decorator design pattern와 stream

    Decorator 패턴을 이용해서 파일 I/O를 더 쉽게 출력해보자 📌 DataOutputStream을 사용해보자 게시글 출력 // 게시글 데이터를 파일로 내보내기(저장하기, 쓰기) try ( // 파일에 바이트를 출력하는 객체 FileOutputStream out = new FileOutputStream("board.data"); DataOutputStream out2 = new DataOutputStream(out)) { // 출력할 게시글 개수를 먼저 저장한다. out2.writeInt(boardList.size()); for (Board board : boardList) { // 1) 게시글 번호 4바이트 출력 out2.writeInt(board.getNo()); // 2) 게시글 제목 출력 ou..

    📁 자바에서는 어떻게 파일 입출력을 할까?

    📌 Streaming API 유래와 파일 I/O 과거에는 장비를 사용할 때 각각의 장비에 맞는 I/O API를 사용해야 했다. 각 디바이스에 따라 데이터 I/O를 할 수 있는 함수가 달랐다. 그래서 개발자는 각 장비별로 데이터 I/O의 사용법을 학습하고 물어봐야하는 문제가 있었다. 이를 해결하기 위해서 나온것이 있었으니.. 장비제어를 하기위해 Device Driver(장비 드라이브 : H/W 제조사에서 제공 / 자기네 장비 제어할 때 호출할 function이 들어있는 app 제공 (.dll)) 설치해서 제어한다. [drive(이끌다) - 장비 진단 통제 제어하기 위함] 덕분에 개발자는 장비에 상관없이 일관된 방법으로 데이터 I/O를 할 수 있게 되었다. 📌 Binary file vs Text file 이..