본문 바로가기

전체 글166

코드를 잘 짰는데 이상한 값이 나오는 경우 1. pragma pack() - 의심 없이 업체API 만 믿고 작업하고 보니 값을 잘 넣어도 이상하게 떠서 확인 해보니 값을 넣을 때하고 다른 곳에서 읽을 때의 변수의 주소가 달라지는 경우가 생김 - 확인 해보니 pragma pack 설정 해놓고 다시 안돌려 놓으니까 헤더 읽는 곳마다 같은 클래스라도 다른 간격, 크기로 계산 되어 예상과는 다른 결과를 만들었다. - 프로토콜 땜 pragma pack 설정 한다음에는 항상 pragma pack()으로 원상 복구를... 2. 싱글톤 생성자에서 초기화와 쓰레드 - 예전에 클래스 생성자가 있는데 초기화 함수를 따로 왜 둘까 했었는데 - 싱글톤 객체를 초기화 하면서 쓰레드 돌리고, 다시 쓰레드에서 해당 클래스 객체를 호출 하다보니 꼬였다. - 객체 생성자를 거쳐.. 2023. 3. 24.
websocket in cpp(MSVC) 웹서버를 원래 잘 쓰던 spring이나 node.js에서는 쓰기 편하게 돼있지만 cpp는 라이브러리부터 찾아야 하는데 삽질이 심했다. libwebsockets는 cmake로 빌드해야 하는데 옵션이 좀 까다롭고 사용법도 까다롭다. (그래도 오픈소스를 쓰려면 cmake는 정ㅋ벅ㅋ을 언젠간 해야 할 것 같다.) boost는 라이브러리 쓰는데 딸려오는게 좀 많아서 최후의 수단으로 생각했음. 그리고 다른 라이브러리 중에서 boost를 이용하는게 많은 거 보면 그리 간편하게 돼있지는 않은 것 같음. 그렇게 해서 추려진게 winhttp하고 cpprestsdk cpprestsdk는 내부적으로 boost를 사용하는 것이고 winhttp는 vs에 이미 지원해 줌 WS 서버까지 봤으면 좋겠지만 시간상 클라이언트가 한계;;;.. 2019. 11. 6.
[Spring] Tomcat 세션 - HTTP프로토콜은 비접속형, 비연결지향성(TCP임에도) 프로토콜이기 때문에 매 접속마다 새로운 네트워크 연결이 이루어진다. 그래서 서버는 클라이언트의 이전 상태를 기억하기위해 세션을 사용한다. - 보통 웹 어플리케이션에서 세션을 이용해서 로그인 정보의 상태를 유지할 수 있게 한다. - 톰캣은 사용자가 로그인하지 않아도 통신할 때 response로 JSESSIONID 쿠키 값을 브라우저에 내려준다. - 쿠키는 포트를 구분하지 않기 때문에 포트를 분리하여도 같은 서비스로 인식하여 로컬에 저장되어 있는 쿠키를 서버로 전송하여 JSESSIONID가 충돌되게 된다. - 같은 IP 내 다른 포트의 서비스의 JSESSIONID의 충돌을 방지하려면 세션 쿠키 이름을 정해주면 된다. ( Spring에서는 applic.. 2019. 4. 4.
[Spring] Excel Download/Upload https://github.com/heowc/SpringBootSample/tree/master/SpringBootExcel heowc/SpringBootSample spring boot sample source . Contribute to heowc/SpringBootSample development by creating an account on GitHub. github.com 추가적으로 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 // 한글 파일 이름 private void setFileName(HttpServletResponse response, String fileName) { String header = getBrowser(this.re.. 2019. 4. 1.