🔥딱 8일간! 인프런x토스x허먼밀러 역대급 혜택

블로그

HTML 주요 태그 정리_2

HTML 주요 태그 정리 -2   이번에는 <form> 태그에 대해서 알아보겠습니다. form은 <body>안에 사용하는 태그로 사용자가 웹사이트로 정보를 보낼 수 있는 요소들은 모두 form이라고 할 수 있습니다.  속성을 이용해서 사용자가 입력한 데이터를 어떤 방식으로 서버에 넘길지 어떤 프로그램을 사용하여 처리하는 지를 정할 수 있습니다. 그럼 form과 같이 사용하는 속성에 대해 알아보겠습니다. action 속성 : form이 전송되는 서버 url 즉, 주소를 지정하는 속성입니다. name 속성 : form의 이름으로 서버로 제출된 form데이터를 참조하거나 form요소를 참조하기 위해서 사용됩니다. method 속성 : 말 그대로 전송방법을 설정하는 속성입니다.   다음으로 <form>태그 하위에 같이 사용되는 태그들을 알아보겠습니다. 내용을 입력하는 <textarea></textarea> 태그는 여러줄의 글을 입력할 때 사용한 태그입니다.  속성값으로 rows와 cols를 사용하여 너비를 조정할 수 있습니다.  이런식으로 글씨를 입력하는 입력창을 생성할 수 있습니다.   다음으로 가장 많이 사용되는 <input>태그에 대해 알아보겠습니다. <input>태그는 여러 속성을 사용하여 서버로 전송하는 형식과 이름을 지정하게됩니다. 사용되는 속성으로는 name, type등이 있습니다. name속성 : 서버로 전송되는 데이터의 이름을 정해줍니다. type속성 : 입력 형식을 지정합니다. 예를들어 <input>태그는 회원가입을 할 때 사용할 수 있습니다. 아이디 입력 : <input type="text" name="id" size = "10"> <br> 비밀번호 입력 : <input type="password" name="pw" size="10"> <br> 이런식으로 작성해주게 되면, 아이디  입력부터 살펴보게 되면,  type은 text형식이며 서버에 보낼 때 데이터의 이름은 id로 설정한 것을 알 수 있습니다. size는 위에 설명은 안했지만 말 그대로 크기를 지정해준다고 생각하면 됩니다. 비밀번호 입력을 살펴보면 type이 아이디입력과는 다르게 password로 되어있는 것을 알 수 있는데 password 형식은 입력했을때 ●이런 형식으로 나와 입력한 비밀번호를 문자그대로가 아닌 저렇게 암호화되어 나오는 것을 알 수 있습니다. 서버로 보낼 때 이름은 pw로 설정한 것을 알 수 있습니다.    다음으로는 더 다양한 type을 알아보겠습니다. 먼저 아래의 코드를 보겠습니다. <input type="submit" value="회원가입 완료"><br> <input type="reset" value="초기화버튼입니다 조심"> 위에 코드의 type은 submit으로 서버로 데이터를 전송하는 제출버튼입니다. 어떤 서버로 제출하는지에 대해서는 위에 설명한 form태그 속성인 action속성값으로 지정한 서버 주소로 보내게 됩니다. value는 버튼에 나타낼 텍스트를 입력해줍니다.  reset type은 입력한 모든 창을 초기화 해주는 속성을 가지고 있습니다.  이런식으로 버튼이 생기게 됩니다.    버튼에 대해 더 알아보도록 하겠습니다.  대표적으로 체크박스 버튼, 라디오 버튼, 드롭다운 버튼이 있습니다.  체크박스 버튼은 다중 선택이 가능하고 라디오버튼은 단일 선택입니다. 드롭다운 버튼은 선택형버튼이라고 생각하시면 됩니다. 그 전에  <label></label>태그를 소개해드리겠습니다. <label>태그는 for 속성을 사용하여 다른 요소와 결합이 가능하며 결한 요소와 id값이 같으면 입력창을 선택하지 않고 텍스트부분만 손택해도 입력창으로 커서를 이동할 수 있습니다. 말이 어려운데 쉽게 이야기 하면 <label>로 텍스트를 감싸고 for속성으로 속성값을 정해주고 <input>태그에 id속성을 이용해서 속성값을 정해줍니다. 그리고 for의 속성값과 id속성값을 같게 설정해주면 된다는 뜻인데 예시로 좀더 자세히 보겠습니다.  <label for="user_name">이름 입력 : </label> <input type="text" id="user_name" size="10"> 위 두 코드를 보면 for과 id속성값을 "user_name"으로 같게 설정해주었습니다.  그럼 위와같은 결과화면을 볼 수 있을텐데 그럼 옆의 입력창을 직접누르지 않고도 이름 입력이라는 텍스트를 눌러도 입력창에 커서가 깜빡이는 것을 확인할 수 있습니다. 이런 <label>태그는 버튼에서 사용하면 유용할꺼 같아서 이렇게 버튼설명 전에 정리했습니다. 그럼 먼제 체크박스 버튼에 대해서 알아보겠습니다 .   <input type="checkbox" name="code" value="java">Java <br> <input type="checkbox" name="code"  value="python">Python <br> <input type="checkbox" name="code"  value="react">React <br> <input type="submit" value="전송"> type의 속성으로 checkbox를 주게 되면 아래와 같은 결과화면을 얻을 수 있습니다.     버튼 이름은 value의 속성값으로 지정했으며, 다중 선택이 가능함을 확인할 수 있습니다. 다음으로는 라디오 버튼을 알아보겠습니다.  <input type="radio" name="code" value= "Java"> 자바 <br> <input type="radio" name="code" value= "Python"> 파이썬 <br> <input type="radio" name="code" value= "JSP"> jsp <br> 단일 선택이 되는것을 확인할 수 있습니다. 마지막으로 드롭다운 버튼을 확인하겠습니다. <select> <option value = "Java">자바</option> <option value = "Python">파이썬</option> <option value = "JSP">jsp</option> </select> 드롭다운 버튼은 <option></option>태그를 이용하여 사용할 수 있습니다.  이 처럼 작성하면 아래로 목록이 펼쳐지면서 목록을 선택할 수 있습니다. 단, 역기서의 value값은 서버로 넘길 값을 지정하는 것입니다.  또한 <option>태그 사용을 위해서는 상위 태그로 <select>태그를 사용하여 감싸줘야 합니다.   추가적으로 버튼이나 입력창 또는 input으로 값을 입력 받을때 사용하면 유용한 속성 placeholder에 대해 알아보겠습니다, placeholder은 처음에 어떤식으로 입력하라는 식의 가이드식으로 입력창에 표기하는 용도로 사용됩니다 . 하지만 어떤 값도 아니고 입력을 하면 지워지는 것을 확인할 수 있습니다. <input type="text" placeholder = "이름을 입력하세요." id="user_name" size="30" /> <br> 가이드를 위해 사용하면 사용자들이 편하게 이용할 수 있는 속성인거 같습니다.   이상으로 HTML에서 자주사용 태그들을 정리 해보았습니다. 다음에는 간단하게 CSS에 대해 배운것을 정리해보겠습니다.    ※제가 공부하면서 참고할려고 만든 블로그라 많이 미숙합니다. 혹시 제가 놓친부분이나 수정할 부분 댓글 남겨주시면 반영하겠습니다. 감사합니다.      

