본문 바로가기
DB데이터 대용량 조회 다운로드에서 OutOfMemory 피하기 대용량 DB데이터를 조회해서 엑셀파일 등으로 다운로드하는 경우, 대개 다운로드할 DB데이터를 처음부터 끝까지 힙메모리에 올렸다가 한꺼번에 이어서 내려주는 방식으로 동작한다. 이 과정에서 DB데이터를 모두 올리다가 힙메모리가 부족하면 OutOfMemoryError가 발생하게 된다. WAS의 힙메모리를 늘리면 어느 정도 해결이 되지만 이런 일이 발생할 때마다 힙메모리를 늘리다 보면 10GB로 늘리게 될 수도 있다. 이런 경우를 자주 보다가 몇 년 전에 생각해낸 방법이, 대용량 DB데이터를 힙메모리에 올리는 대신 읽는대로 임시파일로 생성한 후에 클라이언트로 데이터를 보낼 때는 이 임시파일을 읽는 것이었다. 아이디어만 갖고 있다가 며칠 전에 갑자기 해야겠다고 결심하고 해 보니 이틀 정도가 걸린 것 같다. 구현방.. 2023. 3. 18.
OutOfMemoryError의 이해 WAS를 운영하다 보면 OutOfMemoryError가 발생하는 경우가 있다. 이런 일이 무슨 이유로 발생하고, 어떻게 원인을 찾고, 문제를 어떻게 해결하는지 알아보려고 한다. 왜 발생하나? 자바 프로그램이 실행하는 동안에는 변수 등을 생성하면서 힙메모리의 영역을 요청해서 받았다가, 사용이 끝나면 풀어주는 일을 반복한다. 그런데, 힙메모리를 모두 사용해서 더 이상 메모리를 받을 수 없을 때 OutOfMemoryError가 발생한다. 정상적인 경우라면, 프로그램에서 사용이 끝난 메모리를 반납하면 GC(Garbage Collection)이 수행되어 다시 사용할 수 있도록 되어야 한다. 그러나, GC 대상이 되지 못하게 프로그램이 메모리를 잡고 있거나, GC를 통해서 사용 가능하게 되는 메모리보다 메모리를 요.. 2022. 5. 3.
Cookie 방식 HttpSession의 작동원리 웹프로그래밍을 하면서 request.getSession() 만 호출하면 HttpSesion을 얻어서 사용할 수 있는 걸로 알고 있는데, 가끔씩 로그인 후에 세션이 유실되어 로그아웃되고 다시 로그인을 해야 하는 일이 생긴다. 그런데, 어디에 문제가 생겨서 로그인한 정보가 사라지는지 모르는 경우가 대부분이다. 이번 글에서는 웹브라우저와 WAS가 어떤 방식으로 HttpSession을 유지하는지 확인해 보려고 한다. 이 내용을 이해하면 HttpSession이 유실되었을 때 원인을 찾기에도 도움이 될 것이다. 1. Session Cookie Name 먼저 세션을 인식하기 위해 사용자는 Cookie의 이름을 알아야 한다. 이것은 서버에서 정해지고 서버에서도 설정된 이름의 Cookie를 이용해 HttpSession을.. 2022. 5. 2.
네트워크 프로그램 오류의 이해 네트워크 프로그램은 자주 만들 일도 없고, 문제도 아주 가끔 발생하기 때문에 매번 새로운 느낌이다. 그래서, 네트워크 프로그램이 작동하는 방식과 오류가 발생하는 원인에 대해서 설명하려고 한다. 일반적으로 대부분의 네트워크 프로그램에서 사용하는 TCP는 연결지향(Connection-Oriented) 프로토콜로 커넥션을 수립(establish)한 후에 그 커넥션을 통해 클라이언트와 서버가 데이터를 송수신한다. 그 과정을 아래에 간단하게 그려 보았다. 1. 클라이언트가 서버의 IP와 포트를 이용해서 서버에 커넥션을 요청한다. 2. 서버가 클라이언트의 커넥션 요청에 수락 응답을 전송한다. 3. 커넥션이 수립되었고, 클라이언트가 서버로 요청데이터를 전송한다. 4. 서버는 클라이언트로부터 받은 요청데이터에 대해 처.. 2022. 4. 9.
Software Architect란? 지난번에 SWA에 관해 재미 삼아 썼던 글이 예상외로 많은 사람들의 관심을 끌었다. 간단하게 SWA의 업무를 설명도 하고 별 책임의식 없이 몸값이 올라간다는 이유로 뛰어드는 사람들을 겁줘서 쫓아내려는 목적이었는데, 예상 밖의 큰 관심 때문에 약간의 죄책감이 들기 시작했다. 그래서, 좀 친절한 가이드를 써 보기로 마음을 먹었다. 20년 넘게 이 업계에 몸 담았지만 우리나라에서 일하는 SWA의 업무에 대해 가이드한 글은 거의 본 적이 없는 것 같다. 그러니까, 필자가 마구 휘갈겨 쓴 글이 이렇게 많은 관심을 받았을 것이다. 필자도 선배나 교육기관으로부터 이런 교육을 받은 적이 없고, SI 프로젝트를 수행하면서 배운 것이다. 읽다 보면 당연히 필자와 다른 생각이 있을 수 있고 각 프로젝트에 상황에 안 맞는 경.. 2022. 3. 15.
개발자의 질문에 대처하는 우리의 자세 SWA로 일하다 보면 개발자로부터 수많은 질문을 받게 된다. 개발자의 수준도 천차만별이라서 말도 안 되게 쉬워서 어이없는 경우도 있고, 너무나 어렵고 복잡해서 해결해 줄 수 없는 질문까지 다양하다. SWA는 어떠한 질문에도 흥분하거나 멘탈이 흔들려서는 안 된다. 언제나 의연한 자세로 마음속에는 항상 '그럴 수 있어'라는 말을 되새기며 살아야 한다. 우리는 동업자 SWA와 개발자는 상하관계가 아니고 함께 프로젝트를 수행하는 동업자의 관계다. PL과 개발자 사이는 상하관계가 될 수 있지만, SWA와 개발자 사이에는 상하관계가 없다. SWA가 프레임워크와 개발환경을 준비해서 개발자에게 제공하면 개발자는 개발을 하고 개발중에 의문이 생기면 SWA에게 질문을 한다. 개발자가 잘 이해하고 빠르게 개발할수록 프로젝트.. 2022. 3. 2.
시작되는 SWA들을 위해 친절해지기로 마음먹은 김에 삶의 노하우를 하나 더 전수할까 하는 마음에 이 글을 쓰게 되었다. 산전수전 다 겪은 백전노장들이야 어디에 던져 놓든 당당하게 행동할 수 있지만, SWA라는 타이틀을 얻은 초보 SWA들은 프로젝트에 처음 투입되었을 때 어떻게 행동해야 할지 참 막막하다. PM, PL들은 SWA니까 개발도 원활하게 진행시켜 주고 무슨 문제든지 해결해 줄 거라고 기대하는데, 팀에서는 대개 적절한 교육이나 훈련도 없는 상태에서 선배도 없이 혼자 프로젝트에 투입시키는 경우가 많다. 필자 또한 그런 경험이 있어서 초보 SWA들에게 약간의 팁이라도 전달하고 싶다. 자유질문 허용 직급 필자가 생각하기에 시시하거나 허접한 질문을 할 수 있는 직급은 사원, 대리, 선임 정도까지이다. 시시하거나 허접한 질문의 기.. 2022. 2. 27.