[TIL/React] 2023/08/02
Authentication in ReactJS Using Firebase ๐ ํ๋ก์ ํธ์ ์งํ์ ์ํด, ๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์ ๊ธฐ๋ฅ(Authentication)์ ๋ํ ํ์ต์ ํ์๋ถ๊ฐ๊ฒฐํ๋ค. ์ธ๊ตญ์ธ ํ๋ก๊ทธ๋๋จธ ๋๋์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ค. reference: https://w
Authentication in ReactJS Using Firebase ๐
ํ๋ก์ ํธ์ ์งํ์ ์ํด, ๋ก๊ทธ์ธ๊ณผ ํ์๊ฐ์ ๊ธฐ๋ฅ(Authentication)์ ๋ํ ํ์ต์ ํ์๋ถ๊ฐ๊ฒฐํ๋ค. ์ธ๊ตญ์ธ ํ๋ก๊ทธ๋๋จธ ๋๋์ ์๋ฃ๋ฅผ ์ฐธ๊ณ ํ๋ค.
reference: https://www.youtube.com/watch?v=Vv_Oi7zPPTw
src/App.js ๐ก
import React from "react";
import SignIn from "./components/auth/SignIn";
import SignUp from "./components/auth/SignUp";
import AuthDetail from "./components/AuthDetail";
function App() {
return (
<div>
<SignIn />
<SignUp />
<AuthDetail />
</div>
);
}
export default App;
์ต์๋จ App ํ์ผ์์๋ SignIn, SignUp, AuthDetail ์ปดํฌ๋ํธ๋ฅผ ๋ ๋๋งํ๊ณ ์๋ค. ํฅ๋ฏธ์ง์งํ๊ตฌ๋ง!
src/components/auth/SignIn.js ๐ก
import { signInWithEmailAndPassword } from "firebase/auth";
import React, { useState } from "react";
import { auth } from "../../firebase";
const SignIn = () => {
const [email, setEmail] = useState("");
const [password, setPassword] = useState("");
const signIn = (e) => {
e.preventDefault();
signInWithEmailAndPassword(auth, email, password)
.then((userCredential) => {
console.log(userCredential);
})
.catch((error) => {
console.log(error);
});
};
return (
<div>
<form onSubmit={signIn}>
<h1>Log In to your Account</h1>
<input
type="email"
placeholder="Enter your email"
value={email}
onChange={(e) => setEmail(e.target.value)}
></input>
<input
type="password"
placeholder="Enter your password"
value={password}
onChange={(e) => setPassword(e.target.value)}
></input>
<button>LogIn</button>
</form>
</div>
);
};
export default SignIn;
SignIn ์ปดํฌ๋ํธ๋ ์ฐ์ 'Log In to your Account'๋ผ๋ ์ ๋ชฉ์ ๋ฐํํ๋ค. ๊ทธ ๋ค์ ๋ ๊ฐ์ input ํ๋์ ํ ๊ฐ์ ๋ฒํผ์ ๋ณด์ฌ์ค๋ค. return ๋ถ๋ถ์ ๋ฑํ ์ด๋ ค์ด ์ ์ด ์๋ค. ๋ก๊ทธ์ธ ๋ฒํผ์ ํด๋ฆญํ๋ ์๊ฐ form ํ๊ทธ์์ ์ ๋ ฅ๋ ๋ฐ์ดํฐ๊ฐ signIn ํจ์์ event ๊ฐ์ฒด๋ก ์ ๋ฌ๋๋ค. ์ง์ง๋ก? ใ ใ console ์ฐ์ด๋ด!