프론트엔드HTML태그

HTML 주요 태그 정리_1

프론트엔드 개발에 앞서 HTML틀과 주요 태그를 정리해보겠습니다.   HTML은 <head>와 <body>부분으로 나누어지며,  일반 사용자가 확인하는 부분은 <body>부분에 작성하게 됩니다. 그럼 <head>는 무엇이냐 <head>부분에는 페이지의 속성과 정보를 저장하는 공간입니다.    태그의 기본적인 형식은 <여는 태그>내용</닫는태그>의 방식과 <단일태그>의 방식이 있습니다.  단일태그를 사용할 때는     <단일태그 />로 표시할 수 있습니다. (뒤에 /붙이던 안 붙이던 상관이 없습니다)    Head부분의 대표적인 태그로는 <title>태그가 있습니다. <title>태그를 사용해주면 웹창의 제목을 바꾸어줄 수 있습니다.   <head>         <title> 취업을 위해</title> </head> 를 사용하게 되면 아래와 같이 창의 이름이 변하는 것을 확인할 수 있습니다.   <body>부분의 주요태그를 확인하겠습니다. <h1~6>제목<h1~6> 태그가 있습니다. <h1>이 가장 큰 글씨가 나오며, 숫자가 커질수록 글씨가 작아집니다.  <p>내용</P>태그는 하나의 무단을 나타내는 태그입니다. <P>태그 안에서는 줄바꿈이 적용되지 않아 한 줄로 이어져서 나오는 것을 확인할 수 있습니다. 따라서 내용을 입력 그대로 출력하기 위해서는 <pre>내용</pre>태그를 사용해줍니다. 또는 줄바꿈을 위해서는 단일태그 <br>을 사용해줍니다.  실선으로 단락을 나눌때나 구분을 짓기위해서 단일태그 <hr>도 있습니다.   내용을 굵게 표현하는 방식으로는 <b>강조할 내용</b>태그와 <strong>강조할 내용</strong>이 있습니다. 두개의 굵기 차이는 없지만 TTS를 할때 <strong>태그가 더 강한 어조로 읽는다는데 제가 확인안해봐서 잘 모르겠습니다...   다음으로는 글씨 효과 태그에 대해 알아보겠습니다.  <i> 내용 </i>  결과 => 내용 <em> 내용 <em> 결과 => 내용 <i>와 <em>태그는 기울림꼴로 내용을 표시합니다. <mark>내용</mark>, <small>내용</small>, <del>내용</del>, <ins>내용</ins>는 순서대로 아래와 같이 나타납니다. <mark>태그는 HTML5에 새롭게 추가된 태그라 합니다. 형광팬으로 칠한거와 같이 내용을 표시할 수 있으며, <small>태그는 글씨가 작아지는 것을 확인할 수 있습니다. <del> 태그는 글씨중앙에 선을 그어 지울 내용을 표시할 수 있습니다. <ins>태그는 밑줄 기능을 담당합니다.   다음은 순위나 리스트를 나타낼 때 사용하는 태그를 알아보겠습니다.   상위태그 <ul>, <ol>태그가 있으며 하위 태그 <li>태그를 사용하여 목록 명을 나타낼 수 있습니다.  <ul>태그는 순위가 매겨지지 않고 리스트를 보여주는 반면, <ol>태그는 순위가 나타납니다.  사용 형식은 아래과 같습니다. 먼저 상위 태그로 감싸고 하위태그로 나타내고 싶은 목록명을 작성해줍니다. <ul> <li>Python</li> <li>HTML</li> <li>JSP</li> </ul> ------------------------------------------------------------------------------------------------------------------- <ol> <li>Python</li> <li>HTML</li> <li>JSP</li> </ol> 결과화면 :       다음으로는 테이블 태그와 관련된 태그와 속성을 살펴보겠습니다. 상위태그 <table>태그는 표를 작성할 때 사용합니다.  하위 태그로는 <tr>, <th>, <td>가 있습니다. <tr>태그는 열을 나타내며 <tr>태그 아래 <th>와 <td>를 사용하여 행의 내용을 넣을 수 있습니다. <tr>태그가 3개 <th>or<td>태그가 4개 있으면, 3열 4행의 테이블이 만들어집니다. 그럼 <th>와 <td>의 차이점이 무엇이냐하면, <th>태그는 행의 머리글을 담당하고 <td>는 내용을 담당합니다. <tr>  <th>no.</th> <th>name</th> <th>email</th> <th>tel</th> </tr> <tr> <td>1</td> <td>취준생</td> <td>개인정보</td> <td>010-****-****</td> </tr> <tr> <td>2</td> <td>호랑이</td> <td>비밀공개</td> <td>010-****-****</td> </tr> <tr> <td>3</td> <td>임인년</td> <td>비밀공개</td> <td>010-****-****</td> </tr>   위와 같은 코드를 작성하면 총 3개의 <tr>태그와 4개의 <th>or<td>태그가 있음을 확인할 수 있습니다. 결과화면 : 근데 표라고 했는데 표라고 하기에는 틀이 없어보인다. 틀을 추가하는 방법은 <table>태그에 속성을 추가해주는 겁니다. border = "1"이라는 속성을 추가해주면 틀이 생깁니다. <table border = "1"> 위의 소스코드 </table> 를 해주게 되면 틀이 생깁니다. <table>의 하위 태그로는 <caption>테이블제목</caption>태그도 있습니다. 이 태그를 사용하게 되면 테이블의 제목을 나타낼 수 있습니다. <table border = "1"> <caption>개인정보</caption> 위의 소스코드 </table> <th>,<td>태그에 속성을 부가하면 열과 행을 합칠 수 있습니다.  아래와 같이 코드를 짜면, <table border = "1"> <caption>개인정보</caption> <tr> <th>no</th> <th>name</th> <th>email</th> <th>tel</th> </tr> <tr> <td>1</td> <td>취준생</td> <td colspan="2">개인정보, 010-****-****</td> </tr> <tr> <td>2</td> <td>호랑이</td> <td rowspan="2">비밀공개</td> <td>010-****-****</td> </tr> <tr> <td>3</td> <td>임인년</td> <td>010-****-****</td> </tr> </table> 와 같은 결과화면을 볼 수 있습니다. rowspan="아래로 몇칸 합칠지 정한 숫자"는 자신의 라인을 표함한 아래로 몇칸을 합칠지 정하는 행 병합 속성입니다. colspan="아래로 몇칸 합칠지 정한 숫자"는 자신의 라인을 포함한 옆으로 몇칸을 합칠지 정하는 열 병합 속성입니다.   <div>내용</div>태그는 단락을 나타내는 태그입니다. <span>내용</span>태그는 인라인 태그라고 불립니다. 아직 위 두개의 태그에 대해서는 확실한 설명을 첨부하지는 못하겠으나, 두 태그를 사용하고 F12를 누른후 요소(Elements)를 눌러보면 두 개의 태그가 담당구역이 다른것을 확인할 수 있습니다. (조금더 공부하고 내용을 추가하도록 하겠습니다.)   다음으로는 <a>와<img>태그에 대해서 알아보겠습니다. <a>태그는 속성을 같이 사용하며, 속성값으로 href="주소"를 주게 되면, 주소로 이동하게 됩니다. 또, target="_blank"를 같이 사용해주면 새로운 창이 열리면서 속성값을 준 주소가 열립니다.  ex) <a href="http://www.google.com" target="_blank">구글을 새탭으로 열기</a> 를 만들게 되면 쉽게 생각하면 하이퍼링크가 달린다고 생각하면 편합니다. <img>태그는 이미지를 불러오는 태그입니다.  작업하고 있는 프로젝트내에 이미지가 있는 주소를 입력하면 사진이 출력이 됩니다. 이때 주소를 입력하는 방법은 절대경로와 상대경로가 있습니다. 절대경로는 상위폴더부터 아래로 내려와 사진이 있는 폴더까지 경로를 순서대로 입력하면됩니다.                                          ex) src="/프로젝트폴더명/사진이있는폴더의 상위폴더/사진이있는폴더/사진이름.확장자명"을 입력해주면 됩니다. 상대경로는 지금 작업하고 있는 공간에서부터 이동하는 방식입니다. 상위폴더로 가는 방식인 ../ 을 사용하여 사진이 있는 폴더로 찾아가면 됩니다. <img src ="절대경로or상대경로/사진이름.확장자명">을 입력하면 사진을 출력할 수 있습니다. 여기에 추가적으로 alt속성을 주게되면 사진이 없을때 출력되는 문구를 같이 달아줄 수 있습니다,  또한 width와 height를 사용하여 사진의 크기를 조정할  수 있습니다. <img src = "경로/사진이름.확장자명" alt="몰?루" width="600" height="300">을 입력하면 사진을 못찾으면 몰?루가 출력되고 사진은 엑박이 나옵니다.   다음에는 form에 대해 추가적으로 작성하겠습니다.   ※제가 공부하면서 참고할려고 만든 블로그라 많이 미숙합니다. 혹시 제가 놓친부분이나 수정할 부분 댓글 남겨주시면 반영하겠습니다. 감사합니다.          

