CS
-
[네트워크] 스트리밍CS/네트워크 2021. 7. 22. 16:52
스트리밍 음악이나 동영상 등의 멀티미디어 파일을 전송하고 재생하는 방식 파일을 다운로드하는 것과 더불어 재생을 함으로써 기다리는 시간을 크게 줄일 수 있다. 프로토콜 오디오 스트림은 파일 크기를 더 작게 만들기 위해 MP3(손실 압축 오디오 코딩 포맷), AAC(Advanced Audio Coding - 디지털 오디오에서 쓰이는 표준적인 손실 데이터 압축방식) 등의 오디오 코딩 포맷을 사용하여 압축된다. 비디오 코딩 포맷에는 MPEG-4, H.264, H.265이 포함된다. 인코딩된 오디오와 비디오 스트림들은 MP4, FLV 등의 컨테이너 비트스트림 내에 조합된다. 비트스트림은 RTMP, RTP 등의 전송 프로토콜을 사용하여 스트리밍 서버에서 스트리밍 클라이언트로 전달된다. 2010년대에는 애플의 HLS..
-
[네트워크] CORSCS/네트워크 2021. 7. 1. 15:16
CORS (Cross-Origin Resource Sharing) 다른 출처 간의 리소스 공유 CORS는 브라우저의 구현 스펙에 포함되는 정책 출처 서버를 찾아가기 위해 가장 기본적인 것들을 합쳐 놓은 것 프로토콜 + 호스트 + 포트 http://uchupura.tistory.com:80 CORS 동작 절차 브라우저에서 요청을 보낼 때 요청 헤더에 Origin이라는 필드에 요청을 보내는 출처를 함께 담아 전달 서버가 이 요청에 대한 응답을 할 때 응답 헤더의 Access-Control-Allow-Origin 필드에 "이 리소스를 접근하는 것이 허용된 출처" 정보를 담아 전달 브라우저에서는 요청 시 보냈던 Origin 필드와 응답으로 받은 Access-Control-Allow-Origin 필드를 비교하여 ..
-
[JAVA] GC 튜닝CS/개발 언어 (JAVA) 2021. 6. 26. 11:27
GC 튜닝의 두 가지 목적 Old 영역으로 넘어가는 객체의 수 최소화 하기 G1 GC를 제외한 Oracle JVM에서 지원하는 모든 GC는 Generational GC이다. Eden 영역에서 객체가 처음 만들어지고, Survivor 영역을 오가다가, 끝까지 남아 있는 객체는 Old 영역으로 이동한다. Old 영역의 GC는 Young 영역의 GC에 비하여 상대적으로 시간이 오래 소요되기 때문에 Old 영역으로 넘어가는 객체의 수를 줄이면 Full GC가 발생하는 빈도를 줄일 수 있다. Young 영역의 크기를 잘 조절함으로써 효과를 볼 수 있다. Full GC 시간 줄이기 Full GC 실행에 시간이 오래 소요되면(1초 이상) 연관된 여러 부분에서 타임아웃이 발생 할 수 있다. Old 영역의 크기를 줄이면..
-
[JAVA] Garbage Collection 모니터링CS/개발 언어 (JAVA) 2021. 6. 21. 23:36
GC 모니터링 JVM이 어떻게 GC를 수행하고 있는지 알아내는 과정 Young 영역에 있는 객체를 Old 영역에 언제 얼마나 이동했는지, stop-the-world가 언제 얼마나 일어났는지에 대한 정보를 알 수 있음 GC 모니터링 방법 jstat VMID (Virtual Machine ID) 동작하고 있는 VM을 가리키는 ID jstat을 통해서 모니터링을 하기 위해서는 vmid 정보를 argument로 전달 필요 VMID를 확인하기 위해서는 아래와 같이 jps 명령어를 통해서 확인 가능 $ jsp 2981 auth-api.jar GC 관련 jstat 옵션 옵션 기능 gcutil 각 힙 영역에 대한 사용 정도를 백분율로 보여준다. 아울러 총 GC 수행 횟수와 누적 GC 시간을 알 수 있다. gc 각 힙(..
-
[네트워크] netstat 상태값CS/네트워크 2021. 6. 12. 12:17
netstat 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스의 통계 정보를 보여주는 도구 사용 방법 netstat [옵션] [| grep 포트 번호 or 서비스명] option -a : 모두 -n (number port) : 포트 넘버 -l (listen) : 연결 가능한 상태 -t (tcp) : tcp -u (udp) : udp -p : 프로그램 이름 / PID -i : 이더넷 카드별 정상/에러/드랍 송수신 패킷 수 확인 -r : 라우팅 테이블 -s : 네트워크 통계 mac에서 PID를 포함하는 네트워크 상태값 확인 $ netstat -anv | grep 8080 linux에서 PID를 포함하는 네트워크 상태값 확인 $ netstat -anp | grep 8080 netstat 상태값 state ..
-
[개발언어] @Controller vs @RestControllerCS/개발 언어 (JAVA) 2021. 6. 4. 13:41
@Controller 전통적인 스프링 MVC의 컨트롤러 View를 반환하기 위해 사용하고 Restful 웹 서비스를 반환하기 위해서는 @ResponseBody 어노테이션을 붙여야한다. Controller가 View를 반환하기 위해서는 ViewResolver가 사용되며, ViewResolver 설정에 맞게 View를 찾아 랜더링한다. @RestController Restful 웹서비스 컨트롤러 데이터를 반환하기 위해 사용한다. RestController가 데이터를 반환하기 위해서는 ViewResolver 대신에 HttpMessageConverter가 동작한다. 스프링은 클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보를 조합하여 적합한 HttpMessageConverter를 선탱하여..
-
[네트워크] CORS (Cross-Origin Resource Sharing)CS/네트워크 2021. 5. 31. 23:58
CORS 다른 출처 간의 리소스 공유 동작 방식 웹 클라이언트 어플리케이션이 다른 출처의 리소스를 요청할 때 요청 헤더의 Origin이라는 필드에 요청을 보내는 출처를 함께 전달한다. 서버가 이 요청에 대한 응답을 할 때 응답 헤더의 Access-Control-Allow-Origin 필드에 "이 리소스를 접근하는 것이 허용된 출처"를 내려주고, 이후 응답을 받은 브라우저는 자신이 보냈던 요청의 Origin과 서버가 보내준 응답의 Accss-Control-Allow-Origin을 비교해본 후 이 응답이 유효한지 아닌지를 판단한다. 오픈스페이스 환경에서 다른 출처에 있는 리소스를 가져와서 사용하는 일은 굉장히 흔한 일이라 무작정 막을 수 없기 때문에 몇 가지 예외 사항이 존재하는데 이 조항에 해당하는 것이 ..
-
[JAVA] Reactive StreamsCS/개발 언어 (JAVA) 2021. 5. 16. 19:01
Reactive Streams Reactive 프로그램을 위한 명세 Non-Blocking과 Back-Pressure를 이용하여 비동기 스트림 처리의 표준을 제공하는 것이 목적 Back-Pressure 컴포넌트가 대처할 수 없고 장애가 발생하면 안되기 때문에 컴포넌트는 상위 컴포넌트들에 자신이 과부하 상태라는 것을 알려 부하를 줄일 수 있도록 해야한다. Subscriber가 Publisher에 Request()하는 과정 push하는 데이터의 흐름을 제어 Publisher 무한한 data를 제공하고, 제공되는 data는 Subscriber에 의해 구독되는 형태로 처리 subscribe() : subscriber를 받아들이는 메소드 Subscriber onSubscrive() : Publisher가 생산하는..