signIn ํจ์๋ ์ ๋ ฅ๋ฐ์ ๋ฐ์ดํฐ์ ๋ํด์ ๊ฐ์ฅ ๋จผ์ preventDefault ํจ์๋ฅผ ํธ์ถํ๋ค. form ์ ์ถ ์ ํ์ด์ง ์๋ก๊ณ ์นจ์ ๋ฐฉ์งํ๋ ์ญํ ์ ์ํํ๋ค.
signInWithEmailAndPassword๋ firebase์์ ์ ๊ณตํ๋ ํจ์ ์ค ํ๋๋ค. ์ด ํจ์๋ auth๋ผ๋ firebase์ ์ธ์ฆ ๊ฐ์ฒด์ email, password๋ฅผ ๋ฐ์์ ๋ก๊ทธ์ธ์ ์๋ํ๋ ํจ์์ธ๊ฐ ๋ณด๋ค. ๋๋ ๋งํ๋ ๊ฐ์๋๊น ์ผ๋จ ์ด ์ ๋๋ง ์ดํดํ๊ณ ๋์ด๊ฐ๊ฒ ๋ค.

then์ ๋ก๊ทธ์ธ์ด ์ฑ๊ณต์ ์ผ๋ก ์ด์ฃผ์ด์ก์ ๋, 'userCredential' ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ ์คํ๋๋ ์ฝ๋ฐฑ ํจ์์ด๋ค. 'userCredential' ๊ฐ์ฒด์๋ ๋ก๊ทธ์ธํ ์ฌ์ฉ์์ ๋ํ ์ ๋ณด๊ฐ ํฌํจ๋์ด ์๋ค.

