프로그래밍 언어 활용 1강. 서버 프로그램 구현과 개발 환경
프로그래밍 언어는 기계를 위해 만들어지지 않았습니다. 기계는 0과 1이면 충분하죠. 언어는 전부 사람을 위한 발명입니다.
풀고 시작
언어는 사람 쪽으로 계속 올라왔습니다
컴퓨터가 이해하는 것은 기계어뿐입니다. 사람이 그것을 직접 쓰던 시절도 있었죠. 그러다 기호를 붙인 어셈블리어가 나오고, 사람의 문장에 가까운 고급 언어가 나옵니다. 언어의 역사는 기계에서 사람 쪽으로 한 걸음씩 올라온 역사입니다.
번역 방식은 둘로 갈립니다. 컴파일러는 원시 코드 전체를 미리 번역해 실행 파일을 만듭니다. 번역에 시간이 걸리지만 실행은 빠르고, 문법 오류를 실행 전에 잡아냅니다. C와 C++가 대표적이죠. 인터프리터는 한 줄씩 번역하면서 바로 실행합니다. 시작이 빠르고 이식성이 좋지만 실행 속도는 느립니다. 파이썬과 자바스크립트가 여기 해당합니다.
자바는 그 사이에 있습니다. 원시 코드를 바이트코드로 컴파일해 두고, 그것을 자바 가상 머신(JVM)이 해석해 실행합니다. 한 번 만들면 어느 운영체제에서든 돌아가는 이유가 여기 있습니다.
컴파일 과정도 자주 나옵니다. 문자를 토큰으로 자르는 어휘 분석, 문법 구조를 확인하는 구문 분석, 의미의 타당성을 따지는 의미 분석, 중간 코드 생성, 최적화, 목적 코드 생성 순서입니다.
서버 프로그램은 계층으로 나눕니다
웹 서버 프로그램을 만들 때는 역할을 나눠 층을 쌓습니다. 사용자의 요청을 받는 프레젠테이션 계층, 업무 규칙을 담은 비즈니스 로직 계층, 데이터베이스를 다루는 데이터 접근 계층입니다. 나누는 이유는 하나입니다. 화면을 바꿔도 업무 규칙이 안 흔들리고, 데이터베이스를 바꿔도 화면이 안 흔들리게 하려는 것이죠.
여기서 자주 나오는 개념이 DAO(Data Access Object)와 DTO(Data Transfer Object)입니다. DAO는 데이터베이스 접근 로직을 담당하는 객체이고, DTO는 계층 사이에 데이터를 실어 나르는 그릇입니다. VO(Value Object)는 값 자체를 표현하며 보통 변경 불가능하게 만듭니다.
프레임워크와 라이브러리의 차이도 짚어 두시죠. 라이브러리는 내가 필요할 때 불러 쓰는 도구 모음이고, 프레임워크는 전체 흐름을 이미 갖고 있어서 내가 그 안에 코드를 끼워 넣는 구조입니다. 흔히 제어의 역전(IoC)이라고 부르는 성질이죠. 내가 부르는 게 아니라 프레임워크가 나를 부릅니다.
배치 프로그램도 출제 범위입니다. 대량의 데이터를 정해진 시각이나 조건에 따라 한꺼번에 처리하는 프로그램인데, 요건은 넷입니다. 대용량 데이터 처리, 자동화, 견고성(잘못된 데이터에도 중단되지 않을 것), 안정성과 신뢰성입니다.
개발 환경은 도구의 조합입니다
개발 환경을 이루는 도구는 역할별로 나뉩니다.
| 종류 | 하는 일 | 예 |
|---|---|---|
| 빌드 도구 | 소스를 컴파일하고 의존성을 관리해 실행 가능한 형태로 만든다 | Ant, Maven, Gradle |
| 구현 도구 | 코드를 작성하고 디버깅한다 | Eclipse, IntelliJ, Visual Studio |
| 테스트 도구 | 작성한 코드를 검증한다 | JUnit, Selenium |
| 형상 관리 도구 | 변경 이력을 관리한다 | Git, Subversion |
웹 서버와 WAS의 구분도 자주 나옵니다. 웹 서버는 HTML이나 이미지 같은 정적 자원을 돌려주고, WAS는 프로그램을 실행해 동적 결과를 만듭니다. Apache가 전자, Tomcat이나 JBoss가 후자의 대표죠.
변수 이름에도 규칙이 있습니다
코드를 짤 때 이름 짓는 방식은 언어마다 관례가 다릅니다. 첫 단어는 소문자로 시작하고 이어지는 단어의 첫 글자를 대문자로 쓰는 카멜 표기법, 모든 단어의 첫 글자를 대문자로 쓰는 파스칼 표기법, 단어 사이를 밑줄로 잇는 스네이크 표기법이 있습니다. 자바는 카멜, 파이썬은 스네이크를 씁니다.
변수 이름 규칙도 시험에 나옵니다. 영문자와 숫자와 밑줄을 쓸 수 있고, 첫 글자는 숫자로 시작할 수 없으며, 예약어는 쓸 수 없고, 대소문자를 구분합니다.
데이터 타입은 값의 종류와 크기를 정합니다. 정수형, 실수형, 문자형, 논리형이 기본이고, 여러 값을 묶는 배열이나 구조체 같은 복합 타입이 있습니다. 타입을 미리 선언해야 하는 언어를 정적 타입 언어, 실행 중에 정해지는 언어를 동적 타입 언어라고 부릅니다.
다음 강부터는 실제로 코드를 읽습니다. 4과목이 어려운 이유는 개념이 아니라 손으로 따라가는 연습의 부족이니, 예제는 반드시 눈이 아니라 손으로 풀어 보세요.
인출 문제
생각해볼 질문 (정답 없음)
읽기 쉬운 코드와 짧은 코드가 충돌할 때 어느 쪽을 고르시겠습니까. 그 판단은 팀의 규모에 따라 달라져야 할까요.
이전: 3과목 5강 조인·뷰 그리고 데이터 전환 · 다음: 2강 변수·연산자·제어문