<오늘 한 일>
- 소셜(구글) 로그인 수정
- 백엔드와 통신하는 함수 중 한 줄짜리 간단한 get요청을 개별 js 파일에 넣었었는데 아무래도 api.js로 다 빼는 게 좋지 않을까 하는 피드백이 와서 그걸 수정했다
- 함수를 2개 만들어야 하나 싶어서 어제 굳이 개별 js에 한 줄짜리로 넣은 거였는데 다시 생각해보니까 함수를 2개 만들 필요가 없었다
// api.js
// 구글 로그인 API
export async function googleAPI(google_token) {
if (google_token == undefined) {
const response = await fetch(`${backendBaseURL}/users/google/`, { method: 'GET' })
const responseJson = await response.json();
return responseJson;
} else {
const response = await fetch(`${backendBaseURL}/users/google/`, {
method: "POST",
headers: {
"Content-Type": "application/json"
},
body: JSON.stringify({ access_token: google_token })
});
const responseJson = await response.json();
return { response, responseJson };
}
}
- if문을 활용해서 매개변수가 있는 경우 post 요청으로 보내면 되고 없으면 get요청으로 보내면 된다!
- 원래 백엔드로 get요청을 보내는 함수가 있는 곳은 이렇게 수정했다
// signin.js
// 구글 로그인
async function googleSignin() {
googleAPI().then((responseJson) => {
const google_id = responseJson
const scope = 'https://www.googleapis.com/auth/userinfo.email https://www.googleapis.com/auth/userinfo.profile'
const param = `scope=${scope}&include_granted_scopes=true&response_type=token&state=pass-through value&prompt=consent&client_id=${google_id}&redirect_uri=${frontendBaseURL}`
window.location.href = `https://accounts.google.com/o/oauth2/v2/auth?${param}`
})
}
// 구글 로그인 function 실행
document.getElementById("googleSigninBtn").addEventListener("click", googleSignin);
- 추천 기능
- 어제 했던 건 csv 파일을 읽어서 했는데 이제 loaddata로 데이터베이스에 json 파일을 저장했기 때문에 데이터베이스에서 데이터를 불러와야 한다
- 그래서 나중에 배포하면 불러오는 부분을 수정해야 하기 때문에(데이터베이스가 달라서) 그냥 아예 배포할 때 사용할 postgresql을 개발환경 데이터베이스로 사용하기로 했다
- 그래서 그거 설치하고 설정하느라 시간이 걸려서 아직 정리도 다 못 했다
- 정리해서 팀원들한테도 공유해야 하는데..ㅠ 내일 해야 할 듯
import sqlite3
# 데이터베이스 연결
con = sqlite3.connect("db.sqlite")
cur = con.cursor()
query = cur.execute("SELECT id, info_name, location, category From exhibitions_exhibition")
cols = [column[0] for column in query.description]
exhibition_df = pd.DataFrame.from_records(data=query.fetchall(), columns=cols)
con.close() # 데이터베이스 연결 종료
- 일단 sqlite로 연결을 이렇게 했었는데 잘 되길래 postgresql도 잘 될 줄 알았다
- 설치하고 vscode에 연동하고 psycopg2 모듈을 설치해서 임포트 하고 했는데 자꾸 에러가 뜨는거다..
- 근데 알고 보니 dotenv를 임포트하고 load_dotenv()를 했어야 했다
- 그렇게 하니 db와 연결은 됐는데 자꾸 query에 none이 담기는거다...후
- 그래서 또 열심히 구글링 해보니까 description이나 fetchall()은 어디 변수에 담지 말고 그냥 사용해야 한다고 한다
- 아니 근데 sqlite로 할 땐 그게 됐는데 왜..?
- 여튼 query 변수를 지우고 그냥 cur로 접근했더니 데이터가 잘 들어오더라...후
import psycopg2, os
from dotenv import load_dotenv
load_dotenv()
# 데이터베이스 연결
con = psycopg2.connect(
host=os.environ.get("DB_HOST"),
dbname=os.environ.get("DB_NAME"),
user=os.environ.get("DB_USER"),
password=os.environ.get("DB_PASSWORD"),
port=os.environ.get("DB_PORT"),
)
cur = con.cursor()
cur.execute("SELECT id, info_name, location, category From exhibitions_exhibition")
cols = [column[0] for column in cur.description]
exhibition_df = pd.DataFrame.from_records(data=cur.fetchall(), columns=cols)
con.close() # 데이터베이스 연결 종료
<느낀 점>
- 오늘 뭔가 많이 했는데 결과물이 없으니 착잡하다
- 정리라도 했어야 했는데 너무 많은 걸 찾아보다 보니 정리가 안 된다
- 게다가 오늘 늦잠 자서 알고리즘 문제도 못 풀었다...
- 이틀 동안 4~5시간 잤다.,..ㅎㅎ
- 오늘은 일찍 자고 내일 오전 중에 정리 싹 한다!!!
<내일 목표>
- postgresql 적용하는 법 정리해서 팀원들한테 알려주기
- 소셜로그인 수정된 부분 반영해서 게시글 수정하기
- 추천 기능 상세 게시글 조회 함수와 연결하기
- 추천 기능 성능 높이기