웹종 5주차 팬명록 숙제까지 하고 앞에 배웠던 별점 넣기를 응용해서 해보고 싶었는데,,

웬걸,, 코드는 맞다고 생각했는데 localhost:5000에 적용이 안되는거다..ㅜㅜㅜ

그래서 기술매니저님이랑 얘기하다가 시간이 다 되어 내일 다시 물어보기로 했는데 이대로 잠이 안 올 것 같아서 즉문즉답에 물어보기로 했다.. 가끔씩 애용하는데 좋다.. (진짜 답변 빠르셔서,,감동,,)

 

일단 첫 번째 질문은 port:5500이 왜 나온 건지 알 수 없고 구글링해도 못 찾아서 질문드렸다

답변

내가 이해를 잘 못하고 있던거였음,,;;;ㅎㅎㅎㅎ

이 문제는 해결해서 다음 질문은

코드를 댓글로 남긴 뒤,, 떨리는 마음으로 기다림,,

답변

app.py 오타난거 잡아주시고... ㅎ 맙소사,, 너무 하찮은 실수를,,
변환 코드가 있을 줄이야..눈물,,, 강의에서 배운것 같기도 하고 착각인가,, 찾아볼 땐 안보였는데ㅜ
test도 직접하셔서 알려주심 ㅜ.ㅜ
전체코드 알려주셔서 나도 적용하고 해봤다,,감동,,,ㅜㅜ

 

<!DOCTYPE html>


<html lang="en">




<head>


    <meta charset="UTF-8" />


    <meta http-equiv="X-UA-Compatible" content="IE=edge" />


    <meta name="viewport" content="width=device-width, initial-scale=1.0" />




    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet"
        integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" />


    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>


    <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js"
        integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM"
        crossorigin="anonymous"></script>




    <title>초미니홈피 - 팬명록</title>




    <meta property="og:title" content="아이유 팬명록" />


    <meta property="og:description" content="아티스트에게 응원 한마디" />


    <meta property="og:image"
        content="http://newsroom.etomato.com/userfiles/%EC%95%84%EC%9D%B4%EC%9C%A0_Blueming_%EB%B3%B4%EB%8F%84%EC%9E%90%EB%A3%8C%20%EC%82%AC%EC%A7%84(1).jpg" />




    <link href="https://fonts.googleapis.com/css2?family=Noto+Serif+KR:wght@200;300;400;500;600;700;900&display=swap"
        rel="stylesheet" />


    <style>
        * {


            font-family: "Noto Serif KR", serif;


        }




        .mypic {


            width: 100%;


            height: 300px;




            background-image: linear-gradient(0deg,


                    rgba(0, 0, 0, 0.5),


                    rgba(0, 0, 0, 0.5)),


                url("http://newsroom.etomato.com/userfiles/%EC%95%84%EC%9D%B4%EC%9C%A0_Blueming_%EB%B3%B4%EB%8F%84%EC%9E%90%EB%A3%8C%20%EC%82%AC%EC%A7%84(1).jpg");


            background-position: center 30%;


            background-size: cover;




            color: white;




            display: flex;


            flex-direction: column;


            align-items: center;


            justify-content: center;


        }




        .mypost {


            width: 95%;


            max-width: 500px;


            margin: 20px auto 20px auto;




            box-shadow: 0px 0px 3px 0px black;


            padding: 20px;


        }




        .mypost>button {


            margin-top: 15px;


        }




        .mycards {


            width: 95%;


            max-width: 500px;


            margin: auto;


        }




        .mycards>.card {


            margin-top: 10px;


            margin-bottom: 10px;


        }
    </style>


    <script>


        $(document).ready(function () {


            set_temp();


            show_comment();


        });


        function set_temp() {


            fetch("http://spartacodingclub.shop/sparta_api/weather/seoul").then((res) => res.json()).then((data) => {


                let temp = data['temp']


                $('#temp').text(temp)


            });


        }


        function save_comment() {


            let name = $('#name').val()


            let comment = $('#comment').val()


            let heart = $('#heart').val()




            let formData = new FormData();


            formData.append("name_give", name);


            formData.append("comment_give", comment);


            formData.append("comment_heart", heart);




            fetch('/guestbook', { method: "POST", body: formData, }).then((res) => res.json()).then((data) => {


                alert(data["msg"]);


                window.location.reload()


            });


        }


        function show_comment() {


            fetch('/guestbook').then((res) => res.json()).then((data) => {


                let rows = data['result']


                $('#comment-list').empty()


                rows.forEach((a) => {


                    let name = a['name']


                    let comment = a['comment']


                    let heart = a['heart']



                    // 하트 아이콘 출력
                    let heart_img = "";
                    switch (heart) {
                        case "1":
                            heart_img = "🧡"
                            break;
                        case "2":
                            heart_img = "💛"
                            break;
                        case "3":
                            heart_img = "💚"
                            break;
                        case "4":
                            heart_img = "💙"
                            break;
                        case "5":
                            heart_img = "💜"
                            break;
                    }




                    let temp_html = `<div class="card">


                                        <div class="card-body">


                                            <blockquote class="blockquote mb-0">


                                                <p>${comment}</p>


                                                <p>${heart_img}</p>


                                                <footer class="blockquote-footer">${name}</footer>


                                            </blockquote>


                                        </div>


                                    </div>`


                    $('#comment-list').append(temp_html)


                })


            })


        }


    </script>