catch๋ ์๋ฌ๊ฐ ๊ฐ์ง๋๋ฉด ์ฝ์๋ก ํด๋น ์๋ฌ๋ฅผ returnํ๋ ์ญํ ์ ์ํํ๊ณ ์๋ค.
์์ฝ ๐ข
1. ์ ๋ชฉ, input, button ๋ฆฌํด 2. ๋ฒํผ ํด๋ฆญํ๋ฉด onSubmit์ ์ํด form์์ ๋ฐ์ํ ๋ฐ์ดํฐ๊ฐ event ๊ฐ์ฒด๋ก signIn ํจ์๋ก ์ ๋ฌ๋จ 3. signIn ํจ์์์๋ ์๋ก๊ณ ์นจ์ ๋ฐฉ์งํ๊ณ signInWithEmailAndPassword ํจ์๋ฅผ ํตํด ๋ก๊ทธ์ธ์ ์๋ํจ 4. ์ฑ๊ณตํ๋ฉด userCredential์ด๋ผ๋ ๊ฐ์ฒด๋ฅผ ๋งค๊ฐ๋ณ์๋ก ๋ฐ์์ console์ returnํ๊ณ , ์คํจํ๋ฉด error๋ฅผ returnํจ
ํ๊ณ ๐ต
๋๋จธ์ง ๋ถ๋ถ์ ๋ด์ผ ์ ๋ฆฌํ๊ณ , ์๊ฐ์ด ํ๋ฝํ๋ฉด crud์ ๊ดํ ์๋ฃ๋ฅผ ํ์ตํ๋๋ก ํ๊ฒ ๋ค.
์ด๋ฒ์ ์ํ๋ ๋ชป ํ๋ ํ๋ ๊ฒ์ ๊ทธ๋ ๊ฒ ์ค์ํ์ง ์์ต๋๋ค. ์์ผ๋ก ๊ธฐํ๊ฐ ์๋ฐฑ, ์์ฒ ๋ฒ ๋ ์๋ค๋ฉด ๋ง์ ๋๋ค. ๊ทธ๋ฐ ๊ฒฝ์ฐ ๋ ์ค์ํ ๊ฒ์ ์ง๊ธ ์ํ๋๊ฐ ์๋๋ผ ์ง๊ธ ์๋ผ๋๋ ๊ฒ์ ๋๋ค. ์ค์ ๋ฐ๊นฅ์ธ์์์๋ ํ ๋ฒ์ ํ๊ฐ๋ฆ์ผ๋ก ๋์ ๋ฏธ๋๊ฐ, ์ฐ๋ฆฌ์ ๋ฏธ๋๊ฐ ๊ฐ๋ฆฌ๋ ๊ฒฝ์ฐ๋ณด๋ค๋ ์๋ฐฑ, ์์ฒ ๋ฒ์ ๋์ ์์ ์์ํ ์ ํด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ ๋ง์ต๋๋ค.
-ํจ๊ป ์๋ผ๊ธฐ: ์ ์์ผ๋ก ๊ฐ๋ ๊ธธ ไธญ
More to read
Amazon VPC Architecture ์ดํดํ๊ธฐ
์๋ก์ด ํ๋ก์ ํธ๋ฅผ ๊ธฐํํ๋ฉฐ, ๊ฐ๋ฐ์์ ๋ฌด์์ ๊ฐ์ฅ ๋จผ์ ๊ณ ๋ฏผํด์ผ ํ๋์ง ๋ค์ ๋์๋ณด๊ฒ ๋์์ต๋๋ค.ํ๋๋ ํ๋ก ํธ์๋๊ฐ ๋ชจ๋ ์ค๊ณ์ ์ถ๋ฐ์ ์ด๋ผ๊ณ ๋ฏฟ์์ต๋๋ค. ์ ์ ๊ฐ ๋ฌด์์ ๋ณด๊ณ , ์ด๋ค ํ๋ฆ์์ ๋จธ๋ฌด๋ฅด๊ณ ์ดํํ๋์ง์ ๋ํ ์ดํด ์์ด ์๋น์ค๋ฅผ ๋ง๋ ๋ค๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ์๊ฐํ๊ธฐ
'์์ฌ์ดํธ'ํ๋ก ํธ์๋ ๊ด์ ์ผ๋ก ์๊ณ ๋ฆฌ์ฆ ์ดํดํ๊ธฐ
์ค๋๋ง์ ๋ฐฉ๋ฒ๋ก ์ ๊ดํ ๊ธ์ ์ฐ๊ฒ ๋์์ต๋๋ค. ์ต๊ทผ ์ํฉ์ ์ด๋ ์ต๋๋ค. SSAFY์์๋ ํ๋ฃจ์ ์์ฒญ๋ ์์ ์๊ณ ๋ฆฌ์ฆ ๋ฌธ์ ๋ค์ ๊ณผ์ ๋ก ์ํํ๊ฒ ๋ฉ๋๋ค. ๊ทธ ๊ณผ์ ์์, '๊ตฌํ๋ ฅ'์ด ๋งค์ฐ ๋จ์ด์ง๋ค๋ ์๊ฐ์ด ๋ค์์ต๋๋ค. ์์ ํ ์ด๋ ค์ด ๋ฌธ์ ๋ผ๋ฉด '์์ฌ์'์ด๋ผ๋ ๊ฐ์ ์กฐ์ฐจ ๋๋ผ์ง
SubnetVPC ์ค๊ณ์ ์์: IP์ Subnet
๋ฐ๋ณต๋๋ ๋ฃจํด ์์์ ์ป์ ์์ ๊ฐ์ ๋ฐํ ์ผ์, ์ด์ ๋ ๊ธฐ์ ์ ์คํํธ๋ผ์ ๋ํ๊ธฐ ์ํ ๊ฐ์ธ ํ๋ก์ ํธ์ ์ฐฉ์ํ๊ณ ์ ํฉ๋๋ค.์ด๋ฒ ํ๋ก์ ํธ์ ๋ชฉํ๋ ๋จ์ํ ํฌํธํด๋ฆฌ์ค ๊ตฌ์ถ์ ๋์ด, ์ค์ ์๋น์ค ์์ค์ ๋ธ๋ก๊ทธ ์์คํ ๊ตฌํ๊ณผ ๋ค๊ตญ์ด ์ฒ๋ฆฌ ์ ์ฉ ๋ฑ ์ค๋ฌด์ ๊ฐ๊น์ด ์ญ๋์ ํ ๋จ๊ณ