1. 서버와 클라이언트
클라이언트(Client)는 서버에게 서비스나 자원을 요청하는 프로그램 또는 장치이다.
서버(Server)는 클라이언트의 요청을 받아 처리하는 주체이다.
2. 데이터베이스
🤔 데이터베이스(DataBase)란?
데이터를 한 곳에 모아두고 여러 사람이 사용할 목적으로 관리하는 데이터 저장소이다.
효율적인 저장, 검색, 수정, 삭제 등이 가능하도록 설계되어 있다.
🤔 DBMS(DataBase Management System)란?
데이터베이스를 관리하고 운영하는 시스템이다.
대표적인 DBMS로는 MySQL, Oracle, PostgreSQL 등이 있다.
DBMS를 통해 데이터를 삽입, 조회, 수정, 삭제를 할 수 있다
🤔 RDB(Relational DataBase)란?
관계형 데이터 베이스로, 행과 열로 이루어진 테이블 형태로 데이터를 저장한다.
기본키(Primary key)를 이용하여 각 행을 식별한다.
서로 다른 테이블 간에 외래키(Foreign Key)등을 통해 관계를 설정하 할 수 있다.
RDB가 아닌 데이터베이스를 NoSQL 또는 NewSQL로 구분한다.
🤔 SQL(Structured Query Language)이란?
관계형 데이터베이스에서 데이터를 조회, 삽입, 수정할 때 사용하는 표준 질의 언어이다.
🤔 NoSQL(Not Only SQL)이란?
RDB와 달리 정해진 스키마 없이 비정형 데이터 (문서, 키-값, 그래프 등)을 저장하는데 적합한 데이터베이스이다.
수평 확장(Scale out)이 쉬워, 대용량 처리에 유리하다.
NoSQL의 종류로는 MongoDB, Redis, Cassandra 등이 있다.
성능을 높이기 위한 방법
스케일 업(Scale Up) : 서버의 CPU, 메모리 등의 하드웨어 성능을 업그레이드
스케일 아웃 : 서버를 여러대로 분산하여 처리 성능을 높이는 방식
🤔 NewSQL이란?
RDB처럼 SQL 문법을 사용하지만, NoSQL처럼 높은 성능과 확장성을 갖춘 새로윤 형태의 데이터베이스이다.
종류로는 CockroachDB, Google Spanner이 있다.
3. 아이피와 포트
🤔 IP(Internet Protocol)이란?
인터넷에서 기기들이 서로 식별하고 통신하기 위한 고유한 주소이다.
이 IP 주소를 통해 특정 기기나 컴퓨터를 찾을 수 있다.
🤔 포트(Port)란?
하나의 컴퓨터(서버) 내에서 실행 중인 여러 서비스를 구분하기 위한 번호이다.
IP가 어느 컴퓨터인지 알려준다면, 포트는 컴퓨터 내에서 어떤 프로그램(서비스)을 사용할 것인지 알려준다.
예)
80번 포트 : HTTP 웹 서비스
443 포트 : HTTPS
3306 포트 : MySQL
4. 라이브러리와 프레임워크
🤔 라이브러리(Library)란?
애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드의 집합이다.
일종의 도구 상자로, 개발자가 필요한 기능을 골라서 직접 호출해 사용할 수 있다.
이러한 라이브러리를 이용하면 개발자는 복잡한 코드를 직접 작성하지 않아도 되므로 원하는 기능을 빠르게 개발할 수 있다.
또한 라이브러리는 독립적이므로 라이브러리끼리 큰 영향을 주지 않는다.
🤔 프레임워크(Framework)란?
소프트웨어 개발을 체계적으로 할 수 있도록 제공되는 개발 환경 및 뼈대 구조이다.
정해진 틀(구조, 흐름, 규칙)에 따라 개발해야 하므로, 자유도는 낮지만 효율은 높다.
프레임워크가 개발 흐름을 제어하고, 개발자는 그 흐름에 맞게 코드를 작성하는 것을
제어의 역전 (IoC, Inversion of Control)라고 한다.
프레임워크는 개발 시 전체적인 구조를 잡기 위해 사용하는 것이고,
라이브러리는 개발하는 과정에서 필요한 기능을 구현하기 위해 사용하는 것이다.
5. 백엔드 개발자의 업무
(1) 과제 할당
사업부, 마케팅팀, 개발팀 등에서 개발 과제를 기획 및 요청하고,
개발자는 이를 전달받아 과제 분석을 시작한다.
(2) 과제 분석
주어진 과제를 바탕으로 요구 성능과 사용 기술을 검토하고,
필요 시 문제점 및 제약사항을 분석하여 적절한 해결방안을 정리한다.
오늘날의 서비스는 점점 복잡해지고 있기 때문에,
작은 기능 하나의 오류도 전체 서비스에 영향을 줄 수 있다.
따라서 이 단계는 매우 중요한 사전 작업이다.
(3) 개발
기능 개발을 진행하고, 발견된 버그를 수정한다.
개발한 코드는 동료의 코드 리뷰를 받고, 피드백을 반영하여 코드의 완성도를 올린다.
(4) 테스트
개발을 마치면 코드를 제대로 동작하는지 테스트를 진행한다.
이 과정은 실행 결과만 확인하는 것이 아닌, 다음과 같은 항목을 함께 점검한다.
로직상의 오류는 없는가?
성능은 어느 수준까지 견딜 수 있는가?
코드의 가독성과 재사용성은 어떤가?
내가 작성한 클래스, 메서드, 함수는 다른 개발자가 쉽게 사용할 수 있는가?
조직이나 개발자에 따라 단위 테스트(Unit Test)를 작성하며,
테스트 주도 개발 (TDD, Test-Driven Development)를 사용할 수 있다.
(5) QA 및 버그 수정
개발과 테스트가 어느정도 완료 되면, 애플리케이션 품질을 검증하는 QA(Quality Assurance)절차가 필요하다.
QA 전담팀이 있는 조직이라면 별도로 진행되고, 없는 경우에는 개발 조직에서 직접 담당하기도 한다.
(6) 배포
QA가 완료되면 서버에 애플리케이션을 배포한다.
여러 과제를 한번에 병합하여 배포하거나, 새로운 기능이 추가될 때마다 배포한다.
안정성과 유연성을 고려하여 배포해야 한다.
안정성 : 문제 발생 시 빠르게 롤백이 가능해야 함
유연성 : 새로운 기능을 점진적으로 적용하거나, 테스트 대상만 선택적으로 배포 가능해야 함
배포 방식은 여러가지가 존재한다.
롤링 배포(Rolling Deployment)는서버들을 돌아가면서 순차적으로 업데이트하여 배포
블루-그린 배포(Blue-Green Deployment)는 똑같은 서버 인스턴스를 띄우고 로드밸런서 설정을 변경하여 트래픽만 전환
카나리 배포(Canary Deployment)는 서버의 특정 비율만큼만 배포하고 문제가 없을 때 전체 배포
(7) 유지보수
배포 이후에도 개발자는 지속적으로 모니터링하고 유지보수 해야 한다.
버그 수정, 보안 패치, 기능 개선이 반복되며,
빌드부터 테스트, 배포까지 전 과정을 자동화(CI/CD)하면 생산성과 안정성을 높일 수 있다.
CI(Continuous Integration) : 개발자들의 코드 변경 사항을 자동으로 빌드 및 테스트 하여 저장소에 통합
CD(Continuous Deployment) : 변경된 코드를 프로덕션 환경까지 자동 배포 (운영 자동화)
6. 백엔드 프로그래밍 언어
백엔드에서 자주 사용되는 프로그래밍 언어
언어 | 사용분야 | 대표 프레임워크 | 특징 및 설명 |
파이썬 (Python) |
웹서버, 데이터 처리, API 서버 | Flask, Django, FastAPI | - 문법이 간결하고 배우기 쉽다 - 데이터 분야와 웹 개발에서 인기 |
C++ | 게임 서버, 고성능 시스템 | 자체 구현 많음 | - 성능이 뛰어나 게임 서버나 시스템 프로그래밍에서 주로 사용 |
자바 (Java) |
엔터프라이즈 서버 개발 | Spring, Spring Boot | - 대규모 서비스에 적합하고, 유지보수가 쉽고 기업에서 선호 |
C# | 기업용 앱, 데스크탑, 서버 | ASP.NET, .Net Core | - MS 기술 스택에 최적화 |
자바 스크립트 (JavaScript) |
웹 풀스택 개발 | Ecpress, NestJS | - Node.js 기반으로 프론트엔드와 백엔드 모두 개발 가능 |
7. 자바 애너테이션
🤔 자바 애너테이션(Java Annotation)이란?
자바로 작성한 코드에 추가적인 정보(메타 데이터)를 부여하기 위한 표식이다.
보통 `@`기호를 사용하며 JDK 1.5 버전부터 사용할 수 있다.
[자바의 대표적인 애너테이션]
애너테이션 이름 | 설명 |
@Override | 선언된 메소드가 오버라이드 되었음 |
@Deprecated | 더 이상 사용되지 않음 |
@SuppressWarnings | 컴파일 경고를 무시함 |
[@Override의 사용 예시]
public class A extends B {
@Override // 선언된 메서드가 오버라이드 되었음을 나타내는 애너테이션
public void print() {
System.out.println("Hello, World!")
}
}