좋은 오류 메시지가 시간을 절약하다

April 24, 2026

개발자는 자주 오류를 보고 오류의 메시지를 읽어야 해요. 그래서 나쁜 오류 메시지 시간 많이 필요할 수 있잖아요. 오류의 안내가 없으면 사람들 추측하기 시작해야 돼요.

나쁜 오류 예: - 프로세스는 비정상 종료 코드만 하하지마! 제발, 표준 에러에 오류를 설명해주세요! - 파일을 못 찾았다고요. 끝. 무슨 파일!, 무슨 파일 못 차았어요? - 등

근데 진짜 좋은 예도 있어요: Babashka HTTP client.

Babaska 선생님
Figure 1. Babaska 선생님

REPL에서:

(http/post "http://gamlor.info/nowhere"
           {:headers {"Authorization" "Bearer open-sesame"}})
=> Execution error (ExceptionInfo) at babashka.http-client.interceptors/fn (interceptors.clj:251).
Exceptional status code: 404

근데, 오류 정보를 더 잘 살펴보면 정보 많이 생기다:

Continue reading →

Good Error Messages Save Time

April 24, 2026

Developers often face errors and will read error messages. So, a bad error message will use a lot of time. If there is no good information, people have to start guessing.

Bad error examples: - Do not a process with only an error code. Please explain the error in the error standard out. - "File not found error." End. What file! WHAT file was not found - etc

However, a good example is Babashka HTTP client.

Babaska Teacher
Figure 1. Babaska Teacher

In the REPL:

(http/post "http://gamlor.info/nowhere"
           {:headers {"Authorization" "Bearer open-sesame"}})
=> Execution error (ExceptionInfo) at babashka.http-client.interceptors/fn (interceptors.clj:251).
Exceptional status code: 404

Not much, but you can ask for the full error information in the REPL:

Continue reading →

루트 없는 포트 80/443 사용하기 방법: 방화벽으로

December 29, 2025

유닉스는 루트만 1024이한 포트를 사용할 수 있어요. 근데 인터넷 듣기 위험해요: 이 프러그램이 보안 취약 있으면 나쁜 넘들이 루트 권한을 받을 수 있어요. 그래서 비루트로 1024이한 포트를 사용한 방법 필요해요.

잘 아는 방법은:

  • `setuid`과 `setgid`로 포트 바인딩 하기 후에 일반 사용자 바꼬기 보텅 권한 해제해요.

  • 자근 유틸리티 privbind는 모든 프로그램 1024이한 포트를 사용 권한으로 비루트로 시작해요.

  • 리눅스의 CAP_NET_BIND_SERVICE capability 프로그램에게 권한을 해요.

  • Docker 아니면 다른 컨테이너는 포트과 사용자 옵션이 있어요.

피밀
Figure 1. 피밀
Continue reading →

Using Port 80/443 without root: Via the Firewall

December 29, 2025

In Unix/Linux only the root can use ports below 1024. However, listening to the internet is dangerous: If that program has a vulnerability, the bad guys can get root permissions. Therefore, you want to use a way to run the app without root and listen to the below 1024 ports.

There are well known methods:

  • Use setuid and setgid to change the user after binding to the ports.

  • Using a small utility like ttps://github.com/JiriHorky/privbind[privbind] to launch any program non-root but allow it to bind ports.

  • In Linux, grant the CAP_NET_BIND_SERVICE capability to a program.

  • Use Docker or other container systems to bind the port and run under a different user.

피밀
Figure 1. Secret
Continue reading →

OutOfMemoryError: Exit Immediately

December 21, 2025

TLDR: I highly recommend to use -XX:+ExitOnOutOfMemoryError or -XX:+CrashOnOutOfMemoryError for Java apps, combined with -XX:HeapDumpPath=path-to-crash-dumps -XX:+HeapDumpOnOutOfMemoryError. This stops the JVM from trying to limp on when it runs out of memory and provides dumps to analyze the issue later.

Goodbye
Figure 1. Goodbye
Continue reading →