</head>




<body>


    <div class="mypic">


        <h1>아이유 팬명록</h1>


        <p>현재기온: <span id="temp">36</span>도</p>


    </div>


    <div class="mypost">


        <div class="form-floating mb-3">


            <input type="text" class="form-control" id="name" placeholder="url" />


            <label for="floatingInput">닉네임</label>


        </div>


        <div class="input-group mb-3">


            <label class="input-group-text" for="inputGroupSelect01">하트</label>


            <select class="form-select" id="heart">


                <option selected>--선택하기--</option>


                <option value="1">🧡</option>


                <option value="2">💛</option>


                <option value="3">💚</option>


                <option value="4">💙</option>


                <option value="5">💜</option>


            </select>


        </div>


        <div class="form-floating">


            <textarea class="form-control" placeholder="Leave a comment here" id="comment"
                style="height: 100px"></textarea>


            <label for="floatingTextarea2">응원댓글</label>


        </div>


        <button onclick="save_comment()" type="button" class="btn btn-dark">


            댓글 남기기


        </button>


    </div>


    <div class="mycards" id="comment-list">


        <div class="card">


            <div class="card-body">


                <blockquote class="blockquote mb-0">


                    <p>새로운 앨범 너무 멋져요!</p>


                    <p>💜</p>


                    <footer class="blockquote-footer">호빵맨</footer>


                </blockquote>


            </div>


        </div>


        <div class="card">


            <div class="card-body">


                <blockquote class="blockquote mb-0">


                    <p>새로운 앨범 너무 멋져요!</p>


                    <p>💜</p>


                    <footer class="blockquote-footer">호빵맨</footer>


                </blockquote>


            </div>


        </div>


        <div class="card">


            <div class="card-body">


                <blockquote class="blockquote mb-0">


                    <p>새로운 앨범 너무 멋져요!</p>


                    <p>💜</p>


                    <footer class="blockquote-footer">호빵맨</footer>


                </blockquote>


            </div>


        </div>


    </div>


</body>


</html>

초심 잃으면 이거 보고 힘내야지,,ㅎㅎ

 

혼자서 3시간 정도 고민하다 해결이 안 돼서 물어봤는데 해결돼서 정말 좋다^-^

역시 선생님이 최고다..

AWS 배포한 거 수정하러 가야겠다~~~

 

1.수업내용정리

-python : 매우 직관적, 할 수 있는 것 많음, 필요한 것들은 구글링해서 찾아보기!

*기초 문법

*변수 & 기본연산

a = 3      # 3을 a에 넣는다
b = a      # a를 b에 넣는다
a = a + 1  # a+1을 다시 a에 넣는다

num1 = a*b # a*b의 값을 num1이라는 변수에 넣는다
num2 = 99 # 99의 값을 num2이라는 변수에 넣는다

# 변수의 이름은 마음대로 지을 수 있음!
# 진짜 "마음대로" 짓는 게 좋을까? var1, var2 이렇게?

*자료형

숫자, 문자형
name = 'bob' # 변수에는 문자열이 들어갈 수도 있고,
num = 12 # 숫자가 들어갈 수도 있고,

is_number = True # True 또는 False -> "Boolean"형이 들어갈 수도 있습니다.

#########
# 그리고 List, Dictionary 도 들어갈 수도 있죠. 그게 뭔지는 아래에서!

