항해99 Pre-onboarding 첫 날, 오시영 튜터님께서 TIL(Today I Learned)작성법에 관한 세션을 진행해 주셨다.

TIL은 나의 성장 기록이기도 하고, 정보를 공유할 수 있는 자료가 되기도 하기 때문에 일종의 포트폴리오가 될 수 있을 것 같다.

기록의 방법은 글쓰기가 될 수도 있고, 그림이 될 수도 있고, 영상이나 녹음이 될 수도 있다. 

 

그럼 이제 세션에서 들었던 부분 중 필요한 부분을 정리해 보자 !

 


 

작성에 앞서 생각해 보기

  • TIL 이 000에 의미가 있을까? → WIL 에서 회고(주간) - TIL 을 다시 안봤다 ? → 쓸모없는 TIL을 쓴 것.
  • 내가 TIL 로 뭐하고 싶었지?  ex) 성장 기록, 숲을 보자 ! 
  • 무얼 더 하고 싶을까?

 

무엇을 적어야 할까?

 

 배운 것 

  • 내가 에러를 해결한 코드
  • 문법과 개념이해
  • 새로 알게 된 기능
  • 기술적인 부분 등

 

② 회고 (restropective)

  • 개선이 되었는가? 에 대한 부분을 적어야 한다.
  • 내가 오늘 잘한 일이 무엇인지 (이 부분이 모이면 면접시 강점으로 어필이 가능하다!!)
  • 내일 시도해 볼 만한 것들 (내일 끝낼 수 있는 것)
  • 셀프리뷰 (ex - 진짜 할 수 있을까?, 이게 정말 중요한가?)
  • 팀 리뷰 = 피어리뷰 (ex - 코드 리뷰)
  • 튜너님들에게 받은 리뷰 혹은 피드백 ( 피드백을 받기 전에 TIL 가져가기, 상태 모니터링 부탁 드리기, 뭣도 아닐 떄 피드백을 받아야 방향을 빨리 잡을 수 있다, 정답을 알려달라고 하는게 아니라 상태를 설명하고 설명 받기)

 

③ 개선을 위한 방법

  • 내가 가치있는 걸 하고 있는지 체크하자
  • 내 가치가 만들어진다 - 난 언제 쓰지? 어디다 써먹었지? 내가 무얼 더 하고 싶을까?
  • 오답노트 작성

 

④ 오답노트 작성법

  • 어제 시도해봐야지 쓴 것을 오늘 해봤다.
  • 내가 문제를 왜 그렇게 풀려고 생각했는지 - 가설로 정리해봤다.
  • 진짜 그게 가장 쉽게 동작하는 방법인가? - 오컴의 면도날
  • 전에 썼던 걸 다시 봤나? 안봤다면 삭제할까?
  • WIL/MIL 에서 TIL 돌아볼 때 다시 봤던 키워드가 있다. (여러 번 본 키워드를 더 깊게 공부해봤다.)
  • 지금 당장 블로그에서 본 지식, 특정문제 해결방법 나열인가? 웹 개발자로서 기반인가?
  • 검증된 정보라 할 수 있나 (블로그가 정말 맞나? 공식문서는? 사람들이 오픈소스로 접근한 지식은?)
  • 공식 문서 찾는 법 : ***.doc 형식으로 검색한다 (ex - Java.doc) 

 

⑤ 참고할 만한 사이트 

[오늘의 회고]

 

1. 어려웠던 부분 : 증감연산자 ++i 와 i++ 를 구분하는게 어려웠다. 스터디 팀원분이  'x=10;' , 'z = ++x;' 라는 연산 식이 있다면, '++x'를 먼저 계산하고, 값을 다시 z에 대입하는 식으로 쪼개서 생각해보라고 알려주셨다. 아직 완전히 이해하진 못했지만 이부분은 나올때마다 계속 공부를 해야겠다. 

 

 

2. 느낀점 : 프로그래밍에서 연산은 기본이자 핵심이라고 생각한다. 기본을 탄탄히 해야 앞으로 다양한 함수를 사용할 때 더 이해가 쉬울 것 같다. 기본기를 다진다고 생각하자 !

 

3. 새로 알게된 내용 : 연산자에 따른 연산 우선순위에 대한 내용을 처음으로 알게 되었다. 그리고 if문을 대체 할 수 있는 삼항 연산자의 구조도 새로 배울 수 있었다.

 

4. 마지막 한 줄 (셀프칭찬) : 어제 연습문제에서 풀지 못했던 문제를 오늘은 복습을 통해 다시 해결 할 수 있었다.

모호한 개념들은 확실히 손코딩을 통해 결과 값을 확인하면서 해결해야 기억에 많이 남는 것 같다. 아직 가야할 길이 구만리지만, 어제보다 +1 상승했으니까 오늘도 헛되지 않은 하루였다고 본다 : )! 

 

 

5. 내일 할 일 : 항해99 입학시험, 밍글데이, Git 강의 1주차 끝내기, TIL 작성하기, 푹 쉬기 ^__^ 

 

 


 

[오늘 공부 부분]

 

- 어제 헷갈렸던 연습문제 복습

