728x90
728x90

'개념정리' 카테고리의 다른 글

패키지 시작이름 (import)  (0) 2021.08.05
binary 파일  (0) 2021.07.28
DOM (Document Object Model)  (0) 2021.04.29
html 라이프사이클  (0) 2021.04.28
이클립스  (0) 2021.04.13
728x90

Document Object Model, DOM, 돔, 문서 객체모델

브라우저 인터넷창의 개발자 도구의 HTML에서는 CSS를 인식하고 스크립트도 인식한다.
확장자가 다른데 왜 될까? 한글파일은 워드에서 제대로 인식이 안되는데....

그 이유는 DOM때문이라고 한다. 

Document Object Model에서의 Document, 문서는 HTML을 말한다. 
(웹 개발에서 Document는 HTML을 말하는 거라고 생각하면 된다)

Object 는 객체는 자바스크립트나 자바에서 많이 나오는 자료형중의 하나.....
HTML을 하나의 객체로 만들어서 자바스크립트도 이해할 수 있게 만든다...

DOM은 브라우저에 내장되어 있는 API이다.

 


 

HTML, 또는 XML 페이지의 구조와 요소들을 제어할 수 있도록 제공하는 프로그래밍 인터페이스,
또는 구조화된 데이터를 말한다.

문서 객체 모델은 객체지향 모델로써 구조화된 문서를 표현하는 형식이다. 
DOM은 플랫폼/언어 중립적으로 구조화된 문서를 표현하는 W3C의 공식 표준이다.
DOM은 또한 W3C가 표준화한 여러 개의 API의 기반이 된다.

DOM은 HTML 문서의 요소를 제어하기 위해 웹 브라우저에서 처음 지원되었다.
DOM은 동적으로 문서의 내용 , 구조, 스타일에 접근하고 변경하는 수단이었다.

DOM은 문서의 기반이 되는 데이터 구조에 제한을 두지 않는다.

잘 구조화된 문서는 DOM을 사용하여 트리구조를 얻어낼 수 있다.
대부분의 xml 해석기는 트리 구조의 이용에 대응해 개발되었다.

이같은 구현에서는 문서의 전체 내용이 해석되어 메모리에 저장되어야 한다. 때문에 DOM은 문서 요소가 임의적으로 접근되고 변경할 수 있어야 하는 응용프로그램에 가장 적합하다.

한 번 해석시 단 한번의 선택적 읽기/쓰기가 이루어지는 xml 기반 응용 프로그램에서 DOM은 메모리에 상당한 부하를 가져온다.


자바스크립트는 이 프로그래밍 인터페이스(API)인 DOM에 접근할 수 있으며,
DOM 생성 후 화면에 웹페이지가 표시되기 전에 DOM을 제어할 수도 있다.

웹 브라우저로 웹사이트의 특정 페이지에 접속할 경우 웹 브라우저는 HTML 문서를 읽는다.
그리고 CSS와 여러가지 컨텐츠 파일도 함께 읽는다.
최종적으로 HTML, CSS 그리고 컨텐츠 파일들을 조합해 웹 페이지를 브라우저 화면에 표시한다.

웹 브라우저는 이과정을 2단계로 나누어서 실행한다.

먼저 HTML 파일을 일겅 문서의 구조를 파악하고, 트리 형태로 된 데이터 구조를 만든다. 이것이 DOM 이다.
DOM이 일단 완성되고 나면, 자바스크립트로 DOM을 제어할 수 있게 된다.

웹 브라우저가 웹 페이지를 화면에 표시하는 단계로 넘어가기 전에 자바스크립트가 DOM을 제어 할수 있다.
DOM 제어가 끝나면 웹 브라우저는 DOM 구조를 기반으로 웹 브라우저 화면에 웹페이지를 그리는 과정을 진핸한다.
이 그리는 과정을 렌더링(Rendering)이라고 한다.

렌더링에는 미리 작성한 CSS의 화면 배치와 속성에 대한정보를 사용한다.
이 과정에서 웹 브라우저는 DOM과 마판가지로 CSS를 읽어 CSSOM(Cascading Style Sheet Object Model)을 생성한다.
CSSOM은 CSS를 구조화 된 데이터 형태로 생성한 것이다.

DOM과 CSSOM을 조합해 화면에 펴시할 최종 구조를 만든다.
이것이 렌터 트리(Render Tree)다.

렌더트리를 기초로 화면에 HTML페이지가 그려진다.
배치가 되면서 컨텐츠 파일들 또한 비동기로 읽어서 HTML 페이지의 적절한 위치에 배치를 한다.

