Http 통신 vs Socket 통신


단말기와 웹서버와 통신 방식은 다음과 같이 크게 두 가지로 구분할 수 있습니다. 


    ① HTTP 통신

    ② Socket 통신


HTTP와 Socket의 가장 큰 차이점은 접속(Connection)을 유지하는지의 여부입니다. 물론 파일 전송만을 전문으로 처리하는 FTP도 있지만 이것은 HTTP를 확장한 개념이므로 HTTP에 포함시키겠습니다.



1. HTTP 통신


HTTP 통신은 웹브라우저에 정보를 표시하는 것과 같이 클라이언트의 요청이 있을 때 서버가 해당 페이지에 대한 자료를 전송하고 곧바로 연결을 끊는 방식입니다. 현재 여러분이 제 블로그를 보고 있지만 맨 처음 이 페이지가 보여지는 순간만 서버와 연결되고 현재는 서버와 접속이 끊어진 상태입니다. 이 상태에서 F5 키를 눌러 새로고침을 하거나 다른 페이지로 이동하면 그때 다시 서버에 연결이 될 것입니다.


이렇게 하는 이유는 단 한가지. 서버의 부하를 줄여서 다른 접속을 원활하게 처리하기 위해서입니다. 여러분이 F5 키를 계속 누르거나 아예 F5 키에 연필을 꽂아서 클라이언트가 서버를 계속해서 물고 늘어지면 서버는 이 클라이언트의 연결을 유지하느라 다른 컴퓨터의 응답이 늦어질 것입니다. 이런 방식으로 여러 대의 PC가 서버를 붙잡고 늘어져서 서버가 다른 일을 하지 못하도록 하는 것을 DDOS 공격이라고 하죠...



2. Socket 통신


Socket 통신은 클라이언트가 서버와 접속이 되면 서버나 클라이언트에서 강제로 접속을 해제할 때까지는 계속해서 접속이 유지됩니다. 따라서 서버의 능력이 무한대가 아닌 이상 동시에 접속할 수 있는 클라이언트의 수가 제한이 될 수 밖에 없겠죠. 



Socket 통신은 실시간으로 정보 교환이 필요하는 채팅이나 온라인 게임, 실시간 동영상 강좌 등에 사용됩니다. 따라서 이와 같은 경우가 아니라면 서버와의 통신은 HTTP를 사용하는 것이 시스템의 자원을 보다 효과적으로 사용할 수 있습니다.



3. 시스템의 구성


단말기가 서버에 접속하기 위해서는 서버에 단말기의 응답을 처리하는 별도의 프로그램이 있어야 합니다. 저는 이것을 서버 모듈이라고 부르겠습니다. 서버 모듈은 C, PHP, Java, ASP 등 다양한 언어로 작성될 수 있을 것지만, 제가 사용하는 서버가 아파치 웹서버를 사용하므로 PHP로 구성하기로 합니다. 서버와 통신하기 위한 시스템의 구성은 다음 그림과 같습니다.




출처: http://k9e4h.tistory.com/150 [Kim's :D]

'서버 > 기술' 카테고리의 다른 글

CURL 이란?  (0) 2018.12.22
restful api  (0) 2018.12.03

statement 와 preparedStatement 가 왜 두개가 있는지부터 생각해보아야 할꺼에요?
먼저 statement 는 동적으로 변하지 않는 쿼리를 날리고자 하는 경우에 사용되고요
preparedStatement 는 동적으로 쿼리를 변경해서 날릴 때 사용하지요.
그렇기 때문에 in parameter 만 다른 많은 쿼리를 날리고자 할 때는
preparedStatement 를 사용하는 것이 매우 효과적입니다. 왜냐하면 statement 로 날릴 경우에는 매번 dbms 에서 컴파일을 하고 실행하는데 반해 preparedStatement 는 한번 컴파일해놓고 in parameter 만 변경해서 실행하거든요 하지만 모든 쿼리를 preparedStatement 로 사용할 경우에는 문제가 생길 수 있습니다. dbms 자원이 낭비되거든요 모든 쿼리를 메모리에 가지고 있을려니 힘들죠 그리고 필요하지도 않는 쿼리가 메모리에 있으니 메모리가 꽉차면 매번 제거하는 작업도 해야하구..
jdbc programming in oracle 라는 책이던가.. 거기서는 65번 이상 반복적으로 쿼리를 실행할 경우에는 preparedStatement 를 사용하라고 합니다. oracle 이외에는 어떤게 적정수치라고 할 수 없지만 ...
암튼 결론을 내리자면 반복적인 실행이 필요없는 쿼리이고 자주 사용되지 않는 쿼리라면 꼭 statement 를 사용하세요. 어떤 회사에는 preparedStatement 가 좋다고 모든 쿼리를 이걸로 작성하는데 이는 분명 잘못된겁니다. 


