Skip to content
Joshua Jung edited this page Jan 7, 2015 · 11 revisions

웹 개발 세미나 참고 문서

개요

이 문서는 웹 서비스를 개발할 때 필요한 기반 배경 지식과 정보, 그리고 참고 자료를 제공합니다.

아마존 웹 서비스(Amazon Web Service)

AWS는 구글 클라우드 플랫폼, 마이크로소프트 애저와 함께 모던 웹 서비스 개발에 많이 사용되는 클라우드 인프라 서비스(IaaS)입니다.

왜 클라우드 인프라 서비스를 사용하나요?

전통적인 웹 서비스는 물리적으로 독립된 개별 서버를 사용해 서비스되는 형태였습니다. 서버를 운영하시 위해서 서버 하드웨어 구매 비용, 서비스가 확장됨에 따라 추가되는 비용, 그리고 관리 인력에 소요되는 비용 등 투자 대비 효율이 상당히 낮은 형태였습니다. 또한 하드웨어가 고장나거나 천지재변으로 인해 데이터가 유실되는 경우를 대비해 별도의 백업 장치가 필요했습니다. 당장 i7의 경우만 봐도 서버 하드웨어가 동아리방에 위치해 있어 꾸준한 관리를 해줘야 하는 상황입니다.

또한 새로운 서비스를 시작하려면 새로운 하드웨어를 구매해야 했고, 새로 구매한 하드웨어는 웹 서비스에 필요한 여러가지 스택을 설치해야 하는 등 초기에 많은 시간이 필요했습니다.

클라우드 인프라 서비스는 이러한 문제를 해결하기 위해 만들어졌습니다. 클라우드 인프라 서비스는 거대한 데이터 센터 안에 서버 운영에 필요한 모든 인프라와 설비를 갖추고 가상화 기술을 통해 다양한 가상 머신(인스턴스)를 불과 몇 분만에 생성해 바로 서비스에 사용할 수 있는 환경을 조성해 줌으로써 신생 IT 회사나 개인 개발자들이 서버 운영 효율 대비 비용을 과하게 지출하지 않고 마치 휴대폰 요금처럼 쓴만큼만 지불하는 종량제 모델을 만들어냈습니다.

AWS를 사용하면 미리 만들어져 있는 수 많은 시스템 이미지를 설치함으로써 예전에는 몇 시간 ~ 며칠이 걸렸던 초기 설치 작업을 몇 분으로 줄여 더 빠르게 개발을 시작할 수 있으며, 첫 12개월은 무료로 사용 가능케함으로서 많은 기능을 테스트해볼 수 있습니다.

실무자를 위한 "아마존 웹 서비스를 다루는 기술" 원고가 인터넷에 공개되어 있습니다. 이 책으로 AWS EC2 인스턴스를 생성하고 관리하는 방법을 배워보세요.

아마존 웹 서비스를 다루는 기술 출간 및 원고 공개

클라우드 컴퓨팅에 대한 정보는 다음 문서를 참고해주세요.

Cloud Computing

Linux

리눅스 운영체제는 오픈소스, 범용성 등의 특성 때문에 서버용 운영체제로 많이 사용됩니다. 리눅스는 오픈소스이기 때문에 여러 종류의 배포판(distro)이 존재합니다. 많이 쓰이는 서버용 배포판은 다음과 같습니다.

다음은 위 운영체제에 대한 구글 트렌드 비교 차트입니다. Google 트렌드 통계 웹 상에서는 Ubuntu에 대한 관심이 다른 운영체제에 비해 매우 높을 것을 알 수 있습니다. 이는 즉 웹 상에서 Ubuntu에 대한 정보가 다른 리눅스보다 많다는 것을 의미합니다. CentOS도 서버용으로 쓰기에 좋은 운영체제이지만(i7이 현재 CentOS를 사용합니다), Ubuntu가 입문용으로 더 적합합니다.

리눅스 명령어

