이 포스팅은 신선영 저, 『스프링 부트 3 백엔드 개발자 되기』(골든래빗, 2023)를 공부하면서 핵심 개념들을 정리하기 위해 작성하였습니다.
우리가 사용하는 웹 애플리케이션의 동작은 클라이언트와 서버가 서로 정보를 주고 받는 행위로 설명된다.
□ 클라이언트
클라이언트는 서버에 데이터를 요청하는 프로그램이다. 웹 애플리케이션에서 클라이언트는 웹 브라우저이다.
□ 서버
서버는 클라이언트로부터 요청받은 데이터를 처리하거나 클라이언트에게 데이터를 전달하는 주체이다.
한편 클라이언트에게 넘겨줄 데이터들이 한 데 저장되어있는 곳이 있다. 그 곳이 바로 데이터베이스이다. 서버는 데이터베이스에 접근해서 데이터를 탐색하여 클라이언트에게 넘겨준다.
데이터베이스는 크게 RDB(관계형 데이터베이스)와 NoSQL로 나뉘어진다.
□ RDB(Relational Database, 관계형 데이터베이스)
관계형 데이터베이스는 데이터를 행과 열로 이루어진 표(Table, 테이블)로 변환하여 다루는 데이터베이스이다. 각각의 행은 절대로 중복되지 않는 값인 기본키(Primary key)를 통해서 구분된다. 또한 여러 표들이 서로 관계를 맺기도 한다. 관계형 데이터베이스를 관리하는 시스템 중 유명한 것들은 오라클, MySQL, PostgreSQL 등이 있다.
□ NoSQL(Not only SQL)
NoSQL은 관계형 데이터베이스 이외의 데이터베이스들을 가리킨다. SQL(Structured Query Language)은 데이터 검색을 하기 위해 사용되는 프로그래밍 언어인데, 관계형 데이터베이스를 관리할 때에 주로 쓰인다. 물론 NoSQL에서도 SQL을 지원하는 경우가 많다. 하지만 관계형 데이터베이스와는 다른 방식으로 데이터를 다룬다는 점을 강조하기 위해서 Not only SQL의 약자인 NoSQL이라는 이름으로 불린다. NoSQL을 관리하는 시스템 중 유명한 것들은 Redis, MongoDB 등이 있다.
데이터를 주고 받는 행위는 서로 떨어져있는 기기 및 프로그램들 사이에서 이루어진다. 그래서 데이터를 정확한 곳에 전달하기 위해서는 각기 다른 기기 및 프로그램들을 구분할 수 있는 표식이 필요하다. 아이피(IP)와 포트(Port)가 그 역할을 한다.
□ 아이피(IP)
아이피는 인터넷 상에서 컴퓨터 또는 기기들을 서로 구분하기 위한 주소이다. 이를 통해서 서버에 접근할 수 있다.
□ 포트(Port)
서버에 접근한 다음에 서버를 이용하기 위해서는 아이피 주소만 알아서는 안된다. 포트 번호까지 알고 있어야 한다. 왜냐하면 한 서버에 여러가지 서비스를 제공하고 있을 수도 있기 때문이다. 포트란 한 서버 내에서 운용되고 있는 서비스들을 서로 구분하기 위한 번호이다.
그렇다면 위와 같은 동작들을 구현해내는 웹 애플리케이션은 무엇으로 만드는가? 이 세상에는 웹 애플리케이션을 만드는데에 유용한 도구들이 많다. 이 도구들의 종류를 크게 둘로 나눠보면 라이브러리와 프레임워크로 나뉜다.
□ 라이브러리
라이브러리는 애플리케이션 개발에 유용하게 쓰이는 각종 메서드들과 클래스들을 한 데 모아놓은 것이다. 개발에 필요한 코드들을 처음부터 작성할 필요 없이 라이브러리에 저장된 코드들을 가져다가 사용하기만 하면 된다.
□ 프레임워크
프레임워크는 애플리케이션 개발의 구조와 순서를 미리 정해놓은 틀을 의미한다. 프레임워크를 이용해 애플리케이션을 개발하면 애플리케이션의 구조를 처음부터 구상할 필요 없이 기능 개발에만 집중할 수 있다.