프록시프록시 서버는 클라이언트가 프록시를 통해서 다른 네트워크 서비스에 간접적으로 접속할 수 있게 지원해주는 응용 프로그램을 의미한다.서버와 클라이언트의 중계자 역할을 수행하며, 프록시 서버 내부에는 캐시가 존재한다. 클라이언트의 요청에 대한 처리 결과를 캐시에 보관하고, 동일한 요청에 대해 원격 서버에접근하지 않고, 캐시를 통해 결과를 전달할 수 있기 때문에 빠른 응답을 보낼 수 있다. 또한 원격 서버에 대한 트래픽을 감소시킬 수 있기 때문에 병목현상 방지 가능하다. - 병목현상 : 대역폭이 높은 곳에서 대역폭이 낮은 곳으로 이동할 때, 트래픽이 증가하는 현상 프록시 서버는 위치에 따라 포워드 프록시, 리버스 프록시로 나눌 수 있다. 포워드 프록시는 내부망에서 클라이언트와 연결된 프록시로, 클라이언트의..
성능 클라이언트를 제외한 서버군 전체가 상호작용 하며, 클라이언트의 요청을 처리하는 능력을 의미한다.클라이언트 측면에서는, 단위 시간 당 요청 처리량을 의미하며, 서버 측면에서는 클라이언트의 수용량을 의미한다. 지연과 대역폭 지연은 송신지에서 수신지로 메세지를 보내는데 도착하는 시간을 의미한다. (지연 = 전파시간 + 전송시간 + 큐시간) - 전파시간 : 한 노드에서 다른 노드로 데이터가 전달될 때 통신 링크 상에서 걸리는 시간 (발사 이후, 도착지까지 도착하는 시간) - 전송시간 : 노드에서 노드로 데이터를 전송할 때의 시간 (발사 준비 시간) - 큐지연 : 데이터가 전송되기 위해 라우터의 출력포트에서 기다리는 시간 (발사 대기 시간) 대역폭은 한번에 많은 패킷을 보낼 수 있는지를 의미한다. 예를들어 ..
JDBC 자바에서 데이터베이스에 접속할 수 있도록 지원해주는 API 이다. JDBC는 데이터베이스에서 자료를 쿼리하는 방법을 제공한다.JDBC가 개발되기 전에는, 각각의 데이터베이스마다(Mysql, Mssql, Oracle ..) 각각의 쿼리문을 사용하였고, 개발의 불편함이 존재했다. 데이터베이스를 변경하면 쿼리를 모두 수정해야하는 문제도 발견했다. 그래서 JDBC가 개발되었으며, JDBC 드라이버가 자바의 요청을 DBMS가 이해할 수 있는 프로토콜로 변환해주는 어댑터 역할을 수행한다.대체로 관계형 데이터베이스 서버로의 연결을 제공하며, 각 DBMS에 맞는 JDBC 드라이버가 필요하다. Java Application에서 사용하는 JDBC Driver Manager와 DBMS에 의존하는 JDBC Drive..
대용량 테이블이나 인덱스를 동일한 논리적 속성을 가진 작은 단위로 분할하는 것을 파티셔닝이라고 한다. 물리적으로 분할은 했지만, 애플리케이션은 파티셔닝을 인지하지못한다. 큰 테이블을 분할하여 작은 테이블로 나누었기 때문에 관리 측면에서의 편의성 제공한다. 파티셔닝을 사용하면 아래와 같은 효과를 기대할 수 있다. - 데이터 풀스캔 시, 엑세스의 범위를 줄여 성능 향상 - 각 파티션별로 백업 및 복구 작업 가능 - 물리적으로 여러 영역으로 파티셔닝했기 때문에 전체 데이터가 훼손되는 가능성 감소 - 파티션 단위로 디스크 I/O를 분산해 부하 감소 가능 하지만, 장점만 있지는 않다. 단점도 존재한다. - 테이블간의 JOIN 많이 발생하여 비용 증가 - 테이블과 인덱스를 별도로 파티셔닝이 불가 (테이블과 인덱스는..
데이터베이스 격리수준을 알아보려고 한다. 격리수준은 트랜잭션에서 일관된 데이터를 허용하는 수준을 의미한다. 격리수준을 높이면 데이터베이스에 대한 요청에 대해 병렬적 처리가 아닌, 순차적으로 처리하게 되기 때문에 일관된 데이터를 보장할 수 있겠지만, 클라이언트 요청에 대한 응답이 늦어질 수 있는 단점이 있다. 그렇다고 격리수준을 낮추면 병렬적으로 처리가 가능하기 때문에 속도는 향상될 수 있겠지만, 일관된 데이터를 보장할 수 없다.개인적으로 데이터베이스를 사용할 때, 일관된 데이터 제공이 최우선, 그다음이 성능이라고 생각한다. 그렇다고 성능을 완전 무시할 수 는 없을 것이다. Isolation Level (1) Read UnCommitted (LV 0) 트랜잭션에서 커밋되지 않는 데이터를 다른 트랜잭션에서 ..
이전에도 REST API 에 대해 정리를 했는데, REST API 장, 단점 중심으로 작성을 해보려고 한다. 먼제 REST 는 웹에 존재하는 자원에 대해 고유한 URI 값을 부여하는 방법론이다. 각각의 자원에 대한 고유한 URI와 자원에 대한 처리 방식인 METHOD를 가지고 있다.흔히, 'REST 하다'는 것은 아래에서 제시하는 REST의 특징을 얼마나 잘 반영하느냐에 결정된다. (이전 포스팅 : https://lkhlkh23.tistory.com/78) (1) Unirom Interface자원에 대해 통일된 방식을 통해 처리하기 때문에 HTTP 표준만 준수하면 IOS, JAVA 등 다양한 언어에 종속받지 않고, 모든 환경에서 사용이 가능하다. (Loose Coupling) - Self Descript..
스프링을 구성하는 디자인 패턴 - 프록시 패턴 (예 : AOP) target을 직접 호출하는 것이 아닌, 대행 객체를 통해 target에 접근하는 방식 - 프록시 객체에는 target을 참조하는 참조값을 가지고, 실제 결과값에 대한 조작은 target의 메소드를 호출하여 결과값 반환. - 프록시 객체는 흐름제어만 할뿐 결과값을 변형시키지 않음 - 프록시 객체는 실제 target 객체에 대한 참조변수를 보유 - 프록시 객체는 target 객체 호출 전후에도 별도 로직 처리 가능 가상 프록시Target 객체의 특정 행위를 수행하는 비용이 많이 발생했을 경우 / 무거운 객체를 생성할 때 사용 가능 - 프록시 객체는 target 객체와 동일한 구조를 가지고 있기 때문에 target 객체와 동일한 사용법 - 프록..
1. Model 1 방식 디자인코드 (HTML)와 자바코드(비즈니스 로직)를 구분하지 않고, 하나의 JSP 파일 내에 기술하여 개발하는 방식장점 : 쉬운 개발, 낮은 학습 비용단점 (1) 디자인코드와 자바코드의 경계가 명확하지 않아 높은 복잡도 (2) 디자인코드와 자바코드가 하나의 파일에서 관리되기 때문에 자바코드를 수정할 때도 디자이너와 별도 협업이 요구 (3) 비즈니스 로직의 재사용성이 낮으며, 중복 존재 (4) 유지보수의 어려움 존재 2. Model2 방식 MVC 패턴을 적용하여 각각의 역할을 나누어서 개발이 가능 - Model : 비즈니스 로직을 담당하는 영역 (Model 1 방식과는 달리 디자인코드와 비즈니스로직을 분리) - View : 사용자가 사용하는 영역이며, Model에서 생성된 Data..
1. Stack, Heap 메모리 차이점? Stack : 스레드가 독립적으로 가지고 있는 영역, 메소드의 호출 정보, 지역변수 정보 보유. Stack 영역은 독립적이기 때문에 각각의 메소드가 독립적으로 호출 가능 - PC Register, Native Method Stack도 스레드가 독립적으로 보유Heap : 스레드가 공통적으로 사용하고 있는 공유 영역, 참조 객체 정보 보유. Method Area는 스레드가 공유해서 사용하고 있으며, 클래스로더가 바이트코드를 처음으로 적재하는 공간으로서, 클래스와 관한 모든 정보들을 보유하고 있다. 리플렉션은 Method Area 정보를 이용해서 수행 2. sleep() 과 wait() 차이 synchronized 키워드 내부에서 sleep()은 lock은 해제하지 ..
1. HTTP METHOD PUT vs PATCH PUT은 요청된 자원을 수정할 때, 자원내 필드를 전체 수정할 때 사용 (만약 일부만 전달할 경우, 그외 필드들은 NULL or 초기값 처리) - 예 : 필드에 name, age, height가 존재할 때, 'name=DOBY'만 전달할 경우, age와 height는 0으로 초기화 PATCH는 요청된 자원을 수정할 때, 자원내 필드를 일부 수정할 때 사용 참고로 HEAD는 GET 방식과 동일하지만, BODY가 존재하지 않음. 웹 서버 정보확인, 버전확인, 최종 수정일자 확인을 위한 용도 2. HTTP METHOD GET vs POST GET은 Http Request Message의 Header 부분의 URL에 담겨서 전송되며, BODY는 비어있는 상태 U..