일주일간 나의 흥미를 끈 인사이트는??
L4 설정 오류에 따른 브라우저 캐시 성능 저하 사례
https://brocess.tistory.com/264
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/
URL Shortener 개발기
https://42place.innovationacademy.kr/archives/9063
https://brocess.tistory.com/264
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/
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한 문자들만을 모은 인코딩 방식