리스트 형 (Javascript의 배열형과 동일)
a=['사과','배','감']
print(a[0]) #사과

Dictionary 형 (Javascript의 dictionary형과 동일)
a= {}
a= {'name':'영수','age':24}


# a의 값은? {'name':'영수','age':24}
# a['name']의 값은? '영수'

*함수

-함수의 정의 - 이름은 마음대로 정할 수 있음!
# 수학문제에서
f(x) = 2*x+3
y = f(2)
y의 값은? 7

# 참고: 자바스크립트에서는
function f(x) {
	return 2*x+3
}

# 파이썬에서
def f(x):
	return 2*x+3

y = f(2)
y의 값은? 7

-함수의 응용
def hey():
	print("헤이")

#파이썬에서 함수 생성시, 들여쓰기는 중요해요!

hey() #헤이

def sum(a,b,c):
	return a+b+c

result = sum(1,2,3)
print(result) #6

 

*조건문 : if / else

age = 25

if age > 20:
	print("성인입니다")
else:
	print("청소년입니다")

*반복문 : 리스트의 요소들을 하나씩 꺼내쓰는 형태. 즉, 무조건 리스트와 함께

fruits = ['사과','배','감','귤']

for fruit in fruits:
	print(fruit)

# 사과, 배, 감, 귤 하나씩 꺼내어 찍힙니다.

ages =[5,10,13,23,25,9]

for a in ages:
	if a>20:
		print("성인입니다")
	else:
		print("청소년입니다")

-크롤링

가상환경 활성화(venv) > pip install bs4

*기본세팅

import requests
from bs4 import BeautifulSoup

# 타겟 URL을 읽어서 HTML를 받아오고,
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
# soup이라는 변수에 "파싱 용이해진 html"이 담긴 상태가 됨
# 이제 코딩을 통해 필요한 부분을 추출하면 된다.
soup = BeautifulSoup(data.text, 'html.parser')

#############################
# (입맛에 맞게 코딩)
#############################

*selsct / select_one   태그 안의 텍스트를 찍고 싶을 땐 → 태그.text 태그 안의 속성을 찍고 싶을 땐 → 태그['속성']

import requests
from bs4 import BeautifulSoup

