2025/05 4

WebSocket을 통한 실시간 데이터 통신

WebSocket 구동 원리WebSocket은 클라이언트와 서버 간의 양방향 실시간 통신을 가능하게 하는 프로토콜입니다. 기본적인 연결 과정은 다음과 같습니다.연결 설정 과정HTTP 핸드셰이크 시작클라이언트가 서버에 HTTP/1.1 요청을 보냅니다요청 헤더에 Upgrade: websocket과 Connection: Upgrade를 포함합니다프로토콜 업그레이드서버가 WebSocket 연결을 수락하면 HTTP 101 상태 코드를 반환합니다이후 HTTP 프로토콜에서 WebSocket 프로토콜로 전환됩니다실시간 통신 시작연결이 설정되면 클라이언트와 서버 간에 양방향 데이터 전송이 가능해집니다TCP 연결을 유지하면서 지속적인 통신이 이루어집니다클라이언트 -> 서버: GET /chat HTTP/1.1 ..

디버그 와 코드리뷰 버그 공유 를 잘하자!!

최근 프로젝트를 진행하면서 디버깅의 중요성에 대해 뼈저리게 느끼게 되었습니다. 그동안 버그가 발생했을 때 제대로 된 디버깅 과정 없이 추측만으로 문제를 해결하려 했던 제 자신을 돌아보며, 이 경험을 공유하고자 한다.과거의 잘못된 디버깅 방식추측에 의존한 문제 해결프로젝트를 진행하면서 버그가 발생하면, 저는 주로 다음과 같은 방식으로 접근했었다.코드를 대충 훑어보고 "이 부분이 문제일 것 같다"고 추측Request/Response 값들을 제대로 확인하지 않음데이터가 올바르게 전달되는지 검증하지 않음문제가 프론트엔드에서 발생한 것인지, 백엔드에서 발생한 것인지 구분하지 않음결과적으로 발생한 문제들이런 방식으로 접근하다 보니:문제가 점점 복잡하게 얽히게 됨해결 시간이 예상보다 훨씬 오래 걸림같은 유형의 버그가..

Spring Security JWT 설정에서 DI 문제, 왜 신경 써야 할까? (직접 주입 vs Spring 관리)

"코드가 돌아가는데 뭐가 문제냐고?" 지금 팀원이 작성한 코드를 코드리뷰하며 타 팀원이 지적한문제를 정리하고자 한다.처음에 AuthenticationManager를 생성자 주입해서 쓸 때도 동작은 했어.근데 이 방식은 Spring의 DI 원칙을 무시하는 꼼수였다. 차이점을 명확히 알자!1. DI 원칙 위반 → 유지보수 문제원본 코드 (문제점) private final AuthenticationManager authenticationManager; //문제인 부분 @Override public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws Authenticatio..

카테고리 없음 2025.05.08

CRLF vs LF 문제

맥에서 잘되던 프로젝트가 윈도우에서 작업 하면 문제가 생길때가 있다 특히 도커로 프로젝트를 실행했을때 나는 다음과 같은 문제를 직면했다이를 해결하기위해서 인텔리제이에서 gradlew파일들을 하나하나 lf로 변경했다이후 server.sh를 실행했더니 잘되었다. 왜 CRLF와 LF문제가 자주 생길까? 이를 좀 알아보고자 한다.먼저, 윈도우와 맥(리눅스) 환경의 가장 큰 차이 중 하나가 바로 줄바꿈 문자(Line Ending) 방식이다.윈도우는 CRLF(\r\n)맥과 리눅스는 LF(\n)이 차이 때문에, 맥에서 잘 동작하던 쉘 스크립트나 gradlew 같은 파일이 윈도우에서 CRLF로 저장되면, 도커나 리눅스 환경에서 실행할 때 에러가 발생한다. 대표적으로 /bin/bash^M: bad interpreter:..