프론트엔드HTML태그

바다다다

[인프런 워밍업 스터디 클럽 3기 FE] 2주차 발자국

수강강의1: 따라하며 배우는 자바스크립트 A-Z수강강의2: 따라하며 배우는 리액트 A-Z[19버전 반영]Tip: 워밍업 스터디 클럽을 참여하게 되면 [할인쿠폰]으로 강의를 할인 된 가격에 수강할 수 있다!2주차 강의 수강2주차를 되돌아 보며..이번주에는 지난주 Javascript강의를 마무리하고 드디어 React에 대한 학습에 진입하게 되었다.Javascript후반부 강의에서는 주로 디자인 패턴, Iterator, Generator에 대해 알아가고 마지막으로 Todo app, spread sheet 등을 따라 만들어 보면서 Javascript문법에 대해 조금 더 익숙해지고 복습하는 시간을 가지었다.React는 초반에 설치와 프로젝트 환경설정을 시작으로 처음부터 앱을 따라 만들어 보면서 React의 구조에 대해 알아보았다. TODO앱과 Netflix따라 만들기 강의를 따라서 코딩을 진행을 하였지만 환경설정이나 알수없는 오류등이 발생해서 바로 미션 과제를 중점으로 학습을 진행하였다.강의에서 언급한 이론을 실제 미션 과제에서 실습으로 결과물을 얻을 수 있어서 뿌듯했다. 지난주 과제에 비해 난이도가 많이 높아져서 진도를 따라잡기에 많이 버거웠던것도 사실이다. (특히 직장인이라면...More and more...hard..)강의 내용을 다시 정리해보며..(주로 개인적으로 새롭게 알게된 것, 다시 기억해야하는 것들 위주로 정리했다)Generator Generator사용자의 요구에 따라 다른 시간 간격으로 여러 값을 반환할 수 있음일반 함수 → 한번 실행으로 끝까지 실행됨generator 함수 → 일시적으로 정지될 수도 있고, 다시 시작할 수도 있음function* sayNumbers() {...} 별표로 generator함수 생성yield 함수를 정지시킴 → 일반함수에서 return과 동일function* sayNumbers(){ yield 1; yield 2; yield 3; } const number = sayNumbers() console.log(number.next()) // {value:1, done:false} console.log(number.next()) // {value:2, done:false} console.log(number.next()) // {value:3, done:false} console.log(number.next()) // {value:undefined, done:true} lazy evaluation에 활용가능계산의 결과값이 필요할 때까지 계산을 늦춰서 필요한 데이터를 필요한 순간에 생성Singleton Pattern클래스의 인스턴스화를 하나의 객체로 제한하는 디자인 패턴. 시스템 전체에서 작업을 조정하는 데 정확히 하나의 객체가 필요한 경우에 유용하다클래스가 존재하지 않는 경우 클래스의 새 인스턴스를 생성하는 메서드로 클래스를 생성하여 구현할 수 있음. 인스턴스가 이미 존재하는 경우 해당 개체에 대한 참조를 반환⇒ 객체는 1개만 만들고 그것을 계속 재사용하는 것 (값이 한곳에서 바뀌면 전역으로 바뀜)Factory Pattern특수 함수인 팩토리 함수를 사용하여 비슷한 객체를 많이 만들 수 있음⇒ 비슷한 객체를 반복적으로 생성해야하는 경우 사용Mediator Pattern (중재자 패턴)객체 그룹에 대한 중앙 권한을 제공한다. (예: 채팅방)Observer Patternevent-driven시스템을 이용하는 것 (예: facebook알림)topic에 대해 register하고 publisher-subscriber구조를 가지게 됨Module Pattern코드를 더 작고 재사용 가능한 조각으로 분할하는 것을 도와준다js코드를 작성하고 export지시자를 변수나 함수 앞에 붙이면 외부 모듈에서 해당 변수나 함수에 접근가능하게 된다import로 외부 모듈을 가져올 수 있음모듈은 특수한 키워드나 기능과 함께 사용되므로 HTML에서 script태그를 넣을 때 type='module' 속성을 추가해줘야 한다항상 strict모드로 실행된다지연 실행 된다인라인 모듈 스크립트도 비동기 처리할 수 있다외부 orgin에서 스크립트를 불러오려면 CORS헤더가 있어야 한다중복된 스크립트는 무시한다 (최초 호출될 때 한번만 실행)구형브라우저에서는 <script nomodule> ... </scirpt> 로 module을 지원하지 않을 경우 예외처리를 할 수 있음리액트는 프레임워크가 아니라 라이브러리React는 라이브러리, Vue, Angular는 프레임워크왜 라이브러리? 리액트는 전적으로 UI를 렌더링하는 것에 관여하기 때문상태관리, 라우팅, 테스트 등등을 위해 다른 라이브러리가 추가적으로 필요함 (vue, angular는 이런 것들이 이미 포함되어 있음)프레임워크: 어떠한 앱을 만들기위해 필요한 대부분의 것을 가지고 있는 것라이브러리: 어떠한 특정 기능을 모듈화 해놓은 것프레임워크는 라이브러리의 집합리액트 컴포넌트 - Component리액트 앱을 이루는 최소한의 단위, 여러 컴포넌트를 조합하여 하나의 페이지가 완성되는 것클래스형 컴포너트 - class component함수형 컴포넌트 - funcional component브라우저가 그려지는 원리와 가상돔리액트의 주요 특징 중 하나가 가상돔을 사용하는 것이다웹 페이지 빌드 과정 (CRP) - Critical Render Pathbrowser가 서버에서 페이지에 대한 HTML문서를 응답으로 받고, 해당 문서를 읽는다. 그 후 스타일을 입히고 뷰포트에 표시하게 된다DOM tree생성 → Render Tree생성(화면에 표시되는 모든 노드의 콘텐츠 및 스타일 정보를 포함) → Layout(reflow) → Paint(화면에 그리기)화면에서 DOM에 변화가 생기면 Render Tree부터 다시 랜더링 해야한다는 문제점!! → 비효율적→ 가상돔: 실제 DOM을 메모리에 복사해준 것데이터가 바뀌면 가상돔에 랜더링되고 이전에 생긴 가상돔과 비교해서 바뀐 부분만 실제 돔에 적용 시킴. 바뀐 부분을 찾는 과정을 diffing이라고 부르고, 바뀐 부분만 실제 돔에 적용시켜주는 것을 재조정(reconciliation)이라 한다.  강의 내용을 들으면서 아쉬웠던 점.. 강의 내용에 대해서 불만족 스러운 부분은 없다! 너무 알차게 구현되어진 강의이고 다만 진도에 따라서 많은 양의 강의를 한꺼번에 들어야 하다보니 모두 소화하기에는 어려웠다.강의 외에 미션과제도 수행해야 하다 보니 시간적으로 지난주에 비해 많이 부족했다. 아래 미션과제에서도 볼 수 있겠지만, 지난주와 달리 기본적인 모든 기능을 구현하지는 못했다.(특히! 디즈니플러스 클론코딩ㅜ)2주차 미션 완료Javascript미션은 지난주에 이어서 그나마 완성하기 했으나,React미션은 초보자의 입장에서 강의내용 수준으로 따라가기에는 어려웠다.처음이다보니 모든게 낯설게 느껴졌고, 그래도 다른 강의 및 자료를 통해 많은 학습을 할 수 있었다.특히 컴포넌트를 나누는 기준과 React에서 컴포넌트를 조합해서 웹 페이지를 구성한다는 것을 미션 실습과제를 통해 좀 더 쉽게 깨달을 수 있었던 것 같다. Javascript - Mission6: 비밀번호 생성기Demo: https://rim0703.github.io/React-study/Javascript/6-pw-generator/Source Code: https://github.com/rim0703/React-study/tree/main/Javascript/6-pw-generator Javascript - Mission7: 타이핑 테스트Demo: https://rim0703.github.io/React-study/Javascript/7-typing-test/Source Code: https://github.com/rim0703/React-study/tree/main/Javascript/7-typing-test React - Mission1: 예산 계산기Demo: https://gentle-starburst-b5ca45.netlify.app/Source Code: https://github.com/rim0703/React-study/tree/react/mission1 React - Mission2: 디즈니 플러스 앱Demo: https://disney-plus-clone-mission2.netlify.app/Source Code: https://github.com/rim0703/React-study/tree/react/mission2참고자료: https://www.youtube.com/watch?v=3NHYl0Lo74A이건 할말이 많은데.. 사실 아래 데모처럼 메인화면만 완성했다. 맨땅에서 시작하기에는 너무 막막해보여서 유튜브에 클론코딩 영상이 있어서 따라 만들어보았다.추가로 메인 로그인 화면, 영화 상세 내용 팝업화면이 추가로 구현일 필요하다.(추후 시간이 있으면 보완할 예정!)마지막으로 2주차 회고이번 한주간은 너무 정신없이 지난거 같다. 강의, 미션과제 외에 처음으로 접하는 React 내용에 설정이나 오류 등에 대해 검색하면 이슈 attack을 하기 위해 많이 시간이 필요했다. 이런 부분은 점차 많이 연습해보면 적응하지 않을까 싶다.진도표에 따르면 이제 3일만 더 수강하면 강의내용과 미션은 끝나는 일정이다. 최대한 남은 시간에 React강의를 끝내고 미션 과제 구현에 집중할 계획이다. 단기간에 많은 시간과 노력을 쏟아올린 만큼 프론트엔드에서 React에 대한 부담감(?) 두려운 마음을 조금이나마 떨쳐보고자 한다.강의수강이 끝나면 지금까지 구현한 미션 과제에 대해 보완할 부분이 있는지, 그리고 지금까지 강의를 들으면서 노션에 정리해두었던 내용을 다시 한번 복습할 계획이다.마지막 남은 기간도 화이팅 해보자!!!<끝>