# URL을 읽어서 HTML를 받아오고,
headers = {'User-Agent' : 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36'}
data = requests.get('https://movie.naver.com/movie/sdb/rank/rmovie.naver?sel=pnt&date=20210829',headers=headers)

# HTML을 BeautifulSoup이라는 라이브러리를 활용해 검색하기 용이한 상태로 만듦
soup = BeautifulSoup(data.text, 'html.parser')

# select를 이용해서, tr들을 불러오기
a = soup.select_one('#old_content > table > tbody > tr:nth-child(3) > td.title > div > a')

trs = soup.select('#old_content > table > tbody > tr')

# movies (tr들) 의 반복문을 돌리기
for tr in trs:
    # movie 안에 a 가 있으면,
		a = tr.select_one('td.title > div > a')
    if a is not None:
        # a의 text를 찍어본다.
        print (a.text)
# 선택자를 사용하는 방법 (copy selector)
soup.select('태그명')
soup.select('.클래스명')
soup.select('#아이디명')

soup.select('상위태그명 > 하위태그명 > 하위태그명')
soup.select('상위태그명.클래스명 > 하위태그명.클래스명')

# 태그와 속성값으로 찾는 방법
soup.select('태그명[속성="값"]')

# 한 개만 가져오고 싶은 경우
soup.select_one('위와 동일')

항상 정확하지는 않으나, 크롬 개발자도구 참고 가능

  1. 원하는 부분에서 마우스 오른쪽 클릭 → 검사
  2. 원하는 태그에서 마우스 오른쪽 클릭
  3. Copy → Copy selector로 선택자를 복사할 수 있음

- MongoDB(>No-SQL :딕셔너리 형태로 데이터를 저장해두는 DB, 자유로운 형태의 데이터 적재에 유리한 대신, 일관성이 부족할 수 있음)

*패키지 설치

  1. 터미널을 열고, 마지막 경로가 pythonprac 인지 확인
  2. (venv) 로 가상환경이 활성화 되었는지 확인
  3. pip install pymongo, dnspython 입력하고 엔터

*기본 코드

from pymongo import MongoClient
client = MongoClient('여기에 URL 입력')
db = client.dbsparta

난 이거 안돼서 다른 거 찾아 씀,,ㅜㅜ 이유는 아직도 모름,,

스파르타코딩클럽 즉문즉답에서 검색해서 찾은 코드,,엄청 애먹었다,, 몽고디비 회원가입만 3번 한거 안비밀,,ㅎ

from pymongo import MongoClient
import certifi

ca = certifi.where()

client = MongoClient('mongodb+srv://sparta:test@cluster0.brkky9q.mongodb.net/?retryWrites=true&w=majority', tlsCAFile=ca)
db = client.dbsparta

certifi에 노란줄이 뜨면 터미널에 pip install certifi 명령어 입력!!

(4주차 이후부터 복붙할 때 노란줄 뜸,,^-^)

*코드요약(복붙해서 쓰면 됨)

# 저장 - 예시
doc = {'name':'bobby','age':21}
db.users.insert_one(doc)

# 한 개 찾기 - 예시
user = db.users.find_one({'name':'bobby'})

# 여러개 찾기 - 예시 ( _id 값은 제외하고 출력)
all_users = list(db.users.find({},{'_id':False}))

# 바꾸기 - 예시
db.users.update_one({'name':'bobby'},{'$set':{'age':19}})

# 지우기 - 예시
db.users.delete_one({'name':'bobby'})

 

2.참고 자료, 해당 내용이 활용되는 부분

requests python docs:영어설명 https://requests.readthedocs.io/en/latest/

> requests python 사용법 (구글에 검색)

 

3. 오늘 새로 배운 내용

-fetch :별이 ⭐️ 모양이 들어가야 하는데 그냥 숫자가 들어갈 때는 구글링 해보기 → 자바스크립트 숫자 반복 → repeat()

별을 반복한 값을 repeat()를 사용해 변수로 담아 붙이기

 let star = movie['star']
 
 let star_image = '⭐'.repeat(star)

-먼저 있던 내용 지우기 (forEach 전에)

$('#AAAAAA').empty('');

-리스트 나오면 for (변수?:a) in rows:

-스크래핑 :앞에서 두 글자만 끊기! text[0:2], 옆에 여백이 있다던가, 다른 글씨도 나온다던가.. 파이썬 내장 함수인 strip()

 

4. 개발 중 발생한 이슈/고민 또는 이를 해결한 내용

프론트엔드는 자바스크립트?, 백엔드는 파이썬?

 

숙제 지니뮤직 스크래핑하고 멜론도 해보았다. 재밌었다 ㅎㅎ

1. 수업 내용 정리

-javascript : 웹을 움직이게 하는 코드(모든 웹서버는 HTML + CSS + javascript

unction hey()라는 규칙으로 hey라는 함수를 만들었고, alert(&rsquo;안녕&rsquo;)이라는 작업을 원할 때마다 반복적으로 수행

*console.log() : 매번 버튼 클릭해서 실행하는 것은 불편 하기에 alert > console.log로 바꿔 확인/마우스오른쪽클릭>검사

*변수 : let으로 변수 선언, 직관적, 알아볼 수 있게

ex) let a = 2, a = 'bob' //문자열은 작은 따옴표

*리스트 : 순서를 지켜서 가지고 있는 형태, 첫 번째 값은 [0]

let a_list = []  // 리스트를 선언. 변수 이름은 역시 아무렇게나 가능!

// 또는,

let a = ['사과','수박','딸기','감'] // 로 선언 가능

console.log(a[1]) // 수박
console.log(a[0]) // 사과

//리스트 길이 구하기
console.log(a.length) //4

*딕셔너리 : 키(key)-밸류(value) 값의 묶음

let a_dict = {}  // 딕셔너리 선언. 변수 이름은 역시 아무렇게나 가능!

// 또는,

let a = {'name':'영수','age':27} // 로 선언 가능

console.log(a)
console.log(a['name']) // 영수
console.log(b_dict['age']) // 27

*리스트 + 딕셔너리

let a = [
	{'name':'영수','age':27},
	{'name':'철수','age':15},
	{'name':'영희','age':20}
]
console.log(a[0]['name']) //영수
console.log(a[1]['age']) //15

 

-jQuery : html 뼈대 선택해서 쉽게 조작 (=bootstrap, 남들이 만든 코드모음, 라이브러리)

Javascript로 길고 복잡하게 써야 하는 것을

document.getElementById("element").style.display = "none";

jQuery로 보다 직관적으로 쓸 수 있EK

$('#element').hide();

jQuery는 Javascript와 다른 특별한 소프트웨어가 아니라 미리 작성된 Javascript 코드입니다. 전문 개발자들이 짜둔 코드를 잘 가져와서 사용하는 것!

(그렇게 때문에, 쓰기 전에 "임포트(미리 작성된 Javascript 코드를 가져오는 것)"를 해야한다)

*반복문 : forEach(() => {})

let fruits = ['사과','배','감','귤']
fruits.forEach((a) => {
	console.log(a)
})

*조건문 : if (조건) {} else {}

let age = 24

if (age > 20) {
	console.log('성인입니다')
} else {
	console.log('청소년입니다')
}

*반복문+조건문

let ages = [12,15,20,25,17,37,24]

ages.forEach((a)=> {
	if (a > 20) {
		console.log('성인입니다')
	} else {
		console.log('청소년입니다')
	}
})

*append() : 

temp_html 이라는 변수를 만들 때는 백틱(``) ,

태그 안에 들어갈 값은 ${},

통째로 넣을 html요소를 $('#아이디').append(변수:html)

function checkResult() {
	let fruits = ['사과','배','감','귤','수박']
	$('#q1').empty()
	fruits.forEach((a)=>{
		let temp_html = `<p>${a}</p>`
		$('#q1').append(temp_html)
	})
}
let people = [
	{'name':'서영','age':24},
	{'name':'현아','age':30},
	{'name':'영환','age':12},
	{'name':'서연','age':15},
	{'name':'지용','age':18},
	{'name':'예지','age':36}
]
$('#q2').empty()
people.forEach((a)=>{
		let name = a['name']
		let age a['age']
		let temp_html = `<p>${a}</p>`
		$('#q2').append(temp_html)
	})

-Fetch : 짧은 코드로 요청을 보내고 받아옴

fetch("여기에 URL을 입력") // 이 URL로 웹 통신을 요청한다. 괄호 안에 다른 것이 없다면 GET!
	.then(res => res.json()) // 통신 요청을 받은 데이터는 res라는 이름으로 JSON화 한다
	.then(data => { 
		console.log(data) // 개발자 도구에 찍어보기
	}) // JSON 형태로 바뀐 데이터를 data라는 이름으로 붙여 사용한다

ex)기본

