1 서버 프로그래밍 용어
다시, 코딩이 뛰기 시작했어!
서버를 닫지 않고 코드를 수정하여 적용시키는 매우 위험한 행위를 말한다. 쉽게 말해 마취 안 하고 수술하는 것이라고 보면 된다. 실제 이 기법이 사용되는 곳에서는 hot code swapping이라고 부른다.
1.1 필요한 경우
그런 거 없다
원칙대로라면 이런 경우는 일어나면 안 된다. 보통 개발 및 테스트를 위한 환경을 별도로 구축하고, 퍼블리싱은 버그 등의 수정을 완료한 후 퍼블리싱 서버에서만 작동시키기 때문이다. 다만 대부분의 상용 시스템이 그러하듯이, 실제 환경에서만 나타나는 버그도 존재하기 때문에 극히 제한적인 경우 라이브 코딩을 할 수도 있다고... 알려져는 있으나 이런 미친 짓을 하다가는 페이스북처럼 욕을 한 사발로 얻어먹게 된다. 사실 버그를 잡는 게 목적이라면, 별도의 로깅 시스템이나 시스템의 자원 사용률 등을 파악하여 문제가 되는 곳을 추적하는 것이 보통이며, 이것이 안된다면 차선책으로 정기점검 때 문제점 파악을 위한 코드를 실제 작동하는 시스템에 삽입하여 파악한 후 해당 코드를 뺀다.
보안을 요구하고 24시간 가동되는 인트라넷처럼(해당 소스코드의 반입·반출, 콘솔 원격 접속을 불허하는 경우), 프로그래머가 직접 서버 단말기에서 프로그래밍하는 경우가 있긴하다. 이렇게 아주 특이한 상황이어도, 해당 서버를 잠시 정지하는 경우가 대부분이다.
핵심적인 중계장비와 같이 정지를 시킬 수 없는 경우 작정하고 이게 되게 만든다. 방법은 여러 가지가 있을 수 있지만 핵심은 스와프 과정에서 생기는 구 버전과 신 버전 사이의 불일치 문제를 해결해주는 소프트퍼지 디자인을 어떻게 해두었느냐에 달렸다. 점검을 위해 서비스를 중단시키는 것이 불가능한 서비스 회사들 중에는 이런 핫코드스와프 덕후들이 종종 있다. 다만 처음부터 잘 덕질 고려해서 개발한 덕분에 별 탈 없이 해내기 때문에 이슈가 되는 경우가 없어서 사람들이 잘 모르는 것뿐이다.
1.2 위험성
코딩하다가 버그가 튀어나오는 경우 즉시 서비스에 악영향을 끼친다. 상황에 따라서는 서버가 죽는다. 서버가 죽고 난 뒤의 상황은 생략한다.
1.3 예시
- 개발자가 서버 차단을 하지 않고 시스템상의 업데이트를 하는 경우
- 페이스북
- 나무위키: 예시로 2016년 1월 22일 진행된 검색 서버 유지보수 작업이 라이브코딩의 예시라 할 수 있다.
-
똥나무《트리 오브 세이비어》 - 배틀넷 2.0 게임들 모두.
2 즉석 코딩
즉석이나 공개된 환경에서 필요한 기능을 가진 코드를 만드는 것. 입코딩이라고도 불린다. 관련된 직종의 면접 때 종종 하는 경우가 있다. 당장 실력을 발휘해야 하는 인력이 필요한 경우(예를 들어 스타트업과 같이 채용 후 바로 업무에 투입되는 경우)를 제외하면 대개 경력직을 뽑는 곳에서 하며, 일반직 사원을 뽑는 곳에선 거의 하지 않는다. 물론 케이스 바이 케이스이다. 어지간하게 쉽지 않은 이상 4년제 대학을 졸업한 학부생이 정확한 답변을 바로바로 하기엔... 무리가 따른다. 직접 해보면 알겠지만 일단 면접관 앞에서 해야 한다는 떨림 때문에 만반의 준비를 하지 않는 이상 매우 어려운 과정이라고 생각하면 된다.[1] 물론 라이브코딩에서 제시하는 주제도 제각각이어서, 경력 여부 따지지 않고 기본적인 내용을 물어보는 경우부터 해당 회사에서 사용할 법한 내용의 코드를 작성해보라는 경우까지 아주 다양하다.
면접 시 라이브 코딩을 하는 대표적인 예로
- 코스콤 면접에 갔던 한 학부생 위키러는 면접관이 "증시 등락을 관리하는 코드를 한번 말해보세요."라는 즉석 코딩 문제를 받고 떨어졌다고... 한다.
- 신입을 뽑는 중견 회사의 실무진 면접의 경우 라이브 코딩 면접으로 간단한 알고리즘을 작성하는 코딩 문제를 받기도 한다.
- 구글의 경우 미리 준비된 온라인 코딩 시스템에 라이브 코딩을 하면서 화상전화로 인터뷰를 진행하는 경우도 있다고 알려져 있다. (학부생 인턴 뽑을 때 Google Students)
면접 시 라이브 코딩을 대비하는 내용으로 유명한 책 중 하나로 《Cracking the Coding Interview》가 있다.
3 실시간 컴파일 코딩
특정 코드 에디터를 통해 코드 작성 즉시 결과를 볼 수 있는 기능.
코드를 실행시킬 수 있는 방법은 인터프리터 방식과 컴파일 형태로 구분되어 있으며, 그중 컴파일은 코드 전체를 컴퓨터가 이해할 수 있는 기계어로 전환하여 실행시키는 것이다. 라이브코딩은 이러한 형태의 코딩→컴파일→실행 반복을 자동으로 수행하게끔 실행시켜주는 개념이라고 볼 수 있다.
예로 이런 거[2]
대부분의 IDE 환경은 라이브 코딩을 하는 것과 다름이 없다. 왜냐하면, 코드 문법 오류 부분을 표시하는 Linter 기능은 상시 컴파일 중이며, 이를 통해 발생한 버그나 문법 오류를 추적해 GUI로 표현하는 방법이기 때문이다. 하지만 사실 이는 컴파일이라기보다는 인터프리팅에 가깝다. 물론 바보같이 컴파일을 반복하는 IDE도 있겠지만, 보통은 내장된 파서가 실시간으로 코드를 분석해 오류를 보여준다. 누군가 이 메모를 확인한다면, 그리고 맞는 것 같다면 수정 바람. 단, 웹 프로그래밍 언어 HTML, CSS는 해당사항 없다. 컴파일을 안 하잖아.
3.1 목적
일반적인 상황에서는 반복적인 컴파일에 따른 리소스 소모로 사용되지 않는다.[3] 개발자가 코드를 작성하면 컴파일러로 바이너리 전환 후 실행함으로써 결과를 볼 수가 있는데 위 디버그와 같이 자주 컴파일을 반복하게 되는 환경이라면 얘기가 달라진다. 개발자의 귀차니즘을 극복해 주기 위해 만들어진 개념.
개발을 편하게 하기 위한 개발