일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 웹해킹
- 백준
- 네트워크
- Python
- 웹보안
- 프로그래머스
- 포너블
- node.js
- 리버싱
- kotest
- docker
- Baekjoon
- programmers
- webhacking.kr
- gcp ci/cd
- sequelize
- 사이버보안
- 보안
- nodejs
- spring Batch
- gcp cloud build
- hackctf
- cloud run
- gcp
- Batch
- pwnable.xyz
- 스프링 배치
- 파이썬
- 시스템 해킹
- 회고
목록Node (22)
uju's Tech
개발을 진행하면서 가끔 3개의 테이블을 조인하여 가져오는 경우가 발생한다. 또 ORM 을 쓸 때 간혹 join 할 수 있는 테이블을 각각 선택하여 가져오는 경우가 있는데 이럴 경우 n+1 Problem 이 발생한다. N+1 Problem이란? 스스로 이해한 것을 정리해보면 유저 테이블과 유저 테이블과 연결된 할 일 테이블이 있을 때 , 할 일 테이블의 리스트를 쭉 가져오는 쿼리 1번 해당 쿼리에서 가져온 데이터 N개 만큼 또 일치하는 사용자를 찾는 쿼리 N번. 그래서 N+1 문제가 발생한다고 이해했다. 이를 방지하려면 join를 적절히 이용해줘야 할 것 같다. 아래 링크를 확인해 보면 될 것 같다. https://zetawiki.com/wiki/N%2B1_%EC%BF%BC%EB%A6%AC_%EB%AC%B..
소셜 로그인 개발은 몇달 전 진행했던 개발인데.. notion에 적어두었다가 지금에서야 블로그를 작성합니다 ㅎㅎ.. 페이스북, 카카오, 애플, 구글 이렇게 4가지 소셜 로그인을 진행하였고 두 번째부터 정리해보겠다. 소셜 로그인 구현은 모두 공식문서를 기반으로 구현하였다. 문서를 읽어보면 소셜 회원가입 플로우는 모두 동일한 것 같다. 페이스북에서도 작성했지만 또 작성해보도록 하겠다. 페이스북 회원가입 구현은 아래 링크로 ㅎㅎ https://uju-tech.tistory.com/85 [Node.js] 소셜 로그인 정복하기 - facebook 소셜 로그인 개발은 몇달 전 진행했던 개발인데.. notion에 적어두었다가 지 uju-tech.tistory.com 1. 구글 회원가입 flow 문서를 읽어보면서 이해..
소셜 로그인 개발은 몇달 전 진행했던 개발인데.. notion에 적어두었다가 지금에서야 블로그를 작성합니다 ㅎㅎ.. 페이스북, 카카오, 애플, 구글 이렇게 4가지 소셜 로그인을 진행하였고 먼저 페이스북부터 정리해보겠다. 소셜 로그인 구현은 모두 공식문서를 기반으로 구현하였다. https://developers.facebook.com/docs/facebook-login/web 1. 페이스북 개발자 계정에서 앱 등록하기 앱을 등록하게 되면 앱의 ID가 나오는데 이를 개발에 이용합니다. 2. 어떠한 flow 로 소셜 로그인이 진행되는지 살펴보자. 문서를 읽어보면서 이해한 그대로 도식화해보았다. 1. client가 facebook server로 회원가입 요청 2. facebook server가 accessTok..
개발 진행 중 특정한 상황에 Slack으로 메시지를 보내 확인할 수 있도록 구축해주고 싶었다. 또한 이를 기존 구현하는 프로젝트 내에 구현하는 것이 아닌 lambda 에 올려 서버 부하를 줄이고자 했다. nodejs 에서 slack incoming webhook을 사용하기 위해 아래의 링크를 참고하여 설치를 진행해준다. www.npmjs.com/package/@slack/webhook @slack/webhook Official library for using the Slack Platform's Incoming Webhooks www.npmjs.com npm install @slack/webhook 아래는 프로젝트 디렉토리 구조이다. 이 구조의 폴더는 아래에서 천천히 설명하도록 하겠다. 프로젝트 | |-..
평소와 다름 없이 npm install 을 진행했다. 그런데 처음보는 gyp: No Xcode or CLT version detected! 가 발생하였고 해결하기 위해 구글을 이용해보았다. 구글 서치 결과 대부분의 블로그와 StackOverflow에서 1. 설치된 command line tools 위치를 얻는다. : xcode-select --print-path 2. 해당 폴더 제거 : sudo rm -r -f /Library/Developer/CommandLineTools 3. 재설치 : xcode-select --install BUT. 재설치를 하는 과정에서 소프트웨어 연결을 할수없다는 에러가 뜬다.. 일단 에러메시지를 확인해보면 xcode 때문에 발생하는 에러인 것 같다. (사실 업데이트를 수동으로..
위의 그림과 같은 관계를 갖는 것을 many to one이라고 한다. 하나의 이모티콘은 이모티콘 추천 테이블이 여러개 종속될 수 있다. sequelize 공식 문서를 보면 many to one 관계는 belongsTo 와 hasMany 를 사용하여 관계를 설정해 줄 수 있다고 나온다. 이모티콘 추천 테이블 명을 recommendation 이모티콘 테이블 명을 emoticon이라고 하면 Recommendation.associate = (models) => { Recommendation.belongsTo(models.Emoticon, { foreignKey: { allowNull: false, }, onDelete: 'CASCADE', }); }; Emoticon.associate = (models) => ..
table을 추가하고 칼럼을 추가하는 중 어떤 칼럼의 DataTyes를 json으로 지정해주어야 했다. 최신의 Mysql 버전은 DataTypes.json의 형태로 지원을 하고있다. 하지만 현재 개발하고 있는 Mysql 버전은 json 타입을 지원하지 않아 위와 같이 사용해 주지못한다. 그러면 어떻게 사용할 수 있을까? model에서 getter와 setter을 이용해주면 된다. 1.DataType에는 JSON 대신 TEXT를 사용해주자. 2.getter와 setter을 만들어주자. 아래와 같이 구현을 해줄 수 있다. value: { allowNull: true, type: DataTypes.TEXT, /** * @returns {null|any} */ get() { try { return JSON.pa..
이미 존재하는 테이블에 칼럼을 하나 추가해야하는 작업이 필요해졌다. 먼저 db 마이그레이션과 칼럼 추가를 위해 ./node_modules/.bin/sequelize migration:generate --name [파일명] 을 통해 작성해준다. 추가해야할 칼럼이 유니크 해야하기 때문에 unique : true로 설정해주었다. module.exports = { up: async (queryInterface, Sequelize) => { await queryInterface.addColumn('테이블 명', '추가할 칼럼 명', { allowNull: true, defaultValue: null, type: Sequelize.UUID, unique: true, }); }, down: async (queryIn..