프로그래밍(Basic)

    [바미] 브라우저는 어떻게 동작하는가?

    이 글은 이스라엘 개발자 탈리 가르시엘(Tali Garsiel)이 html5rocks.com에 게시한 "How Browsers Work: Behind the scenes of modern web browsers"를 번역한 글입니다. 탈리 가르시엘은 몇 년간 브라우저 내부와 관련된 공개 자료를 확인하고, C++ 코드 수백만 줄 분량의 WebKit이나 Gecko 같은 오픈소스 렌더링 엔진의 소스 코드를 직접 분석하면서 어떻게 브라우저가 동작하는지 파악했습니다. 소개 브라우저는 아마도 가장 많이 사용하는 소프트웨어일 것이다. 이 글을 통해 브라우저가 어떻게 동작하는지 설명하려고 한다. 이 글을 읽고 나면, 브라우저 주소 창에 naver.com을 입력했을 때 어떤 과정을 거쳐 네이버 페이지가 화면에 보이게 되는..

    [바미] 어제 KT 통신 장애 원인이였던 '라우팅 오류'에 대해 알아봅시다.

    25일 오전 11시30분경 KT 유·무선 인터넷망에 데이터 전송이 뤄지지 않아 전국적인 통신 장애가 발생했던 일이 발생했습니다. 어제에 장애가 발생하였던 넥슨, 다나와, 네이버 등(참조)이 그 예인데요. 장애 발생 초기 원인으로는 대규모 디도스 공격을 거론했지만, 확인 결과 KT의 네트워크 경로설정(라우팅) 오류가 원인인 것으로 확인되었다고 합니다. 이것에 대해 알기 위해서는 먼저 라우팅에 대해 알아야 합니다. 라우팅은 네트워크 안에서 통신 데이터를 전송할 시 경로를 선택하는 과정을 말합니다. 여기서 경로란 전송 데이터를 가장 짧은 거리 또는 가장 적은 시간 안에 전송할 수 있는 경로를 말하는 것이죠. 이동통신사를 포함해 모든 네트워크 장비에는 라우팅을 위한 라우팅 케이블이 있습니다. 자! 그러면 이를 ..

    [바미] Builder 패턴에 대해 알아봅시다.

    안녕하세요. 오늘은 Builder 패턴에 대해 알아보려고 합니다. 흔히 Build라는 단어는 구조를 가지고 건물 등을 지을 때 사용할 때 쓰는 단어입니다. 보통 건물을 세울 때 밑에 지반을 다지고, 골격을 세우고, 아래에서 위로 조금씩 만드는 형식이죠. 그리고 그 건물이 어려울 수록 한 번에 세우는 것 또한 쉽지 않죠. 보통은 전체를 구성하고 있는 부분들을 단계를 나누어 짓게 되는데요. 이런 형식의 구조를 가진 인스턴스를 쌓아 올리는 디자인 패턴이 Builder 패턴이라고 합니다. 이제 예제 프로그램을 만들어 볼 건데요. Builder 패턴을 사용하여 문서를 작성하는 프로그램을 만들어 보도록 하겠습니다. 여기에서는 다음과 같은 구조를 가지고 있는데요. 타이틀을 한 개 포함한다. 문자열을 몇 개 포함한다...

    [바미] Prototype 패턴에 대해 알아봅시다.

    안녕하세요. 오늘은 Prototype 패턴에 대해 알아볼 것인데요. 보통 인스턴스를 작성할 때 new Instance(); 이런식으로 new라는 Java언어의 키워드를 사용해서 클래스 이름을 지정해서 인스턴스를 생성하실 겁니다. 이 처럼 new로 인스턴스를 만들 경우에 클래스 이름도 반드시 지정해야 하지만 클래스 이름을 지정하지 않고 인스턴스를 생성 할 때도 있어요. 종류가 너무 많아 클래스로 정리되지 않는 경우 클래스로부터 인스턴스 생성이 어려운 경우 framework와 생성할 인스턴스를 분리하고 싶은 경우 가 그 예인데요. 1번의 경우 취급하는 오브젝트의 종류가 너무 많아서 각각을 별도의 클래스로 만들어 다수의 소스 파일을 작성해야 하는 경우를 말하구요. 2번의 경우 생성하고 싶은 인스턴스가 복잡한 ..

    [바미] Singleton 패턴에 대해 알아봅시다.

    안녕하세요 오늘은 싱글톤 패턴에 대해 알아 볼 것입니다. 디자인 패턴을 공부하셨던 분이라면 아주 친숙한 디자인 패턴 중에 하나인데요. 흔히 "싱글톤 패턴이 뭐에요?" 라고 물으면 대게는 "1개의 인스턴스를 사용하는 디자인패턴이요." 라고 답합니다. 맞는 말이긴 하지만 뭔가 아쉬운 답변이죠? 이 부분에 대해 조금 자세히 알아봅시다. 보통 프로그램을 실행하게 되면 많은 인스턴스가 생성되는데요. Java로 예를 들어 문자열을 표시하는 java.lang.String 클래스의 인스턴스는 생성된 1개의 문자열 당 1개의 인스턴스가 생성되게 됩니다. 예를 들어 1000개의 문자열이 생성된다 했을 때 10000개의 인스턴스가 만들어지게 돼요. 그런데 클래스의 인스턴스가 딱 하나만 필요한 경우가 있어요. 보통 시스템 안..

    [바미] Factory Method에 대해 알아봅시다.

    이번에는 Factory Method에 대해 알아보려 합니다. Factory Method의 Factory는 공장이라는 의미인데요. 이 공장은 인스턴스를 생성하는 곳이라 생각하면 됩니다. 이 공장은 전에 배웠던 Template Method패턴으로 구성되어 있습니다. 이 패턴에서는 인스턴스를 만드는 방법을 상위 클래스 측에서 결정하지만 구체적인 클래스 이름까지는 결정하지 않습니다. 구체적인 내용은 모두 하위 클래스 측에서 수행하죠. 그래서 인스턴스 생성을 위한 Framework와 실제의 인스턴스 생성의 클래스를 분리해서 생각 할 수 있게 됩니다. 이제 예제 프로그램을 만들어봅시다! 이번에는 사원증을 만드는 프로그램을 만들어 볼 것인데요. 사원증을 만들기 위해 필요한 공장을 만들어 봅시다. 클래스 다이어그램은 ..

    [바미] 템플릿 메소드(Template Method) 패턴에 대해 알아봅시다.

    안녕하세요. 이번에는 템플릿 메소드에 대해 알아보려 합니다. 먼저 템플릿은 쉽게 말해 일정한 틀, 형식을 의미합니다. 붕어빵틀을 흔히 예로 드는데요. 이런식의 틀만 있을 때 내용물만 조금씩 변경 해주기만 하면 다양한 붕어빵을 만들 수 있을 겁니다. 또 나만의 붕어빵으로도 만들 수 있겠죠? ^_^ 이 처럼 이번에 살펴볼 템플릿 메소드 패턴은 이러한 템플릿의 기능을 가진 패턴인데요. 상위 클래스 쪽에 템플릿에 해당하는 메소드가 정의되어 있고, 그 메소드의 정의 안에는 추상 메소드가 사용되고 있습니다. 그래서 상위 클래스의 프로그램만 보면 추상 메소드를 어떻게 호출 하고 있는지 알 수 있지만 그 추상 메소드가 어떤 처리가 수행 되는지는 알 수 없어요. 추상 메소드를 실제로 구현하는 것은 하위 클래스 인데요. ..

    [바미] Adapter 패턴에 대해 알아봅시다.

    흔히 어댑터 패턴을 설명할 때 위의 어댑터의 역할을 예시로 많이 드는데요. 직류 15볼트로 동작하는 스마트폰을 교류 120볼트의 AC전원에 연결한다고 가정해볼게요. 이 때 AC 어댑터라는 장치를 사용하게 되는데요. AC 어댑터는 가정용 전원으로 제공되고 있는 교류 120볼트를 지금 필요한 직류 15볼트로 교환해 줍니다. 제공되고 있는 것과 필요한 것 사이를 연결 해주는 것이 바로 어댑터의 역할인데요. 어댑터의 사전적인 의미는 개조(adapt)시키는 것이라는 의미입니다. 그러니까 AC 어댑터의 역할은 직류 15볼트의 컴퓨터에 교류 100볼트의 환경에 맞게 바꾸는 것을 의미하는 것이죠. 이 처럼 프로그램 개발을 하다보면 이미 제공된 것을 그대로 사용할 수 없을 때 필요한 형태로 교환하고 사용하는 일이 자주 ..

    [바미] Iterator패턴에 대해 알아봅시다.

    Java 언어에서 배열의 모든 요소를 표시하기 위해서는 아래와 같이 사용합니다. for (int i = 0; i < arr.length; i++) { Sysytem.out.println(arr[i]); } 보통 위와 같은 코드를 사용 할 겁니다. 위에서 사용 되고 있는 i를 살펴보죠. 변수 i는 처음에 0으로 초기화되어 1, 2, 3, 4,...으로 증가하게 되는데요. 그 때마다 arr[i]의 내용이 출력되죠. 이와 같은 형식의 for문은 자주 사용 하는데요. 특히 위와 같은 for문을 사용하면 변수 i가 인덱스 값이 되어 배열 안에 있는 특정 요소를 가져 올 수 있다는 점인데요. arr[0] // 0번째 요소 arr[1] // 1번째 요소 arr[2] // 2번째요소 ... arr[i] // i번째 요..