프론트엔드워밍업스터디3기프론트엔드2주차발자국JavascriptHTMLCSSReact

바다다다

[인프런 워밍업 스터디 클럽 3기 FE] 1주차 미션 회고

1주차 발자국은 여기에: [인프런 워밍업 스터디 클럽 3기 FE] 1주차 발자국발자국 글이 길어져 미션을 따로 회고를 작성하였다.Mission1 - 음식 메뉴 앱Demo (클릭연결)SourceCode (클릭연결) 문제해결첫 미션 이여서 조금 설렜다(?)주어진 과제 안내 동영상에서 기본 화면 + 버튼으로 리스트를 화면에 뿌려주는 형식을 보고 따라 만들어 보았다.맥도날드를 좋아해서 맥도날드의 메뉴로 앱을 구성했다.정적 웹페이지로 구성된 화면이다보니 Github Page를 통해 배포까지해서 Demo화면을 구성하였다.고도화마지막 주차에 React 미션에서 쇼핑몰 앱 구현 미션이 있던데 해당 미션에서 구현한 화면으로 맥도날드 주문 앱을 구성해보아도 괜찮을 거 같다는 생각 회고가장 기본적인 HTML, CSS, JS를 활용해서 만든 웹 페이지라 맛보기에 좋았다.Mission2 - 가위 바위 보 앱Demo (클릭연결)SourceCode (클릭연결)문제해결플레이어는 가위, 바위, 보 3가지 중 한가지를 버튼 클릭 방식으로 제출하고, 컴퓨터는 랜덤으로 가위, 바위, 보를 제출하여 게임의 득점을 계산 한다.10회의 가위 바위 보 게임이 끝나면 최종 결과를 출력하는 앱이다.추가로 컴퓨터와 플레이어의 게임 결과를 출력되도록 화면 구성을 하였다.고도화가위 바위 보를 텍스트가 아닌 아이콘으로 표시하면 사용자가 좀 더 식별하기 쉬울 거 같다.현재는 마지막 단계에서 새로고침을 직접 해야하지만, 새로고침 버튼을 추가하여 사용성을 높일 수 있을거 같다.뒷 부분에서 webSocket을 사용한 채팅 앱도 미션으로 나와있던데 webSocket을 통한 양방향 게임도 구현할 수 있는 하나의 방향이라 생각한다.회고JS문법을 조금 더 많이 활용해볼 수 있었던 미션이다.CSS를 구성하는게 어려웠다ㅠ Mission3 - 퀴즈 앱Demo (클릭연결)SourceCode (클릭연결)문제해결미션 영상에서 안내된 내용대로 구현하려고 했다.여러 개의 답을 랜덤으로 생성하는데 "답이없는 경우"도 있다는 것이다. 우선 정답을 저장해두고 랜덤으로 답안 개수를 생성하면서 저장해둔 정답이 버튼으로 생성되지 않는다면 "답이 없음"버튼을 추가하도록 구현했다.정답을 맞추지 않으면 다음문제로 넘어가지 않도록 하였고, 정답을 제출하면 해당 계산식 문제에서 "?" 물음표가 정답으로 바뀌도록 구현하였다.고도화현재 구현된 버전에서는 정답을 맞추지 않으면 다음 문제로 넘어가지 않기 때문에 "O문제 정답"으로 표기하기 보다 풀이 문제수를 표시하고 있다는게 더 명확할 거 같다.무한대로 문제를 출제하도록 구현하여 문제 풀이의 끝이 없다. 문제수를 설정하고 해당 앱을 시작하는 방법도 생각해볼 수 있겠다.또한, 현재 10이내의 범위에서 덧셈 문제만 출제되고 있는데 좀 더 다양한 퀴즈(수학문제가 아니어도)들을 포함할 수 있다.회고 역시나 CSS로 화면을 표시하는 것에 시간이 많이 필요했다. (버튼 색상 변경, 배경 색 변경 등)alert을 미션에서 처음 띄워보았다. 근데.. 사실 사용자 입장에서는 조금 많이 거슬리는 거 같다. 생각해보면 대부분의 웹사이트에서 alert대신 팝업으로 메시지를 띄워주는 경우가 더 많은 거 같다. Mission4 - 책 리스트 나열 앱Demo (클릭연결)SourceCode (클릭연결)문제해결책 목록에 책을 저장해두고 저장해둔 내용을 아래 테이블에 표시해주는 형태이다.추가적으로 수정기능을 넣었고, 책 배열에서 선택된 객체의 값을 변경하여 이를 구현할 수 있었다.시인성을 높이기 위해 삭제된 책은 책이름이 출력되도록 수정하였다.고도화이게 중요한 책 목록 저장 시스템이라면 DB연동해서 영구적으로 저장해두는게 맞지만, 여기서는 미션이고 JS를 학습하는 목적이니 간단하게 화면에 표시만 했다. 로컬에 저장하는 것을 고려해보면 브라우저 내장 storage를 사용해서 잠깐의 저장 기능도 구현할 수 있지않을까라는 생각을 했엇다.회고앞에 3번 정도 미션을 수행하니 이제 CSS도 조금 적응한 듯 싶다.DB연동을 해보지 못해서 조금 아쉬웠지만, 일단 기초를 다지는 단계이니까 기초에 좀 더 집중하자는 생각. Mission5 - Github Finder 앱Demo (클릭연결)SourceCode (클릭연결)문제해결fetch함수로 github API를 사용하여 사용자의 정보를 얻어올 수 있다.얻어온 데이터를 화면에 적절히 뿌려주면되는 과제 였는데, 추가로 repository로 연결되도록 구현하였다.안내 동영상에는 사용자의 input을 감지하여 입력이 발생될 때 마다 API호출을 해서 화면이 랜더링 되도록 구현한 것으로 추측되는데, 이를 좀 더 효율성을 높이고자 사용자가 input을 입력하고 제출할 때 API call을 한 번 하도록 수정하였다.고도화현재 보여지는 profile정보 등은 간략하게 표시하고 있다.github API를 활용하여 클론 코딩도 가능할 거 같다. 회고외부 API를 호출해서 미션을 진행하며 잘 구현된 API가 화면을 구현하는 데에 많은 도움이 된다는 것.<끝>