fetch("http://spartacodingclub.shop/sparta_api/seoulair") // 기본 요청(GET)
	.then(res => res.json()) // 요청해서 받은 데이터를 JSON화
	.then(data => { // JSON화 한 데이터를 다시 data로 이름짓기
		let rows = data['RealtimeCityAir']['row']
		rows.forEach((a) => {
			// 미세먼지 데이터 리스트의 길이만큼 반복해서 하나씩 개발자 도구에서 보기
			// 구의 이름, 미세먼지 수치 값을 개발자 도구에서 찍어보기
			console.log(a['MSRSTE_NM'], a['IDEX_MVL'])
		})
	})

fetch("http://spartacodingclub.shop/sparta_api/seoulair").then(res => res.json()).then(data => { 
		let rows = data['RealtimeCityAir']['row']
		rows.forEach((a) => {
			console.log(a['MSRSTE_NM'], a['IDEX_MVL'])
		})
	})

ex)응용

    <style>
        div.question-box {
            margin: 10px 0 20px 0;
        }
        .bad {
            color: red;
        }
    </style>

    <script>
			function q1() {
        fetch("http://spartacodingclub.shop/sparta_api/seoulair").then((response) => response.json()).then((data) => {
            $('#names-q1').empty()
						let rows = data['RealtimeCityAir']['row']
            rows.forEach((a) => {
                let gu_name = a['MSRSTE_NM']
								let gu_mise = a['IDEX_MVL']
								let temp_html = ``
								if (gu_mise > 40) {
									temp_html = `<li class="bad">${gu_name} : ${gu_mise}</li>`
								} else {
									temp_html = `<li>${gu_name} : ${gu_mise}</li>`
								}
                $('#names-q1').append(temp_html)
            });
          })
      }
    </script>

2. 참고 자료, 해당 내용이 활용되는 부분

 


3. 오늘 새로 배운 내용

API는 은행 창구와 같은 것!

