Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- HTTP
- 프로토타입
- dependency injection
- 라이프 사이클
- js
- cache
- 로그인
- Security
- VUE
- DB
- thymeleaf
- Stateless
- javascript
- 캐시
- 의존성 주입
- Excel
- JPA
- di
- vuex
- Setter
- vue-cli
- HTTP 메서드
- Vue.js
- Java
- BEAN
- 싱글톤
- Kotlin
- Spring
- Singleton
- Repository
Archives
- Today
- Total
jhhan의 블로그
Java의 정석을 시작하자(7)(2/11) 본문
16장을 마지막으로 '자바의 정석:기초편'이 끝난다.
16장. 네트워킹
-네트워킹
- 두 대 이상의 컴퓨터를 케이블로 연결하여 네트워크를 구성하는 것
-서버와 클라이언트
- 서버 : 서비스를 제공하는 컴퓨터
- 하드웨어 사양에 관계없이 서비스를 제공하는 소프트웨어가 실행되는 컴퓨터
- 서비스를 제공하기 위한 서버 프로그램 필요
- ex) 파일 서버, 메일 서버, 어플리케이션 서버 등
- 클라이언트 : 서비스를 사용하는 컴퓨터
- 서버 프로그램과 연결할 수 있는 클라이언트 프로그램 필요
- ex) 웹브라우저, FTP클라이언트 프로그램 등
서버기반 모델 | P2P 모델 |
1. 안정적인 서비스 제공 가능 2. 공유 데이터의 관리와 보안 용이 3. 서버구축비용과 관리비용이 많이 든다. |
1. 서버구축 및 운용비용 절감 가능 2. 자원의 활용 극대화 가능 3. 자원의 관리 어려움 4. 보안 취약 |
-IP주소
- 컴퓨터를 구별하는 고유한 값
- 네트워크주소와 호스트주소로 나뉜다.
-InetAddress클래스
- IP주소를 다루기 위한 클래스
- 그에 관련된 메서드 제공
- 하나의 도메인명에 getAllByName()을 통해 모든 IP주소를 얻을 수 있다.
- getLocalHost() : 호스트명과 IP주소를 알 수 있다.
-URL
- 여러 서버들이 제공하는 자원에 접근할 수 있는 주소를 표현하기 위한 것
- '프로토콜://호스트명:포트번호:/경로명/파일명?쿼리스트링#참조'의 형태
- URL클래스 : URL을 다루기 위한 클래스
- URL클래스에 관련된 예제코드이다.
- 그에 대한 출력 결과물이다.
- getContent() 메서드의 경우 사용하면 에러가 나서 일단 주석처리를 해놨다.
- 아마 저 파일이 실제로 없기 때문에 발생한 결과라고 생각한다.
-URLConnection클래스
- 추상클래스
- 어플레케이션과 URL간의 통신연결을 나타내는 클래스의 최상위 클래스
- 이 클래스를 상속받는 클래스 : HttpURLConnection, JarURLConnection
- 메서드가 좀 있는 편이다. (책 1장을 써서 보여줬다.)
- URLConnection클래스와 관련된 예제와 출력결과물이다.
- 여기서도 getContent() 에서 에러가 나기 때문에 주석 처리를 한 후의 결과물을 출력했다.
- getHeaderFields()는 내용이 되게 길어서 여기에 다 캡쳐하지 못하고 짤린 부분이 있다.
- URLConnection클래스에 대한 다른 예제이다.
- 실행해보면 에러가 나타난다.
- java.io.FileNotFoundException라는 예외가 발생되는데 , 아마 실제로 존재하지 않는 파일이어서 발생하는 것 같다.
- 실제로 존재하는 파일로 진행하면 될 것 같다.
-소켓프로그래밍
- 소켓을 이용한 통신 프로그래밍
- 소켓 : 프로세스 간의 통신에 사용되는 양쪽 끝단 의미
- java.net패키지를 통해 지원
- TCP 와 UDP를 이용
-TCP & UDP
- TCP는 전화 , UDP는 소포에 비유된다.
항목 | TCP | UDP |
연결방식 | -연결기반 -1:1 통신방식 |
-비연결기반 -1:1, 1:n, n:n 통신방식 |
특징 | -데이터의 경계 구분 안함 -신뢰성있는 데이터 전송 -UDP보다 느린 전송속도 |
-데이터의 경계 구분함 -신뢰성없는 데이터 전송 -TCP보다 빠른 전송속도 |
관련 클래스 | -Socket -ServerSocket |
-DatagramSocket -DatagramPacket -MulticastSocket |
-TCP소켓 프로그래밍
- 서버프로그램 실행
- 서버소켓 생성
- 서버소켓 대기상태 (이유 : 클라이언트 프로그램의 연결요청을 처리할 수 있게 하기 위해)
- 클라이언트 프로그램의 연결요청 -> 새로운 소켓 생성 -> 클라이언트 프로그램의 소켓과 연결
- 클라이언트 프로그램에서 소켓 생성 -> 서버소켓에 연결 요청
- 서버소켓은 클라이언트 프로그램의 연결요청 수락 -> 새로운 소켓 생성, 클라이언트 프로그램의 소켓과 연결
- 서버와 클라이언트의 간단한 코드 예제이다.
- 서버와 클라이언트가 연결이 되었다면, [Notice] Test Message1이 와야 한다.
- 하지만 아무리 시도해 봐도 그렇게 나오지는 않았다.
- 다른 방법을 적용해야 하는 것인가...
-UDP 소켓 프로그래밍
- DatagramSocket , DatagramPacket 사용
- DatagramSocket : 헤더와 데이터로 구성
- DatagramPacket : 수신할 호스트의 정보 저장
- UDP 소켓 프로그래밍의 예제이고, 서버시간을 전송받아 출력하는 예제이다.
- 그리고 진행한 결과는 다음과 같다.
- 클라이언트가 DatagramPacket을 생성해서 DatagramSocket으로 서버에 전송하면
- 서버는 전송받은 DatagramPacket의 getAddress(), getPort()를 호출해서 클라이언트의 정보를 얻어 서버시간을 담는다.
- 그리고 DatagramPacket에 담아서 전송한다.
TCP와 UDP의 소켓프로그래밍의 기본을 살폈다.
이렇게 사용된다는 것을 아는 것이 중요한 것 같다.
'JAVA' 카테고리의 다른 글
자바와 스프링 그 사이(1) (0) | 2020.12.16 |
---|---|
BufferedReader & BufferedWriter (0) | 2020.06.18 |
Java의 정석을 시작하자(6)(2/10) (0) | 2020.02.14 |
Java의 정석을 시작하자(5)(2/8) (0) | 2020.02.14 |
Java의 정석을 시작하자(4)(2/7) (0) | 2020.02.14 |