2024. 8. 10. 20:43ㆍ기타
1. 서버와 클라이언트
1-1. 클라이언트란?
클라이언트(client)는 서버로 요청하는 프로그램을 모두 일컬어 말한다. 우리가 사용하는 프로그램인 웹 브라우저가 바로 대표적인 클라이언트 중 하나이다. 우리는 웹 브라우저로 무엇을 할까? 주소를 입력하고 화면을 확인한다. 이때 주소를 입력한 뒤 enter를 눌러 정보를 요청하는 행위를 '서버에 요청한다'라고 한다. 그러면 서버는 그 주소에 맞는 화면으로 응답하게 된다.
1-2. 서버란?
서버(server)는 클라이언트의 요청을 받아 처리하는 주체이다. 클라이언트가 데이터를 요청했다면 데이터를, 단지 서버 내에서 처리만 해달라는 요청을 했다면 해당 요청만 처리할 수도 있다. 흔히 우리가 웹 브라우저에 주소를 입력하는 것은 '새로운 화면을 그리기 위한 데이터를 달라'는 데이터 요청에 해당한다.
2. 데이터베이스
데이터베이스(db)는 여러 사람이 데이털르 한 군데에 모아놓고 여러 사람이 사용할 목적으로 관리하는 데이터 저장소이다. 흔히 데이터베이스를 말할 때 MySQL, 오라클, PostgreSQL 등을 이야기한다. 사실 엄밀히 말해 이것들은 데이터베이스가 아니다. 데이터베이스를 관리하기 위한 시스템의 이름이다. 다만 데이터베이스와 데이터베이스 관리 시스템은 한 쌍으로 움직이므로 둘을 하나처럼 언급할 뿐이다. 데이터베이스의 동작 원리는 다음과 같다.
클라이언트에서 SQL, 즉 데이터베이스를 조작하기 위한 언어로 데이터베이스 관리 시스템에 데이터를 요청하면 데이터베이스 관리 시스템은 데이터베이스에서 데이터를 꺼내 응답한다.
2-1. RDB란?
데이터베이스는 여러 가지로 구분할 수 있는데, RDB, NoSQL, NewSQL 등 여러 종류가 있다. 그중 가장 많이 사용하는 데이터베이스는 RDB이다. RDB는 Relational Database의 약자로 관계형 데이터베이스라는 뜻이다. RDB가 아닌 데이터베이스를 NoSQL 또는 NewSQL로 구분한다. 관계형 데이터베이스는 데이터를 행과 열로 이루어진 테이블로 관리하며, 기본키(pk)를 사용해 각 행을 식별한다. 또한 각 테이블 간에 관계를 지을 수 있다. RDB에서 가장 유명한 데이터베이스들은 MySQL, 오라클, PostgreSQL이 있다.
2-2. SQL이란?
SQL은 Structured Query Language의 약자로 말그대로 쿼리, 즉 데이터 검색을 하는 언어이다. SQL도 하나만 있는 것이 아니라 ANSI 표준 SQL이 있고, 각 RDB별로 방언이 있다. 데이터베이스 전문가가 아니라면 ANSI 표준 SQL만 공부해도 무방하다. SQL도 사실 데이터 질의를 위한 언어이므로 RDB 전용이라고 보기는 힘들다. NoSQL에도 SQL 엔진을 도입해서 데이터를 조금 더 편하게 질의하도록 지원하는 경우가 많다.
2-3. NoSQL이란?
NoSQL의 뜻이 SQL을 안 쓴다는 의미로 사용되기도 하지만, 최근에는 Not Only SQL의 의미로 많이 사용한다. RDB는 데이터 저장, 질의, 수정, 삭제가 용이하지만 반면에 성능을 올리는게 쉽지 않다. 데이터베이스의 성능을 높이려면 머신의 성능을 좋게 하는 스케일 업 또는 머신을 여러 대로 분리하는 스케일 아웃이라는 것이 필요하다. 스케일 업은 장비를 업그레이드하면 되지만 스케일 아웃은 데이터베이스를 분산하고, 이때 트랜잭션을 사용하면 성능이 떨어지게 된다. RDB의 이러한 문제들을 해결하기 위해 NoSQL가 등장했다. NoSQL에는 데이터 모델링을 어떻게 하느냐에 따라서 다이나모디비, 카우치베이스, 몽고디비와 같은 다양한 NoSQL 데이터베이스들이 있다.
3. 아이피와 포트
아이피(IP)는 인터넷에서 컴퓨터 또는 기기들이 서로를 식별하고 통신하기 위한 주소이다. 그래서 아이피를 알면 서버를 찾을 수 있다. 하지만 서버를 이용하려면 아이피만 알아서는 안 된다. 포트까지 알아야 한다. 아이피가 서버를 찾기 위한 번호라면 포트는 그 서버에서 운용되고 있는 서비스를 구분하기 위한 번호이다. 쉽게 말해서 아이피가 백화점이라면 포트는 각자 다른 물건을 살 수 있는 매장이라고 상상하면 된다.
예를 들어 우리가 흔히 사용하는 웹 브라우저에 주소에는 사실 아이피와 포트가 들어있다. www.naver.com과 같은 주소는 아이피를 쉽게 알아보기 위해 이름표를 붙인 것이고, 그 앞에 있는 https://라는 것은 서버의 443번 포트를 사용하기 위한 입력이다.
4. 라이브러리와 프레임워크
백엔드 개발에 필요한 모든 코드를 온전히 혼자서 개발하려면 엄청난 시간이 들게 된다. 현업에서는 이미 다른 사람(단체)가 만든 라이브러리와 프레임워크를 가져와 사용하게 된다.
4-1. 라이브러리란?
라이브러리(library)는 애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드의 모음을 말한다. 프로그래밍 세계에서의 라이브러리는 도서관이라는 의미보다는 책들의 모음이라고 이해하는 것이 더 좋다. 개발자가 소프트웨어를 만들 때 필요에 따라 원하는 기능을 구현하기 위해 코드의 모음을 가져다 쓸 수 있는 일종의 도구 역할을 하는 것이다. 따라서 개발자는 복잡한 코드를 직접 작성하지 않아도 원하는 기능을 더 빠르게 개발할 수 있다. 또 라이브러리는 독립적이므로 라이브러리끼리 영향을 크게 주지 않는다.
4-2. 프레임워크란?
프레임워크는 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경이다. 프레임워크는 틀과 일하다의 합성어로, 일하기 위한 틀을 제공하는 것이다. 그래서 개발자는 그 틀에서 일을 해야 한다. 프레임워크는 정해진 틀에서 개발해야 한다는 단점이 있지만 개발 효율은 굉장히 높다는 장점이 있다. 정리하자면 라이브러리와 프레임워크는 개발자가 소프트웨어를 개발하기 위해 사용하는 도구이지만 사용 목적에 따라 차이가 있다. 프레임워크는 애플리케이션을 개발할 때 전체적인 구조를 잡기 위해 사용하는 것이고, 라이브러리는 개발을 하는 과정에서 필요한 기능을 구현하기 위해 사용하는 것이다.
5. 서버 개발자의 업무
그렇다면 서버 개발자는 어떤 일을 할까? 서버 개발자의 주된 업무는 서버 측 애플리케이션을 개발하는 일이다. 개발하면서 서버에 대한 지식과 프로그래밍 지식, 만든 프로그램을 배포하고 안전하게 서비스할 수 있게 하는 지식을 활용한다. 서버 개발자의 업무가 조직마다 천차만별이지만 대개는
과제 할당 -> 과제 분석 -> 개발 -> 테스트(리뷰) -> QA 및 버그 수정 -> 배포 -> 유지보수
의 순서로 진행한다.
5-1. 과제 할당
모든 일은 주어진 과제를 할당하며 시작한다. 사업부, 마케팅, 개발팀 등에서 개발 과제를 할당한다. 그럼 개발자가 그 과제를 분석하기 시작한다.
5-2. 과제 분석
예를 들어 어떤 소셜 서비스에서 '친구 초대 이벤트를 만들어주세요'라는 과제가 주어졌다면 '친구'는 무엇인지, '초대'는 무엇을 의미하는지, '이벤트'는 어떤 조건이 필요하고 초대를 한 친구와 초대된 친구에게 보상을 어떻게 줄지, 이벤트를 위해서 어떤 데이터들을 저장하는지를 결정해야 한다.
또한 제공할 성능과 사용할 기술을 검토하고, 문제가 있다면 해결 방법도 면밀하게 분석하고 정리해야 한다. 오늘날 서비스는 복잡하므로 작은 기능에서 발생하는 문제 하나가 서비스 전체의 문제로 이어질 수 있으므로 이 과정은 매우 중요하다.
5-3. 개발
과제 검토가 끝났으니 개발을 진행하면 된다. 개발 과정에는 기능을 개발하고, 버그를 수정하는 일이 대부분이다.
개발한 코드는 깃허브 등의 프로그램을 사용해 동료의 리뷰를 받고 리뷰에 대한 내용을 반영해서 코드의 완성도를 높인다.
5-4. 테스트
개발을 마치면 코드가 제대로 동작하는지 테스트해야 한다. 앞서 언급한 과제 분석 -> 개발 -> 테스트를 반복하며 프로그램의 완성도를 높여가는 것이다. 테스트는 단순히 실행이 잘 되는지만 보지 않는다. 로직상 문제는 없는지, 성능 한계는 어느 정도인지, 만든 코드가 읽기 편한지, 내가 만든 클래스, 메서드, 함수를 다른 사람이 간편하게 사용할 수 있는지 등을 검토하면서 테스트를 한다. 조직이나 개발자에 따라 단위 테스트를 작성하는 경우도 있다. 때로는 개발용 코드보다 테스트를 먼저 작성하는 테스트 주도 개발 기법을 사용하기도 한다.
5-5. QA
개발과 테스트가 어느 정도 마무리됐다면 애플리케이션의 품질을 높이기 위해 QA(quality assurance)를 신청한다. QA팀이 없는 회사라면 개발 조직에서 담당한다.
5-6~5-7. 배포와 유지보수
QA가 완료되면 서버에 배포를 진행한다. 때에 따라서 여러 과제를 한 번에 병합해서 배포하거나, 새로운 기능이 추가될 때마다 배포한다. 애플리케이션을 쉽고 안전하게 배포하고, 문제 발생시 쉽게 이전 버전으로 돌리는 작업을 할 수 있게 준비해야 한다.
배포 방법은 여러 가지이다. 먼저, 특정 개수의 서버들을 돌아가며 배포하는 롤링 배포, 똑같은 서버 인스턴스를 띄우고 로드밸런서 설정을 바꿔버리는 블루 그린 배포, 전체 서버의 특정 비율만큼 배포해보고 문제없는 경우 점점 배포를 늘려가는 카나리 배포 등이 있다. 개발자는 코드의 개발부터 테스트, 배포, 모니터링까지 사실상 무한 반복을 한다. 여기부터 빌드부터 배포까지의 과정을 자동화할 수 있다. 이것을 두고 흔히 CI(Continuous Integration) / CD(Continuous Delivery & Continuous Deployment)라고 한다. CI는 지속적인 통합이라는 뜻으로, 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 저장소에 통합되는 것을 의미한다. CD는 지속적인 배포를 말한다. CI는 저장소에 코드가 반영되는 것을 말하고, CD는 실제 프로덕션 환경까지 변경된 코드가 반영되는 것을 의미한다.
출처 | 스프링 부트 3 백엔드 개발자 되기(자바 편)
'기타' 카테고리의 다른 글
API를 사용하는 이유 (0) | 2023.03.31 |
---|