[2023.10.31] 개발자 교육 27일 차 : 강의-html, css, JavaScript [구디 아카데미]

DaramGee·2023년 10월 31일

오늘 정리

웹구현시? 웹언어도 코드를 작성하며 개선을 하는 부분이 있다는 것은 같다. 중복되는 부분은 줄이고, 보다 직관적으로 유지보수하기 유리하게 코드를 작성하는 것이 필요하다.

자바스크립트? 스크립트언어란 컴파일하지 않고 실행하는 프로그래밍 언어를 말한다.

강의 내용

  • 번들러 실습 - Parcel with 해커뉴스 API
    • 관련개념
      • 변수선언
        • var - 지변, 전역화 되어서 처리됨 → 호이스팅이슈 있음.

        • const - 상수선언 시 사용(ES6), 재정의 x

        • let - 변수, 재정의 o

          const content = document.createElement('div');
          const title = document.createElement('h1');
          content.appendChild(title); 
          -------             ------
          //h1을 품은 div 생성
          //<div><h1>제목{텍스트노드 : 태그 이름 없고 값 있음.}</h1></div>
      • 객체
        • XMLHttpRequest() - 브라우저가 제공하는 비동기 통신 객체(호출 시 open(), send() 호출)
          • 파라미터 (전송 방식(**RESTful API**), 요청하는 URL, true-동기/false-비동기)
          • **RESTful API :** 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스(방식 : get, post, put , delete 등)
          • 동기 방식으로 처리 시 굳이 해당 객체를 사용하지 않아도 됨.
          • response속성값을 통해 서버측의 응답을 받아옴.
        • location - URL 정보를 가져오는 객체
      • 태그
        • a - 링크
      • 함수 🖥️
        • document.write(’<>’) - 해당 태그 브라우저에 생성
        • document.createElement(’요소’) - 브라우저에 (요소)를 생성만
        • document.getElementById(’root’).appendChild(변수명) - 브라우저에 해당 요소 붙이기
          • 파라미터에 변수를 넣기 위해 변수를 생성하는 작업이 선진행되어야 함.(생성이 먼저, 사용은 나중)
        • innerHTML - 태그 내부에 텍스트노드를 결정
    • 번들러 시작하기 (parcel)
      1. npm으로 parcel 설치
      2. package.json 파일 생성
      3. index.html index.js 파일 생성
      4. 진입 파일을 지정
      • 터미널에 입력
        GD@GD MINGW64 /d/vscode_web/news_step1
        $ **npm install -g parcel -bundler**
        npm WARN deprecated stable@0.1.8: Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility
        
        added 195 packages in 9s
        
        85 packages are looking for funding
          run `npm fund` for details
        
        GD@GD MINGW64 /d/vscode_web/news_step1
        $ **npm init -y**
        Wrote to D:\vscode_web\news_step1\package.json:
        
        {
          "name": "news_step1",
          "version": "1.0.0",
          "description": "",
          "main": "index.js",
          "scripts": {
            "test": "echo \"Error: no test specified\" && exit 1"
          },
          "keywords": [],
          "author": "",
          "license": "ISC"
        }
        
        GD@GD MINGW64 /d/vscode_web/news_step1
        $ **parcel index.html**
        Server running at http://localhost:1234
        ✨ Built in 7ms
    • API 연결하기 (포스트맨)
      • 포스트맨 해커뉴스 검색 → add fork → get에 링크 넣어 사용
      • js에서 변수로 만들어서 해당 api 사용 가능
        const TITLE_URL = 'https://api.hnpwa.com/v0/news/1.json';
        const CONTENT_URL = 'https://api.hnpwa.com/v0/item/@id.json';
    • JSON.parse()
    • ECMAScript(ES6) template literals
      • div.root 클래스를 쓸 때는 .으로 표시
      • div#root id를 쓸 때는 #으로 표시
      • Arrow function
        • 함수명 = (파라미터) ⇒{실행문 - 변수선언, 재정의, 제어}
        • JS는 함수도 객체로 인식하기 때문에 Function 생략이 가능함
        • 파라미터자리 비어도 합법
    • 사용 속성
      • window.onhashchange : 새 해시값을 확인

  • 개선점(step3)
    • ajax - 비동기처리 방식(관심사) - 표준을 기본으로 학습
    • 반복코드 정리
      • 변수로 만들기
      • 함수로 바꾸어 양 줄이기
        • 해커뉴스가 응답으로 JSON 포맷으로 데이터셋을 줌

        • JSON → Array 변경(JSON.parse(ajax.response))

        • function 함수명(){ return}

          const ncontent = getData(CONTENT_URL.replace('@id', id));
            // const ncontent = JSON.parse(ajax.response);
            // ajax.open('GET', CONTENT_URL.replace('@id', id), false);
            // ajax.send();
          function getData(url) {
            ajax.open('GET', url, false);
            ajax.send(); //서버측에 요청 보내고 응답 기다리는 중
            return JSON.parse(response);
          }
          getData = (url) => {
            ajax.open('GET', url, false);
            ajax.send(); //send()호출될 때 비로서 서버측에 요청이 일어남
            return JSON.parse(ajax.response);
          };
    • DOM API 제공 createElement(), appendChild() → DOM Tree 그려지지 않음
      • 양을 늘리더라도 DOM Tree가 잘 보이는 코드로 작성하여 직관적, 유지보수 유리

  • 개발자도구센터로 코드 직접 입력 가능(단, 코드에 반영되진 않고, 빠르게 결과 확인하는 용도로만 사용함

  • Position & 배치(https://developer.mozilla.org/ko/docs/Web/CSS/position)
    • 속성
      • static : 일반적 배치 시 사용
      • relative : 하나만 이동할 때 지정하는 속성(다른 요소, 현재 레이아웃에 영향 x) 사용
      • absolute : 가까운 요소에 대해 상대적으로 배치(현재 레이아웃에 영향 o) 사용
        • 가까운 요소의 포지션 설정 여부에 따라 위치의 기준이 달라질 수 있음.
      • fixed, sticky

relative

relative

absolute

absolute

  • position 실습

  • 가상선택자 : 부모요소에 사용한다면? 자손요소를 감싸게 해줌(인라인 요소)
    • 부모요소 ::after{ }
      //::after 를 이용해서 clear: both;
      
      .wrap ::after {
          content: "";
          display: block;
          /* 밀려나는 것을 방지한다 */
          clear: both;
      }
    • clear : both → ‘취소하다’라는 개념 (float left/rigth와 짝궁 개념)
        clear: both; 오른쪽/왼쪽을 취소, 가장 많이 사용
        clear: left; 왼쪽을 취소
        clear: right; 오른쪽을 취소
        clear: none; 기초값을 clear값을 설정하지 않은 것과 같다
  • 여백 속성
    • margin : 요소의 외부에 투명한 공간을 확보
    • padding : 요소의 내부에 공간 확보(테두리와 콘텐츠 사이의 공간)
💡 padding은 요소의 내부에 빈 공간을 추가합니다. 반면 margin은 요소의 주위에 빈 공간을 만듭니다.
  • Java & JavaScript??

강의 마무리

  • 라우터, 현재 소스의 개선점 내일 학습 예정

0개의 댓글