요즘 출시되는 리눅스 배포판은 대개 Graphical User Interface(GUI, 그래픽 사용자 인터페이스)를 가지고 출시됩니다. 그러나 개발용으로 사용하려면 결국 Command Line Interface(CLI, 명령줄 인터페이스)에서 리눅스를 다룰줄 알아야 합니다. 처음에는 적응하기 다소 어려울 수 있지만 명령어 치트 시트를 참고해서 사용하다 보면 금세 익혀서 사용할 수 있습니다.

Unix/Linux Command Reference

또한 CLI에서 사용하는 텍스트 에디터인 vi의 치트 시트도 첨부합니다.

Vi/Vim 단축키 모음

개발자라면 리눅스는 반드시 다룰줄 알아야 합니다(마이크로소프트에 입사하지 않는 이상... 하지만 요즘은 마소에서도 리눅스에 투자 많이합니다). 복잡해 보이더라도 충분한 시간을 들여 천천히 배운다면 나중에 반드시 유용히 쓸 때가 올 것입니다.

Stack

하나의 서비스를 완성하기 위해 여러 종류의 언어, 기술, 프레임워크, 라이브러리를 합친 형태를 Stack(스택)이라고 합니다. 보통 하나의 웹 서비스는 다음과 같은 구성을 가집니다.

각 부분에 사용되는 언어나 프레임워크, 그리고 데이터베이스는 개발자의 취향대로 골라서 조합할 수 있습니다. 그러나 많은 개발자들의 경험을 토대로 가장 좋은 조합이 만들어졌습니다. 그리고 그러한 조합을 스택이라고 합니다. 예를 들어 PHP로 개발하는 웹 서비스는 Linux를 운영체제로, MySQL을 데이터베이스로, Apache HTTP Server를 웹 서버로 조합해 사용하는 형태가 보편적입니다. 이를 LAMP 스택이라고 합니다. 또 예를 들면, 서버사이드부터 프론트엔드까지 모든 개발을 JavaScript 언어로 하는 조합을 Javascript Full Stack이라고 합니다. 유명한 자바스크립트 풀 스택으로 MEAN(MongoDB, Express.js, Angular.js, Node.js) 스택이 있습니다. 이외에도 수 많은 종류의 스택이 존재합니다.

이러한 스택을 직접 설치해서 개발할 수도 있지만, 스택을 미리 구축한 다음 하나의 이미지로 배포하는 서비스를 사용하면 더 효율적인 개발이 될 것입니다(해당 스택을 잘 알고 있다는 가정 하에). Bitnami는 바로 이런 스택을 모아서 배포하는 서비스 중 하나입니다. Bitnami에서 개발에 필요한 스택을 선택에서 운영체제에 맞는 버전을 설치하면 바로 개발을 시작할 수 있습니다. 또한 Bitnami는 스택을 운영체제에 미리 설치한 이미지를 클라우드 인프라 서비스를 통해 제공합니다. AWS에서 인스턴스를 생성할 때 Bitnami에서 제공하는 사전 정의된 시스템 이미지를 선택하고 인스턴스로 런칭해서 바로 서버를 구축할 수도 있습니다.

PHP의 경우 많이 쓰이는 XAMPP 스택을 참고하세요.

XAMPP(Cross platform)

Python의 경우 Django 스택을 참고하세요.

Django 스택

Django Project

웹 상에서 프로그래밍을 배워봅시다

웹 상에서 프로그래밍 강의/강좌를 제공하는 사이트는 예전에도 많았습니다. 하지만 요즘에는 단순한 단방향의 강의가 아닌 인터렉티브한 학습 코스도 만들어져 서비스되고 있습니다. 웹 상에서 프로그래밍을 배울 수 있는 사이트 주소를 모아봤습니다.

한국어

영어

Model-View-Controller :: 웹 서비스에 사용되는 디자인 패턴

디자인 패턴이란

