TIL. [javascript] Javascript vs Jquery (feat. Ajax, DOM)

문병곤·2020년 10월 31일
0
post-thumbnail

내가 참고한 채팅창 구현 코드에는 $(document).on(){}을 이용한 이벤트 구현이 나온다. 이 부분이 궁금해서 좀 찾아보니 Jquery라는 라이브러리를 사용하는 방식이라고 한다.

아직 Jquery를 잘 모르니.. 일단은 그렇게 알고 사용한다 치더라도, 순수 Javascript에선 안 되는건지 궁금했다.

일단 $(document).on(){}을 사용하는 이유는 Ajax 때문이라고 한다. Ajax(Asynchronous JavaScript and XML)는 대화식 웹 애플리케이션 제작에 사용된다. 서버와 통신하기 위해 XMLHttpRequest 객체를 사용하며, 서버측으로 다양한 형식(JSON, XML, HTML 및 일반 텍스트 형식등)의 정보를 주고 받을 수 있다.

그리고 페이지 전체를 리프레쉬 하지 않고서도 수행 되는 '비동기성'이라는 강력함을 가지고 있다. 비동기성 덕분에 이벤트가 있으면 전체 페이지가 아닌 일부분만을 업데이트 할 수있다. 사이트가 동적일 필요가 있거나 새로고침을 하면 비효율적일 때 사용하면 좋다.

채팅창을 구현하는 데 있어서 Ajax 기능을 사용하는 이유를 알겠다. 메시지 하나를 보낼 때 마다 페이지를 새로 구현해야한다면 너무 비효율적이기 때문이다.

그렇다면 왜 javascsript를 이용해 Ajax를 구현하지 않았을까. 확실한 것은 javascript를 통해서 Ajax 구현이 가능하다는 점이다.

여기서 필요한 개념이 DOM이다. DOM이란 Document Object Model을 의미한다. 계층이 있는 객체들을 document로 구현했다고 보면된다. DOM에 대해서

원래 없던 자식 객체라도 javascript를 통해서 HTML 태그 등에 추가할 수 있다. 이를 통해 동적 요소를 추가하거나 삭제할 수도 있다. 방법은 DOM 객체를 생성해 DOM 트리에 관련 명령을 내리면 된다.

DOM 객체를 생성하는 방법은 다음과 같다.

var newDIV = document.createElement("div");​

이를 통해 문서에 DOM 객체를 생성할 수 있다. 그리고 해당

태그에 텍스트나 속성 등을 추가할 수 있다. 방법은 다음과 같다.

newDIV.innerHTML = "new div"; //텍스트 추가
newDIV.setAttribute("id","myDiv"); //'setAttribute'로 속성 값 정하기. "id"=속성 이름, "myDiv"=속성 값

자 멀리도 돌아왔다. 그래서 왜 순수 javascript 대신 Jquery라는 라이브러리를 사용해서 해당 코드를 작성했을까. 관련 내용을 스택오버플로우에서 찾을 수 있었다.

질문자는 $(document).on('click', '.foo', function() { /* ... */ });이 코드를 javascript로 설명할 수 있냐고 물었다. 이에 대해 답변자가 제시한 코드는 다음과 같다.

document.getElementById("parent-item").addEventListener("click", function(e) { 
     if(e.target && e.target.className == "foo") { }
});

뭔가 조금 더 구체적이고 정확하지만 장황한 감이 있다. Jquery를 이용한 코드가 깔끔하긴 하다. 라이브러리를 사용하는 이유에 대해 알 거 같다.

그런데 관련 내용을 찾다보니 최근 Jquery의 필요성에 대해 의문을 갖는 개발자도 많은 것 같았다. 브라우저 간 호환성이나 최근 Javascript가 DOM에 접근 가능한 메소드를 추가하고 있는 등이 언급됐다. 그 중 가장 큰 단점으로 꼽히는 것은 속도였다. Jquery를 사용하면 코딩 속도가 너무 느리다는 의미다. 또 너무 간단해서 오히려 코드가 꼬이게 되는 경우도 많다고 한다.

결론은 javascript를 좀 더 잘 사용하는 방법을 공부해봐야겠다는 점이다. 뭔가 내용은 장황했지만 결론은 별거 없었던 거 같다. 그래도 관련 내용을 찾아보면서 많은 공부가 됐다. 뭐 이거면 된 거지. (그런거겠지?)

참조: https://velog.io/@godori/DOM%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80
https://www.codingfactory.net/10436
https://www.codingfactory.net/10419
https://itadventure.tistory.com/78
https://www.zerocho.com/category/jQuery/post/57b356d4d841141500b31e1e
https://developer.mozilla.org/en-US/docs/Web/API/Element/innerHTML
https://coding-restaurant.tistory.com/212
https://brunch.co.kr/@ourlove/98

0개의 댓글