렌더링과정은 전적으로 웹 브라우저의 몫이다.
DOM의 구조는 표준으로 정햐져 있기 때문에 모두 같은 구조를 가지지만 
DOM을 웹 브라우저 화면에 어떻게 표시할 것이냐는 웹 브라우저 고유의 방식을 따른다.

여기서 호환성 문제가 발생한다.

 

 

 

728x90

'개념정리' 카테고리의 다른 글

binary 파일  (0) 2021.07.28
keydown, keypress, keyup  (0) 2021.07.26
html 라이프사이클  (0) 2021.04.28
이클립스  (0) 2021.04.13
POJO (Plain Old Java Object )  (0) 2021.04.11
728x90

컴포넌트의 생명주기

라이프 사이클을 다루는 것은 컴포넌트가 생겨나고 변화하고 없어지는 일련의 프로세스를 프로그래머가 통제하는 것을 말한다.

라이프 사이클에 대한 개념이 없는 상태에서 document.getElementById같은 키워드로 element를 선택할려고 할때 선택이 되지 않을 수도 있다.

html이 실제로 브라우저에 나타나고 사라지는 타이밍을 알아야 더 복잡한 작업을 수행할 수 있다.

먼저 크게 웹 브라우저의 라이프사이클? 로딩순서는 다음과 같다

jeong-pro.tistory.com/90

 

웹 브라우저에서 HTML문서 렌더링 과정 (동작 순서)

웹 브라우저의 HTML문서 렌더링 과정 1. 불러오기 로더(Loader)가 서버로부터 전달 받는 리소스 스트림을 읽는 과정. 읽으면서 어떤 파일인지, 데이터인지 파일을 다운로드할 것인지 등을 결정한다

jeong-pro.tistory.com

 


웹 브라우저의 HTML문서 렌더링 과정

1. 불러오기

로더가(Loader)가 서버로부터 전달 받는 리소스 스트림을 읽는 과정.

2. 파싱 (Pasing)

웹 엔진이 가지고 있는 html/xml 파서가 문서를 파실해서 DOM tree를 만든다.

먼저 html 파일을 읽어 문서릐 구조를 파악하고, 트리 형태로 된 데이터 구조를 만든다. 이걸 DOM이라고 한다.

3. 렌더링 트리 만들기

DOM tree는 내용을 저장하는 트리로 자바스크립트에서 접근하는 DOM객체를 쓸 때 이용하는 것이고 별도로 그리기 위한 트리가 만들어져야 하는데 그것이 렌더링 트리다.

4. CSS결정

css는 선택자에 따라서 적용되는 태그가 다르기 때문에 모든 css스타일을 분석해 태그에 스타일 규칙이 적용되게 결정한다.

5. 레이아웃

렌더링 트리에서 위치나 크기를 가지고 있지 않기 때문에 객체들에게 위치와 크기를 정해주는 과정을 레이아웃이라고 한다.

6. 그리기

렌터링 트리를 탐색하면서 그리기
참고로 렌더링 엔진은 가능하면 html문서가 파싱될 때까지 기다리지 않고 , 배치와 그리기 과정을 시작한다.


위에랑 같은 말? 인데 자세하게 쓰면

먼저 HTML 파일을 일겅 문서의 구조를 파악하고, 트리 형태로 된 데이터 구조를 만든다. 이것이 DOM 이다.
DOM이 일단 완성되고 나면, 자바스크립트로 DOM을 제어할 수 있게 된다.

웹 브라우저가 웹 페이지를 화면에 표시하는 단계로 넘어가기 전에 자바스크립트가 DOM을 제어 할수 있다.
DOM 제어가 끝나면 웹 브라우저는 DOM 구조를 기반으로 웹 브라우저 화면에 웹페이지를 그리는 과정을 진핸한다.
이 그리는 과정을 렌더링(Rendering)이라고 한다.

렌더링에는 미리 작성한 CSS의 화면 배치와 속성에 대한정보를 사용한다.
이 과정에서 웹 브라우저는 DOM과 마판가지로 CSS를 읽어 CSSOM(Cascading Style Sheet Object Model)을 생성한다.
CSSOM은 CSS를 구조화 된 데이터 형태로 생성한 것이다.

DOM과 CSSOM을 조합해 화면에 펴시할 최종 구조를 만든다.
이것이 렌터 트리(Render Tree)다.

렌더트리를 기초로 화면에 HTML페이지가 그려진다.
배치가 되면서 컨텐츠 파일들 또한 비동기로 읽어서 HTML 페이지의 적절한 위치에 배치를 한다.