소프트웨어 개발 방법에서 사용되는 디자인 패턴은, 프로그램 개발에서 자주 나타나는 과제를 해결하기 위한 방법 중 하나로, 과거의 소프트웨어 개발 과정에서 발견된 설계의 노하우를 축적하여 이름을 붙여, 이후에 재이용하기 좋은 형태로 특정의 규약을 묶어서 정리한 것입니다. 알고리즘과 같이 프로그램 코드로 바로 변환될 수 있는 형태는 아니지만, 특정한 상황에서 구조적인 문제를 해결하는 방식을 설명해 줍니다.(인용: 위키피디아)

MVC 디자인 패턴

대다수의 웹 서비스는 MVC 디자인 패턴을 따라 개발되었습니다. 이 디자인 패턴이 인기 있는 이유는 데이터가 저장되고 표시되는 방법 간에 경계를 긋기 때문입니다. 이는 클라이언트-서버 구조의 특성 때문이기도 한데, MVC 디자인 패턴을 적용하면 클라이언트단에서 표시되는 웹 페이지의 구조와 디자인(View)과 view에 내용을 보여주기 위해 데이터를 처리하는 controller, 그리고 데이터를 DB에 저장하고 읽어오는 model의 역할을 소스 코드 수준에서 분리할 수 있어서 한 쪽을 수정해도 다른 한 쪽에 큰 영향을 미치지 않도록 제어할 수 있습니다.

더 자세한 설명은 다음 문서를 참조하세요.

MVC 구조의 이해

프론트엔드 패키지 관리자 : Bower

Bower는 Node.js 기반의 프론트엔드 패키지 관리 프로그램입니다. 프레임워크, 라이브러리, 에셋, 유틸 등 여러가지 기술이 모여서 하나의 웹 사이트를 구성하는데, Bower는 이러한 패키지를 설치, 업데이트, 삭제 등 관리를 한 곳에서 할 수 있게끔 설계된 프로그램입니다.

다음 링크에서 Bower에 대해 알아보세요.

Bower 홈페이지

Bower : 웹 프론트엔드 패키지 관리자

Responsive Design

Responsive Design(반응형 디자인)은 다양한 스크린 사이즈를 하나의 웹 사이트 레이아웃으로 대응할 수 있도록 고안된 디자인 기법입니다. 다음 문서를 참조하세요.

[RWD] 반응형 웹 디자인 - 개념 잡기

많이 쓰이는 프론트엔드 프레임워크들

다음은 최근 많이 쓰이는 오픈소스 프론트엔드 프레임워크 목록입니다.

개발에 도움이 되는 웹 서비스와 도구들

다음 내용은 개발에 완전 도움이 되는 웹사이트와 도구들의 내용과 제가 조사한 내용을 한 곳에 모은 것입니다. 웹 서비스 분야에 국한되어 있지는 않습니다.

프로젝트 관리 & 코드 공유

협업과 프로젝트 관리

개발자 특화 채팅 & 커뮤니케이션 서비스

개발 기획 도구 / 프로토타이핑 / 다이어그램

웹 프론트엔드

클라우드 IDE

정규표현식

라이센스

코드 테스트 & 공유 도구

개발관련 북마크

모조텍스트 생성도구

###개발자 블로그 & 미디어

소스 코드 분석

  • https://codeclimate.com/ "Automated code review for Ruby, JS, and PHP" 소스 코드의 품질, 보안성, 코딩 스타일, 적용 범위 등을 자동으로 분석해서 리뷰해주는 서비스. 오픈 소스 프로젝트는 무료로 제공됩니다.

퍼포먼스 튜닝

그래픽

  • http://pixlr.com/ 온라인 포토샵
  • http://inkscape.org/download/?lang=en 일러스트레이터에 대응하는 백터 그래픽 도구, 어도비 일러스트레이터와 같이 백터를 그래픽을 핸들링 할 수 있는 오픈소스/무료 에플리케이션 잉크스페이스입니다.
  • http://iconfind.co.kr/ 각종 아이콘 검색 사이트. 각 아이콘에 대한 라이센스가 표기가 잘되어있어 사용하기 편합니다.
  • http://www.alessioatzeni.com/metrize-icons/ 퀄리티 높은 아이콘들을 다양한 포멧으로 무료로 다운로드 받을 수 있습니다.

서버 보안 점검

전자공학

기타