프론트엔드워밍업스터디3기프론트엔드미션JSJavascriptHTMLCSS회고

바다다다

[인프런 워밍업 스터디 클럽 3기 FE] 1주차 발자국

수강강의: 따라하며 배우는 자바스크립트 A-ZTip: 워밍업 스터디 클럽을 참여하게 되면 [할인쿠폰]으로 강의를 할인 된 가격에 수강할 수 있다!1주차 강의 수강1주차를 되돌아 보며..이번 주 강의는 Javascript에 기본 문법부터 시작해서 중급 문법과 ES6에서 지원하는 class, promise등의 기능까지 학습하는 시간을 가질 수 있었다.강의가 단순하게 이론내용만 전달되는 것이 아니라 실제 코드를 구성하고 해당 Javascript코드가 HTML화면에서 어떤 동작을 하게되는지 실습과 함께 진행되어서 이해하기 더 쉬웠다. 물론 Javascript를 사용하는게 처음은 아니라 좀 더 여유롭게 강의를 이해할 수 있었지만, 중간중간 잊고 있었던 Javascript내용을 다시 복습하기에 좋은 시간이었다.또한 실습 과제도 강의 내용과 연관성이 있어서 단순 강의만 듣는 것보다 더 성취감을 높일 수 있었다. 강의 내용을 다시 정리해보며..(주로 개인적으로 새롭게 알게된 것, 다시 기억해야하는 것들 위주로 정리했다)var, let, const var를 왜 사용하지 말라는지 명확하게 알 수 있었다. let, const로 좀 더 관리하기 편한 코드를 작성하자.for VS forEach 사실 실제 사용할 때 그냥 편하다고 생각하고 forEach를 많이 사용했던 나의 모습이 떠올랐다. 또한 for..of도 많이 사용했었다. 성능적인 측면에서 데이터의 양이 늘어나면 성능이 떨어진다는 것을 알게되었고, 코드를 작성할 때 왜 사용하는지를 좀 더 고민 해야겠다. (절대적인 것이 아니다. 테스트 환경에 따라 결과가 다를 수 있음) CRP과정: Critical Rendering Path DOM tree 생성 → Render tree생성 → Layout → Paint DOM을 생성하는 것은 비용이 많이 발생하지 않지만, render, layout, paint에서 많은 비용이 발생한다. → 따라서 React에서는 가상의 DOM을 사용해서 최적화className VS classList className:특정 element의 클래스 속성의 값을 가져와서 설정할 수 있다.기존에 className을 전부 지우고 추가한다. classList: 읽기전용 property.classList.add()를 통해 기존 className을 유지한 채로 class명을 추가할 수 있다Event 종류가 너무 많다...이것들을 현업에서 사용가능하게 하려면? 공식 문서를 잘 찾아봐야 할 거 같다.어떤 기능을 구현하려고 하는데 이미 지원하는 메서드가 존재하지 않을까?를 생각해보자.Event Delegation (이벤트 위임):하위 요소의 공통 이벤트를 상위 요소에 위임함(강의 듣다가 신기한 코드 발견!)<div id="buttons"> <p>123</p> </div> <script> const buttonList = document.querySelector("#buttons"); buttons.addEventListener("click", () => alert("clicked")); </script> Q: 여기서 buttons는 HTML 요소의 id값 인데 js에서 그대로 사용해서 접근할 수 있다?A: 요소의 id또는 name은 window객체의 property로 추가되어 그대로 사용할 수 있지만, 다른 window객체의 property와 충돌될 수 있으니 사용하지 말자. (결론: 이렇게 쓰지마) JS에서 method VS function (이부분이 강의에서 언급되었는지는 잘 모르겠다. 강의 들으면서 궁금해서 찾아봤다) method: 호출방식, 함수를 호출하는 객체가 있는 경우, 즉 사용자가 정의한 객체의 property가 함수인 경우 해당 함수는 method라고 한다. function: 함수를 호출하는 객체가 없는 경우 Lexical this: 화살표 => 함수에서 this는 상위 스코프를 가리키게된다. bind, call, apply this를 function안에서 사용하면 window객체를 참조하게 되는데, 이를 다른 객체를 참조하도록 도와주는 함수들call(): 함수를 호출하는 함수const fullName = function(city, country){ console.log(this.firstName + ' ' + this.lastName, city, country); } const person1 = { firstName: 'John', lastName: 'Smith' } fullName.call(person1, "Oslo", "Norway") // call함수를 통해 person1 객체를 함수로 넘겨줌 apply() - 배열로 함수의 parameter를 전달함const fullName = function(city, country){ console.log(this.firstName + ' ' + this.lastName, city, country); } const person1 = { firstName: 'John', lastName: 'Smith' } fullName.apply(person1, ["Oslo", "Norway"]) // call함수와 달리 배열 형식으로 넘겨주는 방식 bind() - binding만으로 호출이안되고 새로 call을 해줘야함.function func(language){ if(language === 'kor'){ console.log(`language:${this.korGreeting}`) } else { console.log(`language:${this.engGreeting}`) } } const greeting = { korGreeting: '안녕', engGreeting: 'Hello' } const boundFunc = func.bind(greeting) //binding 만 시켜줌 따라서 새로운 값에 할당하고 호출해야함 boundFunc('eng') Javascript는 동기 언어이다. 어떻게 비동기를 실행가능한가? setTimeout()은 JS가 아니다. 브라우저에서 사용하는 것이면 브라우저 API를 사용하는 것(Window Object), Node에서 사용한다면 Node API를 사용하는 것이다(global Object) JS엔진 Memory Heap: 메모리 할당이 발생하는 곳 (변수를 정의하면 저장해두는 곳) Call Stack: 코드가 실행될 때 스택들이 쌓이는 곳 -> 여기서 이벤트 루프가 call stack, callback queue를 주시하고 있다가 call stack이 비어지면 callback queue에 대기중인 setTimeout작업을 실행하게 됨.setTimeout()을 0초로 설정하면 0초(즉시 실행)를 보장할까?Nope! 이벤트 루프를 타고 callback queue를 들렀다가 오는거니까 즉시실행은 아님.Closure다른 함수 내부에 정의된 함수(innerFunction)이 있는 경우 외부 함수(outerFunction)이 실행을 완료하고 해당 변수가 해당 함수 외부에서 더 이상 엑세스할 수 없는 경우에도 해당 내부 함수는 외부 함수의 변수 및 범위에 엑세스 할 수 있다.function outerFunction(outerVariable) { return function innerFunction(innerVariable) { console.log("Outer Variable: " + outerVariable); console.log("Inner Variable: " + innerVariable); }; } const newFunction = outerFunction("outside"); newFunction("inside"); // 여기서 outerVariable은 여전히 outside를 기억하고 있다.Map, Filter, Reduce Map(): 배열내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열을 반환함Filter(): 주어진 함수의 테스트를 통과하는 모든 요소를 모아 새로운 배열로 반환 Reduce(): 배열의 각 요소에 대해 주어진 리듀서(reducer)함수를 실행하고, 하나의 결과값을 반환한다.undefined VS null 원시 자료형 undefined타입은 undefined이 유일하고, null타입은 null값이 유일하다. undefined는 자바스크립트 엔진이 변수를 초기화할 때 사용한다. 개발자가 의도적으로 undefined를 할당하는 것은 권장하지 않는다. null: 비어있는, 존재하지 않는 값을 의미 NULL, Null과는 다르다! 변수 값이 없을 경우 명시하기 위해서는 undefined가 아닌 null을 사용한다null을 할당하면 변수가 이전에 참조하던 값을 명시적으로 참조하지 않겠다고 하는 것이므로, JS엔진이 이 변수에 메모리 공간에 대해 가비지 콜렉션을 수행한다. (garbage collection: 더이상 사용하지 않는 메모리를 자동으로 정리하는 것)얕은 비교 VS 깊은 비교숫자, 문자열 등의 원시 자료형은 값을 비교한다배열, 객체 등 참조 자료형은 값 혹은 속성을 비교하지 않고, 참조되는 위치를 비교한다.객체의 경우 깊은 비교가 필요함- 깊이가 깊지 않을 경우: JSON.stringify()- 깊이가 깊을 경우: lodash라이브러리의 isEqual()사용함수 표현식(Expression), 함수 선언문(Statement)함수표현식 let funcExpression = function() {...}함수선언문 function funcDeclaration() {...}차이: 함수 선언식은 호이스팅에 영향을 받지만, 함수 표현식은 호이스팅에 영향을 받지 않는다.  강의 내용을 들으면서 아쉬웠던 점..우선 단기간에 많은 양의 강의를 들어야해서 강의에서 진행한 실습을 전부 따라하기에는 힘들었다. 기존에 JS에 대한 기초 지식이 있어서 강의를 다 따라올 수 있었지만, 처음 스터디에 참여하신 분이라면 많이 힘들었을 수 있겠다는 생각을 했다. (특히 직장인은.. 더..)자기 주도학습인 스터디 형식이다 보니 미션 과제를 제출해서 과제 전체 내용에 대한 코드리뷰는 받기 어려웠다. 그래서 미션 과제를 진행하면서 어떤 기능을 더 추가할 수 있을까, 어떻게 하면 편의성을 높일 수 있을까를 많이 생각했던거 같다. 또한 과제 제출시간에 맞춰서 미션을 수행해야 하다보니 코드가 생각보다 깔끔하게 짜여진거 같지는 않았다. (이 부분은 추후에 시간나면 리팩토링 진행할 생각이다..)다음주는 React 프로젝트가 시작되는데,, 조금 걱정이긴하다.. 잘 할 수 있을까? 1주차 미션 완료(글이 길어져 미션에 대해서는 간략하게 시연 위주로 작성하고, 회고는 여기 링크에 따로 작성해두었다.)https://www.inflearn.com/blogs/94751주차 미션은 주로 강의내용에 기반해서 HTML, JS, CSS를 사용해서 Single-page application을 작성하는 과제들이었다. HTML, CSS는 강의에서 다루는 범위가 아니고, JS를 중점으로 다루고 있기때문에 JS의 문법 동작성을 확인하는 데에 더 초점을 두었다고 생각한다. 따라서 과제를 수행할 때 HTML, CSS는 최소한으로 간략하게 작성하고 script파일 작성에 좀 더 중점을 두었다. 제출한 미션은 Github Page를 사용해서 배포하였다.Demo: https://rim0703.github.io/React-study/Source Code: https://github.com/rim0703/React-study/tree/main/Javascript Mission1 - 음식 메뉴 앱(맥도날드를 좋아해서 맥도날드 메뉴판을 간략하게 구성해보았다. 뭐든 관심있는 주제가 더 재밌지 않은가?)Mission2 - 가위 바위 보 앱(과제 참고 영상에서는 컴퓨터에 대한 결과가 출력되지 않아 추가로 컴퓨터의 결과와 플레이어의 결과를 비교할 수 있도록 구현하였다.)Mission3 - 퀴즈 앱(오답 시 다음 퀴즈로 넘어가지 않도록 구현하였다) Mission4 - 책 리스트 나열 앱(삭제 기능 외에 수정 기능을 추가 구현하였다) Mission5 - Github Finder 앱(사용자input을 감지해서 API call하는 대신, 버튼을 통해 input을 제출하면 API call하는 방식으로 개선하였다)(예시 화면은 향로님 깃헙 ^^7) 마지막으로 1주차 회고전반적으로 확실하게 자기주도 학습이 강한 느낌을 받았다. 본인의 일정에 맞춰서 일주일 내에 강의를 수강하고, 과제를 제출하는 것이 쉬운 일이 아닌거 같다. 그럼에도 첫 주를 잘 마무리 할 수 있어서 뿌듯하다.처음에는 React에 대해 학습하고자 스터디에 참여하게 되었지만, 실제 기초적인 Javascript에 대한 내용도 잊은 부분이 많다는 것을 깨닫게되었다.진도표에 보면 다음 주에는 JS강의가 끝나고 React 강의가 본격적으로 시작된다.React 미션과제는 또 어떤 구현 내용들이 기다리고 있을까?기대반 걱정반이다.. 다음주도 화이팅해보자! <끝>

