ํ๋ฃจ ์์ฝ
์ค๋์ ๋ณธ์บ ํ 2์ผ ์ฐจ... ์ด์ ์งํํ๋ ํ๋ก์ ํธ๋ฅผ ๊ณ์ ์งํํ์๋ค.
๋ด๊ฐ ๋ด๋นํ๋ ๋ฉค๋ฒ ์นด๋, ๋ฐฉ๋ช
๋ก ํํธ๋ฅผ ์ค์ ์ ๋ค ํด๊ฒฐํ๊ณ ํ์๋ถ๊ณผ ๋ฉ์ธ ํ์ด์ง๋ฅผ ํฉ์ณค๋ค!!
ํ์๋ถ์ด ์์ฑํ ์ฝ๋์ ๋ด๊ฐ ์์ฑํ ์ฝ๋๋ฅผ ๋ชจ๋ ํฉ์น ํ, ๋๋ ํ์ฌ ์๊ฐ๊ณผ ๋ฐฉ๋ช
๋ก์ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฐ๊ฒฐํ๋ ๋ถ๋ถ์ ์ถ๊ฐ์ ์ผ๋ก ๋ด๋นํ๊ธฐ๋ก ํ๋ค.
์ ์ฌ์ ๋ง์๊ฒ ๋จน๊ณ ๋ ํ, ํ์ฌ ์๊ฐ์ ๋ํ๋ด์ฃผ๋ Javascript ์ฝ๋๋ฅผ ์์ฑํ๊ณ ํ์ด์ง์ ๋ฌธ์ ์์ด ํ์๋๋ ๊ฒ์ ํ์ธํ ์ ์์๋ค.
<!-- ์๊ณ -->
<div class="clock">
<h3 id="time"></h3>
</div>
// ์๊ฐ ๋ถ๋ฌ์ค๋ ๊ธฐ๋ฅ
function updateTime() {
const timeElement = document.getElementById("time");
const now = new Date();
// ์๊ฐ์ ํ์์ ๋ง๊ฒ ๊ฐ์ ธ์ค๊ธฐ
const hours = String(now.getHours()).padStart(2, "0"); // ์
const minutes = String(now.getMinutes()).padStart(2, "0"); // ๋ถ
const seconds = String(now.getSeconds()).padStart(2, "0"); // ์ด
// ์๊ฐ์ ๋ฌธ์์ด๋ก ์กฐํฉ
timeElement.textContent = `${hours}:${minutes}:${seconds}`;
}
// 1์ด๋ง๋ค ์๊ฐ์ ์
๋ฐ์ดํธ
setInterval(updateTime, 1000);
// ํ์ด์ง๊ฐ ๋ก๋๋ ๋ ์ฆ์ ์๊ฐ์ ํ์ํ๊ธฐ ์ํด ์ด๊ธฐ ํธ์ถ
updateTime();
์์ ๋ ์ฝ๋๋ฅผ ํตํด ์ค์๊ฐ์ผ๋ก ์๊ฐ์ด ํํ๋๋ ๊ฒ์ ์ฑ๊ณตํ๋ค ๐๐๐
๋ค์์ ๋ฐฉ๋ช
๋ก์ ์์ฑํ๋ฉด Firestore์ ์ ์ฅ๋๊ณ ๋ค์ ๋ถ๋ฌ์์ ๋ํ๋ ์ ์๋๋ก ํ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
์ฐ์ ํ์ฅ๋์ Firestore Database์ ์ฐ๋์ ํ๊ณ ๋ฐฉ๋ช
๋ก์ด Database์ ์ ์ฅ๋ ์ ์๋๋ก ์์ฑํ๋ค.
// ๋ฐฉ๋ช
๋ก ์ ์ฅ ๊ธฐ๋ฅ
$(document).on("click", "#guestbookbtn", async function () {
let name = $('#exampleFormControlInput1').val();
let content = $('#exampleFormControlTextarea1').val();
if (name && content) {
let docData = {
'name': name,
'content': content
};
try {
await addDoc(collection(db, "guestbook"), docData);
alert('๋ฐฉ๋ช
๋ก์ด ์ ์ฅ๋์์ต๋๋ค!');
window.location.reload();
} catch (error) {
console.error("๋ฐฉ๋ช
๋ก ์ ์ฅ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: ", error);
}
} else {
alert('์ด๋ฆ๊ณผ ๋ด์ฉ์ ๋ชจ๋ ์
๋ ฅํด์ฃผ์ธ์.');
}
});
๊ทธ๋ค์์ Database์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์์ ํ์ด์ง์ ๋ณด์ฌ์ฃผ๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๋ค.
// ๋ฐฉ๋ช
๋ก ๊ฐ์ ธ์ค๊ธฐ ๋ฐ ์นด๋๋ก ํ์
async function loadGuestbook() {
try {
$('#card').empty(); // ๊ธฐ์กด ๋ฐ์ดํฐ๋ฅผ ์ด๊ธฐํํ์ฌ ์ค๋ณต ๋ฐฉ์ง
let docs = await getDocs(collection(db, "guestbook"));
docs.forEach((doc) => {
let row = doc.data();
let id = doc.id;
let name = row['name'];
let content = row['content'];
let temp_html = `
<div class="guestbookcard" id="guestbook-${id}">
<div class="card-body">
<h3>${name}</h3>
<p>${content}</p>
<button type="button" class="btn btn-outline-primary edit-btn" data-id="${id}">์์ </button>
<button type="button" class="btn btn-outline-danger delete-btn" data-id="${id}">์ญ์ </button>
</div>
</div>`;
$('#card').append(temp_html);
});
} catch (error) {
console.error("๋ฐฉ๋ช
๋ก์ ๊ฐ์ ธ์ค๋ ์ค ์ค๋ฅ๊ฐ ๋ฐ์ํ์ต๋๋ค: ", error);
}
}
์ด ๋ถ๋ถ๊น์ง ์์ฑํ๊ณ ํ ๊นํ๋ธ์ git push๋ฅผ ํด์ ์ฌ๋ ค์ผ ํ๋๋ฐ ์ฌ๊ธฐ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค.......
git push๊ฐ ๋จนํ์ง ์์๋ค... ๐ฅฒ๐ฅฒ๐ฅฒ ๋ถ๋ช
์๋๋ Github๊ฐ ๋ง์ฝ์ด ๋๋๊น ์์๋์ด ๋๊ธฐ ์์ํ๋ค...
๋ค์ ์ ์ ์ ์ฐจ๋ฆฌ๊ณ ์๋ฌ ์ฝ๋๋ฅผ ๋ณต์ฌํด์ ๊ตฌ๊ธ๋ง๋ ํ๊ณ ChatGPT์๊ฒ๋ ๋ฌผ์ด๋ณด๋ฉด์ ์ฐจ๊ทผ์ฐจ๊ทผ ํ ๋จ๊ณ์ฉ ํด๊ฒฐํด ๋๊ฐ๊ธฐ ์์ํ๋ค!
To https://github.com/hajoo0322/1week-project.git
! [rejected] main -> main (non-fast-forward)
error: failed to push some refs to 'https://github.com/hajoo0322/1week-project.git'
hint: Updates were rejected because the tip of your current branch is behind
hint: its remote counterpart. If you want to integrate the remote changes,
hint: use 'git pull' before pushing again.
hint: See the 'Note about fast-forwards' in 'git push --help' for details.
ํด๊ฒฐํ๋ ๊ณผ์ ์์ ๊ฐ์ฅ ๋ง์ด ๋ณธ ์๋ฌ ์ฝ๋์ด๋ค...........
์ด ์ค๋ฅ๋ ํ์ฌ ๋ก์ปฌ ๋ธ๋์น๊ฐ ์๊ฒฉ ์ ์ฅ์์ ์ต์ ์ํ์ ์ผ์นํ์ง ์์์ ๋ฐ์ํ๋ค.
์ฆ, ์๊ฒฉ ์ ์ฅ์์ ์๋ ์ปค๋ฐ์ด ๋ก์ปฌ์ ์์ง ๋ฐ์๋์ง ์์๊ธฐ ๋๋ฌธ์ git push ๋ช
๋ น์ด๊ฐ ๊ฑฐ๋ถ๋ ๊ฒ์ด์๋ค...
์ด๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์๋ ์๊ฒฉ ์ ์ฅ์์ ๋ณ๊ฒฝ ์ฌํญ์ ๋จผ์ ๋ก์ปฌ์ ๊ฐ์ ธ์์ผ ํ๋ค.
๊ทธ๋์ ๋ค์ ์ฝ๋๋ค์ ์ฐจ๋ก๋ก ์
๋ ฅํ๊ณ ๋ฌด์ฌํ ์๋ฌ ์ฝ๋๋ฅผ ๋๊ธธ ์ ์์๋ค ๐๐
git pull origin main
git add <ํ์ผ๋ช
>
git commit -m "๋ฉ์์ง ์
๋ ฅ"
git push origin main
From https://github.com/hajoo0322/1week-project
* branch main -> FETCH_HEAD
error: Your local changes to the following files would be overwritten by merge:
index.html
Please commit your changes or stash them before you merge.
Aborting
Merge with strategy ort failed.
๋ค์์ผ๋ก ๋ง์ด ๋ณธ ์๋ฌ ์ฝ๋์ด๋ค....
์ด ์ค๋ฅ ๋ฉ์์ง๋ ๋ก์ปฌ์์ ์์ ํ ํ์ผ์ด ์์ด์ ๋ณํฉ์ ์งํํ ์ ์์ ๋ ๋ฐ์ํ๋ค.
index.html ํ์ผ์ ๋ก์ปฌ ๋ณ๊ฒฝ ์ฌํญ์ด ์กด์ฌํ๊ธฐ ๋๋ฌธ์, ๋ณํฉ์ ์งํํ๊ธฐ ์ ์ ์ด๋ฅผ ์ ๋ฆฌํด์ผ ํ๋ค.
๋ค์ ์ฝ๋๋ค์ ์ด์ฉํด์ ์๋ฌ๋ฅผ ๋ฌด์ฌํ ํด๊ฒฐํ ์ ์์๋ค ๐ค๐ค
git add index.html
git commit -m "๋ฉ์์ง ์์ฑ"
git pull origin main
์ค๋ช
ํ์๋ฉด git add์ git commit์ ํตํด ๋ณ๊ฒฝ ์ฌํญ์ ์ปค๋ฐํ ํ ๋ณํฉ์ ์งํํ๋ ๊ฒ์ด๋ค!
์ด๋ ๊ฒ ๊ตฌ๊ธ๋ง๊ณผ ChatGPT ๋๋ถ์ ๋ฌด์ฌํ ์๋ฌ๋ฅผ ๋๊ธธ ์ ์์๋ค... ๐คจ๐คจ
์๋ฌ๋ฅผ ๋๊ธฐ๊ณ Github main์ git push๋ฅผ ํ๊ณ ๋์ ํ์๋ค๋ผ๋ฆฌ ๋ค์ ํ๋ก์ ํธ์ ๋ํด ์์ํ๋ ์๊ฐ์ ๊ฐ์ก๋ค!
๋ณธ ์บ ํ๋ ๋ฐฑ์๋ ํธ๋์ด์ด์ ๋งค๋์ ๋๊ป์ ํ๋ก ํธ์ ๋๋ฌด ์ง์คํ์ง ์์๋ ๋๋ค๊ณ ํ์ ๋ง์์ ๋ฃ๊ณ , ๋ชจ๋ ๋ชจ์ฌ์ Firebase์ ์ฐ๋์ ํด์ ์ฐ๋ฆฌ๊ฐ ๊ตฌํ์ ํ ์ ์๋ ๊ธฐ๋ฅ์ด ๋ญ๊ฐ ์์๊น..... ํ์๋ฅผ ์งํํ๋ค.
ํ์๋ฅผ ์งํํ ๊ฒฐ๊ณผ, ํ์๊ฐ์
๊ธฐ๋ฅ, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ, ๋ฐฉ๋ช
๋ก ์ถ๊ฐ · ์์ · ์ญ์ ๊ธฐ๋ฅ, ํ์๊ฐ์
์ ์
๋ ฅ๋๋ ์ํธ๋ฅผ ํด์ ์๊ณ ๋ฆฌ์ฆ์ ํตํ ๋ณด์ ๊ฐํ ๋ฑ์ ์๊ฒฌ์ด ๊ฒฐ์ ๋์๋ค.
๋๋ ๊ทธ ์ค์์ ํ์๊ฐ์
, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ๋ด๋นํ๊ธฐ๋ก ํ๋ค.
์ฐ์ Firebase๋ฅผ ํตํด ํ์๊ฐ์
, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ด๋ป๊ฒ ํ ์ ์๋์ง ์ ๋ชฐ๋๊ธฐ์ ๊ตฌ๊ธ๋ง์ ํ์๊ณ ์๋ง์ ์๋ฃ ์ค์์ ์ ํ๋ธ ์กฐ์ฝ๋ฉ ์ฑ๋์ Firebase๋ฅผ ํตํ ํ์๊ฐ์
, ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ์ถ๊ฐ ์์์ด ๋์ ๋์๋ค.
โ๏ธ ์ฐธ๊ณ
์ ํ๋ธ ์ฃผ์ - ์กฐ์ฝ๋ฉ ( ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํํ๊ธฐ ์๊ธฐ์ด (ft. ํ์ด์ด๋ฒ ์ด์ค) )
https://www.youtube.com/watch?v=tPqTE14DEUg
๋ ๊ธฐ๋ฅ์ ๊ตฌํํ๊ธฐ ์ํด์ ๋ฐ๋ก ์ ํ๋ธ๋ก ๋ฌ๋ ค๊ฐ์ ์์์ ์์ฒญํ๊ณ , ์๋ ค์ฃผ๋ ์ฝ๋๋ค์ ๊ณต๋ถํ๋ฉด์ ์ค์๊ฐ์ผ๋ก ํ์๊ฐ์
, ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ๋ง๋ค๊ณ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
ํ์๊ฐ์
ํ์ด์ง
๋ก๊ทธ์ธ ํ์ด์ง
์์ ๊ฐ์ด ๊น๋ํ๊ฒ ์ ๋ฆฌ๋ ํ์ด์ง๋ฅผ ๋ง๋ค ์ ์์๊ณ ์์ ํ์๊ฐ์
๊ธฐ๋ฅ๊ณผ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ ์ถ๊ฐํ๋ค.
// ํ์๊ฐ์
๊ธฐ๋ฅ
import { getAuth, createUserWithEmailAndPassword } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-auth.js";
document.getElementById('signUpButton').addEventListener('click', (event) => { // ํด๋ฆญํ์ ๋ ํจ์ ์คํ
event.preventDefault();
const email = document.getElementById('signUpEmail').value;
const password = document.getElementById('signUpPassword').value;
const auth = getAuth(); // auth๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ getAuth() ํจ์ ์คํ
createUserWithEmailAndPassword(auth, email, password) // User๋ฅผ ๋ง๋ค์ด์ฃผ๊ฒ ๋ค๋ ํจ์
.then((userCredential) => {
console.log(userCredential);
// ํ์๊ฐ์
์ฑ๊ณต ์
alert('ํ์๊ฐ์
๋์
จ์ต๋๋ค!');
window.location.href = "login.html"; // login.html๋ก ์ด๋
})
.catch((error) => {
console.log('error');
const errorCode = error.code;
const errorMessage = error.message;
alert(`ํ์๊ฐ์
์ ์คํจํ์ต๋๋ค: ${errorMessage}`); // ์๋ฌ ๋ฉ์์ง ํ์
});
});
// ๋ก๊ทธ์ธ ๊ธฐ๋ฅ
import { getAuth, createUserWithEmailAndPassword, signInWithEmailAndPassword } from "https://www.gstatic.com/firebasejs/9.22.0/firebase-auth.js";
const auth = getAuth(); // auth๋ผ๋ ๋ณ์๋ฅผ ๋ง๋ค์ด์ getAuth() ํจ์ ์คํ
// ํด๋ฆญํ์ ๋ ํจ์ ์คํ
document.getElementById('signInButton').addEventListener('click', (event) => {
event.preventDefault()
const signInEmail = document.getElementById('signInEmail').value;
const signInPassword = document.getElementById('signInPassword').value;
signInWithEmailAndPassword(auth, signInEmail, signInPassword)
.then((userCredential) => {
// Signed in
console.log(userCredential)
const user = userCredential.user;
// ...
})
.catch((error) => {
console.log('๋ก๊ทธ์ธ ์คํจ!')
const errorCode = error.code;
const errorMessage = error.message;
});
})
์์์ ๋ฐ๋ผํ๋ฉด์ ๋ง๋ค์ด์ ๊ทธ๋ฐ์ง ๋ฐ๋ก ์ค๋ฅ๋ ๋ฐ์ํ์ง ์์๊ณ ๋ฌด์ฌํ ํ์๊ฐ์
ํ์ด์ง, ๋ก๊ทธ์ธ ํ์ด์ง๋ฅผ ์์ฑํ ์ ์์๋ค.
๊ทธ ํ ํ Github์ git push ํ์ฌ ๋ชจ๋ ํ์๋ค์ด ๋ณผ ์ ์๋๋ก ํ์๋ค!
ํ๋ก์ ํธํ๋ฉด์ ๋๋ ์ ๐คจ
ํ๋ก ํธ์๋ ๋ถ๋ถ์์ ์ฝ๋๋ฅผ ์์ฑํด์ ํ์ด์ง๋ฅผ ์์ฑํ๋ ๋ถ๋ถ๋ ๋ด๊ฐ ์๊ฐํ๋ ๊ฒ๋ณด๋ค ๋ ์ด๋ ค์ ๊ณ ๋ณต์กํ๋ค... ๋ํ ์๋ก์ด ๊ธฐ๋ฅ๋ค์ ์ถ๊ฐํ๊ธฐ ์ํด ๊ตฌ๊ธ๋ง, ChatGPT ๋ฑ์ ์ด์ฉํด์ ๊ณต๋ถํ๋ ๊ฒ๋ ํฅ๋ฏธ๋ก์ ๊ณ , ์ค์ ๋ก ํ์ด์ง์ ์ ์ ์ฉ๋๋ ๊ฒ๋ ์ ๊ธฐํ๋ค. ๐ฎ๐ฎ
๋ํ ํ๋ก์ ํธ๋ฅผ ์งํํ๋ฉด์ ์๋ก ์๊ฒ ๋ ๋ด์ฉ๋ค์ด ์์ฒญ๋๊ฒ ๋ง์๋ค....
๋ ์ ํ ๋ชจ๋ฅด๊ณ ์์๋ Github์ branch ๊ฐ๋
๋ค๊ณผ Pull Request ๋ฑ๋ฑ ํ์
ํ ๋ ํ์ํ ๋ด์ฉ๋ค์ด ํ๋ก์ ํธํ๋ฉด์ ์ฒ์ ๋ฃ๊ณ ๊ณต๋ถํ๊ฒ ๋์๋ค. ๊ทธ๋ฆฌ๊ณ Github์ git commit ํ ๋ ๊น ๋ฉ์์ง์ ๊น๋ชจ์ง๋ฅผ ์ด์ฉํด์ ์ ํด์ง ๊ท์น์ผ๋ก ์์ฑํ๋ฉด ๋์ ๋ ๊น๋ํ๊ณ ์ ๋ค์ด์จ๋ค๋ ๊ฒ์ ๋งค๋์ ๋์ ํตํด ๋ฃ๊ณ ํ๋ก์ ํธํ๋ ๋์ ์ต์ํด์ง๊ธฐ ์ํด ๊ณ์ ์ฌ์ฉํด์ ์ต์ํด์ ธ์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
โ๏ธ ์ฐธ๊ณ
๊น ๋ฉ์์ง ์ฐธ๊ณ
https://jane-aeiou.tistory.com/93
๊น๋ชจ์ง ์ฐธ๊ณ
https://inpa.tistory.com/entry/GIT-%E2%9A%A1%EF%B8%8F-Gitmoji-%EC%82%AC%EC%9A%A9%EB%B2%95-Gitmoji-cli
์์ง ํ๋ก์ ํธ๊ฐ ์งํ ์ค์ด๊ณ , ํ ๊ฒ๋ ๋ง์ด ๋จ์๊ธฐ ๋๋ฌธ์ ์ฒด๋ ฅ๊ณผ ์ปจ๋์
๊ด๋ฆฌ๋ฅผ ์ํ๋ฉด์ ์ด๋ฒ ์ฃผ์ ํ๋ก์ ํธ๋ฅผ ์ ๋ง๋ฌด๋ฆฌํ์ผ๋ฉด ์ข๊ฒ ๋ค. ์ง๊ธ๊น์ง ๋ฌธ์ ์์ด ์ ์งํ๋๊ณ ์์ด์ ๊ธฐ๋ถ์ด ์ข๋ค ๐๐๐
'Today I Learned(TIL) > ์คํ๋ฅดํ ๋ด์ผ๋ฐฐ์์บ ํ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
๋ฏธ๋ ํ๋ก์ ํธ_Day 4 (1) | 2024.11.08 |
---|---|
๋ฏธ๋ ํ๋ก์ ํธ_Day 3 (21) | 2024.11.07 |
๋ณธ์บ ํ ์์๐๐๐ + Git, Github (4) | 2024.11.04 |
4์กฐ S.A (7) | 2024.11.04 |
์น ๊ฐ๋ฐ ์ข ํฉ_5์ฃผ์ฐจ (5) | 2024.11.01 |