본문 바로가기

NAVER D2 정리

(8)
최신 브라우저의 내부 살펴보기 4 - 컴포지터가 사용자 입력을 받았을 때 원문 작성일: 2019.04.30 원문: https://d2.naver.com/helloworld/6204533 컴포지터가 사용자 입력을 받았을 때 이 글에서는 사용자 입력(input)을 받았을 때 컴포지터가 어떻게 부드러운 상호작용이 이루어지게 하는지 알아보겠다. 브라우저 관점에서 입력 이벤트 '입력 이벤트(input event)'라는 말을 들었을 때 입력란에서 일어나는 값 입력이나 마우스 클릭만 생각할 수 있다. 하지만 브라우저의 관점에서 입력이란 모든 사용자의 제스처를 의미한다. 마우스 휠을 스크롤하는 것, 화면을 터치하거나 마우스 포인터를 화면 위에 올리는 것도 입력 이벤트이다. 사용자 제스처가 발생했을 때 가장 먼저 제스처를 수신하는 것은 브라우저 프로세스이다. 브라우저 프로세스는 제스처가 어디..
최신 브라우저의 내부 살펴보기3 - 렌더러 프로세스의 내부 동작 원문 작성일: 2019.04.22 원문: https://d2.naver.com/helloworld/5237120 이 글에서는 렌더러 프로세스가 HTML 문서를 받았을 때 어떤 절차를 거쳐 화면을 구성하는지 설명합니다. 이 과정을 효율적으로 처리하기 위해 렌더러 프로세스가 어떤 아키텍처를 가지고 있는지 살펴보고, 웹 개발자가 고려하면 좋을 내용을 소개합니다. 렌더러 프로세스는 웹 콘텐츠를 처리한다 렌더러 프로세스는 탭 내부에서 발생하는 모든 작업을 담당한다. 렌더러 프로세스의 메인 스레드가 브라우저로 전송된 대부분의 코드를 처리한다. 간혹 웹 워커나 서비스 워커를 사용하는 경우에는 워커 스레드가 JavaScript 코드의 일부를 처리한다. 웹 페이지를 효율적이고 부드럽게 렌더링하기 위해 별도의 컴포지터 스..
최신 브라우저의 내부 살펴보기2 - 내비게이션 과정에서 일어나는 일 원문 작성일: 2019.03.26 원문: https://d2.naver.com/helloworld/9274593 내비게이션 과정에서 일어나는 일 이 글에서는 웹 사이트를 표시하기 위해 각 프로세스와 스레드가 어떻게 통신하는지 좀 더 깊게 알아본다. 브라우저의 주소 표시줄에 URL을 입력하면 브라우저가 인터넷에서 데이터를 가져와서 페이지를 표시한다. 간단한 이 동작에서 사용자가 사이트를 요청하고 브라우저가 페이지 렌더링을 준비하는 과정(이 글에서는 이 과정을 '내비게이션'이라고 하겠다)에 초점을 맞춰 살펴보겠다. (역주: '내비게이션'을 (사이트 간의)이동'이라 생각하면 이 글을 이해하기 좀 더 쉬울 것이다) 브라우저 프로세스에서 시작한다 브라우저 프로세스에는 UI 스레드와 네트워크 스레드, 스토리지 스레..
최신 브라우저의 내부 살펴보기1 - CPU, GPU, 메모리 그리고 다중 프로세스 아키텍처 원문 작성일: 2019.03.26 원문: https://d2.naver.com/helloworld/2922312 브라우저 아키텍처 브라우저는 스레드를 많이 사용하는 프로세스 하나만 사용할 수도 있고, 스레드를 조금만 사용하는 프로세스를 여러 개 만들어 IPC(Inter Process Communication, 프로세스 간 통신)로 통신할 수도 있다. 여기에서 주목해야 할 중요한 점은 이러한 서로 다른 아키텍처가 구현 세부 사항이라는 점이다. 브라우저를 만드는 방법에 대한 표준은 없다. 브라우저마다 접근 방식이 완전히 다를 수 있다. 이 시리즈에서는 다음 그림에 표현된 Chrome의 최근 아키텍처를 살펴본다. 제일 위에 있는 브라우저 프로세스는 애플리케이션의 각 부분을 맡고 있는 다른 프로세스를 조정한다...
Spring-Test-MVC 프로젝트 소개 원문 작성일: 2011.12.22 원문 : https://d2.naver.com/helloworld/1341 이 글에서는 Builder 패턴을 사용해서 스프링 MVC 테스트 코드를 작성하는 방법을 알아본다. Spring-Test-MVC 프로젝트는 무엇일까 Spring-Test-MVC 프로젝트의 목표는 Servlet 컨테이너를 사용하지 않아도 MockHttpServletRequest와 MockHttpServletResponse를 사용해서 Spring Controller를 쉽고 편하게 테스트하는 방법을 제공하는 것이다. 하지만 안타깝게도 이 프로젝트의 홈페이지에서 살펴본 테스트 코드를 실무에 그대로 적용할 수는 없다. 분명히 NullPointerException이 발생할 것이기 때문이다. Controller..
자바 애플리케이션 성능 튜닝의 도(道) 원문 작성일: 2012.10.25 원문: https://d2.naver.com/helloworld/184615 이 글에서는 성능 튜닝 작업의 상세한 내용보다는, 튜닝에 필요한 배경 지식 튜닝 순서 JVM의 각종 옵션 튜닝 접근 방법 등에 대한 간략한 소개를 통해 튜닝의 전반적인 흐름과 방법론에 대해 살펴본다. 어느 튜닝 방법을 선택하든 우선 자바 애플리케이션 수행 과정을 모니터링해야 한다. 그래서 이 글에서는 다음을 중심으로 살펴본다. 어떻게 모니터링을 하는가 어떻게 JVM 옵션을 주어야 하는가 코드 수정 필요 판단은 어떻게 하는가 자바 애플리케이션 성능 튜닝에 필요한 지식 1. JVM 동작 과정에 대한 이해가 필요하다. (크게 Garbage Collection(이하 GC)에 대한 것과 HotSpot에 ..
Java Garbage Collection 원문 작성일: 2011.12.22 원문: https://d2.naver.com/helloworld/1329 가비지 컬렉션 과정 - Generational Garbage Collection stop-the-world : GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것. sotp-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춤. GC 작업을 완료한 이후에야 중단했던 작업을 다시 시작. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생. 대개의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것. Java는 프로그램 코드에서 메모리를 명시적으로 지정하여 해제하지 않는다. 해당 객체를 null로 지정하거나 System...
Java HashMap은 어떻게 동작하는가? 원문 작성일: 2014.07.04 원문: https://d2.naver.com/helloworld/831311 Java HashMap ? HashMap은 Java Collections Framework에 속한 구현체 클래스다. Java Collections Framework는 1998년 12월에 발표한 Java2에서 정식으로 선보였다. Map 인터페이스 자체는 Java5에서 Generic이 적용된 것 외에 처음 선보인 이후 변화가 없다. 하지만, HashMap 구현체는 성능을 향상시키기 위해 지속적으로 변화해왔다. 이 글의 내용은, 어떤 방식으로 HashMap 구현체의 성능을 향상시켰는가. Amortized Constant Time을 위하여 어떻게 해시 충돌(hash collision) 가능성을 줄이고 ..