프론트엔드워밍업스터디3기프론트엔드1주차발자국JavascriptHTMLCSSReact

Edun

[1번과제] 인프런 워밍업 클럽 스터디 FE 1기 과제제출

<과제명 : 음식메뉴 앱 만들기>언어 : JavaScript, HTML, CSSIDE : Visual Studio CodeConcept : BurgerKing Menu Appgithub : https://github.com/hyojin-park24/inflearn-warmingUp-club-fe/tree/main/inflearn-js-1<느낀점>1) JavaScript 문법과 CSS 문법을 모르면 막막한 망망대해로 빠져 버린다. . .2) 이번 과제 하나로 많은 문법과 JS 응용을 해볼 수 있었다 가령, 아래 코드와 같은 것들이랄까// == 와 ===의 차이 console.log(true ==1); // true console.log(true == '1'); // true console.log(true === '1') // false // 여러가지 class 선언시 css selector (class selector, id selector)가 space 마다 차이가 있my음 // 단일 class <nav> class = "navigation";</nav> const navigation = document.querySelector('.navigation'); // 다중 클래스 <nav> class = "navigation my-navi1 my-navi2";</nav> const navigation = document.querySelector('.navigation.my-navi1'); //같은 요소로 인식 const navigation = document.querySelector('.navigation .my-navi1'); //하위 요소로 인식 const navigation = document.querySelector('.navigation>.my-navi1'); //자식 요소로 인식3) 기본 문법도 익힐 수 있었다map함수: map()함수로 호출한 배열 값을 반환해줌 (변환 가능)for/forEach와 차이점 : 값 반환 및 변환 기능Node복사 : clonNodeElement.children : 요소 노드만 (할당가능)const [imgElement, textContainer] = content.children; //content자식에 imgElement와 textContainer가 있음을 기대. const [titleElement, priceElement, descptionElement] = textContainer.children; //txtContainer에 titleElement와 priceElement와 descriptionElement가 있음을 기대.const [imgElement, textContainer] = content.children; const [titleElement, priceElement, descptionElement] = textContainer.children; 요소의 HTML 태크 값을 읽어오는 innerHTML/ 요소의 Text값만 읽어오는 innerText화살표 함수Element.addEventListener(: e.target.id) 4) JS 스승인 뀨님 다시한번 감사합니다, , , 핫투.실행 화면

