프로그래밍 언어 활용

기본 개발환경 구축

출제기준 세세항목: 웹서버 · DB서버 · 패키지

핵심 요약

기본 개발환경은 무엇으로 이뤄질까요

웹 서비스를 만들고 돌리려면 최소한의 바탕이 필요합니다. 운영체제 위에 화면 파일을 내주는 웹 서버, 업무 로직을 실행하는 WAS, 데이터를 보관하는 DB 서버가 놓이고, 이들을 설치하고 묶는 단위가 패키지입니다. 이 바탕을 갖추는 일을 기본 개발환경 구축이라고 합니다.

요청은 보통 이 순서로 흐릅니다. 사용자의 브라우저가 요청을 보내면 웹 서버가 먼저 받고, 이미지나 HTML 같은 정적 파일이면 바로 돌려줍니다. 로그인이나 검색처럼 계산이 필요한 요청이면 WAS로 넘기고, WAS는 필요한 데이터를 DB 서버에서 가져와 결과를 만든 뒤 웹 서버를 거쳐 사용자에게 돌려줍니다. 클라이언트 → 웹 서버 → WAS → DB 서버로 이어지는 구조를 기억해 두세요.

개발용 환경과 실제 서비스용(운영) 환경은 가능한 한 같은 구성으로 맞춥니다. 개발할 때 쓴 운영체제나 WAS 버전이 운영 서버와 다르면, 개발 PC에서는 되던 기능이 운영 서버에서는 안 되는 일이 생깁니다.

웹 서버와 WAS

웹 서버는 HTTP 요청을 받아 HTML, CSS, 이미지 같은 정적 콘텐츠를 돌려주는 서버입니다. 정적 콘텐츠는 누가 언제 요청해도 같은 내용인 파일입니다. 대표 제품으로 Apache HTTP Server, Nginx, 마이크로소프트의 IIS가 있습니다. 웹 서버는 파일을 빠르게 내주는 것 외에도, 들어온 요청을 여러 WAS에 나눠 주는 부하 분산, 바깥 요청을 대신 받아 안쪽 서버로 넘기는 리버스 프록시, HTTPS 암호화 처리를 맡기도 합니다.

WAS(Web Application Server)는 요청마다 결과가 달라지는 동적 콘텐츠를 처리합니다. 로그인한 사람의 장바구니, 검색어에 따른 결과처럼 프로그램을 실행해야 만들어지는 내용입니다. 자바 웹 애플리케이션을 실행하는 컨테이너 역할과 함께 DB 연결 관리, 트랜잭션 관리 같은 기능을 제공합니다. 대표 제품은 Tomcat, JEUS, WebLogic, WebSphere, JBoss(WildFly)입니다.

웹 서버와 WAS를 나눠 두는 이유가 있습니다. 정적 파일은 웹 서버가 빠르게 처리하고 WAS는 무거운 동적 처리에만 집중하게 해 전체 성능이 좋아집니다. 또 바깥에는 웹 서버만 드러내고 WAS와 DB 서버는 안쪽에 숨겨 보안을 높일 수 있고, WAS를 여러 대 두고 웹 서버가 요청을 나눠 주면 한 대가 고장 나도 서비스를 이어 갈 수 있습니다.

DB 서버 갖추기

DB 서버는 DBMS를 설치해 데이터를 저장하고, 여러 사용자의 요청을 받아 안전하게 처리하는 서버입니다. 많이 쓰는 DBMS로 Oracle, MySQL, MariaDB, PostgreSQL, MS SQL Server가 있습니다. 기본 접속 포트는 MySQL·MariaDB 3306, Oracle 1521, PostgreSQL 5432, MS SQL Server 1433입니다.

DBMS를 고를 때는 장애가 나도 서비스를 이어 갈 수 있는지(가용성), 많은 요청을 빠르게 처리하는지(성능), 문제가 생겼을 때 도움을 받을 수 있는지(기술 지원), 다른 시스템·기존 데이터와 잘 맞는지(상호 호환성), 라이선스와 운영까지 합친 비용이 얼마인지(구축 비용)를 따집니다.

설치한 뒤에는 기본 설정을 꼼꼼히 정합니다. 한글이 깨지지 않도록 문자 인코딩을 UTF-8로 맞추고, 관리자 계정과 애플리케이션용 계정을 나눠 애플리케이션 계정에는 꼭 필요한 권한만 줍니다(최소 권한). 외부에서 DB 포트에 바로 접속하지 못하게 막고, 정기 백업 일정을 세워 둡니다. WAS에서는 매번 새로 연결하는 대신 미리 연결을 만들어 두고 돌려쓰는 커넥션 풀을 설정합니다.

