분류 전체보기
-
hasMany와 belongsTo 차이점Today I Learned 2020. 1. 18. 13:59
문제 예제와 같이, 1:N 관계를 맺기 위해서 hasmany()와 belongsTo()를 이용했다. 그러나, 똑같은 외래키가 중복되서 생성되는 문제점이 발생했다. 일단, hasmany()를 제거하고 belongsTo() 만 사용해서 DB를 사용하였지만, 이 둘의 차이점을 조사해서 더 적절하게 사용해야할 필요성을 느꼈다. 이 둘의 차이점 상선에서 근무하는 선원들을 관리하는 데이터베이스를 관리한다고 가정해보자. 각 배에서는 선원들이 근무할 것이고, 배는 여러 선원들이 일할 수 있고 선원들은 한 배에서만 일할 수 있는 1:N 관계이다. 이러한 관계를 다음과 같은 메소드로 정의할 수 있다. Member.belongsTo(Ship); 이 메소드는 getShip() 메소드로 해당 선원이 어떤 배에서 근무하는지 확인..
-
react session 보관 문제Today I Learned 2020. 1. 15. 21:49
문제 서버로부터 받은 세션을 유지하고 다른 페이지로 넘어갈 때 사용해야 하는데 다른 페이지로 넘어가면 인증되지 않았다는 오류가 발생한다. 그러나, 브라우저 내에서는 세션이 존재한다. 해결 axios에서 cookie를 교환할 때 withCredentials를 true로 바꿔줘야 한다. 그러나, 설정이 되면 CORS issue가 발생해 구글링 해보았다. 동일한 문제를 겪은 한 블로거가 친절하게 해결법을 제시해 그대로 따라해보았다. 먼저, withCredentials 설정을 전역 구역으로 올리고 서버 측에서 origin: '*' 을 클라이언트인 origin: 'http://localhost:4000' 로 변경했다. 그 결과 정상적으로 동작에 서버로부터 게시글 조회를 할 수 있게 되었다. client : /sr..
-
CORS cross domain issueToday I Learned 2020. 1. 15. 17:21
문제 react.js 클라이언트로부터 node.js로 구축한 API 서버에 서비스를 요청할 때, CORS cross domain issue가 발생했다. 이 문제는 다른 도메인 서버에 요청하는 것을 보안 문제로 간주해 이를 막는 것이다. 해결 이 문제는 서버측에서 CORS를 활성화시켜 cross domain을 허용해 해결할 수 있다. app.js origin은 허용하고자 하는 주소를 뜻하며, credentials는 true로 설정하면 모든 res 헤더에 추가해준다.
-
PassportJavascript/Node.js 2020. 1. 15. 10:34
passport란? 페이스북, 구글과 같은 기존의 SNS 서비스 계정을 이용해 로그인을 하도록하는 연동 기능을 수행하는 모듈 로컬, 페이스북, 구글 등 다양한 서비스를 이용할 수 있으나, 각각 필요한 서비스 별로 설치 해야한다. 예를 들어, 로컬과 카카오톡을 사용할 경우 아래와 같이 설치한다. app.js module/passport/index.js module/passport/kakaoStrategy.js module/passport/Log.js routes/Auth/index.js 문제 app.js에서 passport initialize(), session() 메소드를 호출했음에도 불구하고, 초기화 관련 오류가 발생했다. 해결 app.js에서 설정 관련 코드 라우트 호출 함수 위에서 배치하는 것이 좋..
-
MYSQL COUNT, ASToday I Learned 2020. 1. 13. 11:49
문제 pagination 구현 도중, 클라이언트에게 최대 페이지 수를 전송하지 않아 빈 페이지를 출력하는 문제가 발생했다. 해결 MYSQL의 query를 이용해 최대 페이지 수를 구하고 response data에 추가해야 한다. 이를 구하기 위해 COUNT와 AS 문이 필요하다. COUNT를 이용해 총 row(document) 수를 구하고 response data에 추가하기 쉽도록 AS 문으로 원하는 변수명으로 바꿔준다. model/Board.js maxPage라는 쿼리 적용 함수를 따로 만들어 사용했다. AS 를 이용해 변수명을 cnt로 변경했다. routes/boards/index.js count 문을 이용해 총 row 수를 구하고 페이지 당 보여줄 게시글의 수(3개)로 나누면 최대 페이지 수가 나온다.
-
.envToday I Learned 2020. 1. 13. 10:57
dotenv .env 파일에 따로 환경변수를 저장할 수 있다. 그러면 DB나 다른 자신의 정보를 .env 파일에 분리해서, gitignore 파일로 그 정보만 따로 제외하고 공유 할 수 있다. 설치 .env 파일에서 환경변수를 로드 하기 위해서 dotenv 모듈을 사용한다. npm install --save dotenv 사용법 프로젝트 루트 경로에 .env 파일을 생성하고 해당 파일에 DB 접속 정보를 입력한다. DB_NAME=DotENV DB_USER=root DB_PASS=1234 DB_HOST=localhost .env routes/index.js 설정파일 사용 시 단점 설정파일의 확장자는 json 혹은 js 파일인데 통신 시, 암호화되지 않아 해킹의 위험이 있다. env를 사용하면 dotenv 모..
-
Javascript에서 === 을 권장하는 이유Today I Learned 2020. 1. 10. 12:25
공통점 둘 다 논리 연산자로서 피연산자들이 동일한지 비교해주는 연산을 수행한다. 차이점 ==는 Equal Operator이고, ===는 Strict Equal Operator이다. ==는 a == b 라고 할때, a와 b의 값이 같은지를 비교해서, 같으면 true, 다르면 false라고 한다.(값만 같으면 true이다.) 반면에, ===는 Strict, 즉 엄격한 Equal Operator로써, "엄격하게" 같음을 비교할 때 사용하는 연산자이다. ===는 a === b 라고 할때, 값과 값의 종류(Data Type)가 모두 같은지를 비교해서, 같으면 true, 다르면 false라고 한다. ==의 단점 ==은 비교 연산을 수행하기 이전에 두 피연산자를 강제적으로 같은 데이터 타입으로 변환한다. 이러한 변화..