렌더링과정은 전적으로 웹 브라우저의 몫이다.
DOM의 구조는 표준으로 정햐져 있기 때문에 모두 같은 구조를 가지지만 
DOM을 웹 브라우저 화면에 어떻게 표시할 것이냐는 웹 브라우저 고유의 방식을 따른다.

여기서 호환성 문제가 발생한다.

 


css는 위에 두고 script는 아래에 두는 이유

문서를 파싱해서 DOM tree를 만들어도 스타일 규칙이 없으면 렌더링 할 수가없다.
즉 최대한 빨리 스타일 규칙을 알아야 렌더링 트리가 완전히 만들어지므로 스타일시트 파일을 모두 다운로드시키기 위해 <head></head>태그 사이에 놓는 것이다.
(인터프리터에서 html파일을 위에서 아래로 읽음)

자바스크립트는 왜 아래에 놓아야 성능이 좋아질까?

자바스크립트는 DOM객체를 이용해서 컴포넌트들을 조작하는데 <head></head>태그 사이처럼 상단에 놓게 되면 html파서가 파싱을 멈추고 스크립트 파일을 읽는다.
파싱을 멈추고 읽기 때문에 위에서 스크립트 파일이 많거나 크면 읽는 시간이 오래 걸려 사용자 입장에서 웹페이지가 느리게 보이게 되므로 성능이 안좋아지게 된다.
심지어 잘못 코딩했을 경우 html파싱보다 자바스크립트 파일이 먼저 실행되서 적용이 안되는 모습도 볼 수 있다. 그래서 일반적으로 </body>태그 위에 스크립트를 모아둔다.


구글에 검색하면 vue에 관한 이야기가 많이나오는데

lsy0581.tistory.com/47

 

Part 17. JS 라이프 사이클 이해하기

컴퓨터 시스템의 모든 자원은 라이프 사이클 즉, 생애 주기를 가집니다. Javascript의 자원들 값, 변수, 함수 등 또한 생애주기를 가집니다. 생애주기란 생성되고 사용되며 소멸되는 메커

lsy0581.tistory.com

이곳에서는 자바스크립트의 라이프 사이클을 다룬다.

 

728x90

'개념정리' 카테고리의 다른 글

keydown, keypress, keyup  (0) 2021.07.26
DOM (Document Object Model)  (0) 2021.04.29
이클립스  (0) 2021.04.13
POJO (Plain Old Java Object )  (0) 2021.04.11
AS - IS / TO - BE 분석  (0) 2021.04.09
728x90
728x90

'개념정리' 카테고리의 다른 글

DOM (Document Object Model)  (0) 2021.04.29
html 라이프사이클  (0) 2021.04.28
POJO (Plain Old Java Object )  (0) 2021.04.11
AS - IS / TO - BE 분석  (0) 2021.04.09
카멜케이스, 파스칼케이스, 스네이크케이스  (0) 2021.04.07
728x90

POJO는 오래된 방식의 간단한 자바 오브젝트 라는 말로서 Java EE등의 중량 프레임워크들을 사용하게 되면서 해당 프레임 워크에 종속된 무거운 객체를 만들게 된 것에 반발해서 사용하게된 용어이다.

POJO라는 용어는 이후에 주로 특정 자바 모델이나 기능, 프레임워크 등을 따르지 않은 자바 오브젝트를 디딜하는 말로 사용됬다. 

오래된 방식의 간단한 오브젝트?

- 한마디로 하면 특정 '기술'에 종속되어 동작하는 것이 아닌 순수한 자바 객체를 말하는 것이다

 

스프링 프레임워크(Spring Framwork)는 POHO 방식의 프레임워크이다.

어떠한 제약도 존재하지 않는 일반 클래스이다.
(어떤 방식이든 개발자가 사용 가능하고 어떠한 제약도 받지 않는다.)

- 진정한 POJO란, 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트

 

728x90

'개념정리' 카테고리의 다른 글

html 라이프사이클  (0) 2021.04.28
이클립스  (0) 2021.04.13
AS - IS / TO - BE 분석  (0) 2021.04.09
카멜케이스, 파스칼케이스, 스네이크케이스  (0) 2021.04.07
Get ,Post  (0) 2021.04.07
728x90
728x90

'개념정리' 카테고리의 다른 글

이클립스  (0) 2021.04.13
POJO (Plain Old Java Object )  (0) 2021.04.11
카멜케이스, 파스칼케이스, 스네이크케이스  (0) 2021.04.07
Get ,Post  (0) 2021.04.07
[spring] Rest API  (0) 2021.04.06
728x90