패키지와 패키지 관리자

패키지는 프로그램을 실행하는 데 필요한 파일, 설정, 설명 정보를 한데 묶어 설치·배포하기 쉽게 만든 묶음입니다. 리눅스에서는 배포판에 따라 형식이 다릅니다. 데비안·우분투 계열은 .deb 파일을 쓰고 apt(apt install nginx)로, 레드햇·CentOS·페도라 계열은 .rpm 파일을 쓰고 yum이나 dnf(yum install httpd)로 설치합니다.

패키지 관리자는 프로그램이 필요로 하는 다른 패키지(의존성)까지 찾아 함께 설치해 주고, 업데이트와 삭제도 관리합니다. 직접 파일을 내려받아 설치하면 필요한 라이브러리를 하나하나 찾아야 하지만, 패키지 관리자를 쓰면 명령 한 줄로 끝납니다. 설치 전에 apt update처럼 패키지 목록을 최신으로 갱신해 두는 것이 좋습니다.

프로그래밍 언어에도 각자 패키지 관리자가 있습니다. Python은 pip, JavaScript는 npm, Java는 Maven이나 Gradle이 라이브러리를 내려받아 줍니다. 또 자바 애플리케이션은 배포할 때 클래스와 라이브러리를 묶은 JAR, 웹 애플리케이션 전체를 묶은 WAR 같은 형식으로 패키징해 WAS에 올립니다.

고르는 기준, 설치 순서, 환경변수

기본 개발환경의 구성 요소를 고를 때는 서로 맞물리는지가 가장 중요합니다. 운영체제에서 해당 WAS와 DBMS를 지원하는지, WAS가 요구하는 JDK 버전은 무엇인지, 프레임워크가 그 WAS 버전에서 동작하는지를 먼저 확인합니다. 그다음 라이선스 비용, 기술 지원을 받을 수 있는지, 보안 업데이트가 언제까지 나오는지, 팀이 써 본 경험이 있는지를 따집니다.

설치는 바탕부터 위로 쌓아 올립니다. 운영체제를 설치하고 업데이트한 뒤, JDK 같은 실행 환경을 설치하고, DBMS와 웹 서버, WAS를 차례로 설치해 서로 연결합니다. 마지막으로 개발 도구(IDE, 빌드 도구, 형상관리 도구)를 갖춥니다. 아래 단계가 준비되지 않으면 위 단계가 설치되거나 실행되지 않는 경우가 많기 때문입니다.

설치를 마치면 환경변수를 정합니다. JDK 설치 위치를 JAVA_HOME에 넣고, 그 안의 bin 디렉터리를 PATH에 추가하면 어느 디렉터리에서든 java와 javac 명령을 쓸 수 있습니다. Tomcat처럼 JAVA_HOME을 참고해 실행되는 프로그램도 있습니다. 끝으로 java -version으로 버전을 확인하고, 웹 서버와 WAS, DB 서버의 포트로 실제 접속이 되는지 시험해 봅니다.

실무에서는 이렇게 쓰여요

정적 파일을 웹 서버로 옮긴 쇼핑몰

상품 이미지까지 Tomcat이 직접 내주던 쇼핑몰이 할인 행사 때마다 느려졌습니다. 앞단에 Nginx를 두어 이미지와 CSS는 Nginx가 바로 응답하고 주문·결제 요청만 Tomcat으로 넘기게 하자, 같은 서버 대수로 훨씬 많은 접속을 견뎠습니다.

JDK 버전이 맞지 않은 설치

새 버전 WAS를 설치했는데 시작하자마자 멈췄습니다. 로그를 보니 그 WAS가 요구하는 JDK보다 낮은 버전이 깔려 있었고, 맞는 JDK를 설치한 뒤 JAVA_HOME을 새 경로로 바꾸자 정상적으로 실행되었습니다.

패키지 관리자로 맞춘 서버 세 대

운영 서버 세 대에 웹 서버를 손으로 내려받아 설치했더니 서버마다 버전이 조금씩 달라 문제가 생겼습니다. 이후에는 패키지 관리자로 같은 버전을 지정해 설치하는 스크립트를 만들어, 새 서버도 명령 한 번으로 똑같이 구성하게 했습니다.

총정리 목차로