같은 예금 창구에서도 개인 고객이냐 기업 고객이냐에 따라 가져와야 하는 것 / 처리해주는 것이 다른 것처럼, 클라이언트가 요청 할 때에도, "타입"이라는 것이 존재

* GET → 통상적으로! 데이터 조회(Read)를 요청할 때 예) 영화 목록 조회

GET 방식으로 데이터를 전달하는 방법

? : 여기서부터 전달할 데이터가 작성된다는 의미

& : 전달할 데이터가 더 있다는 뜻 예시) google.com/search?q=아이폰&sourceid=chrome&ie=UTF-8

위 주소는 google.com의 search 창구에 다음 정보를 전달

q=아이폰 (검색어) / sourceid=chrome / (브라우저 정보) / ie=UTF-8 (인코딩 정보)

* POST → 통상적으로! 데이터 생성(Create), 변경(Update), 삭제(Delete) 요청 할 때 예) 회원가입, 회원탈퇴, 비밀번호 수정


4. 개발 중 발생한 이슈/고민 또는 이를 해결한 내용

처음에는 이해가 가는듯 안가는듯 한데 계속 듣다보니 이해보다는 통으로 외우는게 편한것 같다 ㅎ,ㅎ

조건문, 반복문, append(temp_html) 등 코드가 바로 생각날 정도로 외우는 것도 나쁘지 않을 것 같다..

혼자 새로 만들면 막막할듯 싶지만 해봐야겠지 ㅎ,, 

1. 수업 내용 정리

-웹(web)!

ex. https://naver.com/ > "naver.com" 은행지점, "/" 창구

-HTML은 뼈대, CSS는 꾸미기!

코드 자동정렬 shift + alt + f

주석 달기 ctrl + /

*html

코드화면 > open with live server : 내가 적은 코드가 실제로 보이는 화면

head(meta, script, link, title 등) 페이지 속성 정보 /

body(<div>구역, 한줄 다 먹음:박스는 div <p>문단 <h1>제목 <hr>태그:<butten> 등) 페이지 내용

ex. <div class="mytitle"><h1><h5></div>

<!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>

*css

<head> ~ </head> 안에 <style> ~ </style>, mytitle라는 클래스를 가리킬 때, .mytitle { ... }

검색 예 : "css 모서리 둥글게" border-radius

번호는 자주 쓰는 순서대로 표기

배경관련 1.background-color(구역확인)

7.background-image: url(' '); 8.background-position(center) 9.background-size(cover:꽉맞게/7,8,9 세줄 늘 같이!

사이즈px; 2.width 3.height

폰트 font-size font-weight font-family 4.color

간격 5.text-align(가운데 정렬) margin 6.padding(시계방향 : 위20px 오20px 아래20px 왼20px; ,auto:쭉 밀기) 

margin과 padding ( → 헷갈리지 말기!) - margin은 바깥 여백을, padding은 내 안쪽 여백

로그인 화면 가운데로 옮기기 : 전체를 박스로 <div></div>

파일 분리 : <!-- style.css 파일을 같은 폴더에 만들고, head 태그에서 불러오기 --<link rel="stylesheet" type="text/css" href = "(css파일이름).css">

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .mytitle {

        }
        .mybtn {

        }
		.mytxt {

        }
    </style>
</head>
<body>
    <h1 class="mytitle">로그인 페이지</h1>
    <p class="mytxt">ID: <input type="text"/></p>
    <p class="mytxt">PW: <input type="text"/></p>
    <button class="mybtn">로그인하기</button>
</body>
</html>

2.참고 자료, 해당 내용이 활용되는 부분

3. 오늘 새로 배운 내용

Github에서 파일 배포할 때 제목 무조건 index.html

수정할 때 : code > index.html > 연필모양 > 코드변경 > commit changes

 

4. 개발 중 발생한 이슈/고민 또는 이를 해결한 내용

-한 글자라도 틀렸을 때 오류가 뜨면 틀린 코드를 찾기 힘들기때문에 처음부터 잘 적어야겠다는 생각을 했다..

 강의를 보면서 따라하니까 쉬운건지,, 1주차라서 쉬운건지 가늠이 안간다,, 

 html 뼈대는 가져와서 바꾸는 것인가,, 내가 새로 만들기는 무리,,

 

-깃허브에서 새로운 파일을 배포할때는..?

>수정하는 것과 같음.

+ Recent posts