전체 글
-
VB.NET TCP 수신 데이터가 잘리거나 붙을 때: 메시지 경계부터 처리하기실전 개발/VB.NET · WinForms 2026. 10. 13. 11:40
하이롱! 오늘은 TCP는 순서를 지켜주지만, 메시지 한 줄까지 포장해 주지는 않는다는 오류(?)에 대해서 알아볼꺼에요. 보낸 쪽에서는 한 번에 전송했는데 받는 쪽에서는 두 번에 나뉘거나, 따로 보낸 명령 두 개가 한 번에 들어올 때가 있죠? 해결 순서는 간단합니다. 바이트를 누적하고 → 약속한 경계로 메시지를 나누고 → 완성된 메시지만 디코딩하고 처리합니다. 버퍼 크기나 대기 시간을 조절하기 전에 이 흐름부터 확인하세요.Read 한 번이 메시지 한 개는 아니다TCP는 바이트 스트림입니다. Write 호출과 Read 호출의 경계가 같다고 보장하지 않습니다. NetworkStream.Read도 요청한 크기까지 현재 읽을 수 있는 바이트 수를 반환합니다.보낸 데이터가능한 수신 조각PING\nPI / NG\nP..
-
ASP.NET Core .NET 8 지원 종료: IIS에서 먼저 확인할 5가지실전 개발/ASP.NET Core · Web API 2026. 10. 12. 11:49
하이롱! 오늘은 ASP.NET Core 오류에 대해서 확인해보겠습니다!! 서버를 셋팅할 때, 서버에 최신 .NET을 깔았다고, 돌아가는 중인 웹서비스까지 최신이 되는 건 아니에요.(NET 8 지원 종료일은 2026년 11월 10일입니다.) IIS에서 ASP.NET Core를 운영한다면 설치 파일부터 받기보다 앱 대상 버전, 배포 방식, 서버 런타임을 먼저 맞춰보세요.핵심은 세 가지입니다. Hosting Bundle 설치는 앱 업그레이드와 다르고, 자체 포함 배포는 서버 런타임을 바꿔도 함께 바뀌지 않으며, 화면이 열린다고 전환 점검이 끝나지는 않아요.버전지원 종료일전환 판단.NET 8 LTS2026-11-10종료 전 전환 계획 필요.NET 9 STS2026-11-108에서 9로 옮겨도 지원 기간이 늘지 ..
-
Codex 사용량이 빨리 소진될 때: 기존 프로젝트 분석 범위 정하기AI 개발/Codex · LLM 2026. 10. 9. 15:42
하이롱! 오늘은 코드보다 AI에게 맡기는 일의 크기부터 살펴봅시다.기존 프로젝트를 Codex에 맡겼는데, 몇 번 작업하지도 않아 사용량이 빠르게 소진된다면?모델 설정과 함께 요청 범위도 확인해 볼 만하다.“프로젝트 전체를 분석하고 문제를 수정해줘.”편한 주문이다. 하지만 어디까지 읽고, 무엇을 고치고, 언제 끝내야 하는지 빠져 있다. 오래된 프로그램일수록 이 빈칸이 크다.먼저 고칠 동작 하나를 정하고, 관련 코드를 확인한 뒤, 수정과 확인까지 끝내는 단위로 맡겨보자.1. 프로젝트 전체보다 동작 하나부터예를 들어 WinForms 프로그램에서 조회 버튼을 누르면 화면이 멈춘다고 하자.첫 작업을 “전체 비동기 전환”으로 잡으면 DB 접근, 화면 갱신, 공통 함수까지 범위가 퍼질 수 있다. 우선 아래 흐름부터 ..
-
MSSQL 동시 접수: 마지막 한 자리 초과 예약을 막는 방법실전 개발/MSSQL · Database 2026. 10. 8. 13:45
하이롱! 오늘도 또 새로운 문제에 대해서 이야기해보겠습니다! 온라인과 키오스크가 같은 정원을 사용한다고 생각해 보겠습니다.한 자리가 남았을 때 두 사람이 동시에 접수하면 어떻게 될까요?두 화면에서 모두 “접수 가능”을 확인한 뒤 결제를 진행하면 정원을 넘길 수 있습니다. 조회 결과만 믿고 결제를 시작해서는 안 됩니다. 결제 전에 DB에서 자리를 먼저 확보해야 합니다. 핵심은 남은 자리 확인과 차감을 하나의 UPDATE로 처리하는 것입니다.SELECT로 확인했는데 왜 초과될까?다음 순서에는 빈틈이 있습니다.남은 자리 조회자리가 있으면 결제결제 성공 후 예약 저장조회와 저장 사이에 다른 요청이 들어올 수 있기 때문입니다.순서요청 A요청 B1잔여 1자리 조회 2 잔여 1자리 조회3결제 진행결제 진행4예약 저..
-
VB.NET WAV 음성 순차 재생: PlaySync와 Task.Run으로 WinForms 멈춤 줄이기실전 개발/VB.NET · WinForms 2026. 10. 7. 19:34
WAV 두 개를 차례로 재생하려고 Play()를 연속 호출하면 첫 음성이 끝나기 전에 다음 음성이 시작될 수 있습니다.PlaySync()로 기다리면 순서는 맞지만, 버튼 이벤트에서 바로 실행하면 화면이 멈춥니다.재생은 Task.Run 안에서 처리하고, 버튼 이벤트에서는 Await로 기다리면 됩니다.Play와 PlaySync 차이호출 방법재생 완료 대기버튼 이벤트에서 호출하면Play()기다리지 않음화면은 반응하지만 순차 재생을 보장하지 않음PlaySync()끝날 때까지 기다림재생 중 화면이 멈출 수 있음Task.Run 안에서 PlaySync()작업 스레드에서 기다림Await로 기다리면 UI 대기를 피할 수 있음다음 코드에는 첫 음성이 끝날 때까지 기다리는 부분이 없습니다.Dim player As New S..
-
VB.NET 카카오톡 대화방 전송 예제: Windows 창 제어 방식과 버전 의존성Archive/JSP · 오래된 소스 2023. 3. 29. 18:18
예전 예제를 다시 꺼내 보면, 코드보다 먼저 확인할 부분이 있습니다.아래 코드는 2023년에 올린 카카오톡 PC 창 제어 예제입니다. 공식 메시지 API 대신 창과 입력란을 찾아 Windows 메시지를 보냅니다. 카카오톡 버전이나 창 구조가 바뀌면 그대로 동작하지 않을 수 있습니다.지연 시간을 늘리기 전에 확인할 것FindWindow와 FindWindowEx 결과가 IntPtr.Zero인지 단계마다 확인합니다. 창 제목이 같은 대화방을 잘못 선택하지 않는지도 살펴봅니다.EVA_Window, RICHEDIT50W 같은 클래스명은 당시 창 구조에 의존합니다. 현재 버전에서도 같은 이름인지 확인해야 합니다.버튼 이벤트 안의 Thread.Sleep은 UI 스레드를 멈춥니다. 시간을 늘려도 입력란 준비나 전송 성..