본문 바로가기

프로젝트 개발 기록/[개발] trouble shooting14

[MySQL 8.0] 초기 세팅 이번에 MySQL 세팅을 다시 하면서 다시 검색하는 번거로움을 줄이고자 정리해본다! 1. 서버 접속 $ mysql -u root -p 이때 -u 옵션은 user를 뜻하고 -p 옵션은 password를 뜻한다. 이때 접속하고자 하는 사용자를 선택한다. 2. 사용자 추가 CREATE USER 'user-name'@'localhost' IDENTIFIED BY 'user-password' FLUSH PRIVILEGES; 이렇게 수정을 해주고 FLUSH PRIVILEGES; 명령어를 사용하게 되는데 FLUSH는 버퍼 내용을 지우고 버퍼링된 데이터를 파일에 저장해준다. 그래서 위에서 변경한 내용이 적용시켜 주는 명령어이다. 3. 유저 정보 확인하기 SELECT USER, HOST FROM mysql.user; 3.. 2022. 10. 19.
잃고나니 보이는 것들... 랜섬웨어 평화롭던 어느날.. 이전 프로젝트에서 인공지능 파트 서버를 실행시켰는데 엥 디비가 왜 없지? 🤔 급하게 mysql 서버에 접속해봤다. 🤔 골드? 아 아니네. 갓? 래...랜..서엄??????? 원래 내 사랑스러운 테이블이 없더라.. 내 자식들은 사라지고 남의 자식이 이사와 있네? 누구냐 넌 그래 내 데이터 훔쳐가고 너 뭐 넣어놨니? 정성스럽게도 적어놨다... 그래... 데이터 빼앗긴 기념으로 랜섬웨어가 무엇인지 공부해보자! ^_^ 공부할 기회다! 랜섬웨어 몸값을 의미하는 랜섬(Ransom)과 소프트웨어(Software)의 합성어로 시스템을 잠그거나 데이터를 암호화하고 잠금 해제나 복호화를 빌미로 금전을 요구하는 악성프로그램이다. 위에서는 데이터를 빌미로 비트코인을 달라고 했다; 이때, 랜섬웨어 공격수법은.. 2022. 10. 18.
React app build 해서 배포했는데 CSS 적용 안되는 에러 해결 방법 우선 build 후 css 적용이 안되는 것의 원인은 다양하다. 그 중 내가 겪은 에러와 해결 방법에 대해 포스팅하고자 한다. 1. 문제 상황 배포된 사이트에서 main.css를 확인해본 결과 build된 css는 모두 잘 적용이 되었고, 스케줄 페이지의 css가 빌드되지 않은 것을 확인했다. 이유를 알고 보니..! 2. 문제 원인 💡 front의 GlobalStyle.js의 코드 중에서 아래 코드가 있는 것이 문제였다. @import url('https://webfrontworld.github.io/SCoreDream/SCoreDream.css%27'); npm run build나 yarn build를 통한, 웹팩(WebPack)을 이용한 번들링을 통해 build 폴더를 만들게 된다. 이 과정에서 위 .. 2022. 7. 1.
React build해서 배포할 때 sourcemap 제거 때는... React 프로젝트를 배포하기 위해 build 하던 중.. 힘차게 yarn build를 실행시키는 동시에 찝찝한 컴파일 warning 메세지를 보았다..! 콘솔에 뭐가 이렇게 찍히지?? 콘솔에 찍힌 source map 은 어떤 것일까?! 지금부터 알아보자! 😊 1. webpack CRA로 React 프로젝트를 구성하는 경우는 webpack에 의해 번들링 되어 난독화되고 압축된다. 이렇게 압축되면 디버깅하기가 힘들어진다. 그래서 source map이 필요하다. 2. source map 일반적으로 React App을 배포할 때는 배포를 위해서 Build를 하게 된다. 이때 source map은 빌드한 파일과 원본 파일을 연결시켜준다! Build 파일은 성능을 위해서 압축되어 있는데 이때 오류가 생.. 2022. 7. 1.
[Flask] AttributeError: module 'jwt' has no attribute 'decode' 오류 해결 방법 🥺 문제 상황 local에서 테스트 한 다음 배포를 했을 때 로그인 후 서비스를 이용하면 500 에러가 나왔다. 아니!! 왜 안돼??? 침착하게 로그를 확인해보자. Docker로 배포했기 때문에 아래 명령어로 컨테이너 로그를 확인했다. $ docker logs 로그를 확인해보니 jwt 모듈 에러였다. 💡 문제 해결 JWT와 PyJWT가 모두 설치된 경우 문제가 발생한다. 나는 분명 PyJWT만 install 했는데 함께 설치된 것이다. 그래서 import 할 때 다른 라이브러리 JWT를 가져와서 생긴 문제이다. requirements.txt를 확인하면 두가지가 함께 설치된 것을 볼 수 있다. 기존에 설치된 패키지를 모두 삭제하고 다시 PyJWT를 설치하면 문제를 해결할 수 있다. $ pip uninsta.. 2022. 6. 30.
[AI] 자연어처리, konlpy 설치 현재 AI 웹서비스를 진행하고 있다. 우리 서비스의 메인 기능은 자신의 증상을 문장으로 작성하면 영양제 추천을 해주는 서비스이다. 이때, 형태소 분석을 위해서 사용하는 모듈이 konlpy 인데 이 친구 참.. 설치가 쉽게 안된다. 스쳐지나간 오류 지옥 ㅎ.. 해결하면 다음 에러가 나타나고... 0. KoNLPy 한국어 정보처리를 위한 파이썬 패키지이다. 명사 뿐 아니라 모든 품사의 형태소를 알아내려면 morphs라는 명령을 사용한다. konlpy 내 클래스는 Java 기반으로 JDK 설치가 필요하다. 1. JAVA 설치 설치 사이트 https://www.oracle.com/java/technologies/downloads/ 현재 운영체제에 맞게 설치하면 된다. 2. 환경변수 설정 환경변수를 설정해야 JA.. 2022. 6. 23.
파이썬 가상 환경(virtualenv)과 Flask 서버 구축, pip freeze vs pipreqs 파이썬을 사용하여 프로젝트를 진행할 때엔 가상 환경을 구축한 뒤 개발을 권장하고 있다. 가상 환경을 구축하여 프로젝트를 하는 이유는 프로젝트 마다 라이브러리의 버전이 다를 수 있기 때문에 프로젝트 내에 버전을 일치시켜 독립적으로 개발하기 위해서이다. 1. 설치 $ pip install virtualenv 2. 프로젝트 폴더 생성 $ virtualenv "프로젝트폴더명" 나는 프로젝트 이름을 app 으로 했다. 이렇게 폴더가 생성된다. 3. 가상환경 시작 위에서 생성한 app 폴더로 cd app 해서 다음 명령어를 실행한다. 그러면 가상환경이 시작된다. 가상환경 명이 (app) 처럼 뜬다면 정상적으로 실행된 것이다. $ source ./Scripts/activate 이제 여기서 원하는 패키지를 설치하면 된.. 2022. 6. 18.
[Error: TS(2339)] TypeScript에서 catch(error) 에서 error message 사용하기 💡문제 상황 JavaScript에서 catch 문에서는 error.message를 쓰는 경우가 많았다. TypeScript에서도 JS와 같이 코드를 작성하니 다음과 같은 오류가 생겼다. TypeScript는 error의 타입을 unknown을 기본값으로 갖는다. 그래서 catch 절 error 변수에 Error 타입을 넣어보았다. 하지만 뚜둥! 다음과 같은 오류가 생겼다. catch 문에서 발생하는 에러가 Error 객체가 아닌 에러일 수도 있기 때문에 Error 타입을 지정해줄 수 없다. 따라서 error가 Error 객체라면 error.message를 반환하고 다른 객체라면 error 자체를 stringify 해서 반환하자. 💡 해결 방법 catch문에 사용할 error util 함수를 만들었다. e.. 2022. 6. 15.
hard delete(물리삭제)와 soft delete(논리삭제), sequelize에서 구현 1. hard delete (물리삭제) : 직접 데이터를 삭제하는 방법이다. 삭제한 데이터가 추후에 조회할 필요가 없을 때 사용하는 방식이다. 2. soft delete (논리삭제) : 데이터를 삭제하지 않고 삭제 여부를 확인하는 칼럼에 값을 넣는 방식이다. 현업에서는 user 데이터는 soft delete를 한다고 한다. 👩‍💻 sequelize에서 구현 이제 sequelize에서 User 테이블에 soft delete, hard delete 하는 방법을 알아보자. 👉 공식 문서 1) Paranoid 옵션 sequelize는 모델을 정의할 때 deletedAt이라는 칼럼을 추가하는 옵션을 제공한다. paranoid: true 로 하면 자동으로 deletedAt 칼럼이 생긴다. 나는 칼럼명을 스네이크 표.. 2022. 6. 13.
[Error: TS(2339)] Express Request 확장하기 😥 문제 상황 1. Token 검증 Middleware 작성 토큰 검증 코드를 작성하면서 req.currentUserId로 decoded한 값을 할당하려던 중 js 프로젝트에서는 오류가 없었던 코드가 ts에서 오류가 생겼다. // ./src/middlewares/loginRequired.ts ... try { if (!process.env.JWT_SECRET_KEY) { throw new Error("JWT_SECRET_KEY가 존재하지 않습니다."); } const secretKey: string = process.env.JWT_SECRET_KEY; const jwtDecoded: any = jwt.verify(userToken, secretKey); const userId = jwtDecoded.us.. 2022. 6. 9.
Swagger를 활용한 API 명세와 개발 협업 2탄 0. 개요 💡 swagger를 명세하는 방법은 다양하다. 모듈을 설치해서 각각의 router 파일 상단에 직접 명세 yaml 파일이나 json 파일 하나에 모든 API 명세를 하는 방법 [ 이전 프로젝트에서 2번 방식을 선택한 이유 ] 개인적으로 라우터가 지저분해지는 것을 정말 싫어한다. 1번 방식은 코드가 복잡해지고 명세와 router 코드가 함께 있어 코드 가독성이 떨어졌다. 그래서 지난 프로젝트에서는 하나의 파일에 모든 API를 설계하는 방식으로 협업을 했다. [ 아놔.. 어디 괄호가 잘못된거야? ] 일단 yaml 파일, json 파일 두가지 모두 들여쓰기 또는 괄호가 중요하다. 그런데 점점 API가 많아질수록 괄호나 들여쓰기 실수가 발생했을 때 오류를 찾는 과정이 정말 피곤했다.. (정말정말) 🤣.. 2022. 6. 4.
[MongoDB] mongoose 트랜잭션 우선 트랜잭션에 대한 자세한 개념 공부 이후 실제 코드로 실습을 진행했다. 개념 포스팅 보러가기 👉[Database] 트랜잭션과 무결성·정합성, 면접 질문 트랜잭션 적용(좋아요 기능)한 프로젝트 보러가기 👉 GitHub Source 1. 사용 목적 '좋아요' 기능을 개발할 때 여러 유저가 동시에 좋아요를 누르는 경우가 발생한다. 이때 데이터 정합성 보장을 목적으로 모두 완벽하게 처리(Commit)하거나 또는 처리하지 못할 경우에는 원 상태로 복구(Rollback)해서 작업의 일부만 적용되는 현상이 발생하지 않게 구현하고자 했다. 2. 구현 index.js const db = mongoose.connection; export { db } like.js - 좋아요 스키마 const likeSchema = n.. 2022. 5. 28.
[TDD] 테스트 코드 작성 1. What is "Testing"? 제품 or 서비스의 품질을 확인 소프트웨어의 버그를 찾음 2. What is "TDD"? Test-driven development : 테스트 주도 개발 개발 (코드 작성)전 테스트 코드를 먼저 작성하는 방법이다. Why? 사용자 입장에서 코드 작성 모든 요구 사항(목표)에 대해 점검 시스템 전반적인 설계 향상 개발 집중력 향상 TDD 사이클 실패하는 테스트를 구현한다. 테스트가 성공하도록 프로덕션 코드를 구현한다. 프로덕션 코드와 테스트 코드를 리팩토링한다. 3. 단위 테스트(Unit Test) 단위 테스트는 개발자가 수행하고 자신이 개발 한 코드 단위를 테스트합니다. 2022. 5. 19.
Swagger를 활용한 API 명세와 개발 협업 Swagger API 문서를 자동으로 시각화해주는 툴 1️⃣ 장점 문서 자체에 API 테스트 환경 구축 API 명세와 테스트를 한번에 쉽고 빠르게 할 수 있다. OpenAPI 규격에 맞게 API에 대한 정보를 실시간으로 업데이트 한다. > 스웨거 허브 (Swagger Hub) : https://swagger.io/tools/swaggerhub/ 2️⃣ 사용 방법 특정 프로그래밍 언어를 이용해서 Swagger API를 종속적으로 이용 (ex.Spring) yaml 파일 or json 파일로 독립적으로 명세하는 방법 3️⃣ NodeJS + Express에서 사용 우리 팀은 json파일로 swagger를 정의했다. 2022. 4. 20.
반응형