1. 카멜 표기법 camelCase

  • 각 단어의 첫문자를 대문자로 표기하고 붙여쓰되 맨 처음 문자는 소문자로 표기함
  • 띄어쓰기 대신 대문자로 단어를 구분
  • 변수명 및 함수명에 카멜케이스 사용
  • 예시: backgroundColor, typeName, iPhone

 

2. 파스칼 표기법 PascalCase

  • 첫 단어를 대문자로 시작하느 표기법
  • 보통 클래스명에 파스칼케이스 사용
  • 예시: BackgroundColor, TypeName, PowerPoint

 

3. 스네이크 표기법 snake_case

단어를 밑줄문자로 구분하는 표기법

파일명 및 DB테이블 컬럼에는 스네이크 케이스 사용

예시: baxkground_color, type_name

 

 


참고: zetawiki.com/wiki/%EC%B9%B4%EB%A9%9C%ED%91%9C%EA%B8%B0%EB%B2%95_camelCase,_%ED%8C%8C%EC%8A%A4%EC%B9%BC%ED%91%9C%EA%B8%B0%EB%B2%95_PascalCase

728x90

'개념정리' 카테고리의 다른 글

POJO (Plain Old Java Object )  (0) 2021.04.11
AS - IS / TO - BE 분석  (0) 2021.04.09
Get ,Post  (0) 2021.04.07
[spring] Rest API  (0) 2021.04.06
[java] 접근 제한자  (0) 2021.04.04
728x90

클라이언트가 서버로 요청을 보내느 방법인 HTTP Method에는 크게 2가지 방식이 있는데 GET과 POST이다.

GET 방식


get방식은 주소창에 ?뒤에 파라미터가 붙어서 데이터가 넘어간다.

  • url에 정보가 담겨서 전송된다
  • 데이터를 Header(헤더)에 포함하여 전송한다.
  • 전송할 수 있는 정보의 길이가 제한되어 있다. (url의 길이에 제한이 있기 때문)
  • 퍼머링크로 사용될 수 있다. 

 

퍼머링트 (permanent link, permalink) :
어떠한 정보를 식별하는 고유한식별자,식별체계
블로그나 게시판, 포럼 등에 올려진 게시물에 어느 경우에나 연결될 수 있는 절대적인 위치의 불변 주소(URL).

 

GET방식으 간단한 데이터를 URL에 넣도록 설계된 방식으로 데이터를 보내는 양에 한계가 있다.
HTTP자체는 GET방식의 URL길이에 제한을 두고 있지 않지만 
브라우저에서 최대 길이를 제한하고 있기 때문이다.
GET방식은 특별히 전송하는 데이터가 없으므로 body부분은 보통 빈 상태로 전송이 되며
header의 내용중 body의 데이터를 설명하는 Content-type 헤더필드도 들어가지 않는다.

GET방식은 캐싱을 이용해 속도를 높이거나 즐겨찾기를 편리하게 사용하기 위해 사용되는 경우가 많다.
( 캐싱이란 한번 접근 후 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이처를 저장시켜 놓는것 이다. )

 


 

POST방식


데이터를 서버로 제출하여 추가 또는 수정하기 위해서 사용하는 방식이다. post방식은 주소창에 파라미터를 보이지 않고 데이터를 넘긴다.

  • header의 body에 담겨서 전송된다
  • URL 상에 전달한 정보가 표시되지 않는다
  • GET에 비해 보안상 약간의 우의에 있다. (사실상 동일)
  • 전송할 수 있는 데이터의 길이제한이 없다.
  • 퍼머링크로 사용할 수 없다.
  • 서버 쪽에 어떤 작업을 명령할 때 사용한다. (데이터의 기록, 삭제, 수정 등)

POST방식은 body에 데이터를 넣어서 전송한다.
따라서 header의 필드 중 body의 데이터를 설명하는 Content-Type이라는 헤더필드가 들어가고 어떤 데이터 타입인지 명시해주어야 한다.
데이터를 body에 포함시키는 이점 때문에 메세지 길이의 제한은 없지만
최대 요청을 받는 시간인 Time out이 존재하므로 클라이언트에서 페이지를 요청하고 기다리는 시간이 존재한다.


get은 가져오는것 post는 수행하는것

get은 데이터를 가져와 보여주는 용도

post는 서버의 값이나 상태를 바꾸기 위해서 사용

 

(더나아가면 restful? )

 

 


참고: blog.outsider.ne.kr/312

728x90

+ Recent posts