22.12.19 ~ 12.25

유수민·2022년 12월 26일
0

인사이트

목록 보기
8/15
post-thumbnail

일주일간 나의 흥미를 끈 인사이트는??

📌목록

📌감상

1. L4 설정 오류에 따른 브라우저 캐시 성능 저하 사례

https://brocess.tistory.com/264

  • 라운드 로빈 스케줄링(Round Robin Scheduling, RR)
    프로세스들 사이에 우선순위를 두지 않고, 순서대로 시간단위(Time Quantum/Slice)로 CPU를 할당하는 방식의 CPU 스케줄링 알고리즘.컴퓨터 운영에서, 컴퓨터 자원을 사용할 수 있는 기회를 프로그램 프로세스들에게 공정하게 부여하기 위한 한 방법
  • L4 스위치
    로드밸런싱(서버부하분산)을 처리하는 장비
  • 요약
    이 글은 라운드 로빈형태로 http 요청을 분배시켜 각 서버마다 로컬 파일시스템을 가지고 있어 매번 컨텐츠 내용을 내려받음으로써 성능 저하을 일으키는 문제에 대한 요약 정리 내용이었다. 이 문제를 L4 분배방식을 해시로 변경해 PC의 IP가 동일하면 동일한 웹서버로 접속이 이뤄지도록 하거나 로컬파일시스템이 아닌 공유파일시스템을 사용함으로써 해결할 수 있다고 말하였다.

2. Java NIO는 생각만큼 non-blocking 하지 않다

https://homoefficio.github.io/2016/08/06/Java-NIO%EB%8A%94-%EC%83%9D%EA%B0%81%EB%A7%8C%ED%81%BC-non-blocking-%ED%95%98%EC%A7%80-%EC%95%8A%EB%8B%A4/

  • Java NIO : New IO의 줄인말
    보다 빠른 IO를 위해서 추가된 패키지. Channel 기반으로 데이터와 연결하며 Stream 대신 Buffer를 사용하여 데이터를 읽고 쓴다. 단지 파일을 쓰고 읽을 때에만 사용하는 것이 아니라, 파일 복사를 하거나, 네트워크로 데이터를 주고 받을 때에도 사용할 수 있다.

  • 내용
    NIO에서 File I/O에 사용되는 Channel이 blocking 모드로 동작하기는 하지만, 데이터 Buffer를 통해 이동시키므로 기존의 Stream I/O에서 병목을 유발하는 몇가지 레이어를 건너뛸 수 있다. File I/O가 아닌 것들은 Non-blocking 모드로 동작하는 것들도 많다.

  • 기존 Java I/O 가 상당히 느리고 비효율적인 이유
    1) OS에서 관리하는 커널 버퍼에 직접 접근 불가능
    소켓이나 파일에서 Stream이 들어오면 커널 버퍼에 쓰여지게 되고 code상 직접 접근할 수 없고, JVM 내부의 메모리에 불러온 후에야(복사) 접근할 수 있기 때문에 느렸다.
    2) Blocking I/O
    JVM 내부의 메모리에서 데이터를 복사해볼때 I/O를 요청한 쓰레드가 blocking 되어 다른 작업을 못한다.
    3) 클라이언트가 접속할때마다 스레드 생성
    한 클라이언트가 접속후, 짧은 시간 후에 다른 클라이언트가 서버에 접속을 시도한다면 Connection을 위해 앞서 접속한 클라이언트의 스레드가 모두 생성되기까지 기다려야 한다. -> Blocking I/O
    또한, 스레드가 생성될 수록 그만큼 GC가 발생하게 된다.

  • NIO 이 기존 Java I/O에서 보안된점
    1) Direct buffer로 커널 버퍼를 직접 핸들링하여 빠르다.
    커널 버퍼에 직접 접근 가능한 Buffer클래스가 제공되어 CPU자원의 비효율성(복사문제로 인해 발생), I/O 요청 스레드가 Blocking 된다는 점 개선
    2) System call을 간접적으로 사용가능
    Channel과 selector로 인하여 select() 시스템 콜을 간접적으로 사용할 수 있도록 지원해줘서 스레드를 매번 생성하지 않도록 한다.

참고) http://eincs.com/2009/08/java-nio-bytebuffer-channel-file/

3. URL Shortener 개발기

https://42place.innovationacademy.kr/archives/9063
옛날에 봤던 글인데 아직도 뇌속에 들어있지 않아 다시 읽어보았다.
shorten url은 긴 원본 url을 단축시켜서 간결한 url로 만드는 것으로 문자메세지로 링크를 보낼때 많이 쓰이는 듯하다.

  • 생성 과정
    1) 원본 url을 단축 url서비스에서 해싱함
    2) 해시값과 원본 url을 DB에 저장한다.
    3) 해시값의 앞 10자리인 일련번호를 Bijection 함수를 이용하여 Base62인코딩하여 문자열(응답값)로 변환
    4) 도메인링크/응답값을 붙여서 단축 url링크로 사용한다.
    5) 해당 단축 url 링크를 클릭했을 경우, 해당 url을 base62로 디코딩함
    6) 원본 해시값의 앞 10자리를 얻어 DB 조회를 함.
    7) 조회 성공시 DB에서 가져온 원본 url로 사용자를 redirect함.

  • base62 : +와/를 제외한 url에 safe한 문자들만을 모은 인코딩 방식

profile
배우는 것이 즐겁다!

0개의 댓글