본문 바로가기

삽질

메모리 위에 존재하는 Vmmem Windows에서 도커(docker)를 사용하시는 분들이 만나는 문제입니다. 도커를 종료해도 다음 사진과 같이 Vmmem이 남아있어 메모리를 엄청 잡아먹습니다. 종료하는 방법은 간단합니다. 명령 프롬프트(cmd)에서 다음 명령어를 치시면 됩니다. wsl --shutdown 정상적으로 종료 되었습니다. 더보기
[Spring Boot]java: cannot access org.springframework.context.annotation.Bean bad class file: 최근에 Spring Boot 프로젝트를 만들면 만날 수도 있는 에러입니다. 무의식적으로 Spring Boot 프로젝트를 기본 값으로 만들게 되면, Spring Boot 3 버전의 프로젝트가 만들어지게 됩니다. 이 버전은 최소 JDK 17을 지원합니다, 즉, JDK 8, 11, 14와 같이 17 미만의 버전은 지원하지 않는다는 의미입니다. maven 혹은 gradle을 사용하는 경우 Spring Boot의 버전을 2.x로 낮추면 해결됩니다. 저는 maven을 사용하는 하기 때문에, pom.xml에서 버전을 2.3.0.RELEASE로 낮췄습니다. 더보기
[AWS]Error: checking AWS STS access – cannot get role ARN for current session eksctl create 명령어를 사용하다가 Error: checking AWS STS access – cannot get role ARN for current session: operation error STS: GetCallerIdentity, failed to sign request: failed to retrieve credentials: failed to refresh cached credentials, no EC2 IMDS role found, operation error ec2imds: GetMetadata, request send failed 에러를 만났습니다. 이 에러는AWS CLI를 사용하지만, IAM 설정이 되지 않았을 때 발생하는 에러입니다. 우선 AWS CLI가 정상적으로 깔려 있.. 더보기
[Java]System.out.println \n와 \r\n 흔히 자바는 JVM 덕분에 운영체제에 독립적으로 동작된다고 알려져 있습니다. 각 운영체제에 맞는 JVM만 설치하면, 프로그래머 입장에서는 운영체제에 상관 없이 개발할 수 있기 때문입니다. 하지만, 운영체제에 따라 같은 코드라도 다르게 동작하는 것이 몇 개 있습니다. 그 중 하나가 System.out.println()입니다. 흔히 줄바꿈(띄어쓰기, 개행)의 목적으로 println을 사용합니다. 문장을 출력하고 자동으로 줄바꿈을 하기 때문입니다. 이 줄바꿈는 운영체제 마다 하는 방식이 달라집니다.(운영체제 마다 줄바꿈 문자가 다르기 때문입니다.) 제 삽질을 통해 예시를 보여드리겠습니다. 저는 출력을 비교하는 테스트 코드를 작성하고 있었습니다. 이 출력을 으로 출력이 정상적으로 이뤄지는지 확인을 하는 코드입니.. 더보기
Exception in thread "main" java.util.ConcurrentModificationException Collection의 값을 반복문 내부에서 수정할 때 발생되는 예외이다. Collection의 값을 수정할 때, 삭제하는 경우 그 크기를 줄여야 한다. 하지만, 아래 코드는 삭제가 아닌 추가만 하고 있다. for(int i=2; i 더보기
[Flask] FileNotFound Error 예전에 Flask로 만든 인공지능 서버를 배포하려고 다시 실행해 봤는데, 인공지능 모델을 불러오는 코드인 torch.load()가 동작을 하지 않는다.... (모델을 불러오는 코드 모듈과 실제 모듈은 같은 위치에 존재한다..) project |---app.py |---model.pt 개발할 때에는 잘 됐었는데... 이틀간 고생한 결과 방법을 찾긴 찾았다. 아래의 코드와 같이 경로를 수정할 수 있게 한다. import os if __name__ == "__main__": dir = os.path.dirname(os.path.realpath(__file__)).replace('\\', '/') + '/' model = torch.load(dir+'model.pt') 아마 운영체제의 버그때문에 발생하는 에러 .. 더보기
[Flask]ConnectionError: HTTPConnectionPool urllib3.connection.HTTPConnection flask에서 redis + celery를 통해 ML 서버에 request 보내는 작업을 하고 있던 도중, 제목과 같은 에러를 접하게 되었다. 필자는 docker-compose를 통해 flask, redis, celery를 하나로 묶어 queue 서버를 만들고 있었던 것이다. docker-compose로 묶은 queue 서버에서 ML 서버로 보내는 요청은 로컬 서버라 localhost로 요청을 보냈다. docker에서 localhost로 request를 보내면 제목과 같은 httpconnection 에러가 뜨는 것이다. 도커는 host.docker.internal로 요청을 보내야 제대로 http request를 보낼 수 있다. res = requests.post('http://host.docker.int.. 더보기
[Flask]Celery kombu.exceptions.EncodeError: Object of type 'bytes' is not JSON serializable Flask + Redis + Celery 이미지를 전달 받고, 해당 이미지를 Siamese Network 서버에 전달하는 방법을 사용하던 도중 아래와 같은 에러가 발생하고 있다. 에러가 나는 이유는 celery.end_task()를 하면 json으로 변환되서 넘어가기 때문이다. work 작업을 하는 Celery에 아래와 같이 conf를 변경하면 된다 추가 AWS EC2(Ubuntu)에 실제 배포해보니 또 다시 에러가 발생한다. 며칠의 삽질 덕분에(?) 에러 해결 방법을 다시 찾아냈다. Ubuntu 운영체제에서는 task_serializer=”pickle”을 제거하면 된다. 더보기