1. 연산자와 연산식

2. 연산자의 종류

 

https://leejincha.tistory.com/75

 

[04] Java 연산자와 연산

[오늘 공부할 부분] - 어제 헷갈렸던 연습문제 복습 1. 연산자와 연산식 2. 연산자의 종류 - 어제 문제 복습 ※ 헷갈렸던 부분 : scanner.nextLine()은 문자열을 읽어오고 그걸 다시 Integer.parseInt()로 받으

leejincha.tistory.com

 

 

[오늘의 회고]

 

1. 어려웠던 부분 : 역시 코딩의 가장 고된 부분은 프로그램 설치와 셋업인 것 같다. 오늘 스터디팀원들과 자바 새로운 버전을 설치하고 인텔리제이 세팅하는 데만 2시간 가량 보냈다 ^_ㅠ . 그래도 시작이 반이니까 ! 앞으로 공부에 집중해 보자 : )

 

2. 느낀점 : 변수라는 것이 얼마나 중요한지 알게 된 오늘. 그 용도에 맞게 타입과 이름을 설정해야 하는 것을 명심하자! 

뜬금 없지만, 인생도 변수와 같다는 생각이 들었다. 자바에서의 변수는 어떤 값을 넣는 컨테이너라면 내 인생도 어떤 값을 넣느냐에 따라 항상 변할 수 있는 컨테이너가 아닐까 .... ㅎㅎ 내 인생 변수명은 뭐가 좋으려나 ^_^ 

 

3. 새로 알게된 내용 : 자바 기초강의에서 보지 못했던 변수 타입 변환에 관한 내용이 새로웠다. 이전에는 변수가 정수인지 실수인지 개괄적인 부분만 알았는데, 오늘은 변수 타입에 따른 값의 허용범위에 대해 다시 한번 생각하게 되었다.

 

4. 마지막 한 줄 (셀프칭찬) : 이전에 들었던 CS50 강의가 얼마나 유용했는지 느끼는 하루였다. 당시에는 무슨말인지 잘 이해도 못하고 일단 들었는데, 자바스크립트나 자바언어를 공부하면서 그 내용이 유기적으로 연관되면서 이제야 하나씩 이해가 되는 느낌이다. 아직 코딩 베이뷔이지만 그래도 조금씩 천천히 발전하는 것 같다. 여튼 나 자신 화잇팅 ! 

 

5. 내일 할 일 : chap03 , TIL정리, 명령 흐롬프트로 자바 컴파일시도, 시간이 된다면 To do list 웹페이지 만들어보기 ! 

 


[ 오늘 공부 부분 ]

 

1. 자바 기본 이해
2. 자바 개발 도구 설치
3. 변수의 타입
4. 변수 타입 변환
5. 변수와 시스템 입출력

 

 

오늘 공부한 부분 정리 : https://leejincha.tistory.com/74

 

[03] Java 시작하기(설치), 변수와 타입

[ 오늘 공부할 부분 ] 1. 자바 기본 이해 2. 자바 개발 도구 설치 3. 변수의 타입 4. 변수 타입 변환 5. 변수와 시스템 입출력 1. Java 시작하기 전에 ① Java 소개 객체 지향 프로그래밍 언어 - 객체를 만

leejincha.tistory.com

 

 

 

오늘은 11월 9일에 있을 사전 입학시험에 대비하여 웹종합반 강의를 복습해 보았다.

오랜만에 봤더니 여전히 헷갈리는 부분이 있어서 복습하는 동안 헷갈렸던 부분의 코드를 정리해 보았다.

시간이 여유가 있다면 간단한 웹페이지를 하나 만들어 보면 좋을텐데 아쉬움이 남는다.

사전시험 제발 아무런 이슈없이 통과하기를 ! :)

 


 

1. 로그인 박스 배경 이미지 설정 기본값

background-image: url("https://www.ancient-origins.net/sites/default/files/field/image/Agesilaus-II-cover.jpg");
background-position: center;
background-size: cover;

 

2. 화면 중앙으로 로그인 박스 옮기기

//<style> 태그 부분 -> 일단 가로사이즈를 주고, margin값으로 중간으로 옮기기.

.wrap{
            width:300px;
            margin: auto;
        }
        
//<body> 태그 부분 -> 옮기고자 하는 부분 class="wrap"으로 전체 묶어주기.

 <div class="wrap">
        <div class="login_box">
            <h1>로그인 페이지</h1>
            <h5>아이디, 비밀번호를 입력해주세요</h5>
        </div>
        <div>
            <p>ID: <input type="text"/></p>
            <p>PW: <input type="text"/></p>
            <button>로그인하기</button>
        </div>
</div>

 

3. style.css 파일을 같은 폴더에 만들고, head 태그에서 불러오기. <head>태그 안에 아래 코드를 넣어주면 된다.

<link rel="stylesheet" type="text/css" href = "(css파일이름).css">

 

4. 스파르타피디아 헤드부분 제목과 버튼 정렬 코드 (박스 내 중앙으로 옮겨주는)

display: flex;
flex-direction: column;
justify-content: center;
align-items: center;

 

