🥕 명령어를 입력할 수 있는 공간
🐾 pwd : 현재 경로 확인하기
🐾 ls : 현재 경로의 파일 및 폴더 조회하기
🐾 ls -a : 현재 경로의 숨김 파일 및 폴더까지 모두 목록으로 조회하기
🐾 ls -al 리스트 형태로 자세히 표현
🐾 clear : 코드 클리어
🐾 cd<경로> : <경로>로 이동하기
🐾 touch <파일명> : <파일명> 이름으로 비어 있는 파일 생성하기
🐾 cat <파일명> : <파일명>의 내용 확인하기
🐾 vi <파일명> : <파일명> 편집하기
🐾 mv <파일명> : <파일명> 이름변경
🐾 rm <파일명> : <파일명> 삭제하기
🐾 mkdir <디렉터리 이름> : <디렉터리>(폴더) 생성
🐾 rmdir <디렉터리 이름> : 비어있는 <디렉터리 이름>의 삭제
🐾 rm -rf <디렉터리 이름> : 비어있지 않은 디렉터리 삭제
🥕 버전(commit) 관리를 위한 도구
🐾 깃이 없는 세상 - 변경내역 확인이 어렵다, 작업을 되돌리기 어렵다, 협력하기 어렵다
🐾 버전 - 유의미한 변화(ex)새 기능 추가, 삭제, 수정)가 결과물로 나온 것
- 프로그램 개발 == 유의미한 변화를 쌓아 프로그램을 만들어나가는 것
🐾 버전 관리(깃이 있다면) - 변경 내역들을 기역하며 필요하다면 작업을 되돌리며 여러 명의 코드를 쉽게나누고 합치며 개발하는 것
🐾 깃허브 - 원격 저장소 호스팅 서비스 (원격 깃으로 관리한 프로젝트 호스팅 서비스)
🐾 깃 - 버전을 관리하는 도구
🐾 깃이 관리하는 세개의 공간 - (눈에보임) 작업 디렉터리(workistree), /스테이지(index), 저장소 -> 깃이 관리하는 (눈에 안보임)
🐾 작업 디렉터리 - 버전 관리의 대상이 위치하는 공간(.git이 있는 디렉터리)
🐾 스테이지 디렉터리 - 다음 버전이 될 후보가 올라가는 공간 (무의미한 변경은 올라가지 않음)
🐾 저장소 - 로컬 저장소 : 내 컴퓨터 속에만 존재
- 원격 저장소 : (깃허브에서 관리되는 저장소처럼) 버전이 만들어지고 관리되는 공간
🐾 스테이지에서 저장소로 버전으로 만드는 것이 커밋
(커밋)유의미한 변경사항이 , 버전을 만들다
🐾 버전 - 스테이지로 add 저장소로 commit
🐾 git init : 로컬 저장소 만들기
🐾 git status : 작업 디렉터리 상태 확인하기
🐾 git add
🐾 git commit : 제목 (+ 본문)
🐾 git log : 커밋 목록 조회하기
🐾 git diff : 최근 커밋과 작업 디렉터리 비교하기
🥕 버전의 분기 (여러개의 흐름으로 나타냄)
🐾 없다면?
🐾 브랜치로 버전의 분기를 관리하는 방법
1. 브랜치를 나눈다
2. 각자의 브랜치에서 작업한다
3. (필요하다면) 나눈 브랜치를 합친다
🐾 브랜치의 이름 : 최초의 브랜치 master
🐾 브렌치의 이름 - master 브랜치는 커밋에 세 개 쌓여 있고. foo 브랜치에는 커밋이 다섯 개 쌓여 있다.
🐾 git branch : 브랜치 목록 조회하기
🐾 git checkout <브랜치> : <브랜치> 로 체크아웃하기 ( 작업 환경 바꾸기 )
🐾 git merge <브랜치> : <브랜치> 병합하기
🐾 HEAD
🐾 브랜치를 합친다 == 브랜치를 병합(merge)한다
🐾 병합에는
ex ) git checkout -b bar
touch bar_a.txt
git add bar_a.txt
git commit -m "bar commit"
git checkout maseter
🐾 충돌이 발생했을 때 대처법
1. 충동을 해결한다 (어떤 브랜치의 내용을 반영할건지 직접 선별)
2. 다시 커밋한다 (add, commit)
🐾 충돌
예를 들어, 다른 개발자들이 같은 파일의 같은 부분을 변경한 후 합치려고 할 때, 겹치는 부분이 생길 겁니다.
A 개발자 => a.txt 의 첫 번째 줄 변경
B 개발자 => a.txt 의 첫 번째 줄 변경
=> 두 개발자 모두 같은 곳 변경함
그럼 A 개발자와 B 개발자가 작성한 것 중 누구의 코드를 사용해야해? 라고 git이 저희에게 물어보는 겁니다. (충돌)
🥕 이미지 id 값을 받아서 그 id 값에 맞게 데이터를 내려주고 싶었는데.. 배운 내용에서 한참 벗어났을 뿐더러 script 부분이 너무 복잡했다. 🥹
🥕 이미지 'id'에 정신이 팔려있을 때 localStorage 라는 함수를 팀원분이 알려주셨다
🥕 여러 오류들을 발견했지만 그 중 많은 부분이 오타에 의해서 나타났다. 나머지는 수습하는게 급급해 놓쳐버렸다. 다음에는 이슈가 생길때마다 기록해놔야겠다.
🐾 'localStorage'에 'comment'키로 'id'값을 저장하고 'window.open'을 사용하여 'detail'페이지를 새 탭으로 여는 코드
function newTab(id){
alert(id);
localStorage.setItem('comment',id);
window.open('detail',"_blank");
}
🐾 app.py
# 게시글 내려주기
@app.route('/introduce/detail/new', methods=["GET"])
def get():
all_users = list(db.luckey_users.find({},{'_id':False}))
return jsonify({'result': all_users})
# 댓글 내려주기
@app.route('/introduce/comment', methods=["GET"])
def comment_get():
all_users = list(db.luckey_comment.find({},{'_id':False}))
return jsonify({'result': all_users})
# 팀원 내려주기
@app.route('/introduce/comment', methods=["GET"])
def users_get():
all_users = list(db.luckey_comment.find({},{'_id':False}))
return jsonify({'result': all_users})
🐾 detail.html (댓글)
$(document).ready(function () {
show_comment();
show_users();
});
// 댓글 받기
function show_comment() {
fetch('/introduce/comment').then((res) => res.json()).then((data) => {
let rows = data['result']
$('#comment-list').empty()
rows.forEach((a) => {
let nickname = a['nickname']
let comment = a['comment']
console.log(a)
// 데이터 입력
let temp_html = `<div class="comment">
<p style="font-size: 20px; font-weight: bold;">${nickname}</p>
<p>${comment}</p>
</div>`
$('#comment-list').append(temp_html)
})
})
}