서버와 클라이언트
- 인터넷 서비스는 서버와 클라이언트가 관계를 맺는다.
- 클라이언트는 서버에 다양한 요청을 진행하고, 서버는 클라이언트가 요청한 내용을 처리하여 응답(결과 전달)을 해준다.
클라이언트
- 서버로 요청하는 프로그램을 모두 일컫는다.
- 우리가 사용하는 웹 브라우저가 바로 대표적인 클라이언트 중 하나.
- 우리가 주소를 입력하여 홈페이지로 이동하는 행위 자체가 '서버에 요청을 보내는' 행위이다. 그러면 서버는 이 요청을 받고 우리가 입력한 주소에 맞는 화면으로 응답을 보내준다. 우리는 그 화면을 보고 있는 것이다.
서버
- 클라이언트의 요청을 받아 처리하는 주체
- 클라이언트가 데이터를 요청했다면, 데이터를 주고/ 단지 서버 내에서 처리만 해달라는 요청을 했다면 해당 요청만 처리할 수도 있다.
- 위에서 말했듯, 우리가 웹 브라우저에 주소를 입력하는 건 '새로운 화면을 그리기 위한 데이터를 달라'는 데이터 요청에 해당하는 것.
데이터베이스
- 여러 사람이 데이터를 한 군데에 모아놓고 여러 사람이 사용할 목적으로 관리하는 데이터 저장소이다.
- MySQL, Oracle, postgreSQL 등은 데이터베이스는 아니고, 데이터베이스를 좀 더 쉽고 간편하게 관리하기 위한 시스템의 이름이다. = DBMS(DataBase Management System)
- 클라이언트(웹브라우저)가 요청을 보내면, DBMS를 통해 관리되고 있는 데이터베이스에 접근하여 요청에 해당하는 데이터를 가져오고 -> 해당 데이터를 다시 클라이언트에게 응답으로 보내주는 것
RDB(Relational Database, 관계형 데이터베이스)
- 데이터베이스는 RDB, NoSQL, NewSQL 등 여러 종류가 있다.
- 그 중 RDB는 행과 열로 이루어진 테이블로 관리하며, 기본키를 사용하여 각 행을 식별한다.
- 각 테이블 간에 관계를 지을 수도 있다.
- RDB의 유명한 데이터베이스들은 Oracle, MySQL, postgreSQL, SQL server 등이 있다.
SQL(Structured Query Language)
- 쿼리, 데이터 검색(질의)을 하는 언어이다.
- 데이터베이스 전문가가 아닌 이상, ANSI 표준 SQL만 공부해도 충분하다.
NoSQL
- RDB의 경우, 데이터 저장/질의/수정/삭제가 용이하지만 성능을 올리는게 쉽지 않다.
- 성능을 높이려면 머신의 기능을 좋게 하는 스케일업 또는 머신을 여러 대로 분리하는 스케일 아웃이라는 것이 필요하다.
- 스케일 아웃은 데이터베이스 분산이 필요한데, 이때 트랜잭션을 사용하면 성능이 떨어지게 된다. 따라서 이러한 문제들을 해결하기 위해 NoSQL이 등장했다.
ip와 port
ip(아이피)
- ip는 인터넷에서 컴퓨터 또는 기기들이 서로 식별하고 통신하기 위한 주소이다.
- ip를 알면 서버를 찾을 수 있지만, 서버를 이용하려면 ip만 알아서는 안되고, port번호까지 알아야 한다.
- ip가 백화점이면, port는 옷매장/ 커피매장/식당 등 각각의 매장이라고 생각하면 된다.
- 우리가 흔히 사용하는 주소는 알아보기 쉽게 ip를 도메인으로 치환한 것이다. https:// 라는 것이 바로 서버의 443포트를 사용하기 위한 입력이다.
라이브러리와 프레임워크
- 백엔드 개발에 필요한 모든 코드를 완전히 개발하려면 엄청난 시간이 들게 된다. 따라서, 이미 이 모든 고난과 역경을 겪어본 다른 사람들이 미래의 개발자들을 위해 만든 라이브러리와 프레임워크를 가져와 사용한다.
라이브러리
- 애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드의 모음이다.
- 개발자가 소프트웨어를 만들 때 필요에 따라 원하는 기능을 구현하기 위해 코드의 모음을 가져다 쓸 수 있는 일종의 도구 역할을 하는 것
- ex) 로그 생성기능, 로그 포매팅을 다양하게 지원하는 기능, 로그 레벨을 설정할 수 있는 로그 라이브러리가 있으면, 우리는 이걸 의존성에 추가하기만 하면 된다. 그러면 이 기능들을 직접 구현하지 않고도 프로젝트에 사용할 수 있는 것이다.
- 따라서 원하는 기능을 더 빠르게 개발할 수 있다.
- 라이브러리는 서로 독립적이라 영향을 크게 주지 않는다.
프레임워크
- 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경이다.
- 개발자는 이 개발 환경, 즉 틀에 맞게 개발을 해야 한다. 효율이 굉장히 높다는 장점이 있다.
- 애플리케이션을 개발할 때 전체적인 구조를 잡기 위해 사용하는 것이다.
- 프레임워크가 라이브러리를 포함하고 있다.
- 프레임워크가 개발자가 작성한 코드를 호출하고, 개발자가 작성한 코드가 라이브러리를 호출한다.
백엔드 개발자의 업무
- 백엔드 개발자는 서버 측 애플리케이션을 개발하는 일이 주된 업무다. 서버에 대한 지식, 프로그래밍, 배포 등 안전하게 서비스 할 수 있게 하는 지식을 활용한다.
- 분석- 설계 - 개발 - 테스트 - QA - 배포 -유지보수
CI & CD
- 특히, 서버에 배포를 진행 할 때, 때에 따라서 여러 과제를 한 번에 병합해서 배포하거나, 새로운 기능이 추가될 때마다 배포한다.
- 특정 개수의 서버들을 돌아가며 배포하는 롤링배포, 똑같은 서버 인스턴스를 띄우고 로드밸런서 설정을 바꿔버리는 블루 그린 배포, 전체 서버의 특정 비율만큼 배포해보고 문제가 없으면 점점 배포를 늘려나가는 카나리 배포 등이 있다.
- 여기서터 빌드~배포까지의 과정을 자동화 할 수 있는데, 이것을 두고 CI(Continuous Integration)/ CD(Continuous Delivery&Deployment)라고 한다.
- CI: 지속적인 통합이라는 의미로 새로운 코드 변경사항이 정기적으로 빌드 및 테스트되어 저장소에 통합되는 것을 의미한다.
- CD: 실제 프로덕션 환경까지 변경된 코드가 반영되는 것을 의미한다.
'FrameWork > Spring Boot' 카테고리의 다른 글
스프링부트3 구조 이해하기 (feat. 디렉토리 구성, 의존성 추가, 계층별 구현, 요청-응답 과정) (0) | 2025.02.27 |
---|---|
생성한 스프링부트3 프로젝트 코드 뜯어보기 (0) | 2025.02.26 |
스프링부트3 기능 살펴보기 (feat. 어노테이션, 스프링부트 스타터) (0) | 2025.02.26 |
스프링 콘셉트 (feat. IoC, DI, AOP, PSA) (0) | 2025.02.26 |
gradle 및 스프링 부트3 프로젝트 생성 (1) | 2025.02.25 |