출처 : http://uclee1124.tistory.com/m/28

'DB' 카테고리의 다른 글

DataSet DataTable DataGridView  (0) 2019.03.25
DB 정규화  (0) 2019.01.09
프로시저란?  (0) 2018.12.26
left, right, inner, outer, natural join  (0) 2018.11.20
DB 성능 순서  (0) 2018.09.20

Interface, Abstract

Interface

- 일종의 추상 클래스

- 오직 추상메서드와 상수만을 멤버로 갖는다.

- Implements 키워드를 사용

- 상속의 관계가 없는 클래스간 서로 공통되는 로직을 구현하여 쓸 수 있도록한다.

- Extends는 하나의 클래스만 상속 가능하나 Interface는 다중 상속이 가능하다.

Abstract

- 추상메서드를 하나 이상 가진 클래스

- 자신의 생성자로 객체 생성 불가능

- 하위 클래스를 참조하여 상위 클래스의 객체를 생성

- 하위 클래스를 제어하기 위해 사용


Abstract vs Interface

추상 클래스(Abstract)

클래스를 설계도에 비유한다면 추상클래스는 미완성 설계도에 비유할 수 있다. 미완성 설계도란, 단어

의 뜻 그대로 완성되지 못한 채로 남겨진 설계도를 말한다. 클래스가 미완성이라는 것은 멤버의 개수에

관계된 것이 아니라, 단지 미완성 메서드(추상메서드)들 포함하고 있다는 의미이다. 미완성 설계도로

완성된 제품을 만들 수 없듯이 추상클래스로 인스턴스는 생성활 수 없다. 추상클래스는 상속을 통해서

자손클래스에 의해서만 완성될 수 있다.

**자바의 정석 참고**

인터페이스 (Interface)

인터페이스는 일종의 추상클래스이다. 인터페이스는 추상클래스처럼 추상메서드를 갖지만 추상클래스 보다 추상화 정도가 높아서 추상클래스와는 달리 몸통을 갖춘 일반 메서드 또는 멤버변수를 구성원으 로 가질 수 없다. 오직 추상메서드와 상수만을 멤버로 가질 수 있으며, 그 외의 어떠한 요소도 허용하지 않는다. 추상클래스를 부분적으로만 완성된 '미완성 설계도'라고 한다면, 인터페이스는 구현된 것은 아 무것도 없고 밑그림만 그려져 있는 '기본 설계도'라고 할 수 있다. 인터페이스는 인터페이스로부터만 상속받을 수 있으며, 클래스와는 달리 다중상속, 즉 여러개의 인터페이스로부터 상속을 받는 것이 가능 하다.

**자바의 정석 참고**


공통점 

- new 연산자로 인스턴스 생성 불가능.

- 프로토타입만 있는 메서드를 갖는다.

- 사용하기 위해서는 하위클래스에서 확장/구현 해야 한다.

차이점

- 사용하는 키워드가 다르다.

- Abstract는 일반 메서드를 사용할 수 있지만, Interface는 메서드 선언만 가능하다.



출처: http://ktko.tistory.com/

'프로그래밍 > JAVA' 카테고리의 다른 글

NullPointerException  (0) 2019.01.22
싱글턴 패턴 사용하는 이유  (0) 2019.01.06
public static void main(String[] args)  (0) 2018.11.22
java exe 파일 만들기  (0) 2018.09.01
자바 OutputStream 줄바꿈  (0) 2018.08.31

+ Recent posts