반응형
하늘과 바람과 별과 코드
최신글
-
[postgres] column does not exist — 따옴표 없이 쓴 이름은 소문자로 접힙니다 1. 오류 설명: column does not existcolumn \"fullname\" does not exist따옴표 없이 쓴 이름은 소문자로 접힙니다. 큰따옴표로 만든 대소문자 섞인 컬럼은 부를 때도 따옴표가 필요합니다.2. 오류 예시분명히 있는 컬럼인데 없다고 합니다.두 가지를 봐야 합니다.적은 것은 fullName 인데 찾는 것은 fullname 입니다. 소문자로 바뀌었습니다HINT 가 답을 알려 주고 있습니다 — people.fullName 을 뜻한 것 아니냐고 묻습니다postgres 는 따옴표 없는 식별자를 소문자로 접습니다. fullName 이라고 쳐도 fullname 을 찾습니다.그런데 테이블을 만들 때 "fullName" 처럼 큰따옴표를 썼다면, 그 컬럼의 이름은 대소문자가 그대로 보..
-
[node] npm error code EACCES ... permission denied — `npm install -g` 이 시스템 폴더에 쓰려는데 1. 오류 설명: npm error code EACCES ... permission deniednpm error code EACCES ... permission deniednpm install -g 이 시스템 폴더에 쓰려는데 권한이 없습니다. sudo 말고 npm 이 쓸 자리를 홈 아래로 옮기는 것이 답입니다.2. 오류 예시경로가 답을 말해 줍니다 — /usr/local/lib/node_modules/cowsay. 시스템 폴더이고, root 만 쓸 수 있습니다.syscall mkdir, errno -13 도 함께 적혀 있습니다. 13은 EACCES, 「권한 없음」입니다.npm install -g 는 한 자리에 몰아넣습니다. 그 자리를 npm 은 prefix 라고 부르고, 기본값이 /usr/local 입니..
-
[nginx] 499 client closed request — 클라이언트가 응답을 기다리지 않고 끊었습니다 1. 오류 설명: 499 client closed request499 — 클라이언트가 응답을 다 받기 전에 끊었다클라이언트가 응답을 기다리지 않고 끊었습니다. 서버 잘못이 아닐 수도, 상류가 느리다는 신호일 수도 있습니다.2. 오류 예시접근 로그에만 남습니다. 오류 로그에는 아무것도 안 적힙니다 — nginx 는 이것을 오류로 보지 않습니다.[access] status=499 time=2.004 GET / HTTP/1.1time=2.004 가 중요합니다. 클라이언트가 2초에 포기했고, 그때 상류는 아직 답을 안 준 상태였습니다.499 는 nginx 가 만든 코드입니다. 표준 HTTP 상태 코드가 아닙니다. 「응답을 다 만들기 전에 클라이언트가 끊었다」는 뜻이고, 클라이언트에게는 아무것도 안 나갑니다 — ..
-
[mysql] ERROR 2002 cant connect through socket — `-h localhost` 는 TCP 가 아니라 유닉스 소켓 1. 오류 설명: ERROR 2002 cant connect through socketERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'-h localhost 는 TCP 가 아니라 유닉스 소켓 파일을 씁니다. 그 파일이 없으면 서버가 옆에 떠 있어도 못 붙습니다.2. 오류 예시첫 줄이 답의 절반입니다 — 이 컨테이너에는 그 소켓 파일이 아예 없습니다.MySQL 클라이언트는 localhost 를 특별하게 다룹니다.-h 에 적은 것어떻게 붙나localhost유닉스 소켓 파일 (/var/run/mysqld/mysqld.sock)127.0.0.1TCPdb, 10.0.0.5TCPloca..
-
[java] error: class Greeter is public, should be — `public` 클래스는 파일 이름과 이름이 같아야 합니다 1. 오류 설명: error: class Greeter is public, should beerror: class Greeter is public, should be declared in a file named Greeter.javapublic 클래스는 파일 이름과 이름이 같아야 합니다. public 이 아니면 자유롭습니다.2. 오류 예시필요한 파일 이름을 그대로 알려 줍니다 — Greeter.java.자바는 public 타입 하나를 파일 이름으로 찾습니다. com.example.Greeter 를 쓰겠다고 적으면 컴파일러는 com/example/Greeter.java 를 찾아갑니다. 이름이 다르면 못 찾습니다.한 파일에 public 은 하나입니다. 둘을 적으면 둘 다 파일 이름과 같을 수 없으므로 역시 ..
인기글
- [Git] fatal: refusing to merge unrelated histories — 붙이지 말고 이어붙이기 1. 오류 설명: unrelated historiesfatal: refusing to merge unrelated histories로컬에서 먼저 작업을 시작한 뒤 나중에 깃허브 저장소를 만들어 연결할 때 거의 반드시 만나는 오류입니다. 깃허브에서 저장소를 만들 때 "Add a README file" 을 체크했다면 확정입니다.원인은 간단합니다. 두 저장소의 뿌리 커밋(root commit)이 서로 다릅니다.로컬: [앱 추가] ← 이것이 뿌리원격: [첫 커밋] ← 이것도 뿌리공통 조상이 없다 → 무엇을 기준으로 합칠지 정할 수 없다Git은 병합할 때 공통 조상을 찾아 "양쪽이 각각 무엇을 바꿨는지"를 계산합니다. 조상이 없으면 이 계산이 불가능합니다. Git 2.9부터는 이런 병합을 기본으로 거부합니.. 2026.09.20
- [Spring] NoUniqueBeanDefinitionException — 같은 타입 빈이 둘일 때 1. 오류 설명: NoUniqueBeanDefinitionExceptionNoUniqueBeanDefinitionException은 주입받을 타입의 빈이 둘 이상이라 어느 것을 넣어야 할지 정할 수 없을 때 발생합니다.빈을 못 찾는 오류와 정확히 반대 상황입니다. 하나도 없어서가 아니라 너무 많아서 실패합니다.빈이 0개 → NoSuchBeanDefinitionException (없어서 실패)빈이 1개 → 정상빈이 2개+ → NoUniqueBeanDefinitionException (많아서 실패)인터페이스 하나에 구현체를 여러 개 두는 것은 흔한 설계입니다. 결제 수단, 알림 채널, 파일 저장소처럼 전략이 갈리는 곳에서 자연스럽게 나옵니다. 그래서 이 오류는 설계가 잘못돼서가 아니라 선.. 2026.09.03
- [Git] Permission denied (publickey) — SSH 키가 안 먹을 때 1. 오류 설명: publickeygit@github.com: Permission denied (publickey).깃허브에 SSH로 붙을 때 나는 오류입니다. git clone, git push, git pull 어디서든 나옵니다.괄호 안의 (publickey) 가 핵심입니다. "서버가 허용하는 인증 방식은 공개키뿐인데, 쓸 만한 키를 하나도 못 받았다" 는 뜻입니다. 비밀번호를 물어보지도 않고 바로 끊깁니다.깃허브는 SSH 접속에서 공개키 인증만 받습니다. 그래서 원인이 넷 중 하나로 좁혀집니다.원인확인 방법키가 아예 없다ls ~/.ssh/키는 있는데 깃허브에 등록을 안 했다깃허브 Settings → SSH keys키가 여러 개라 엉뚱한 걸 보낸다ssh -vT git@github.com파일 권한이 풀.. 2026.09.17
- [node] SyntaxError cannot use import outside module — 이 파일이 CommonJS 로 해석되고 있는데 ESM 구문인 1. 오류 설명: SyntaxError cannot use import outside moduleSyntaxError: Cannot use import statement outside a module이 파일이 CommonJS 로 해석되고 있는데 ESM 구문인 import 를 썼습니다. 파일 안이 아니라 package.json 의 type 이 정합니다.2. 오류 예시import 한 줄에서 파싱이 멈춥니다. 문법에는 잘못이 없고, 같은 파일을 그대로 브라우저나 번들러에 넣으면 통과합니다. 노드가 이 파일을 CommonJS 스크립트로 읽었다는 뜻입니다.노드는 파일 하나를 읽기 전에 CommonJS 인지 ES 모듈인지 먼저 정합니다. 파일 내용은 이 판단에 거의 쓰이지 않습니다. 순서는 이렇습니다.조건결과확장자.. 2026.09.22
- [apache] 404 Not Found requested url was — 파일은 분명히 올렸는데 404 가 납니다 1. 오류 설명: 404 Not Found requested url was404 Not Found — The requested URL was not found on this server.파일은 분명히 올렸는데 404 가 납니다. 아파치가 보는 자리와 파일이 있는 자리가 다른 것입니다.2. 오류 예시브라우저가 404 를 돌려줍니다.파일은 /srv/site/index.html 에 있습니다. 그런데 아파치가 보고 있는 자리는 /usr/local/apache2/htdocs 이고, 거기는 비어 있습니다.404 는 「없다」가 아니라 「내가 보는 자리에 없다」입니다. 아파치는 주소를 파일 경로로 바꿀 때 DocumentRoot 를 앞에 붙입니다. /index.html 을 달라고 하면 DocumentRoot + /in.. 2026.09.16
프로그래밍
- [Spring] Failed to configure a DataSource — 드라이버가 없을 때 1. 오류 설명: Failed to configure a DataSource스프링 부트를 띄우자마자 이 메시지를 만나는 경우가 있습니다.Failed to configure a DataSource: 'url' attribute is not specified andno embedded datasource could be configured.Reason: Failed to determine a suitable driver classDB 스타터는 들어 있는데 접속 정보나 드라이버가 없을 때 발생합니다. 스프링 부트가 자동 설정으로 DataSource 빈을 만들려 했지만, 어떤 DB에 어떻게 붙을지 알 수 없어 포기한 것입니다.원인은 셋 중 하나입니다.JDBC 드라이버가 클래스패스에 없다 — 의존성 누락sprin.. 2026.09.12
- [Spring] 404를 직접 처리하기 — NoHandlerFoundException은 이제 안 잡힌다 1. 오류 설명: 매핑되지 않은 경로REST API를 만들면 없는 경로에 대한 404 응답을 직접 만들고 싶어집니다. 기본 응답이 이렇게 밋밋하기 때문입니다.{"timestamp":"...","status":404,"error":"Not Found","path":"/nowhere"}검색하면 거의 모든 자료가 같은 방법을 안내합니다.spring.mvc.throw-exception-if-no-handler-found=truespring.web.resources.add-mappings=false@ExceptionHandler(NoHandlerFoundException.class)public ResponseEntity handle(NoHandlerFoundException e) { ... }Spring Boot.. 2026.09.11
- [Spring] LazyInitializationException — could not initialize proxy: no Session 1. 오류 설명: LazyInitializationExceptionorg.hibernate.LazyInitializationException: could not initialize proxy - no Session은 지연 로딩으로 설정된 연관 데이터를, 영속성 컨텍스트가 닫힌 뒤에 꺼내려 할 때 발생합니다.JPA는 연관 엔티티를 기본적으로 바로 가져오지 않습니다. 대신 껍데기(프록시)만 넣어두고, 실제로 그 값을 쓰는 순간 DB에 다시 물어봅니다. 그런데 그 시점에 세션(영속성 컨텍스트)이 이미 닫혀 있으면 물어볼 곳이 없어 이 예외가 납니다.기본 페치 전략을 알아두면 어디서 터질지 예측할 수 있습니다.연관관계기본 페치 전략@OneToManyLAZY@ManyToManyLAZY@ManyToOneEAGER@.. 2026.09.10
- [Spring] BeanCreationException — Could not resolve placeholder 1. 오류 설명: BeanCreationExceptionBeanCreationException은 빈을 만드는 도중 실패했을 때 발생하는 포괄적인 예외입니다. "빈 생성에 실패했다"만 알려주므로, 원인은 항상 Caused by 아래에 있습니다.이 글에서는 그중 가장 흔한 원인인 @Value로 주입하려는 설정 키가 없는 경우를 다룹니다.BeanCreationException ← 빈을 못 만들었다 (결과) └ IllegalArgumentException ← 왜? (원인) Could not resolve placeholder주입 관련 오류와 구분하면 이렇습니다.예외상황NoSuchBeanDefinitionException주입할 빈이 없음NoUni.. 2026.09.09
- [Spring] HttpMessageNotReadableException — JSON 파싱 실패와 405 1. 오류 설명: HttpMessageNotReadableExceptionHttpMessageNotReadableException은 요청 본문을 객체로 변환하지 못했을 때 발생합니다. @RequestBody가 붙은 파라미터에 JSON을 매핑하는 단계에서 실패한 것입니다.여기서 중요한 구분이 하나 있습니다. 이 예외는 검증(@Valid)보다 앞 단계에서 납니다.요청 도착 ↓① JSON → 객체 변환 ← 실패하면 HttpMessageNotReadableException ↓② 검증 (@Valid) ← 실패하면 MethodArgumentNotValidException ↓③ 컨트롤러 실행객체로 만들지도 못했으니 검증은 시작조차 못 합니다. @Valid를 아무리 잘 걸어도 이 오류.. 2026.09.07
반응형