1주차 강의 자료 정리
- PDF 파일 [스파르타코딩클럽] 웹개발종합반_1주차_updated_210613.pdf
- 단축키 모음
- 새로고침
F5
- 저장
- Windows:
Ctrl
+S
- macOS:
command
+S
- Windows:
- 전체선택
- Windows:
Ctrl
+A
- macOS:
command
+A
- Windows:
- 잘라내기
- Windows:
Ctrl
+X
- macOS:
command
+X
- Windows:
- 콘솔창 줄바꿈
shift
+enter
- 코드정렬
- Windows:
Ctrl
+Alt
+L
- macOS:
option
+command
+L
- Windows:
- 들여쓰기
Tab
- 들여쓰기 취소 :
Shift
+Tab
- 주석
- Windows:
Ctrl
+/
- macOS:
command
+/
- Windows:
- 새로고침
[수업 목표]
- 서버와 클라이언트의 역할에 대해 이해한다.
- HTML, CSS의 기초 지식을 이해한다. 부트스트랩을 가져다 쓸 줄 안다!
- Javascript 기초 문법을 익힌다.
[목차]
💡 모든 토글을 열고 닫는 단축키 Windows : `Ctrl` + `alt` + `t` Mac : `⌘` + `⌥` + `t`01. 1주차 오늘 배울 것
- 1) 서버/클라이언트/웹의 동작 개념
-
네이버 웹페이지를 해킹해보자!
👉 크롬 창에서 보이는 웹페이지는 어떤 원리로 보여지는 것일까요? 원리를 알기 위해서, 일단 해킹부터 해보죠! (응?)함께 해보아요 → '네이버뉴스'라고 쓰인 곳을 원하는 문구로 바꾸어보죠!
👉 앗! 바뀌었다!
-
-
웹의 동작 개념 (HTML을 받는 경우)
👉 네! 우리가 보는 웹페이지는 모두 서버에서 미리 준비해두었던 것을 "받아서", "그려주는" 것입니다. 즉, 브라우저가 하는 일은 1) 요청을 보내고, 2) 받은 HTML 파일을 그려주는 일 뿐이죠. 👉 근데, 1)은 어디에 요청을 보내냐구요? 좋은 질문입니다. 서버가 만들어 놓은 "API"라는 창구에 미리 정해진 약속대로 요청을 보내는 것이랍니다.예) https://naver.com/
→ 이것은 "naver.com"이라는 이름의 서버에 있는, "/" 창구에 요청을 보낸 것!
-
-
웹의 동작 개념 (데이터만 받는 경우)
👉 앗, 그럼 항상 이렇게 HTML만 내려주냐구요? 아뇨! 데이터만 내려 줄 때가 더~ 많아요.사실 HTML도 줄글로 쓰면 이게 다 '데이터'아닌가요?
👉 자, 공연 티켓을 예매하고 있는 상황을 상상해봅시다! 좌석이 차고 꺼질때마다 보던 페이지가 리프레시 되면 난감하겠죠ㅠ?이럴 때! 데이터만 받아서 받아 끼우게 된답니다.
👉 데이터만 내려올 경우는, 이렇게 생겼어요! (소곤소곤) 이런 생김새를 JSON 형식이라고 한답니다.
-
- 1~5주차에 배울 순서!
- 1주차: HTML, CSS, Javascript 👉 오늘은 HTML과 CSS를 배우는 날! 즉, 4주차에 내려줄 HTML파일을 미리 만들어 두는 과정입니다. + 또, 2주차에 자바스크립트를 능숙하게 다루기 위해서, 오늘 문법을 먼저 조금 배워둘게요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/77b296a7-6138-40f9-9537-1a86789ca735/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/77b296a7-6138-40f9-9537-1a86789ca735/Untitled.png)
- 2주차: jQuery, Ajax, API 👉 오늘은 HTML파일을 받았다고 가정하고, Javascript로 서버에 데이터를 요청하고 받는 방법을 배워볼거예요 ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6434b1c6-1baf-4746-a253-19cd70fd5825/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6434b1c6-1baf-4746-a253-19cd70fd5825/Untitled.png)
- 3주차: Python, 크롤링, mongoDB 👉 오늘은 드디어 '파이썬'을 배울거예요. 먼저 문법을 연습하고, 라이브러리를 활용하여 네이버 영화목록을 쫙 가져와보겠습니다. (기대되죠!) + 그리고, 우리의 인생 첫 데이터베이스. mongoDB를 다뤄볼게요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/078af39a-5f86-48de-9095-afd2ee95eb7b/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/078af39a-5f86-48de-9095-afd2ee95eb7b/Untitled.png)
- 4주차: 미니프로젝트1, 미니프로젝트2 👉 오늘은 서버를 만들어봅니다! HTML과 mongoDB까지 연동하여, 미니프로젝트1, 2를 완성해보죠! 굉장히 재미있을 거예요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cffe5c7b-2bce-4da5-b396-14f3481cd89f/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/cffe5c7b-2bce-4da5-b396-14f3481cd89f/Untitled.png) 👉 나중에 또 이야기하겠지만 헷갈리면 안되는 것! 우리는 컴퓨터가 한 대 잖아요... 그래서 같은 컴퓨터에다 서버도 만들고, 요청도 할 거예요. 즉, 클라이언트 = 서버가 되는 것이죠. 이것을 바로 "로컬 개발환경"이라고 한답니다! 그림으로 보면, 대략 이렇습니다. ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/04945ba3-ac4a-482e-9f77-a794981de558/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/04945ba3-ac4a-482e-9f77-a794981de558/Untitled.png)
- 5주차: 미니프로젝트3, AWS 👉 오늘은 아직 익숙해지지 않았을 당신을 위해! 같은 난이도의 유사한 한 개의 프로젝트를 더 진행합니다. 그치만 우리 컴퓨터를 24시간 돌려둘수는 없잖아요! 그래서 두구두구.. 인생 첫 배포!를 해볼 예정입니다! 클라우드 환경에서 컴퓨터를 사고, 거기에 파일을 올려 실행해보겠습니다. ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8793b9cd-1f21-400e-a3ee-b8258e637e83/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/8793b9cd-1f21-400e-a3ee-b8258e637e83/Untitled.png)
- 2) 1~5주차가 끝나면 만들게 되는 것들 - 구경하기!
02. 필수 프로그램 설치
- 3) Pycharm Professional 설치 가이드 (다운로드 링크) 👉 스파르타코딩클럽을 통해, 연 $89 상당의 **PyCharm Professional 버전을 4개월 간 무료로 사용**하실 수 있습니다!(YEAH~) 1주차 강의에서 활성화 프로모션 코드가 포함된 가이드 문서를 제공해드립니다. - 아래 그림과 같이 Professional 버전을 다운로드 받은 후 **설치까지만 마무리**해주세요. ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/aa7e462b-13a1-4ae4-8f51-0f8311506337/_2020-06-07__12.18.58.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/aa7e462b-13a1-4ae4-8f51-0f8311506337/_2020-06-07__12.18.58.png) - **(Windows 만)** 설치 중 Installation Options 는 아래와 같이 체크해주세요. ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b7a7a2e6-a451-4c1b-81ad-67ebad3c507f/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/b7a7a2e6-a451-4c1b-81ad-67ebad3c507f/Untitled.png)
- 4) JetBrains 회원가입 가이드 (회원가입 링크)
-
링크에 들어가 "Create JetBrains Account"에 아이디로 사용할 이메일을 입력합니다.
-
발송 이메일을 확인하고, 해당 주소의 메일함에서 JetBrains의 메일을 클릭합니다.
-
"Confirm your account" 링크를 클릭하세요.
-
웹페이지의 지시대로 회원 가입 절차를 마무리합니다.
-
- 5) PyCharm Professional 등록 가이드 👉 스파르타코딩클럽을 통해, 연 10만원 상당의 **PyCharm Professional 버전을 4개월 간 무료로 사용**하실 수 있습니다! (Yay! 소리질러~~~) 그럼 순서대로 차근차근 따라와주세요! 1. 스파르타코딩클럽 가입에 사용한 이메일을 입력하시고, 본인의 파이참 라이센스 코드를 확인합니다. 👉 [**(코드확인 링크)](http://spartacodingclub.shop/pycharm_license)** 🚨 **스파르타코딩클럽 가입**에 사용한 이메일을 입력해주세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc5d1c5-394d-4785-b86f-9a882ea79615/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/7dc5d1c5-394d-4785-b86f-9a882ea79615/Untitled.png) 2. [**(젯브레인 링크)**](https://account.jetbrains.com/licenses)에 접속해서, 로그인을 완료합니다. 🚨 **젯브레인(JetBrains) 가입**에 사용한 이메일과 비밀번호를 입력해주세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3857c67-0eeb-43f5-919e-05d8f4073621/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d3857c67-0eeb-43f5-919e-05d8f4073621/Untitled.png) 3. **Purchase Product license(s)**를 클릭하세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ffd20dc2-053c-4b3c-936f-f796184fec67/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/ffd20dc2-053c-4b3c-936f-f796184fec67/Untitled.png) 4. **PyCharm**의 오른쪽 끝에 있는 **Buy new license**를 클릭하세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a6a0bdc-9f22-4d63-aa62-16ef766a21f6/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/3a6a0bdc-9f22-4d63-aa62-16ef766a21f6/Untitled.png) 5. ✅ 체크박스를 누르고, **PROCEED AS NEW CUSTOMER**를 클릭하세요. ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b73a14-f50f-41b5-a79f-edee24047257/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/06b73a14-f50f-41b5-a79f-edee24047257/Untitled.png) 6. **Have a discount code?**를 클릭하세요! (거의 다왔어요 두구두구.. 🥰) ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5146d0bd-51cf-4866-ab2f-8f4ee70f1590/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5146d0bd-51cf-4866-ab2f-8f4ee70f1590/Untitled.png) 7. 아까 1번에서 부여 받은 **파이참 라이센스 코드**를 입력하세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/72d2b40e-f4bb-4309-9ffd-756ab8e2fedb/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/72d2b40e-f4bb-4309-9ffd-756ab8e2fedb/Untitled.png) 8. Total이 **$0.00**으로 되었으면 완료! **PLACE ORDER**를 클릭해주세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/17df0cfa-653e-408e-8c1d-14465b22eb21/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/17df0cfa-653e-408e-8c1d-14465b22eb21/Untitled.png) 9. 자, 이제 **PyCharm Pro**를 실행하고, email / password를 입력하고 → Activate를 클릭! 🚨 **젯브레인(JetBrains) 가입**에 사용한 이메일과 비밀번호를 입력해주세요! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2a78bcf4-f557-42cc-81c8-4467575fe94b/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2a78bcf4-f557-42cc-81c8-4467575fe94b/Untitled.png) 10. 10초만 기다리면... → 짠! 설치가 모두 완료되었습니다! 🎉 ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d5485720-57a5-4387-8207-c578941fb214/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d5485720-57a5-4387-8207-c578941fb214/Untitled.png)
- 6) AWS 가입하기 👉 AWS는 우리 수업 5주차 때, 배포를 위해 필요하답니다! 가입 승인에 시간이 소요될 수 있으니, 미리 가입해주세요! - 가입: [https://portal.aws.amazon.com/billing/signup#/start](https://portal.aws.amazon.com/billing/signup#/start) - 해외결제가 가능한 유효한 결제 수단을 넣어야 가입이 정상적으로 이루어집니다. Visa 또는 Master 겸용의 신용카드를 추천드립니다. 가입이 정상적으로 이루어지지 않을 경우 5주차에 수업을 진행할 수 없으므로 사전에 해외결제가 가능한지 반드시 확인 부탁드립니다. - AWS는 개인에게 클라우드 환경의 가상서버를 제공합니다. 기본 사양의 서버(EC2)를 1년 동안 무료로 사용할 수 있습니다. - 가입 시 결제된 금액은 다시 반환됩니다. (일종의 결제 테스트 목적) - (←펼쳐보기!) 가입 후 아래와 같은 화면에 접속 하면 성공! - [https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2](https://ap-northeast-2.console.aws.amazon.com/ec2/v2/home?region=ap-northeast-2#Instances:sort=instanceId) ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/2e35085e-f594-428b-99ca-a28ea5f0036b/Untitled.png) ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/5fb4fa3a-ed0b-4877-a9b8-a6290bc60275/Untitled.png)
03. HTML, CSS 기본 내용
- 7) HTML과 CSS의 개념
- HTML은 뼈대, CSS는 꾸미기! 👉 HTML은 구역과 텍스트를 나타내는 코드로, CSS는 잡은 구역을 꾸며주는 것으로 생각합니다. HTML 내 style 속성으로 꾸미기를 할 수 있지만, 긴 세월동안 이것을 한데 모아 볼 수 있는 CSS 파일이 탄생하게 되었습니다. HTML 코드 내에 CSS 파일을 불러와서 적용합니다.
- 또한 CSS를 잘 사용할 줄 아는 것과, '예쁘게' 만드는 것은 다른 영역이기 때문에(붓을 잡을 줄 아는 것과 그림을 잘 그릴 줄 아는 것의 차이), 많은 경우 웹디자이너나 퍼블리셔에게 의존하게 됩니다.
- 8) HTML 기초
- HTML은 크게 head와 body로 구성되며, head안에는 페이지의 속성 정보를, body안에는 페이지의 내용을 담습니다.
- head 안에 들어가는 대표적인 요소들: meta, script, link, title 등 👉 페이지의 속성을 정의하거나, 필요한 스크립트들을 부릅니다. 즉, 눈에 안 보이는 필요한 것들을 담는 것. 나중에 body 작업을 하면서 필요한 정보들을 넣어보겠습니다.
- body 안에 들어가는 대표적인 요소들!
-
[코드스니펫] HTML기초
👉 이 외에도 아주 많으며, 개발자들도 모두 외우고 있지 않습니다. 필요할 때마다 찾아서 넣어보세요! 👉 **잠깐! 정렬의 중요성** 코드의 정렬이 제대로 되어있지 않으면, 코드의 생김새를 파악할 수 없어 오류를 해결하기가 무척 어려워집니다. Pycharm에서 **ctrl+alt+L** (맥은 cmd+alt+L) 로 자동정렬 기능을 사용해보세요.```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>스파르타코딩클럽 | HTML 기초</title> </head> <body> <!-- 구역을 나누는 태그들 --> <div>나는 구역을 나누죠</div> <p>나는 문단이에요</p> <ul> <li> bullet point!1 </li> <li> bullet point!2 </li> </ul> <!-- 구역 내 콘텐츠 태그들 --> <h1>h1은 제목을 나타내는 태그입니다. 페이지마다 하나씩 꼭 써주는 게 좋아요. 그래야 구글 검색이 잘 되거든요.</h1> <h2>h2는 소제목입니다.</h2> <h3>h3~h6도 각자의 역할이 있죠. 비중은 작지만..</h3> <hr> span 태그입니다: 특정 <span style="color:red">글자</span>를 꾸밀 때 써요 <hr> a 태그입니다: <a href="http://naver.com/"> 하이퍼링크 </a> <hr> img 태그입니다: <img src="https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png" /> <hr> input 태그입니다: <input type="text" /> <hr> button 태그입니다: <button> 버튼입니다</button> <hr> textarea 태그입니다: <textarea>나는 무엇일까요?</textarea> </body> </html> ```
-
04. Quiz_간단한 로그인 페이지 만들어보기
- 9) ✍간단한 로그인 페이지 만들기
🔥 앞으로 실습이 필요한 부분이 나오면 "✍"모양으로 알려줄게요!
퀴즈설명 영상을 먼저 보고 → 정해진 시간동안 혼자 한다음 → 함께하기 영상을 보세요!
- Q. 퀴즈설명
- 모습 보기
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6a2b76fd-9264-41c0-b0cc-2a44ad472624/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6a2b76fd-9264-41c0-b0cc-2a44ad472624/Untitled.png)
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6a2b76fd-9264-41c0-b0cc-2a44ad472624/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/6a2b76fd-9264-41c0-b0cc-2a44ad472624/Untitled.png)
👻 힌트: 위의 HTML기초에서 봤던 코드들을 적절히 조합해보세요!
ctrl+c,v 신공을 사용해보세요!
- A. 함께하기(완성본)
💡 어때요, 할만했나요? 다만 조금씩 다른 방법으로 해결하셨더라도,
다음 강의 진행을 위해 아래 코드를 복사→붙여넣기 해주세요!
- **[코드스니펫] 로그인HTML**
```html
로그인페이지
로그인 페이지
ID:
PW:
로그인하기 ```
05. CSS 기초
- 10) HTML 부모-자식 구조 살펴보기 👉 html 태그는, "누가 누구 안에 있느냐"를 이해하는 것이 가장 중요합니다. 나를 감싸고 있는 태그가 바뀌면, 그 안의 내용물도 모두 영향을 받지요! - 빨간색 div 안에, 초록색/파란색 div가 들어있습니다. 아래와 같은 상황에서 빨간색 div를 가운데로 옮기면, 내용물인 초록/파란 div도 모두 함께 이동하겠죠! - 즉, 박스를 옮기면 안의 내용물도 함께 옮겨지는 것과 같은 원리입니다. - 같은 원리로, 초록 div의 글씨색을 바꾸면, 나는버튼1의 글씨색도 바뀐답니다! ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0aa008bc-3f75-4e6a-a9a2-03eaa86551ba/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/0aa008bc-3f75-4e6a-a9a2-03eaa86551ba/Untitled.png)
- 11) CSS 기초
- CSS는 어떻게 사용하나요? 👉 ~ 안에 로 공간을 만들어 작성합니다. 아래 코드를 통해 간단한 사용 방법을 알아봅니다. mytitle라는 클래스를 가리킬 때, .mytitle { ... } 라고 써줘야 하는 것을 꼭! 기억하세요!
- 모든 CSS들을 다 알 수는 없겠죠~~ 오늘 쓰는 것만 알아도 굿!
나머지는 검색해서 쓰시면 된답니다~!<aside> 👉 배경관련 background-color background-image background-size 사이즈 width height 폰트 font-size font-weight font-famliy color 간격 margin padding </aside>
06. 자주 쓰이는 CSS 연습하기
- 12) 자주 쓰이는 CSS 연습하기
👉 [연습할 것들]
h1, h5, background-image, background-size, background-position
color, width, height, border-radius, margin, padding
- (1) 튜터와 함께 아래와 같은 화면을 만들어볼까요?
![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4aafd1d6-0983-41db-8c99-c25056413267/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/4aafd1d6-0983-41db-8c99-c25056413267/Untitled.png)
💡 margin과 padding ( → 헷갈리지 말기!)
- margin은 바깥 여백을, padding은 내 안쪽 여백을
- div에 색깔을 넣고, 직접 사용해서 차이를 비교해보세요!
- **[코드스니펫] 이미지URL**
```html
[https://www.ancient-origins.net/sites/default/files/field/image/Agesilaus-II-cover.jpg](https://www.ancient-origins.net/sites/default/files/field/image/Agesilaus-II-cover.jpg)
```
```html
스파르타코딩클럽 | 로그인페이지
로그인 페이지
아이디, 비밀번호를 입력해주세요
ID:
PW:
로그인 페이지
아이디, 비밀번호를 입력해주세요
ID:
PW:
07. 폰트, 주석, 파일분리
- 13) 구글 웹폰트 입히기
- 구글 웹폰트
-
[코드스니펫] 구글웹폰트
```python [https://fonts.google.com/?subset=korean](https://fonts.google.com/?subset=korean) ```
(1) 마음에 드는 폰트를 클릭합니다.
(2) [ + Select this style ]을 클릭합니다.
(3) 우측 상단의 모음 아이콘을 클릭합니다.
(4) Embed 탭을 클릭합니다.
(5) link 태그를 복사해서 ~ 사이에, CSS를 복사해서 사이에 넣습니다.
-
- Nanum Gothic이라는 폰트를 예제로 추가해보면, 아래와 같은 코드를 복사하면 됩니다.
<!-- HTML에 이 부분을 추가하고 --> <link href="https://fonts.googleapis.com/css2?family=Nanum+Gothic&display=swap" rel="stylesheet">
/* CSS에 이 부분을 추가하면 완성! */ * { font-family: 'Nanum Gothic', sans-serif; }
- 구글 웹폰트
- 14) 꿀팁! 주석 달기 👉 주석은 언제 사용하나요? 1) 필요없어진 코드를 삭제하는 대신 임시로 작동하지 못하게 하고 싶을 때 2) 코드에 대한 간단한 설명을 붙여두고 싶을 때 사용합니다. 주석을 붙여놓으면, 브라우저/컴퓨터가 읽지 않아요. 즉, 개발자 본인 또는 동료를 위해 붙여두는 것! - 단축키: 주석처리하고 싶은 라인들을 선택 → **ctrl(또는 command) + / (슬래시)**
- 15) CSS 파일 분리 👉 부분이 너무 길어지면, 보기가 어렵겠죠? 이럴 땐 아래와 같이 파일을 분리해둘 수 있습니다. 지금은 css가 간단하고, 한 파일에서 보는 게 편하기 때문에 일단은 패스! 🔥 **이 부분은 튜터님만 혼자하면서 보여드릴게요! 여러분은 구경만!** ```html ```
08. 부트스트랩, 예쁜 CSS 모음집
- 16) bootstrap이란?
- 부트스트랩이란? 예쁜 CSS를 미리 모아둔 것 (CSS를 다룰 줄 아는 것과, 미적 감각을 발휘하여 예쁘게 만드는 것은 다른 이야기이기 때문에, 현업에서는 미리 완성된 부트스트랩을 가져다 쓰는 경우가 많습니다.)
- 17) bootstrap - 시작 템플릿
- 아래 파일을 복사해서 새로운 HTML 파일을 하나 만들고, 시작해보아요
👉 남이 미리 작성한 CSS를 내 HTML 파일에 적용한다는 점에서, bootstrap 적용은 CSS 파일 분리와 원리가 동일합니다. (아까 튜터님의 시범을 기억하시죠!)
다만, CSS의 파일이 인터넷 어딘가에 있다는 점이 다를 뿐입니다.
- **[코드스니펫] 부트스트랩 시작 템플릿**
```html
스파르타코딩클럽 | 부트스트랩 연습하기
이걸로 시작해보죠! ```
~ 자리 아래 코드를 넣어봅니다. - **[코드스니펫] 부트스트랩 컴포넌트 4.0** ```html https://getbootstrap.com/docs/4.0/components/alerts/ ``` 👉 예쁜 버튼이 생겼습니다! (부트스트랩이 미리 css를 작성해뒀기 때문) 즉, btn 과, btn-primary 라는 class를 미리 정의해둔 것이죠
- 아래 파일을 복사해서 새로운 HTML 파일을 하나 만들고, 시작해보아요
👉 남이 미리 작성한 CSS를 내 HTML 파일에 적용한다는 점에서, bootstrap 적용은 CSS 파일 분리와 원리가 동일합니다. (아까 튜터님의 시범을 기억하시죠!)
다만, CSS의 파일이 인터넷 어딘가에 있다는 점이 다를 뿐입니다.
- **[코드스니펫] 부트스트랩 시작 템플릿**
```html
스파르타코딩클럽 | 부트스트랩 연습하기
09. Bootstrap(부트스트랩)을 써보자!
- 18) bootstrap - 함께 만들어보기
- 아래와 같은 모양을 함께 만들어볼까요?
- [코드스니펫] 나홀로메모장뼈대 나홀로메모장뼈대.html
- [코드스니펫] 나홀로메모장뼈대 나홀로메모장뼈대.html
- 전체 코드
- [코드스니펫] 나홀로메모장뼈대(완성)
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> <style> .wrap { width: 900px; margin: auto; } </style> </head> <body> <div class="wrap"> <div class="jumbotron"> <h1 class="display-4">Hello, world!</h1> <p class="lead">This is a simple hero unit, a simple jumbotron-style component for calling extra attention to featured content or information.</p> <hr class="my-4"> <p>It uses utility classes for typography and spacing to space content out within the larger container.</p> <p class="lead"> <a class="btn btn-primary btn-lg" href="#" role="button">Learn more</a> </p> </div> <div class="card-columns"> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">Card title that wraps to a new line</h5> <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">Card title that wraps to a new line</h5> <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">Card title that wraps to a new line</h5> <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">Card title that wraps to a new line</h5> <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">Card title that wraps to a new line</h5> <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <h5 class="card-title">Card title that wraps to a new line</h5> <p class="card-text">This is a longer card with supporting text below as a natural lead-in to additional content. This content is a little bit longer.</p> </div> </div> </div> </div> </body> </html>
- [코드스니펫] 나홀로메모장뼈대(완성)
- 아래와 같은 모양을 함께 만들어볼까요?
10. Quiz_함께 만든 페이지를 발전시켜보세요!
- 19) ✍나홀로 메모장 뼈대 잡기(1)
- Q. 퀴즈설명: 아래 모양을 만들어보세요!
-
[코드스니펫] 나홀로메모장틀
👻 힌트:[나홀로메모장틀.html](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/d81170fb-e84c-4864-9ec8-14423cb51cdf/1_-___.html)
-
모든 글자는 직접 치지 말고 복사해서 붙여넣으면 금방 해결~!
-
"여기에 코멘트가 들어가죠"는
태그로 파란색 굵은 글씨가 하나 더 추가됐고,
-
"여기 기사제목이 들어가죠"는 태그로 하이퍼링크가 걸렸네요!
-
- A. 함께하기(완성본)
- [코드스니펫] 나홀로메모장틀(완성)
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet"> <style> * { font-family: 'Jua', sans-serif; } .wrap { width: 900px; margin: auto; } .comment { color: blue; font-weight: bold; } </style> </head> <body> <div class="wrap"> <div class="jumbotron"> <h1 class="display-4">나홀로 링크 메모장!</h1> <p class="lead">중요한 링크를 저장해두고, 나중에 볼 수 있는 공간입니다</p> <hr class="my-4"> <p class="lead"> <a class="btn btn-primary btn-lg" href="#" role="button">포스팅박스 열기</a> </p> </div> <div class="card-columns"> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://image.theminda.com/data/tg/image/tour/middle/201905/c8aee858ed6e8c34010fe3c4ae9be8a5.jpg" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com/" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> </div> </div> </body> </html>
- [코드스니펫] 나홀로메모장틀(완성)
- Q. 퀴즈설명: 아래 모양을 만들어보세요!
11. Quiz_나홀로메모장의 포스팅박스를 완성하기!
- 20) ✍포스팅 박스를 넣어보기(2)
- Q. 퀴즈설명: 아래 모양을 만들어보세요!
-
[코드스니펫] 포스팅박스까지
👻 힌트:[**포스팅박스까지**](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9371d022-dd33-4350-ad3b-f4623fbea5e7/1-__.html)
-
부트스트랩 컴포넌트 페이지에서 forms를 참고하세요!
-
가운데로 가져오려면 똑같이 width, margin를 활용합니다.
-
경계선을 둥글게 그리는 방법을 찾기 위해 다음을 구글링해봅니다.
- border
- border-radius
-
경계선과 내부 요소의 간격은 padding으로 조절하는게 좋습니다.
👉 참고! 일단 해두기!복사해오는 내용 중 form 태그(
...)가 있다면,
form태그를 div 태그(...)로 바꿔주세요!→
태그 안에 버튼이 있으면, 자동으로 새로고침이 됩니다.
→ 우리는 이 기능을 안 쓸거라, 추후 충돌 방지를 위해 미리 바꿔두는 것입니다!
-
- A. 함께하기(완성본)
- [코드스니펫] 포스팅박스까지(완성)
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet"> <style> * { font-family: 'Jua', sans-serif; } .wrap { margin: auto; width: 900px; } .comment { font-weight: bold; color: blue; } .posting-box { margin: 10px auto 30px auto; width:500px; border: 3px solid black; border-radius: 5px; padding: 25px; } </style> </head> <body> <div class="wrap"> <div class="jumbotron"> <h1 class="display-4">나홀로 링크 메모장!</h1> <p class="lead">중요한 링크를 저장해두고, 나중에 볼 수 있는 공간입니다</p> <hr class="my-4"> <p class="lead"> <a class="btn btn-primary btn-lg" href="#" role="button">포스팅박스 열기</a> </p> </div> <div class="posting-box"> <div class="form-group"> <label for="exampleInputEmail1">아티클 URL</label> <input type="email" class="form-control" aria-describedby="emailHelp" placeholder=""> </div> <div class="form-group"> <label for="exampleInputPassword1">간단 코멘트</label> <input type="password" class="form-control" placeholder=""> </div> <button type="submit" class="btn btn-primary">기사 저장</button> </div> <div class="card-columns"> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> </div> </div> </body> </html>
- [코드스니펫] 포스팅박스까지(완성)
- Q. 퀴즈설명: 아래 모양을 만들어보세요!
12. Javascript 맛보기
- 21) 자바스크립트란?
- 프로그래밍 언어 중 하나로, 브라우저가 알아들을 수 있는 언어입니다. 👉 이론 설명 때, 클라이언트가 서버에 요청하면, 서버가 클라이언트에게 HTML+CSS+Javascript를 준다고 했던 것, 기억하시나요? 👉 [잠깐 상식!] Q. 왜 브라우저는 Javascript만 알아들어요? HTML안에다 파이썬, Java 같은 언어를 써서 주면 안되나요? A. 불가능한 이야기는 아닙니다. 다만, 이 "역사적인 이유 & 이미 만들어진 표준"이기 때문에, 모든 브라우저는 기본적으로 Javascript를 알아듣게 설계되어있고, 모든 웹서버는 HTML+CSS+Javascript를 주게 되어있죠.
- Java와 Javascript는 어떤 차이가 있나요? 👉 인도와 인도네시아.. 바다와 바다코끼리.. 아무 관련 없습니다.
- 22) 자바스크립트 기초
- 처음 프로그래밍 언어를 배우면 생소한 부분도 존재하기에, 다음 주에 본격적으로 하기 전에! 오늘 먼저 맛보기를 해보겠습니다. 👉 일단 따라쓰기!를 통해, 자바스크립트가 HTML과 어떻게 연동되는지 알아보겠습니다.
- 23) 자바스크립트 - HTML 연결. 버튼을 클릭하면 경고창이 뜨게하기
- 전반부 코드가 없는 분들 - 여기서 시작하세요!
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet"> <style> * { font-family: 'Jua', sans-serif; } .wrap { margin: auto; width: 900px; } .comment { font-weight: bold; color: blue; } .posting-box { margin: 10px auto 30px auto; width:500px; border: 3px solid black; border-radius: 5px; padding: 25px; } </style> </head> <body> <div class="wrap"> <div class="jumbotron"> <h1 class="display-4">나홀로 링크 메모장!</h1> <p class="lead">중요한 링크를 저장해두고, 나중에 볼 수 있는 공간입니다</p> <hr class="my-4"> <p class="lead"> <a class="btn btn-primary btn-lg" href="#" role="button">포스팅박스 열기</a> </p> </div> <div class="posting-box"> <div class="form-group"> <label for="exampleInputEmail1">아티클 URL</label> <input type="email" class="form-control" aria-describedby="emailHelp" placeholder=""> </div> <div class="form-group"> <label for="exampleInputPassword1">간단 코멘트</label> <input type="password" class="form-control" placeholder=""> </div> <button type="submit" class="btn btn-primary">기사 저장</button> </div> <div class="card-columns"> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> </div> </div> </body> </html>
- 함수를 만들어두기
👉 ~ 안에 로 공간을 만들어 작성합니다. 내에 자바스크립트를 작성하는 것이죠 아래 코드를 통해 간단한 사용방법을 알아봅니다. ![https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9f115847-3c27-4b00-98bc-26528d299d0c/Untitled.png](https://s3-us-west-2.amazonaws.com/secure.notion-static.com/9f115847-3c27-4b00-98bc-26528d299d0c/Untitled.png) funfunction hey(){ alert('안녕!'); }
- 버튼에 함수를 연결하기. 버튼을 누르면 함수가 불립니다.
<button onclick="hey()" type="button" class="btn btn-primary">기사저장</button>
- 완성본
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet"> <style> * { font-family: 'Jua', sans-serif; } .wrap { margin: auto; width: 900px; } .comment { font-weight: bold; color: blue; } .posting-box { margin: 10px auto 30px auto; width:500px; border: 3px solid black; border-radius: 5px; padding: 25px; } </style> <script> function hey(){ alert('안녕!'); } </script> </head> <body> <div class="wrap"> <div class="jumbotron"> <h1 class="display-4">나홀로 링크 메모장!</h1> <p class="lead">중요한 링크를 저장해두고, 나중에 볼 수 있는 공간입니다</p> <hr class="my-4"> <p class="lead"> <a onclick="hey()" class="btn btn-primary btn-lg" href="#" role="button">포스팅박스 열기</a> </p> </div> <div class="posting-box"> <div class="form-group"> <label for="exampleInputEmail1">아티클 URL</label> <input type="email" class="form-control" aria-describedby="emailHelp" placeholder=""> </div> <div class="form-group"> <label for="exampleInputPassword1">간단 코멘트</label> <input type="password" class="form-control" placeholder=""> </div> <button type="submit" class="btn btn-primary">기사 저장</button> </div> <div class="card-columns"> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> <div class="card"> <img class="card-img-top" src="https://d2ur7st6jjikze.cloudfront.net/offer_photos/29590/185689_medium_1525763241.jpg?1525763241" alt="Card image cap"> <div class="card-body"> <a href="http://naver.com" class="card-title">여기 기사 제목이 들어가죠</a> <p class="card-text">기사의 요약 내용이 들어갑니다. 동해물과 백두산이 마르고 닳도록 하느님이 보우하사 우리나라만세 무궁화 삼천리 화려강산...</p> <p class="card-text comment">여기에 코멘트가 들어갑니다.</p> </div> </div> </div> </div> </body> </html>
- 전반부 코드가 없는 분들 - 여기서 시작하세요!
13. Javascript 기초 문법 배우기(1)
- 24) 본격적으로 문법을 배워볼까요? 👉 1주차엔 문법을 배우고, 2주차에 이리저리 연습을 많~이 할거예요! - [크롬 개발자도구]를 열어서, console 탭에 작성합니다! 👉 그냥 쉽게, "마우스 오른쪽 클릭 → 검사 → console"도 가능! 크롬 개발자도구 콘솔창은 어떤 의미? > 띄워놓은 페이지에서 빠르게 자바스크립트를 테스트해볼 수 있게, 개발자들을 위해 만들어둔 도구입니다. 새로고침하면 모두 사라진다는 사실! - 윈도우: F12 - 맥: alt(option) + command + i - console.log(변수) ```jsx -- console.log(변수) 는, 콘솔 창에 괄호 안의 값을 출력해줍니다. 개발자가 결과값을 보기 편하도록! console.log(변수1,변수2) 로 여러 변수를 한번에 출력할 수도 있어요. 아래를 복사해서 붙여넣어보세요. console.log("Hello World!"); ``` - 변수 & 기본연산 - 변수 대입( a = 2 )의 의미: "오른쪽에 있는 것을 왼쪽에 넣는 것!" (2를 a라는 변수에 넣는다) - let으로 변수를 선언합니다. ```jsx let num = 20 num = 'Bob' // 변수는 값을 저장하는 박스예요. // 한 번 선언했으면, 다시 선언하지 않고 값을 넣습니다. ``` - 사칙연산, 그리고 문자열 더하기가 기본적으로 가능합니다. ```jsx let a = 1 let b = 2 a+b // 3 a/b // 0.5 let first = 'Bob' let last = 'Lee' first+last // 'BobLee' first+' '+last // 'Bob Lee' first+a // Bob1 -> 문자+숫자를 하면, 숫자를 문자로 바꾼 뒤 수행합니다. ``` - 변수명은 아무렇게나? ```jsx let first_name = 'bob' // snake case라고 합니다. 또는, let firstName = 'bob' // camel case라고 합니다. 회사마다 규칙이 있죠. 과 같이, 쉽게 알아볼 수 있게 쓰는 게 중요합니다. 다른 특수문자 또는 띄워쓰기는 불가능합니다! ``` - 리스트 & 딕셔너리 - 리스트: 순서를 지켜서 가지고 있는 형태입니다. ```jsx let a_list = [] // 리스트를 선언. 변수 이름은 역시 아무렇게나 가능! // 또는, let b_list = [1,2,'hey',3] // 로 선언 가능 b_list[1] // 2 를 출력 b_list[2] // 'hey'를 출력 // 리스트에 요소 넣기 b_list.push('헤이') b_list // [1, 2, "hey", 3, "헤이"] 를 출력 // 리스트의 길이 구하기 b_list.length // 5를 출력 ``` - 딕셔너리: 키(key)-밸류(value) 값의 묶음 ```jsx let a_dict = {} // 딕셔너리 선언. 변수 이름은 역시 아무렇게나 가능! // 또는, let b_dict = {'name':'Bob','age':21} // 로 선언 가능 b_dict['name'] // 'Bob'을 출력 b_dict['age'] // 21을 출력 b_dict['height'] = 180 // 딕셔너리에 키:밸류 넣기 b_dict // {name: "Bob", age: 21, height: 180}을 출력 ``` - 리스트와 딕셔너리의 조합 ```jsx names = [{'name':'bob','age':20},{'name':'carry','age':38}] // names[0]['name']의 값은? 'bob' // names[1]['name']의 값은? 'carry' new_name = {'name':'john','age':7} names.push(new_name) // names의 값은? [{'name':'bob','age':20},{'name':'carry','age':38},{'name':'john','age':7}] // names[2]['name']의 값은? 'john' ``` - 왜 필요할까요? 💡 **순서를 표시할 수 있고, 정보를 묶을 수 있습니다.** 앞에서 언급한 <스파르타과일가게>가 정말 잘 되어서 전국에서 손님이 찾아오고 있습니다. 대기표를 작성하기 위해서 온 순서대로 이름, 휴대폰 번호를 적도록 하였는데요. 변수만을 사용한 모습은 다음과 같습니다. let customer_1_name = '김스파'; let customer_1_phone = '010-1234-1234'; let customer_2_name = '박르탄'; let customer_2_phone = '010-4321-4321'; ...(알아보기 힘듭니다.) 👉딕셔너리를 활용한다면 다음과 같이 고객 별로 정보를 묶을 수 있습니다. let customer_1 = {'name': '김스파', 'phone': '010-1234-1234'}; let customer_2 = {'name': '박르탄', 'phone': '010-4321-4321'}; 👉그리고 순서를 나타내기 위해 리스트를 사용하면, 이렇게나 깔끔해집니다. let customer = [ {'name': '김스파', 'phone': '010-1234-1234'}, {'name': '박르탄', 'phone': '010-4321-4321'} ] ✅보기에도 깔끔해지고, 다루기도 쉬워지고, 고객이 새로 한 명 더 오더라도 .push 함수를 이용해 간단하게 대응할 수 있습니다. - 기본 함수들 - 사칙연산 외에도, 기본적으로 제공하는 여러 함수들이 존재합니다. 👉 왠지 이건 있을 것 같은데?(예 - 특정 문자를 바꾸고 싶다 등) 싶으면 직접 만들지 말고 **구글에 먼저 찾아보세요!** ```jsx **예를 들면, '나눗셈의나머지'를 구하고 싶은 경우** let a = 20 let b = 7 a % b = 6 ``` ```jsx **또, 모든 알파벳을 대문자로 바꾸고 싶은 경우** let myname = 'spartacodingclub' myname.toUpperCase() // SPARTACODINGCLUB ``` ```jsx **또, 특정 문자로 문자열을 나누고 싶은 경우** let myemail = '[email protected]' let result = myemail.split('@') // ['sparta','gmail.com'] result[0] // sparta result[1] // gmail.com let result2 = result[1].split('.') // ['gmail','com'] result2[0] // gmail -> 우리가 알고 싶었던 것! result2[1] // com myemail.split('@')[1].split('.')[0] // gmail -> 간단하게 쓸 수도 있다! ``` ```jsx **특정 문자로 나누고 싶은 경우 2** let txt = '서울시-마포구-망원동' ****let names = txt.split('-'); // ['서울시','마포구','망원동'] **특정 문자로 합치고 싶은 경우** let result = names.join('>'); // '서울시>마포구>망원동' (즉, 문자열 바꾸기!) ```
14. Javascript 기초 문법 배우기(2)
- 25) 더 본격적으로 문법을 배워볼까요!
- 함수
- 기본 생김새
// 만들기 function 함수이름(필요한 변수들) { 내릴 명령들을 순차적으로 작성 } // 사용하기 함수이름(필요한 변수들);
- 예시
// 두 숫자를 입력받으면 더한 결과를 돌려주는 함수 function sum(num1, num2) { console.log('num1: ', num1, ', num2: ', num2); return num1 + num2; } sum(3, 5); // 8 sum(4, -1); // 3
- 기본 생김새
- 조건문
- 20 보다 작으면 작다고, 크면 크다고 알려주는 함수
function is_adult(age){ if(age > 20){ alert('성인이에요') } else { alert('청소년이에요') } } is_adult(25)
- if, else if, else if, else if else
function is_adult(age){ if(age > 20){ alert('성인이에요') } else if (age > 10) { alert('청소년이에요') } else { alert('10살 이하!') } } is_adult(12)
- AND 조건과 OR 조건!
// AND 조건은 이렇게 function is_adult(age, sex){ if(age > 20 && sex == '여'){ alert('성인 여성') } else if (age > 20 && sex == '남') { alert('성인 남성') } else { alert('청소년이에요') } } // 참고: OR 조건은 이렇게 function is_adult(age, sex){ if (age > 65 || age < 10) { alert('탑승하실 수 없습니다') } else if(age > 20 && sex == '여'){ alert('성인 여성') } else if (age > 20 && sex == '남') { alert('성인 남성') } else { alert('청소년이에요') } } is_adult(25,'남')
- 20 보다 작으면 작다고, 크면 크다고 알려주는 함수
- 반복문
- 예를 들어 0부터 99까지 출력해야 하는 상황이라면!
console.log(0) console.log(1) console.log(2) console.log(3) console.log(4) console.log(5) ... console.log(99) // 이렇게 쓰기엔 무리가 있겠죠? 그래서, 반복문이라는 것이 존재합니다!
- 반복문을 이용하면 아래와 같이 단 세줄로, 출력할 수 있습니다.
for (let i = 0; i < 100; i++) { console.log(i); }
for (1. 시작조건; 2. 반복조건; 3. 더하기) { 4. 매번실행 } 1 -> 2체크하고 -> (괜찮으면) -> 4 -> 3 -> 2체크하고 -> (괜찮으면) -> 4 -> 3 -> 2체크하고 -> (괜찮으면) -> 4 -> 3 -> 2체크하고 -> (괜찮으면) -> 4 -> 3 와 같은 순서로 실행됩니다. i가 증가하다가 반복조건에 맞지 않으면, 반복을 종료하고 빠져나옵니다.
- 그러나 위처럼 숫자를 출력하는 경우보다는, 반복문은 주로 리스트와 함께 쓰입니다.
아래 예시를 볼까요? 일단 아래를 복사 붙여넣기 하고, 함께 코딩해볼게요
- [코드스니펫] 반복문 예제1```jsx let people = ['철수','영희','민수','형준','기남','동희'] ``` ```jsx let people = ['철수','영희','민수','형준','기남','동희'] // 이렇게 하면 리스트의 모든 원소를 한번에 출력할 수 있겠죠? // i가 1씩 증가하면서, people의 원소를 차례대로 불러올 수 있게 됩니다. for (let i = 0 ; i < people.length ; i++) { console.log(people[i]) } ```
- 리스트도 그냥 리스트가 아닙니다! 딕셔너리가 들어간 리스트와 찰떡이죠
다시 아래를 복사 붙여넣기 해볼까요?
- [코드스니펫] 반복문 예제2```jsx let scores = [ {'name':'철수', 'score':90}, {'name':'영희', 'score':85}, {'name':'민수', 'score':70}, {'name':'형준', 'score':50}, {'name':'기남', 'score':68}, {'name':'동희', 'score':30}, ] ``` ```jsx let scores = [ {'name':'철수', 'score':90}, {'name':'영희', 'score':85}, {'name':'민수', 'score':70}, {'name':'형준', 'score':50}, {'name':'기남', 'score':68}, {'name':'동희', 'score':30}, ] for (let i = 0 ; i < scores.length ; i++) { console.log(scores[i]); } // 이렇게 하면 리스트 내의 딕셔너리를 하나씩 출력할 수 있고, ``` ```jsx for (let i = 0 ; i < scores.length ; i++) { if (scores[i]['score'] < 70) { console.log(scores[i]['name']); } } // 이렇게 하면 점수가 70점 미만인 사람들의 이름만 출력할 수도 있습니다. ```
- 예를 들어 0부터 99까지 출력해야 하는 상황이라면!
- 함수
15. Javascript 연습하기
- 26) 전형적인 패턴 함께 연습하기 💡 튜터 님의 설명을 통해 이해해보겠습니다. 이번 시간에는 따라치기보다 원리를 이해하는데 집중해보세요! - (1) 미세먼지(IDEX_MVL)의 값이 40 미만인 구 이름(MSRSTE_NM)과 값을 출력하기 - **[코드스니펫] 서울시 미세먼지 값** ```jsx let mise_list = [ { MSRDT: "201912052100", MSRRGN_NM: "도심권", MSRSTE_NM: "중구", PM10: 22, PM25: 14, O3: 0.018, NO2: 0.015, CO: 0.4, SO2: 0.002, IDEX_NM: "좋음", IDEX_MVL: 31, ARPLT_MAIN: "O3", }, { MSRDT: "201912052100", MSRRGN_NM: "도심권", MSRSTE_NM: "종로구", PM10: 24, PM25: 18, O3: 0.013, NO2: 0.016, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 39, ARPLT_MAIN: "PM25", }, { MSRDT: "201912052100", MSRRGN_NM: "도심권", MSRSTE_NM: "용산구", PM10: 0, PM25: 15, O3: 0.012, NO2: 0.027, CO: 0.4, SO2: 0.003, IDEX_NM: "점검중", IDEX_MVL: -99, ARPLT_MAIN: "점검중", }, { MSRDT: "201912052100", MSRRGN_NM: "서북권", MSRSTE_NM: "은평구", PM10: 36, PM25: 14, O3: 0.019, NO2: 0.018, CO: 0.5, SO2: 0.005, IDEX_NM: "좋음", IDEX_MVL: 42, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "서북권", MSRSTE_NM: "서대문구", PM10: 28, PM25: 9, O3: 0.018, NO2: 0.015, CO: 0.6, SO2: 0.004, IDEX_NM: "좋음", IDEX_MVL: 37, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "서북권", MSRSTE_NM: "마포구", PM10: 26, PM25: 8, O3: 0.012, NO2: 0.021, CO: 0.5, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 36, ARPLT_MAIN: "NO2", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "광진구", PM10: 17, PM25: 9, O3: 0.018, NO2: 0.016, CO: 0.6, SO2: 0.001, IDEX_NM: "좋음", IDEX_MVL: 31, ARPLT_MAIN: "O3", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "성동구", PM10: 21, PM25: 12, O3: 0.018, NO2: 0.017, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 33, ARPLT_MAIN: "PM25", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "중랑구", PM10: 27, PM25: 10, O3: 0.015, NO2: 0.019, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 34, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "동대문구", PM10: 26, PM25: 9, O3: 0.016, NO2: 0.017, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 34, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "성북구", PM10: 27, PM25: 8, O3: 0.022, NO2: 0.014, CO: 0.5, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 37, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "도봉구", PM10: 25, PM25: 12, O3: 0.024, NO2: 0.011, CO: 0.3, SO2: 0.002, IDEX_NM: "좋음", IDEX_MVL: 41, ARPLT_MAIN: "O3", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "강북구", PM10: 30, PM25: 15, O3: 0.022, NO2: 0.02, CO: 0.4, SO2: 0.002, IDEX_NM: "좋음", IDEX_MVL: 39, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "동북권", MSRSTE_NM: "노원구", PM10: 21, PM25: 14, O3: 0.017, NO2: 0.016, CO: 0.4, SO2: 0.004, IDEX_NM: "좋음", IDEX_MVL: 36, ARPLT_MAIN: "PM25", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "강서구", PM10: 36, PM25: 16, O3: 0.021, NO2: 0.013, CO: 0.4, SO2: 0.004, IDEX_NM: "좋음", IDEX_MVL: 42, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "구로구", PM10: 23, PM25: 10, O3: 0.022, NO2: 0.016, CO: 0.3, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 37, ARPLT_MAIN: "O3", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "영등포구", PM10: 29, PM25: 15, O3: 0.01, NO2: 0.022, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 41, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "동작구", PM10: 29, PM25: 15, O3: 0.012, NO2: 0.023, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 41, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "관악구", PM10: 27, PM25: 12, O3: 0.012, NO2: 0.022, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 37, ARPLT_MAIN: "NO2", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "금천구", PM10: 25, PM25: 15, O3: 0.015, NO2: 0.02, CO: 0.4, SO2: 0.004, IDEX_NM: "좋음", IDEX_MVL: 43, ARPLT_MAIN: "PM25", }, { MSRDT: "201912052100", MSRRGN_NM: "서남권", MSRSTE_NM: "양천구", PM10: 0, PM25: 14, O3: 0.016, NO2: 0.017, CO: 0.4, SO2: 0.003, IDEX_NM: "점검중", IDEX_MVL: -99, ARPLT_MAIN: "점검중", }, { MSRDT: "201912052100", MSRRGN_NM: "동남권", MSRSTE_NM: "강남구", PM10: 31, PM25: 16, O3: 0.018, NO2: 0.018, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 39, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "동남권", MSRSTE_NM: "서초구", PM10: 34, PM25: 13, O3: 0.024, NO2: 0.019, CO: 0.3, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 41, ARPLT_MAIN: "PM10", }, { MSRDT: "201912052100", MSRRGN_NM: "동남권", MSRSTE_NM: "송파구", PM10: 25, PM25: 6, O3: 0.014, NO2: 0.025, CO: 0.4, SO2: 0.003, IDEX_NM: "좋음", IDEX_MVL: 42, ARPLT_MAIN: "NO2", }, { MSRDT: "201912052100", MSRRGN_NM: "동남권", MSRSTE_NM: "강동구", PM10: 24, PM25: 14, O3: 0.016, NO2: 0.02, CO: 0.4, SO2: 0.002, IDEX_NM: "좋음", IDEX_MVL: 39, ARPLT_MAIN: "PM25", }, ]; ``` ```jsx for (let i = 0; i < mise_list.length; i++) { let mise = mise_list[i]; if (mise["IDEX_MVL"] < 40) { let gu_name = mise["MSRSTE_NM"]; let gu_mise = mise["IDEX_MVL"]; console.log("40보다 작은 구: " + gu_name + ", " + gu_mise); } } ``` 40 이하든, 35 이하든 유용하게 쓸 수 있게, 함수로 만들어볼까요? ```jsx function show_gus(index) { for (let i = 0; i < mise_list.length; i++) { let mise = mise_list[i]; if (mise["IDEX_MVL"] < index) { let gu_name = mise["MSRSTE_NM"]; let gu_mise = mise["IDEX_MVL"]; console.log(index + "보다 작은 구: " + gu_name + ", " + gu_mise); } } } // 이러면 아래와 같은 것이 가능! show_gus(40) // 40보다 작은 구만 출력! show_gus(35) // 35보다 작은 구만 출력! ``` - (2) 자전거(parkingBikeTotCnt)가 5개 이하인 정류장의 이름을 출력하기 - **[코드스니펫] 서울시 따릉이 현황** ```jsx let bikes = [ { rackTotCnt: "7", stationName: "101. (구)합정동 주민센터", parkingBikeTotCnt: "4", shared: "14", stationLatitude: "37.54956055", stationLongitude: "126.90575409", stationId: "ST-3", }, { rackTotCnt: "22", stationName: "102. 망원역 1번출구 앞", parkingBikeTotCnt: "17", shared: "5", stationLatitude: "37.55564880", stationLongitude: "126.91062927", stationId: "ST-4", }, { rackTotCnt: "16", stationName: "103. 망원역 2번출구 앞", parkingBikeTotCnt: "11", shared: "13", stationLatitude: "37.55495071", stationLongitude: "126.91083527", stationId: "ST-5", }, { rackTotCnt: "15", stationName: "104. 합정역 1번출구 앞", parkingBikeTotCnt: "11", shared: "0", stationLatitude: "37.55062866", stationLongitude: "126.91498566", stationId: "ST-6", }, { rackTotCnt: "7", stationName: "105. 합정역 5번출구 앞", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.55000687", stationLongitude: "126.91482544", stationId: "ST-7", }, { rackTotCnt: "12", stationName: "106. 합정역 7번출구 앞", parkingBikeTotCnt: "8", shared: "8", stationLatitude: "37.54864502", stationLongitude: "126.91282654", stationId: "ST-8", }, { rackTotCnt: "7", stationName: "107. 신한은행 서교동금융센터점 앞", parkingBikeTotCnt: "5", shared: "14", stationLatitude: "37.55751038", stationLongitude: "126.91850281", stationId: "ST-9", }, { rackTotCnt: "12", stationName: "108. 서교동 사거리", parkingBikeTotCnt: "9", shared: "8", stationLatitude: "37.55274582", stationLongitude: "126.91861725", stationId: "ST-10", }, { rackTotCnt: "12", stationName: "109. 제일빌딩 앞", parkingBikeTotCnt: "8", shared: "33", stationLatitude: "37.54769135", stationLongitude: "126.91998291", stationId: "ST-11", }, { rackTotCnt: "22", stationName: "110. 사천교", parkingBikeTotCnt: "16", shared: "5", stationLatitude: "37.56819916", stationLongitude: "126.91784668", stationId: "ST-13", }, { rackTotCnt: "12", stationName: "111. 상수역 2번출구 앞", parkingBikeTotCnt: "9", shared: "25", stationLatitude: "37.54787064", stationLongitude: "126.92353058", stationId: "ST-15", }, { rackTotCnt: "12", stationName: "112. 극동방송국 앞", parkingBikeTotCnt: "8", shared: "25", stationLatitude: "37.54920197", stationLongitude: "126.92320251", stationId: "ST-16", }, { rackTotCnt: "27", stationName: "113. 홍대입구역 2번출구 앞", parkingBikeTotCnt: "24", shared: "22", stationLatitude: "37.55749893", stationLongitude: "126.92380524", stationId: "ST-18", }, { rackTotCnt: "17", stationName: "114. 홍대입구역 8번출구 앞", parkingBikeTotCnt: "14", shared: "129", stationLatitude: "37.55706024", stationLongitude: "126.92442322", stationId: "ST-20", }, { rackTotCnt: "17", stationName: "115. 사루비아 빌딩 앞", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.55893326", stationLongitude: "126.92711639", stationId: "ST-12", }, { rackTotCnt: "7", stationName: "116. 일진아이윌아파트 옆", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.56454086", stationLongitude: "126.92707062", stationId: "ST-14", }, { rackTotCnt: "27", stationName: "117. 홍은사거리", parkingBikeTotCnt: "9", shared: "0", stationLatitude: "37.59115982", stationLongitude: "126.94132996", stationId: "ST-17", }, { rackTotCnt: "12", stationName: "118. 광흥창역 2번출구 앞", parkingBikeTotCnt: "9", shared: "67", stationLatitude: "37.54773331", stationLongitude: "126.93176270", stationId: "ST-19", }, { rackTotCnt: "12", stationName: "119. 서강나루 공원", parkingBikeTotCnt: "9", shared: "17", stationLatitude: "37.54528427", stationLongitude: "126.93105316", stationId: "ST-21", }, { rackTotCnt: "7", stationName: "120. 신수동 사거리", parkingBikeTotCnt: "3", shared: "0", stationLatitude: "37.54524231", stationLongitude: "126.93411255", stationId: "ST-22", }, { rackTotCnt: "17", stationName: "121. 마포소방서 앞", parkingBikeTotCnt: "11", shared: "24", stationLatitude: "37.54976654", stationLongitude: "126.93317413", stationId: "ST-23", }, { rackTotCnt: "12", stationName: "122. 신성기사식당 앞", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.54745865", stationLongitude: "126.93837738", stationId: "ST-24", }, { rackTotCnt: "22", stationName: "123. 문화촌 공원", parkingBikeTotCnt: "7", shared: "0", stationLatitude: "37.59432983", stationLongitude: "126.94738770", stationId: "ST-25", }, { rackTotCnt: "22", stationName: "124. 서강대 정문 건너편", parkingBikeTotCnt: "7", shared: "0", stationLatitude: "37.55113983", stationLongitude: "126.93698883", stationId: "ST-26", }, { rackTotCnt: "17", stationName: "125. 서강대 남문 옆", parkingBikeTotCnt: "13", shared: "0", stationLatitude: "37.54948425", stationLongitude: "126.93894958", stationId: "ST-27", }, { rackTotCnt: "22", stationName: "126. 서강대 후문 옆", parkingBikeTotCnt: "17", shared: "5", stationLatitude: "37.55041122", stationLongitude: "126.94384766", stationId: "ST-28", }, { rackTotCnt: "22", stationName: "128. 신촌역(2호선) 1번출구 옆", parkingBikeTotCnt: "14", shared: "5", stationLatitude: "37.55549622", stationLongitude: "126.93634033", stationId: "ST-30", }, { rackTotCnt: "17", stationName: "129. 신촌역(2호선) 6번출구 옆", parkingBikeTotCnt: "8", shared: "0", stationLatitude: "37.55505371", stationLongitude: "126.93756866", stationId: "ST-31", }, { rackTotCnt: "12", stationName: "130. 신촌역(2호선) 7번출구 앞", parkingBikeTotCnt: "8", shared: "17", stationLatitude: "37.55485916", stationLongitude: "126.93615723", stationId: "ST-32", }, { rackTotCnt: "25", stationName: "131. 증산2교", parkingBikeTotCnt: "17", shared: "4", stationLatitude: "37.58417130", stationLongitude: "126.91110229", stationId: "ST-33", }, { rackTotCnt: "17", stationName: "133. 해담는다리", parkingBikeTotCnt: "11", shared: "12", stationLatitude: "37.58203125", stationLongitude: "126.90899658", stationId: "ST-35", }, { rackTotCnt: "10", stationName: "134. 연세로 명물길", parkingBikeTotCnt: "6", shared: "20", stationLatitude: "37.55789185", stationLongitude: "126.93807983", stationId: "ST-36", }, { rackTotCnt: "12", stationName: "135. 명물길 원형무대 앞", parkingBikeTotCnt: "10", shared: "0", stationLatitude: "37.55910110", stationLongitude: "126.93917847", stationId: "ST-37", }, { rackTotCnt: "9", stationName: "136. 대흥동 주민센터", parkingBikeTotCnt: "1", shared: "11", stationLatitude: "37.55600357", stationLongitude: "126.94229889", stationId: "ST-38", }, { rackTotCnt: "12", stationName: "137. NH농협 신촌지점 앞", parkingBikeTotCnt: "4", shared: "0", stationLatitude: "37.55681229", stationLongitude: "126.94318390", stationId: "ST-39", }, { rackTotCnt: "12", stationName: "138. 신촌동 제1공영주차장 앞", parkingBikeTotCnt: "7", shared: "25", stationLatitude: "37.55917740", stationLongitude: "126.93452454", stationId: "ST-40", }, { rackTotCnt: "15", stationName: "139. 연세대 정문 건너편", parkingBikeTotCnt: "13", shared: "7", stationLatitude: "37.55979538", stationLongitude: "126.93447876", stationId: "ST-43", }, { rackTotCnt: "22", stationName: "140. 이화여대 후문", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.56000900", stationLongitude: "126.94073486", stationId: "ST-41", }, { rackTotCnt: "22", stationName: "141. 연대 대운동장 옆", parkingBikeTotCnt: "13", shared: "5", stationLatitude: "37.56238174", stationLongitude: "126.93264771", stationId: "ST-42", }, { rackTotCnt: "13", stationName: "142. 아현역 4번출구 앞", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.55720139", stationLongitude: "126.95566559", stationId: "ST-200", }, { rackTotCnt: "11", stationName: "143. 공덕역 2번출구", parkingBikeTotCnt: "7", shared: "0", stationLatitude: "37.54457855", stationLongitude: "126.95021820", stationId: "ST-201", }, { rackTotCnt: "12", stationName: "144. 공덕역 8번출구", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.54357910", stationLongitude: "126.95132446", stationId: "ST-202", }, { rackTotCnt: "11", stationName: "145. 공덕역 5번출구", parkingBikeTotCnt: "8", shared: "36", stationLatitude: "37.54425049", stationLongitude: "126.95163727", stationId: "ST-203", }, { rackTotCnt: "14", stationName: "146. 마포역 2번출구 뒤", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.53993607", stationLongitude: "126.94582367", stationId: "ST-204", }, { rackTotCnt: "9", stationName: "147. 마포역 4번출구 뒤", parkingBikeTotCnt: "4", shared: "0", stationLatitude: "37.53927231", stationLongitude: "126.94591522", stationId: "ST-205", }, { rackTotCnt: "17", stationName: "150. 서강대역 2번출구 앞", parkingBikeTotCnt: "13", shared: "65", stationLatitude: "37.55295563", stationLongitude: "126.93434143", stationId: "ST-207", }, { rackTotCnt: "12", stationName: "151. 망원1동주민센터", parkingBikeTotCnt: "11", shared: "58", stationLatitude: "37.55568695", stationLongitude: "126.90554810", stationId: "ST-208", }, { rackTotCnt: "32", stationName: "152. 마포구민체육센터 앞", parkingBikeTotCnt: "8", shared: "31", stationLatitude: "37.55661011", stationLongitude: "126.89801788", stationId: "ST-209", }, { rackTotCnt: "12", stationName: "153. 성산2교 사거리", parkingBikeTotCnt: "7", shared: "17", stationLatitude: "37.56469727", stationLongitude: "126.91261292", stationId: "ST-210", }, { rackTotCnt: "15", stationName: "154. 마포구청역 ", parkingBikeTotCnt: "9", shared: "0", stationLatitude: "37.56090927", stationLongitude: "126.90549469", stationId: "ST-211", }, { rackTotCnt: "17", stationName: "155. 가좌역1 번출구 뒤", parkingBikeTotCnt: "14", shared: "0", stationLatitude: "37.56855011", stationLongitude: "126.91451263", stationId: "ST-212", }, { rackTotCnt: "12", stationName: "156. 서울서부지방법원 앞", parkingBikeTotCnt: "9", shared: "0", stationLatitude: "37.54990387", stationLongitude: "126.95514679", stationId: "ST-213", }, { rackTotCnt: "14", stationName: "157. 애오개역 4번출구 앞", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.55300140", stationLongitude: "126.95668793", stationId: "ST-214", }, { rackTotCnt: "17", stationName: "158. 독립문 어린이 공원", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.57125854", stationLongitude: "126.96047974", stationId: "ST-215", }, { rackTotCnt: "9", stationName: "159. 이대역 4번 출구", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.55695343", stationLongitude: "126.94634247", stationId: "ST-216", }, { rackTotCnt: "22", stationName: "160. 북아현동 가구거리", parkingBikeTotCnt: "15", shared: "0", stationLatitude: "37.55754852", stationLongitude: "126.95938110", stationId: "ST-217", }, { rackTotCnt: "10", stationName: "161. 무악재역1번 출구", parkingBikeTotCnt: "0", shared: "0", stationLatitude: "37.58224487", stationLongitude: "126.95064545", stationId: "ST-218", }, { rackTotCnt: "17", stationName: "162. 봉원고가차도 밑", parkingBikeTotCnt: "8", shared: "0", stationLatitude: "37.56526947", stationLongitude: "126.94624329", stationId: "ST-219", }, { rackTotCnt: "9", stationName: "163. 명지전문대학교 정문 앞", parkingBikeTotCnt: "0", shared: "0", stationLatitude: "37.58369827", stationLongitude: "126.92496490", stationId: "ST-220", }, { rackTotCnt: "12", stationName: "164. 북가좌1동 주민센터 ", parkingBikeTotCnt: "7", shared: "25", stationLatitude: "37.57447815", stationLongitude: "126.91004944", stationId: "ST-221", }, { rackTotCnt: "22", stationName: "165. 중앙근린공원", parkingBikeTotCnt: "9", shared: "0", stationLatitude: "37.57513809", stationLongitude: "126.91394043", stationId: "ST-222", }, { rackTotCnt: "22", stationName: "166. 가재울 초등학교", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.57327652", stationLongitude: "126.91967773", stationId: "ST-223", }, { rackTotCnt: "17", stationName: "167. 연가초등학교 옆", parkingBikeTotCnt: "12", shared: "0", stationLatitude: "37.57946014", stationLongitude: "126.91712952", stationId: "ST-224", }, { rackTotCnt: "17", stationName: "169. 북가좌 삼거리", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.57300186", stationLongitude: "126.90779877", stationId: "ST-226", }, { rackTotCnt: "12", stationName: "170. 가재울 뉴타운 주유소 옆", parkingBikeTotCnt: "9", shared: "33", stationLatitude: "37.57311249", stationLongitude: "126.92244720", stationId: "ST-227", }, { rackTotCnt: "12", stationName: "171. 임광빌딩 앞", parkingBikeTotCnt: "9", shared: "8", stationLatitude: "37.56472397", stationLongitude: "126.96727753", stationId: "ST-228", }, { rackTotCnt: "10", stationName: "173. 서대문역 8번출구 앞", parkingBikeTotCnt: "4", shared: "0", stationLatitude: "37.56477737", stationLongitude: "126.96614838", stationId: "ST-230", }, { rackTotCnt: "22", stationName: "175. 홍연2교옆", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.57807159", stationLongitude: "126.93081665", stationId: "ST-231", }, { rackTotCnt: "12", stationName: "176. 명지대학교 도서관", parkingBikeTotCnt: "0", shared: "0", stationLatitude: "37.58109665", stationLongitude: "126.92402649", stationId: "ST-555", }, { rackTotCnt: "10", stationName: "177. 북가좌 초등학교", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.57767487", stationLongitude: "126.90980530", stationId: "ST-345", }, { rackTotCnt: "12", stationName: "178. 증산3교 앞", parkingBikeTotCnt: "0", shared: "0", stationLatitude: "37.57987595", stationLongitude: "126.90634918", stationId: "ST-349", }, { rackTotCnt: "17", stationName: "179. 가좌역 4번출구 앞", parkingBikeTotCnt: "14", shared: "47", stationLatitude: "37.56912231", stationLongitude: "126.91479492", stationId: "ST-232", }, { rackTotCnt: "12", stationName: "180. 충정로역 7번출구 아래", parkingBikeTotCnt: "10", shared: "8", stationLatitude: "37.55996704", stationLongitude: "126.96246338", stationId: "ST-233", }, { rackTotCnt: "17", stationName: "181. 망원초록길 입구", parkingBikeTotCnt: "9", shared: "0", stationLatitude: "37.55134201", stationLongitude: "126.90267181", stationId: "ST-339", }, { rackTotCnt: "12", stationName: "182. 망원2빗물펌프장 앞", parkingBikeTotCnt: "7", shared: "0", stationLatitude: "37.55156708", stationLongitude: "126.90284729", stationId: "ST-340", }, { rackTotCnt: "17", stationName: "183. 하늘채코오롱아파트 건너편", parkingBikeTotCnt: "10", shared: "0", stationLatitude: "37.56516647", stationLongitude: "126.91939545", stationId: "ST-341", }, { rackTotCnt: "11", stationName: "184. SK망원동주유소 건너편", parkingBikeTotCnt: "4", shared: "0", stationLatitude: "37.55894852", stationLongitude: "126.90775299", stationId: "ST-342", }, { rackTotCnt: "17", stationName: "185. 마포 신수공원 앞", parkingBikeTotCnt: "5", shared: "0", stationLatitude: "37.54254532", stationLongitude: "126.93429565", stationId: "ST-343", }, { rackTotCnt: "42", stationName: "186. 월드컵공원", parkingBikeTotCnt: "22", shared: "10", stationLatitude: "37.56396484", stationLongitude: "126.89820862", stationId: "ST-344", }, { rackTotCnt: "12", stationName: "188. 홍은동 정원여중 입구", parkingBikeTotCnt: "2", shared: "0", stationLatitude: "37.58638763", stationLongitude: "126.93512726", stationId: "ST-346", }, { rackTotCnt: "12", stationName: "191. 서우빌딩(바른학원)", parkingBikeTotCnt: "6", shared: "0", stationLatitude: "37.57889175", stationLongitude: "126.91073608", stationId: "ST-347", }, { rackTotCnt: "12", stationName: "192. 연서어린이공원", parkingBikeTotCnt: "0", shared: "0", stationLatitude: "37.57222748", stationLongitude: "126.92306519", stationId: "ST-348", }, { rackTotCnt: "12", stationName: "194. 증산교 앞", parkingBikeTotCnt: "2", shared: "0", stationLatitude: "37.57731628", stationLongitude: "126.90296936", stationId: "ST-350", }, { rackTotCnt: "12", stationName: "195. 모래내고가차도 ", parkingBikeTotCnt: "6", shared: "42", stationLatitude: "37.56765747", stationLongitude: "126.91780853", stationId: "ST-351", }, { rackTotCnt: "12", stationName: "196. 연희교차로 인근", parkingBikeTotCnt: "1", shared: "0", stationLatitude: "37.56612015", stationLongitude: "126.92589569", stationId: "ST-352", }, { rackTotCnt: "17", stationName: "198. 충정2교", parkingBikeTotCnt: "15", shared: "0", stationLatitude: "37.56213760", stationLongitude: "126.96377563", stationId: "ST-354", }, { rackTotCnt: "32", stationName: "199. 서울 월드컵 경기장", parkingBikeTotCnt: "7", shared: "0", stationLatitude: "37.56684494", stationLongitude: "126.89644623", stationId: "ST-443", }, { rackTotCnt: "22", stationName: "200. 국회의원회관", parkingBikeTotCnt: "8", shared: "0", stationLatitude: "37.52841568", stationLongitude: "126.91391754", stationId: "ST-45", }, { rackTotCnt: "17", stationName: "201. 진미파라곤 앞", parkingBikeTotCnt: "9", shared: "6", stationLatitude: "37.53123856", stationLongitude: "126.92133331", stationId: "ST-46", }, { rackTotCnt: "32", stationName: "202. 국민일보 앞", parkingBikeTotCnt: "21", shared: "19", stationLatitude: "37.52881622", stationLongitude: "126.92453003", stationId: "ST-47", }, { rackTotCnt: "17", stationName: "203. 국회의사당역 3번출구 옆", parkingBikeTotCnt: "14", shared: "76", stationLatitude: "37.52805710", stationLongitude: "126.91870117", stationId: "ST-51", }, { rackTotCnt: "15", stationName: "204. 국회의사당역 5번출구 옆", parkingBikeTotCnt: "10", shared: "53", stationLatitude: "37.52816391", stationLongitude: "126.91702271", stationId: "ST-50", }, { rackTotCnt: "22", stationName: "205. 산업은행 앞", parkingBikeTotCnt: "13", shared: "0", stationLatitude: "37.52626419", stationLongitude: "126.92050934", stationId: "ST-52", }, { rackTotCnt: "37", stationName: "206. KBS 앞", parkingBikeTotCnt: "24", shared: "11", stationLatitude: "37.52466583", stationLongitude: "126.91802216", stationId: "ST-53", }, { rackTotCnt: "42", stationName: "207. 여의나루역 1번출구 앞", parkingBikeTotCnt: "16", shared: "0", stationLatitude: "37.52698898", stationLongitude: "126.93209839", stationId: "ST-73", }, { rackTotCnt: "14", stationName: "209. 유진투자증권빌딩 앞", parkingBikeTotCnt: "12", shared: "14", stationLatitude: "37.52461243", stationLongitude: "126.92783356", stationId: "ST-55", }, { rackTotCnt: "23", stationName: "210. IFC몰", parkingBikeTotCnt: "16", shared: "13", stationLatitude: "37.52606583", stationLongitude: "126.92553711", stationId: "ST-56", }, { rackTotCnt: "15", stationName: "211. 여의도역 4번출구 옆", parkingBikeTotCnt: "2", shared: "0", stationLatitude: "37.52222824", stationLongitude: "126.92463684", stationId: "ST-57", }, { rackTotCnt: "37", stationName: "212. 여의도역 1번출구 옆", parkingBikeTotCnt: "9", shared: "0", stationLatitude: "37.52136230", stationLongitude: "126.92346191", stationId: "ST-58", }, ]; ``` ```jsx for (let i = 0; i < bikes.length; i++) { if (bikes[i]['parkingBikeTotCnt'] <= 5) { let station = bikes[i]['stationName']; console.log(station); } } ``` 마찬가지로 유용하게 쓸 수 있게, 함수로 만들어볼까요? ```jsx function show_names(num){ for (let i = 0; i < bikes.length; i++) { if (bikes[i]['parkingBikeTotCnt'] <= num) { let station = bikes[i]['stationName']; console.log(num + "대 이하 정류장 : " + station); } } } // 이러면 아래와 같은 것이 가능! show_names(10) // 10개 이하 주차된 정류소만 출력! show_names(5) // 5개 이하 주차된 정류소만 출력! ```
- 27) 앗, 문법이 어렵다고요?
- 그럴 줄 알고 다음 시간에 연습 예제들을 준비해뒀어요. (😎워밍업!)
- 기억하시나요? 문법을 외우는 것은 중요하지 않아요. 예를 들어 if문을 어떻게 썼더라- 하는 것은 괜찮습니다. 코드는 복사해서 쓰세요. 얼개를 이해하는 게 중요합니다!
16. 1주차 끝 & 숙제 설명
📃 아래 기획서를 보고, 부트스트랩 또는 템플릿을 활용해서 나만의쇼핑몰의 메인 페이지를 완성해주세요. (아이템은 가상으로, 아무거나 파셔도 좋습니다.^^;;)기능: 주문하기 버튼을 클릭했을 때 '주문이 완료되었습니다.'라는 얼럿을 띄워주세요.
- [코드스니펫] 부트스트랩 시작 템플릿
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> </head> <body> <h1>이걸로 시작해보죠!</h1> </body> </html>
- [코드스니펫] 부트스트랩 컴포넌트
https://getbootstrap.com/docs/4.0/components/alerts/
- 기획서(레이아웃) 보기
- 예시 화면
HW. 1주차 숙제 해설
- [코드스니펫] 1주차 숙제(완성)
<!doctype html> <html lang="en"> <head> <!-- Required meta tags --> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <!-- Bootstrap CSS --> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous"> <!-- Optional JavaScript --> <!-- jQuery first, then Popper.js, then Bootstrap JS --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.9/umd/popper.min.js" integrity="sha384-ApNbgh9B+Y1QKtv3Rn7W3mgPxhU9K/ScQsAP7hUibX39j7fakFPskvXusvfa0b4Q" crossorigin="anonymous"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/js/bootstrap.min.js" integrity="sha384-JZR6Spejh4U02d8jOt6vLEHfe/JQGiRRSQQxSfFWpi1MquVdAyjUar5+76PVCmYl" crossorigin="anonymous"></script> <title>스파르타코딩클럽 | 부트스트랩 연습하기</title> <link href="https://fonts.googleapis.com/css2?family=Jua&display=swap" rel="stylesheet"> <style> * { font-family: 'Jua', sans-serif; } .item-img { width: 500px; height: 300px; background-image: url("https://t1.daumcdn.net/liveboard/nts/5bcccfbd33da4865817b9c606b6b852e.JPG"); background-position: center; background-size: cover; } .price { font-size: 20px; } .item-desc { width: 500px; margin-top: 20px; margin-bottom: 20px; } .item-order { width: 500px; } .btn-order { margin: auto; width: 100px; display: block; } .wrap { width: 500px; margin: auto; } </style> <script> function order(){ alert('주문이 완료되었습니다!'); } </script> </head> <body> <div class="wrap"> <div class="item-img"></div> <div class="item-desc"> <h1>양초를 팝니다 <span class="price">가격:3,000원/개</span></h1> <p>이 양초는 사실 특별한 힘을 지니고 있어요!</p> </div> <div class="item-order"> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">주문자이름</span> </div> <input type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <label class="input-group-text" for="inputGroupSelect01">수량</label> </div> <select class="custom-select" id="inputGroupSelect01"> <option selected>-- 수량을 선택하세요 --</option> <option value="1">1</option> <option value="2">2</option> <option value="3">3</option> </select> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">주소</span> </div> <input type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default"> </div> <div class="input-group mb-3"> <div class="input-group-prepend"> <span class="input-group-text">전화번호</span> </div> <input type="text" class="form-control" aria-label="Default" aria-describedby="inputGroup-sizing-default"> </div> <button type="button" onclick="order()" class="btn btn-primary btn-order">주문하기</button> </div> </div> </body> </html>
Author And Source
이 문제에 관하여(1주차 강의 자료 정리), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@irene15/1주차-강의-자료-정리저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)