5. jQuery 임포트 코드. <head> 태그 안에 아래 코드를 넣어주면 된다.

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

 

6. ajax 기본골격

 $.ajax({
	type: "GET",
	url: "여기에URL을입력",
	data: {},
	success: function(response){
	console.log(response)
	}
})

 

7. 로딩 후 바로 호출하기

$(document).ready(function(){
	alert('다 로딩됐다!')
});

 

8. 스파르타피디아 별점 가져오는 법 .repeat() 사용하기

let star_image = '⭐'.repeat(star)

 

9. 크롤링 부분

import requests
from bs4 import BeautifulSoup

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)

soup = BeautifulSoup(data.text, 'html.parser')

//#old_content > table > tbody > tr:nth-child(3) > td.title > div > a
//#old_content > table > tbody > tr:nth-child(2) > td:nth-child(1) > img
//#old_content > table > tbody > tr:nth-child(2) > td.point


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

for movie in movies:
    title = movie.select_one('td.title > div > a')
    if title is not None:
        title = title.text
        rank = movie.select_one('td:nth-child(1) > img')['alt']
        star = movie.select_one('td.point').text
        print(rank, title, star)

 

10. db 관련 코드 (필요에 따라 복붙하기)

from pymongo import MongoClient
import certifi

ca = certifi.where()
client = MongoClient('mongodb+srv://test:비밀번호@cluster0.몽고db개인주소.mongodb.net/?retryWrites=true&w=majority',tlsCAFile=ca)
db = client.dbsparta

# 저장 - 예시
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'})

 

11. 화성땅공동구매 POST BE 코드

@app.route("/mars", methods=["POST"])
def mars_post():
    name_receive = request.form['name_give']
    address_receive = request.form['address_give']
    size_receive = request.form['size_give']

    doc = {
        'name': name_receive,
        'address': address_receive,
        'size': size_receive
    }

    db.orders.insert_one(doc)

    return jsonify({'msg': '주문 완료!'})

 

12. 화성땅공동구매 POST FE 코드

function save_order() {
    let name = $('#name').val()
    let address = $('#address').val()
    let size = $('#size').val()

    $.ajax({
        type: 'POST',
        url: '/mars',
        data: { name_give:name, address_give:address, size_give:size },
        success: function (response) {
            alert(response['msg'])
            window.location.reload()
        }
    });
}

 

 

13. 화성땅공동구매 GET BE 코드

@app.route("/mars", methods=["GET"])
def mars_get():
    orders_list = list(db.orders.find({},{'_id':False}))
    return jsonify({'orders':orders_list})

 

14. 화성땅공동구매 GET FE 코드

function show_order() {
    $('#order-box').empty()
    $.ajax({
        type: 'GET',
        url: '/mars',
        data: {},
        success: function (response) {
            let rows = response['orders']
            for (let i = 0; i < rows.length; i++) {
                let name = rows[i]['name']
                let address = rows[i]['address']
                let size = rows[i]['size']

                let temp_html = `<tr>
                                    <td>${name}</td>
                                    <td>${address}</td>
                                    <td>${size}</td>
                                  </tr>`
                $('#order-box').append(temp_html)
            }

        }
    });
}

 

5. 크롤링 조각기능 - meta tag

//select_one을 이용해 meta tag를 먼저 가져와봅니다
og_image = soup.select_one('meta[property="og:image"]')
og_title = soup.select_one('meta[property="og:title"]')
og_description = soup.select_one('meta[property="og:description"]')

print(og_image)
print(og_title)
print(og_description)

//가져온 meta tag의 content를 가져와봅시다.
image = og_image['content']
title = og_title['content']
description = og_description['content']

print(image)
print(title)
print(description)

 

16. 버킷리스트 BE POST 

@app.route("/bucket", methods=["POST"])
def bucket_post():
    bucket_receive = request.form["bucket_give"]

    count = list(db.bucket.find({},{'_id':False})) //->이부분을 유의한다 ! 넘버 만든느 법!
    num = len(count) + 1

    doc = {
        'num':num,
        'bucket': bucket_receive,
        'done':0
    }

    db.bucket.insert_one(doc)
    return jsonify({'msg':'등록 완료!'})

 

17. 버킷리스트 FE POST

function save_bucket(){
    let bucket = $('#bucket').val()
    $.ajax({
        type: "POST",
        url: "/bucket",
        data: {bucket_give:bucket},
        success: function (response) {
            alert(response["msg"])
            window.location.reload()
        }
    });
}

 18. 버킷리스트 done BE POST

@app.route("/bucket/done", methods=["POST"])
def bucket_done():
    num_receive = request.form["num_give"] //num으로 받는 점 유의, int로 데이터타입 변환 유의
    db.bucket.update_one({'num': int(num_receive)}, {'$set': {'done': 1}})
    return jsonify({'msg': '버킷 완료!'})

 

19. 버킷리스트 done FE POST

function done_bucket(num){
    $.ajax({
        type: "POST",
        url: "/bucket/done",
        data: {'num_give':num},
        success: function (response) {
            alert(response["msg"])
            window.location.reload()
        }
    });
}

+ Recent posts