전체 글

전체 글

    [Spring] 스프링 프레임워크(Spring framework)의 탄생 배경 (feat. CGI, Servlet, JSP, J2EE, EJB) - 2편

    아직 1편을 안보셨다면 1편을 보고와주세요! 1편에서 다룬 얘기를 요약하면 다음과 같습니다 태초에 Web이 있었다 이 때는 HTTP(Hyper-Text Transfer Protocol) 전송규약에 따른 정적인 데이터(HTML,XML,이미지 등)만 전달할 수 있었다. 하지만 웹이 발달하면서 사용자가 입력하는 걸 처리해서 다시 화면에 보여주는 동적인 페이지가 필요하게 되었다. 이때 등장한것이 CGI(Common Gateway Interface) 다. 당연하게도 CGI에는 장단점이 있었고, CGI에서 단점을 보완하고 자바(Java)로 웹을 구동할 수 있는 서블릿(Servlet)이 등장했다. 아직 멀었지만 그래도 점점 스프링(Spring)과 가까워져가는 것을 느끼시나요? 그럼 서블릿과 항상 함께 등장하는 JSP..

    [Spring] 스프링 프레임워크(Spring framework)의 탄생 배경 (feat. CGI, Servlet, JSP, J2EE, EJB) - 1편

    [Java] 자바(Java)의 역사에서 자바의 탄생 배경을 알아보았었죠~! 정말 간단하게 요약하자면 하드웨어를 위한 언어로 시작해서 나중에는 웹 개발을 할 때 쓰이는 대표적인 언어로 자리잡았습니다. 지금이야 자바로 웹 개발을 할때 스프링(Spring), 스프링 부트(Spring Boot) 등의 자바 프레임워크를 사용하는 게 당연하지만, 처음부터 그랬을까요? 오늘은 이 스프링 프레임워크가 어떤 과정과 시행착오를 거쳐 만들어지게 됐는지 알아보겠습니다! 태초의 웹(Web)의 역할 처음 웹이 등장했을 때는 HTTP(Hyper-Text Transfer Protocol) 전송규약에 따른 정적인 데이터(HTML,XML,이미지 등)를 전달하는 것만으로도 충분했습니다. 물론 페이지는 보여줄 수 있지만 유저가 어떤 입력을..

    [Spring] POJO (Plain Old Java Object) 란?

    POJO, 자바나 스프링 프레임워크를 다뤄보았다면 어디선가 본거같기도 하고 들어본거같기도 한 그런 단어입니다. 오늘은 이 POJO에 대해 알아보겠습니다! POJO는 Plain Old Java Object를 줄여쓴 말로, 제 특기인 직역을 하면 평이하고(아무것도 꾸며지지 않은) 오래된 자바 객체입니다. 일상 생활에서 자주 보이는 플레인(Plain) 요거트에서도 쓰이는 Plain 이죠. POJO 라는 단어의 탄생 POJO는 2000년 9월에 마틴 파울러(Martin Fowler), 레베카 파슨스(Rebecca Parsons), 조쉬 맥킨지(Josh MacKenzie) 가 사용하기 시작한 용어로서 Java EE 등의 중량 프레임워크들을 사용하게 되면서 해당 프레임워크에 종속된 무거운 객체를 만들게 된 것에 반..

    [JavaScript] 이벤트 버블링(Event Bubbling), 이벤트 캡처링(Event Capturing)

    [JavaScript] 이벤트(Event)란? 에서 이벤트(Event)와 이벤트 핸들러(Event Handler)에 대해 알아봤었습니다. 요약하자면 다음과 같습니다. 이벤트를 감지하는 이벤트 핸들러를 HTML과 연동 1번에서 연동된 HTML 부분에 사용자가 어떤 행동을 하면 (예: 클릭) 이벤트가 발생 이벤트 핸들러에 등록된 코드 실행 음.. 근데 만약 HTML 요소들이 중첩되어있다면 이벤트 핸들러는 어떻게 동작할까요? 예를 들어 이 코드에서 depth3 영역을 클릭한다면, 어떤 alert가 뜰까요? 한번 직접 눌러볼까요? HTML 삽입 미리보기할 수 없는 소스 분명 하나의 영역만 클릭했는데, 모든 onClick 이벤트 핸들러가 동작한 것을 확인하셨나요? 위와 같이 중첩된 요소에서 이벤트가 발생할 때는,..

    [JavaScript] 이벤트(Event)란?

    이벤트(Event)란? 이벤트(Event)는 어떤 사건을 의미합니다. 브라우저에서의 사건이란 사용자가 "클릭을 했을 때", "스크롤을 했을 때", "무언가 입력했을 때" 등의 상호작용으로 인해 일어나는 사건을 의미하는데, DOM 요소와 관련이 있습니다. 이 이벤트라는게 존재하는 이유는 어떠한 이벤트가 발생했을 때 그에 맞는 반응을 해주기 위해서겠죠~! 따라서 이벤트는 일반적으로 함수에 연결되며, 이 함수를 이벤트 핸들러(Event Handler) 라고 합니다. 이벤트 핸들러(Event Handler) 등록 방법 인라인(inline) 방식 인라인 방식은 이벤트를 태그 속성(attribute) 으로 지정하는 방식입니다. Click me 프로퍼티(property) 방식 프로퍼티 리스너 방식은 이벤트 대상에 해..

    [JavaScript] 자바스크립트(JavaScript)의 역사

    그래픽 웹브라우저의 탄생 1993년, NCSA 사에서 현대 그래픽 웹브라우저의 시초로 알려진 모자이크(Mosaic) 웹 브라우저가 탄생했습니다. 하나의 창에 텍스트와 이미지를 동시에 출력한 최초의 웹브라우저로, 당시 컴퓨터를 잘 모르는 사람들도 쉽게 쓸 수 있는 UI 요소가 더해져 있었습니다. 이 모자이크 웹브라우저의 개발팀을 이끌던 Marc Andreessen은 대학교를 졸업함과 동시에 Nescape라는 회사를 설립하게 됩니다. 1994년 Marc는 모자이크 웹브라우저 기술을 발전시켜 조금 더 UI요소가 더해진 Netscape Navigator 브라우저를 만듭니다. 이 당시에는 HTML과 CSS로 정적인 웹사이트 밖에 만들 수 없습니다. page와 page 에 링크를 걸어서 페이지 이동만 가능한 정말 ..

    [Java] GC (Garbage Collection, Garbage Collector) 란?

    Garbage Collection 이란? Garbage Collection, 직역하면 "쓰레기 수거"입니다. 말그대로 쓰레기를 수거하는데, 어디서 수거하느냐? 바로 메모리(RAM)에서 합니다. 우리가 컴퓨터에서 사용할 수 있는 메모리는 한정되어있습니다. 따라서 더이상 안쓰는 정보(쓰레기)를 메모리에서 제거해서 메모리 공간을 확보해주는 프로세스가 필요하죠. 이 작업을 Garbage Collection 이라고 합니다. 더 정확하게 말하면 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 것이죠. Java의 큰 장점이라고 한다면 이 Garbage Collection 이 자동으로 진행된다는 것입니다. 어디서 어떻게 진행되는지 알아보기 전에 먼저 Java 코드가 동작하는 방식을 복습해볼..

    [Java] JIT 컴파일러 (JIT Compiler)

    [언어] 컴파일러(Compiler)와 인터프리터(Interpreter) 에서 컴파일러와 인터프리터에 대해서 다뤘었죠~! 그럼 JIT 컴파일러는 무엇이고 어디에 쓰일까요? JIT은 Just In Time을 줄인 말입니다. 뜻을 해석하면 "제시간에 딱 맞춘" 정도가 되겠네요. 산업공학 교양수업에서도 들은 기억이 있는데 물류쪽에서도 자주 쓰이던 단어같아요. 대표적으로 주문이 들어올 때만 생산을 해서 재고를 쌓아두지 않고 바로 딱 맞춰서 고객에게 보낼 수 있는 적시생산시스템도 JIT으로 불리죠. JIT 컴파일러도 이와 아주 비슷하게 동작합니다. 자세히 설명하기전에 우선 자바가 실행되는 과정을 다시 한번 살펴볼까요? 자바(Java) 코드가 실행되기 위해서는 우선 자바 바이트코드(Java bytecode)로 한번 ..

    [언어] 컴파일러(Compiler)와 인터프리터(Interpreter)

    배경설명 코드를 작성하는 이유는 결국 그 코드를 실행했을 때 컴퓨터가 코드에 쓰인대로 행동하도록 하기 위해서겠죠! 하지만 컴퓨터의 뇌인 CPU는 사람이 사용하는 개발언어(C, C++, Java, Python 등)를 이해할 수 없습니다. CPU는 결국 몇백억개의 반도체로 이루어져있고, 하나의 반도체는 전기가 흐르고 안흐르고에 따라 1과 0만을 인식하고 나타낼 수 있기 때문이죠. 그렇다고 사람이 1과 0만으로 코드를 짠다면.. 어떤 로직을 가진 코드인지 아시겠나요?? 사람은 한눈에 이해를 못하겠지만 CPU는 이렇게 쓰인 코드만 이해할 수 있습니다. 이 처럼 서로 이해하지 못하는 다른 언어를 쓴다면 번역이 필요하겠죠. 따라서 사람이 쓰는 개발언어(C, C++, Java, Python 등)를 기계어(010110..

    [Java] JVM 동작 및 실행 과정

    JVM 은 크게 4가지 구성요소로 이루어져있습니다. 1. 클래스 로더 시스템 (Class Loader System) 클래스 로더 시스템은 자바 바이트코드(*.class)를 실행시점(RunTime)에 읽어들여서 JVM의 메모리 영역(Runtime Data Area)에 적절하게 배치시켜주는 역할을 합니다. 크게 로딩 -> 링크 -> 초기화 순서로 진행됩니다. 로딩 (Loading): 클래스 로더가 .class 파일을 읽고 그 내용에 따라 적절한 바이너리 데이터를 만들고 메서드 영역에 저장합니다. 로딩이 끝나면 해당 클래스 타입의 Class 객체를 생성하여 “heap" 영역에 저장합니다. 링크 (Linking): Verify(확인), Prepare(준비), Resolve(해결) 3 단계로 나누어져 있습니다. ..