프론트엔드JavaScriptHTMLCSS인프런워밍업클럽스터디

HTML_essential tags

<!DOCTYPE html> <html> <head> <title>HTML-소개</title> <meta charset="utf-8"> </head> <body> <h1><a href="index.html">HTML</a></h1> <ol> <li><a href="1.html">기술소개</a></li> <li><a href="2.html">기본문법</a></li> <li><a href="3.html">하이퍼텍스트와 속성</a></li> <li><a href="4.html">리스트와 태그의 중첩</a></li> </ol> <h2>수업의 목적</h2> 본 수업은 HTML에 대한 심화된 내용을 다룹니다. HTML의 기본문법과 HTML의 주요한 태그들에 대한 수업을 담고 있습니다. <h2>선행학습</h2> 본 수업을 효과적으로 수행하기 위해서는 웹애플리케이션에 대한 전반적인 이해가 필요합니다. 각각의 기술들이 어떻게 관계하고 있는지를 알려드리는 것이 위 수업의 목적입니다. </body> </html> <title> 태그를 이용해 웹 페이지 제목 설정   The <title> tag in HTML is used to define the title of HTML document. It sets the title in the browser toolbar. It provides the title for the web page when it is added to favorites. It displays the title for the page in search engine results.   <meta> 태그 추가 The <meta> tag defines metadata about an HTML document. Metadata is data (information) about data. <meta> tags always go inside the <head> element, and are typically used to specify character set, page description, keywords, author of the document, and viewport settings.   <html>, <head>, <body> HTML에 있는 모든 태그는 <head> 태그 또는 <body> 태그 중 하나 아래에 놓인다. 그런 의미에서 <head> 태그 또는 <body> 태그는 상당히 고위직 태그라 할 수 있는데, 이 고위직 태그를 감싸는 단 하나의 태그가 <html> 태그이다.   <!DOCTYPE HTML> All HTML documents must start with a <!DOCTYPE> declaration. The declaration is not an HTML tag. It is an "information" to the browser about what document type to expect. In HTML 5, the declaration is simple: <!DOCTYPE html>   Hypertext;anchor, <a> The <a> tag defines a hyperlink, which is used to link from one page to another. The most important attribute of the <a> element is the href attribute, which indicates the link's destination. href 속성-하이퍼텍스트의 첫 글자인 h와 웹 브라우저에게 이 값을 참조하라는 의미의 reference에서 앞의 세 글자를 따옴. The href attribute specifies the URL of the page the link goes to. If the href attribute is not present, the <a> tag will not be a hyperlink.   링크를 클릭했을 때 새 탭에서 열리게 만들고 싶다면 target="_blank" The target attribute specifies where to open the linked document.   툴팁으로 내용 미리 표시 title="Free Web tutorials" The title attribute specifies extra information about an element.   The information is most often shown as a tooltip text when the mouse moves over the eleme        

웹 개발HTML기초

채널톡 아이콘