저는 개발자로 5년 동안 일하면서, 개발 환경이나 서버에 대해 잘 모르는 분이 PM, 기획자 역할을 맡아 고생을 많이 하시는 것을 여러 번 보았습니다. 진행상황에 대해 잘 이해하고 보고하는 역할을 해야 하는데, 이해에 어려움을 겪으시면서 곤란한 상황들이 많이 발생하고는 했습니다. 그때마다 제가 알려드리곤 했던 기초적인 서버 관련 지식을 이번 글에서 소개하려고 합니다. 프로젝트를 처음 구성할 때 서버를 어떻게 구성해야 하는지, 비용 산정은 어떻게 해야 하는지, 서버에 발생하는 이슈는 어떤 것이고 개발자가 해결을 위해 무슨 작업을 하는지 등을 간략히 담았습니다. 매번 개발자에게 어떻게 물어봐야 할지 고민하셨던 분들께 도움이 되길 바랍니다.
저는 개발자로 5년 동안 일하면서, 개발 환경이나 서버에 대해 잘 모르는 분이 PM, 기획자 역할을 맡아 고생을 많이 하시는 것을 여러 번 보았습니다. 진행상황에 대해 잘 이해하고 보고하는 역할을 해야 하는데, 이해에 어려움을 겪으시면서 곤란한 상황들이 많이 발생하고는 했습니다. 그때마다 제가 알려드리곤 했던 기초적인 서버 관련 지식을 이번 글에서 소개하려고 합니다. 프로젝트를 처음 구성할 때 서버를 어떻게 구성해야 하는지, 비용 산정은 어떻게 해야 하는지, 서버에 발생하는 이슈는 어떤 것이고 개발자가 해결을 위해 무슨 작업을 하는지 등을 간략히 담았습니다. 매번 개발자에게 어떻게 물어봐야 할지 고민하셨던 분들께 도움이 되길 바랍니다.
서버의 구성
서버를 구성하는 방식으로는 두 가지가 있습니다. 하나는 온프라미스 서버, 다른 하나는 클라우드 서버입니다.
온프레미스(On-premise) 서버
온프레미스 서버는 자체적으로 보유하고 관리하는 서버입니다. 서버를 실제로 운영할 물리적인 공간이 필요합니다. 이렇게 말하면 아주 거창해 보이지만, 쉽게 말하자면 온프레미스 서버는 성능 좋은 컴퓨터입니다. 이를 24시간 동안 어떤 물리적 공간에서 24시간 전원을 켜놔야 하는 것입니다. 그래서 서버실은 온도가 낮아야 합니다.
보유할 서버는 작업 용도에 따라 결정하면 됩니다. AI 작업을 하게 된다면 그래픽카드를 좋은 사양으로 맞춰주면 되고, 사용자 접속량이 많거나 오랜 시간이 걸리는 작업이라면 CPU를 좋은 사양으로 맞춰주면 됩니다. 컴퓨터를 구매하여 용도에 맞는 서버 프로그램을 설치하게 된다면 해당 컴퓨터는 서버가 됩니다.
클라우드 서버
클라우드 서버는 따로 서버실을 위한 공간 확보가 어렵거나 서버를 관리하기 어려울 때, 사용량만큼의 돈을 지불하여 타 업체에 서버의 관리를 위임하는 형태입니다. 이는 초기 구성비용을 줄일 수 있고, 서버를 운용하는 중에 사용량이 급격히 많아져도 서버가 다운되는 것을 막을 수 있다는 장점이 있지만, 사용량만큼의 돈을 지불해야 한다는 단점이 있습니다. 또한 서버에 장애가 발생하였을 때, 해당 이슈가 네트워크 이슈인지, 서버의 이슈인지 정확한 원인을 파악하는 데 어려움이 있다는 문제도 있습니다.
서버의 종류
서버에는 웹(이하 WEB)서버, 데이터베이스(이하 DB) 서버, 애플리케이션(이하 WAS) 서버, 파일 서버, API 서버 등 다양한 종류가 있습니다.
DB 서버
회원 정보, 게시판의 게시글 제목, 내용 등의 내용을 EXCEL 파일처럼 가지고 있는 서버입니다.
요청이 왔을 때, 해당 결과를 보여줍니다. 예를 들어 사용자의 아이디와 비밀번호를 입력 받으면, 해당 사용자의 정보를 보여주거나, 게시글 ID를 물어보면, 해당 게시글의 제목, 내용을 리턴합니다. EXCEL의 필터 기능처럼 특정 사용자가 등록한 게시글의 대해서만 보여주는 것도 가능합니다.
API 서버
입력데이터(이하 input)를 받았을 때, 출력데이터(이하 output) 데이터를 보내주는 서버입니다. 식당에 빗대어 설명해보겠습니다. 식당에 가서 메뉴판을 보고 음식을 주문하면, 음식이 식탁으로 배달됩니다. 이때 메뉴판을 API명세서에 빗댈 수 있습니다. 이 메뉴판을 보고 음식을 주문하는 것을 입력(input)이라 볼 수 있고, 음식이 배달되는 것을 출력(output)으로 볼 수 있습니다. 서빙하는 사람과 요리사는 주문이라는 입력데이터를 받아 음식 배달이라는 출력데이터를 내놓는 API 서버로 볼 수 있습니다.
WAS 서버
DB 서버에서 데이터를 조회해 오거나, 다른 곳에서 조회해온 내용을 가공하여 동적으로 결과를 리턴하는 서버입니다. 예를 들어 로그인 아이디와 비밀번호를 받았을 때, 해당 사용자의 정보를 데이터베이스에서 확인하거나, 비밀번호의 암호화, 게시판 조회 등 복잡한 기능을 하는 서버입니다. 식당에서 음식 같은 경우 빵, 아이스크림과 같이 바로 나올 수 있는 요리가 아닌 스테이크, 국밥처럼 조리를 하여 내보내는 기능을 합니다.
WEB 서버
HTML, CSS, JAVASCRIPT(이하 JS)처럼 동적인 역할이 필요 없는 정적 데이터들을 리턴하는 서버입니다. 이미지, 파일 다운로드와 같이 가지고 있는 데이터를 따로 가공할 필요 없이 바로 보여줄 수 있는 경우 사용합니다. 또한 스스로 처리할 수 없는 경우 WAS 서버로 위임하는 기능을 합니다. 그 때, 여러 개의 WAS 서버가 있을 때, /a 요청과 /b 요청을 확인하여 각각의 WAS 서버로 보내는 기능을 합니다. 식당에서 음식을 주문했을 때, 국밥에 요청이 들어오면 주방에서 국밥을 만들 수 있도록 전달과 동시에 김치, 상추, 고추와 같은 밑반찬들은 주방을 거치지 않고 바로 내옵니다. 이러한 역할을 하는 것이 WEB 서버입니다.
DNS 서버
주소창에 www.wishket.com 을 입력하게 되었을 때, 3.36.6.134 와 같은 IP 주소로 변환시켜주는 서버입니다. 모든 컴퓨터가 IP 주소를 가지고 있지만 일반 사용자에게 자신의 서버를 IP주소로 접근할 수 있도록 한다면 해당 번호를 외우기 너무 어렵기 때문에 문자로 된 도메인 주소를 사용하는데, 이를 IP 주소로 변환시켜주는 기능을 하는 서버입니다. 예를 들어 친구와 점심을 먹기로 했을 때, 해당 식당의 주소를 알려주는 것보다 식당의 이름을 알려주는 것이 더 편한 것과 같은 이유입니다.
이렇게 기술하면 또 아주 거창해 보이지만, 결국 서버는 컴퓨터이고, 컴퓨터에 위에 소개한 각 종류의 프로그램을 용도에 맞게 설치하여 실행할 때 그 컴퓨터는 해당 서버가 됩니다. 예를 들면 WEB 프로그램 중 하나인 Apache를 설치하면 WEB 서버가 되며, Oracle, MARIADB 등을 설치하게 된다면 DB 서버가 됩니다. 또한 Apache와 Oracle을 같이 설치하게 된다면 해당 컴퓨터는 DB 서버이자, WEB 서버가 됩니다.
서버의 이슈
서버에 장애가 생겨 정상적인 동작을 할 수 없는 현상을 일컬어 “서버에 이슈가 발생했다”고 말합니다. 혹은 “서버가 죽었다”는 표현을 사용하기도 합니다. 서버가 죽는 현상은 다양한 원인이 있는데 크게 나누면 물리적 장애와 소프트웨어 장애로 구분할 수 있습니다.
물리적 장애
화재, 침수, 정전, 큰 충격과 같은 원인으로 서버에 문제가 발생하는 것을 물리적 장애라고 합니다. 또한 인터넷 선(이하 랜선)의 연결이 되지 않았거나, 전원이 내려갔거나, 컴퓨터의 물리적인 장치가 망가졌을 때에도 발생할 수 있습니다.
소프트웨어 장애
소프트웨어 장애에는 다양한 원인이 존재하기 때문에, 발생 원인을 찾기가 매우 어렵습니다. 이 중 자주 발생하는 장애에 관해서 설명하겠습니다.
대부분의 소프트웨어 장애는 개발자의 실수로 발생합니다. 장애 원인을 찾는 과정은 수학 문제의 오답 원인을 찾는 과정과 비슷합니다. 만약 수학 문제를 풀 때 여러 방정식 등을 활용해 100줄 이상의 문제 풀이 과정을 거쳐 답이 도출되었다면, 그 과정 중 어떤 것이 틀렸는지를 돌이켜보면서 답을 찾아야 합니다. 이때 연산 과정이 틀린 게 아니라 수학 문제 자체가 잘못되어 틀린 답이 나온 것일 수도 있습니다. 또 문제 풀이 과정을 복기하며 수정하던 중 수학 문제 자체가 바뀌어버려 오답이 발생한 것일 수도 있습니다. 소프트웨어 장애도 이와 마찬가지입니다.
그밖에도 다양한 원인으로 장애가 발생합니다. 이때 개발자에게 코드의 문제인지, 설계의 문제인지, 서버의 문제인지를 확인하고, 이 문제를 해결하는 데 걸리는 소요 시간 정도를 물어 보고서를 작성하면 됩니다. 코드의 문제일 경우에는 작업에 걸리는 시간과 원인에 대해 물어보면 되고, 설계의 문제일 경우에는 최대한 빠르게 우회할 방법 등 대처 방안과 소요 시간 시간을 물으면 됩니다. 서버의 문제일 경우에는 원인을 빠르게 파악하여 서버 담당자에게 전달할 수 있도록 개발자에게 요청하면 됩니다.
결론
지금까지 서버의 구성, 서버의 종류, 서버의 이슈에 관해 기본적인 내용을 알아봤습니다. 서버는 단순히 성능이 좋은 컴퓨터입니다. 컴퓨터에 어떤 프로그램을 설치하느냐에 따라 서버의종류가 달라질 뿐입니다. 또 정상적인 동작을 하지 않는 것을 “서버의 이슈가 생겼다.” 혹은 “서버가 죽었다.”라고 합니다. 처음 듣는 단어들 때문에 어렵게 느껴질 수 있지만, 막상 알고 보면 어렵지 않습니다. 개발 환경에 관한 지식 없이 처음 PM, 기획자가 되신 분들께 도움이 되길 바랍니다.
요즘IT의 모든 콘텐츠는 저작권법의 보호를 받는 바, 무단 전재와 복사, 배포 등을 금합니다.