TIL (27) 썸네일형 리스트형 uuid vs auto increment PK 어떤걸 사용하는게 옳을까? <TIL_2022_08_11> 의문 카카오 등으로 소셜 로그인을 구현할때 서버(카카오) 자체에서 유저 고유의 값(userid)을 받아올 수 있는데, 이를 uuid처럼 아예 유저 테이블의 유일 PK값으로 사용할 수 있지 않을까? 유저 테이블의 PK값으로 어떤걸 쓰는게 옳을까? 해결 소셜 로그인 기능이 포함된 서비스의 DB를 세팅할때 유저 테이블의 PK값으로 다음과 같은 두 가지를 고려할 수 있다. 1. uuid (유저 고유의 값을 암호화 함수에 넣어서 만든 암호값.) 2. Auto Increment Primary key (테이블 자체에서 자동 생성되도록 설정한 id값.) 두 가지 모두 각각의 장단점을 가지고 있다. 각자의 상황에 맞게 판단하여 사용하면 될 것 같다. uuid 장점 - 서로 다른 데이터베이스나 테이블을 합칠때 용이하다. .. 프록시, 리버스 프록시가 대체 뭘까? <TIL_2020_08_09> 프록시 두 PC가 통신할 때 직접 하지 않고 중간에서 대리로 통신하는 것 = ‘프록시’ 포워드 프록시 클라이언트에서 서버로 요청할 때 직접 요청하지 않고 프록시 서버를 거쳐서 요청함. → 서버에서 클라이언트가 아닌 프록시 서버의 IP를 받기 때문에 클라이언트가 누군지 알 수 없음 : 서버에게 클라이언트가 누군지 감춰주는 역할 캐싱 반복적인 요청에 대한 정적 데이터를 저장해두고, 프록시 서버에 캐싱된 내용을 전달해줌 → 웹서버 부하⬇️ 리버스 프록시 애플리케이션 서버 앞에 위치하여 클라이언트가 서버를 요청할때 리버스 프록시를 호출하고, 리버스 프록시가 서버로부터 응답을 받아 다시 클라이언트에 전송 리버스 프록시가 어플리케이션 서버를 감추는 역할을 함 NginX, Apache Web Server 등 로드밸런.. Node.js/Express) PM2 사용법, 코어와 쓰레드 <TIL_2022_08_05> 1. PM2 [NODE] 📚 PM2 모듈 사용법 - 클러스터 / 무중단 서비스 pm2는 node.js 어플리케이션을 쉽게 관리할 수 있게 해주는 Process Manager임 기본적으로 싱글 스레드인 node.js를 멀티 스레드로 관리할 수 있게 해줌. pm2 start 설정 파일 명(보통 ecosystem.config.js)으로 실행 만약 서버가 8코어 16스레드라면, 최대 16개 코어를 사용할 수 있지만 노드가 싱글 스레드이기 때문에 활용을 못하는 문제 → ‘클러스터 모듈'을 통해 단일 프로세스를 멀티 프로세스로 늘릴 수 있다. (마스터 프로세스에서 코어 수만큼 워커 프로세스를 생성해서 모든 코어를 사용하게 함.) 그러한 클러스터 모듈의 관리를 편리하게 해주는게 pm2 pm2의 기능 서비스 서버가 중.. 서버 배포 후 카카오 로그인 KOE006 에러 <TIL_2022_08_04> 서버 배포 후 카카오 로그인 KOE006 에러 KOE006에 대해 검색해보니 redirect URI가 제대로 지정되어 있지 않아서 발생한 에러였다. 하지만 분명 카카오 디벨로퍼스에서 제대로 지정하고 코드에도 작성했는데.. 해결 카카오 디벨로퍼스 redirect uri 허용 페이지에서 서버 uri에 https뿐 아니라 http도 추가해줘야 한다. 왜그런지는 아직 잘 모르겠다 AWS EC2에서 React + Express 프로젝트 배포하기<삽질기> - 1 heroku라는 툴을 이용하면 배포부터 CI/CD까지 간편하게 할 수 있다고 들어서 처음엔 헤로쿠를 사용해서 배포하려고 하였다. 하지만 헤로쿠마저도 1시간 가까이 에러가 해결되지 않아서, '어차피 오래 걸릴거 제대로 배포해보자'라는 생각에 AWS EC2를 사용한 배포에 도전하였다. 현재까지 이해한 바로는, 클라이언트(React)와 서버(Express)를 각각 EC2 인스턴스를 생성하여 따로 배포한다. 서버 인스턴스에 mysql을 설치하여 서버와 mysql을 연결한다. (단, 현재 내가 작업한 mysql은 도커 환경에 올라가 있는데 이걸 어떻게 연결할 수 있는지는 찾아 봐야 한다.) (모두 ubuntu를 사용하였다) 클라이언트(React) 배포 https://2ham-s.tistory.com/349 전체적.. React) 백엔드와 연동하여 좋아요 기능 구현하기 <TIL_2022_07_31> 위 그림과 같이 각 게시글마다 좋아요를 누를 수 있게 하는 기능을 구현하고자 한다. Likes 테이블 생성, 관계 설정 한 명의 유저가 여러 개의 게시글에 좋아요를 누를 수 있고, 한 개의 게시글에도 마찬가지로 여러명의 좋아요가 기록될 수 있으므로, user와 questions 테이블은 서로 N : M(다 대 다) 관계를 갖는다. 이들을 이어줄 인자값으로 likes 테이블을 생성한다. // models/likes.js const Sequelize = require("sequelize"); module.exports = function (sequelize, DataTypes) { return sequelize.define( "likes", { id: { type: DataTypes.INTEGER, allo.. Node.js/Express) Sequelize로 테이블 간 관계성 활용하기 <TIL_2022_07_29> 상황 위와 같이 질문 정보를 표시하는 부분에 질문자의 정보 또한 표시하여야 하는 상황이다. 해결 방안 현재 DB 상의 questions 테이블의 컬럼은 위와 같이 구성되어 있다. 질문자(user)의 nickname값이 필요한데, 이것까지 question 테이블에 컬럼으로 넣지는 않았다. (DB 정규화를 위해) 따라서 질문자의 정보를 얻기 위해서는 FK(Foreign Key)로 지정된 questionerId를 통해 해당 user 테이블로 접근해서 정보를 받아와야 한다. // questions.ctrl.js ... getQuestions: async (req, res) => { // 특정 유저에게 보낸 질문 정보 조회 const userId = req.params.userId; const questions .. React) <Outlet/>의 context를 이용하여 중첩 라우터에 props 넘겨주기 <TIL_2022_07_28> 위와 같은 라우팅 구조에서, 부모 컴포넌트로부터 자식 컴포넌트로 넘기고 싶은 값이 있다면 context props로 넘기면 된다. // 부모 컴포넌트 ... ... 자식 컴포넌트에서 받아올 때는 useOutletContext라는 훅을 사용한다. //자식 컴포넌트 // 구조분해할당. const user = useOutletContext().user 와 같은 뜻. const { user } = useOutletContext(); 이전 1 2 3 4 다음 목록 더보기