728x90

오류

could not execute statement [Cannot add or update a child row: a foreign key constraint fails (`db`.`posts`, CONSTRAINT `FKam8ar6luvp8afhfu20gfsydo9` FOREIGN KEY (`user_id`) REFERENCES `user` (`user_id`))] [insert into posts (content,created_at,title,updated_at,user_id) values (?,?,?,?,?)]; SQL [insert into posts (content,created_at,title,updated_at,user_id) values (?,?,?,?,?)]; constraint [null]

 

라는 오류가 나옴 


내가 userId  컬럼을 도중에 추가하였었다. 즉 처음부터 있던 게 아니라 나중에 추가한 컬럼이다. 따라서 posts  테이블에 있던 기존 튜플에는 내가 나중에 추가한 컬럼은 비어있는 상태였다. 이 상황이 참조 무결성을 위배한 것 같다.

 

참조 무결성이란 데이터베이스의 신념 중 하나로, 예를 들어 A 테이블의 a 컬럼이 B 테이블의 b 컬럼을 참조하고 있다면 이 두 컬럼은 항상 값이 일관되어야 함을 말한다. 즉, B 테이블에서 값을 변경시켰다면 이 변경사항이 A 테이블에도 적용되어야 한다. 또한 B 테이블의 b 컬럼에 없는 값을 A 테이블 a 컬럼에서 가질 수 없다. 아래의 그림은 참조 무결성이 깨진 예시이다.

 

          https://en.wikipedia.org/wiki/Referential_integrity

 

위의 상황을 보면 user 테이블의 id는 값이 있었지만 이를 참조하려는 posts 의 user_id에는 값이 존재하지 않아 일관성이 없었다. 이 상황에서 user_id를 외래키로 설정하려는 시도는 데이터베이스의 신념에 반하는 행동이었다.

 

해결

posts 테이블의 user_id 컬럼에 값을 채우니 외래키 설정이 잘 이루어졌다.

해결

구글링해보니 이 오류가 뜨는 이유는 바로 '참조 무결성'을 위배했기 때문이다.

즉, A테이블의 a칼럼이 B테이블의 b칼럼을 참조하고 있다면, 이 두 칼럼의 값이 항상 일관되어야 한다는 것이다. 뭔가 말이 어려운데...
일단 내가 이해한 바로는 C테이블이 A테이블과 B테이블의 a, b칼럼을 참조하고 있는데(C테이블에서는 aId, bId로), A테이블과 B테이블의 a, b칼럼에 데이터가 전혀 삽입되어 있지 않는 상태에서 C테이블의 데이터를 추가하려고 하니 발생하는 오류였다.

해결 방법은 A테이블과 B테이블에 데이터를 먼저 추가해주고 C테이블의 데이터를 마이그레이션 하면 된다. 내 db에선 Users테이블과 posts테이블에 데이터를 먼저 추가한 후, Diaries seed 파일의userId와 postId에 해당 값을 입력하고 마이그레이션 하니 해결되었다!

 

 

 

출처: https://reeme.tistory.com/39

728x90
728x90

인텔리제이 도커 연동 오류 발생..!!!!!
아 나는 왜케 디비에서 오류가 나는 걸까???!!!

 

일단 나의 오류는 

[42000][1044] Access denied for user 'root1234'@'%' to database 'hr'

라는 오류였고 이는 사용자인 root1234가 hr 데이터베이스에 접근할 때 엑세스가 거부되었다는 것을 의미한다.

원인을 분석하면 

 

1. 해당 데이터베이스가 존재하지 않는 경우
- 먼저 해당 데이터베이스가 있는지 확인한다.

 

2, 권한이 부여되지 않는 경우 --> 나는 이에 해당되었다.

- 사용자 root1234가 hr에 대한 권한이 없을 때 발생하고 권한을 부여하면 된다.

 


오류 해결

아래 명령을 차례대로 실행하면 된다.

참고로 나는 인텔리제이에서 도커를 사용해서 mysql을 사용하고 있기 때문에 아래와 같은 명령어를 쓴 것이다!

mysql 명령어를 사용하기 위해서 도커 컨테이너 내부에 접속했고 로컬 명령 프롬포트에서는 직접 mysql 명령을 사용할 수 없기 때문에 컨테이너 내부로 들어가서 명령을 실행한 것이다. 도커를 사용하는게 아니면 3번 부터~~

 

# 1. mysql가 실행 중인지 확인
docker ps

# 2. MySQL 컨테이너 내부로 접속
# docker exec -it [container name] bash
docker exec -it mysql-vacation-db-1 bash

# 3. 컨테이너 내부에서 mysql을 실행
mysql -u root -p

# 4. MySQL의 root 계정 비밀번호를 입력하라는 메시지가 나옴

# 5. 권한 부여
GRANT ALL PRIVILEGES ON hr.* TO 'root1234'@'%';

2번 과정에서 컨테이너 이름에는 컨테이너 id를 써도 된다. 

3번 과정에서 mysql -u root -p 명령어를 실행하면 root 계정 비밀번호를 입력하라는 메시지가 뜨고 입력이 완료되면 mysql에 접속 할 수 있게된다. 나는 hr 디비에 대해서만 권한을 주었지만 만약 모든 권한을 주고 싶다면

# 모든 권한 주기
GRANT ALL PRIVILEGES ON *.* TO 'root1234'@'%';

 

 

 

728x90
728x90
문제
 
나같은 경우는 8888 포트가 사용되고 있어서 생기는 문제였다.
 
 

 

해결법

netstat -ano | find "8888"
taskkill /f /pid 27696

 

728x90
728x90

오류

FAILURE: Build failed with an exception.

* What went wrong:

Execution failed for task ':test'.

> There were failing tests. See the report at: file:////C:/Users/...(내 파일명)

* Try:

Run with --scan to get full insights.

BUILD FAILED in 14s


해결방법

이 오류가 발생하는 원인부터 파악하자면..

1. 파일 경로 중 한글명이 포함된 경우

2. gradle 실행시 Exception 발생

3. Gradle 버전 문제

4. Windows에서 사용하는 한글 인코딩과 JVM에서 사용하는 파일 인코딩이 달라 발생한 문제

 

이렇게 4가지가 있을 수 있다. 

 

1번 문제같은 경우는 파일 경로 중 한글명이 없도록 수정하면 해결된다. --> 나같은 경우..

2번 문제같은 경우

(2.1) ctrl+alt+s를 눌러 settings 를 들어가거나 or [settings -> Build,Execution, Deployment -> Gradle] 들어간다.

(2.2) [Run tests using]을  Gradle -> intellij로 바꿔주면 된다.

3번 문제같은 경우 Gradle 버전이 5이상부터 가능하다고 해서 그래들 버전을 확인하고 버전이 낮다면 업그레이드 해주면 된다. [gradle --version]

4번 문제같은 경우 gradle build 관련 오류 질문 드립니다(TestSuiteExecutionException) - 인프런 (inflearn.com)이 링크를 보면 될 것 같다.

 

 

 

ㅎㅎ이제 한글이 있는 파일 경로로 프로젝트를 진행하지 말자....

728x90
728x90

node.js를 사용한 웹서비스를 실행하려 할 때 다음과 같은 에러 메시지가 나타나며 진행되지 않는 경우가 있습니다.

본 필자는 다음과 같은 에러가 뜸
>> Error: listen EADDRINUSE: address already in use 127.0.0.1:1337

NodeJS address already in use 문제

이는 1337번 포트가 현재 다른 프로세스에서 사용 중이기 때문에 해당 포트를 사용하는 현재 서비스를 시작할 수 없다는 에러 메시지입니다. (에러의 포트 번호가 1337이 아닐 수도 있습니다.) 이는 정말로 다른 프로세스가 사용 중이거나, NodeJS 프로세스가 이전에 비정상적으로 종료된 경우 나타나는 흔한 증상인데요.

윈도우에서 포트를 사용하는 프로세스 찾기

윈도우는 명령 프롬프트(이하 cmd)를 열어 netstat 명령어를 통해 포트를 사용 중인 프로세스를 확인할 수 있습니다. 여기에 -a(모든 포트 표시) -n(IP:PORT 형식으로 표시), -o(PID 표시) 옵션을 붙인 명령어를 입력합니다: netstat -ano

위 사진에서처럼 1337번 포트를 사용하는 프로세스의 ID인 PID 값이 22072임을 확인할 수 있습니다.

이후 작업 관리자를 열고 세부 정보 탭(윈도우 10 기준)을 클릭한 뒤, PID를 정렬하여 22072번을 찾아보면 ‘node.exe’ 프로세스가 점유하고 있음을 알 수 있습니다. 이제 이 프로세스를 클릭한 후 하단의 ‘작업 끝내기’를 클릭하여 프로세스를 강제로 종료시킬 수 있습니다.

728x90
728x90

라즈베리파이firebase 를 연동하기 위해 다음과 같은 코드를 실행하였다.

sudo pip3 install firebase_admin
suso pip install firebase_admin

하지만.. 다음과 같은 오류가 났고

ERROR: Failed building wheel for cryptography
Failed to build cryptography
ERROR: Could not build wheels for cryptography, which is required to install pyproject.toml-based projects

이 오류들은

아래와 같이 실행하면 오류 해결 가능하다.

# pip, pip3 와 python, python3는 본인의 pip와 python 버전에 맞게 설치바람

# pip 업그레이드
pip install --upgrade pip
pip3 install --upgrade pip

python -m pip install --upgrade pip
python3 -m pip install --upgrade pip

# 만약 오류가 난다면 —user 실행해서 설치해보기
python -m pip install --user --upgrade pip
python3 -m pip install --user --upgrade pip

# wheel 업그레이드 해주기
pip install --upgrade setuptools wheel
pip3 install --upgrade setuptools wheel
python3 -m pip install --upgrade setuptools wheel

# pip 업그레이드 됐다면 cryptography를 직접 설치해도 됨. 나는 이 과정은 생략.
pip install cryptography
pip3 install cryptography

python -m pip install cryptography
python3 -m pip install cryptography

# 위 과정을 안했다면 여기서부터 따라한다.
pip install minepy
pip3 install minepy 

# 최종 firebase_admin 설치 확인!
pip install firebase_admin

일단.. 나는 sudo pip install firebase_admin와 pip install firebase_admin을 해도 오류가 났음.

하지만 위 과정대로 pip을 업그레이드 시켜주고 sudo를 생략하고

pip install firebase_admin —-no-cache-dir

이렇게해서 설치가 완료됐음

728x90
728x90

pip install로 파이썬 패키지 다운로드할 때 -killed 라고 중지되는 경우가 있다.

이는

pip install <pakage> --no-cache-dir

이렇게 원하는 패키지 뒤에 —no-cache-dir 을 붙이면 오류 해결!!!

728x90
728x90

pip 설치 중 이런 오류가 뜬다.
이 오류는 루트 권한자로 실행하면 접근이 안된다는 오류이므로 루트 권한자릉 무시해주면 끄읕

pip install --root-user-action=ignore requests

원하는 패키지 뒤에 '--root-user-action=ignore requests' 만 써주면 된다!! 그럼 해결 완료!!!

728x90

+ Recent posts