Today I Learned
-
form에서 put, delete를 지원하지 않는 이유Today I Learned 2020. 1. 18. 15:06
왜 안될까? form을 사용해 DB 데이터를 사용하다보면 PUT, DELETE는 왜 지원하지 않는지 의문을 가질 수 있다. 보통 POST를 override 하는 방식으로 우회해서 사용하는데 왜 이렇게 해야만 하는지 그 이유를 조사해보았다. W3C에서 이와 관련된 논의를 진행한 적이 있는데 Ian Hickson이 “PUT을 form 메소드로 사용한다는 것은 말도 안 된다. 네가 form payload를 통해 PUT을 해야할 일은 없을 것이다. DELETE도 payload가 없어야만 말이 된다. 그러니 역시 form에서 제공할 이유가 없다.” 라는 반박으로 인해 초기 HTML5 draft에는 잠시 구현이 되었으나 다시 사라진 것 같다. draft에서 지원했던 것 또한 결국, HTML form을 우회해서 가능..
-
sequelize includeToday I Learned 2020. 1. 18. 14:02
문제 sequelize를 이용하면 raq query에서 사용하던 join 문을 직접적으로 사용할 수 없다. 그러나, 프로젝트 진행 중에 join 할 부분이 생겨 다른 대안이 있는지 조사해보았다. 해결 sequelize에는 include option을 이용해 join 역할을 수행할 수 있다. routes/board/comment/index.js findAll 메소드에 include option을 바꿔 join 을 수행할 수 있었다. 출처 https://velog.io/@cadenzah/sequelize-document-1 Sequelize 공식 Document - (1) Model Usage 모델 사용법 - 이 글은 4. Model Usage를 번역한 글입니다. - 아직 입문자이다보니 오역이 있을 수 있습..
-
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 헤더에 추가해준다.