30. 백엔드 개발자가 알아야 하는 것
인터넷
A
B
C
D
E
A
B
C
D
E
ISP1 ISP2
ISP와 연결된 네트워크끼리 연결
31. 백엔드 개발자가 알아야 하는 것
인터넷
A
B
C
D
E
A
B
C
D
E
ISP1 ISP2
무한확장 -> 인터넷
32. 백엔드 개발자가 알아야 하는 것
인터넷 - DNS
인터넷 상에 있는 컴퓨터를 어떻게 찾을까?
33. 백엔드 개발자가 알아야 하는 것
인터넷 - DNS
인터넷 상에 있는 컴퓨터를 어떻게 찾을까?
IP 주소
34. 백엔드 개발자가 알아야 하는 것
인터넷 - DNS
인터넷 상에 있는 컴퓨터를 어떻게 찾을까?
➜ ~ ping google.com
PING google.com (142.250.206.206): 56 data bytes
35. 백엔드 개발자가 알아야 하는 것
인터넷 - DNS
도메인에서 IP주소는 어떻게 찾을까?
DNS Server
36. 백엔드 개발자가 알아야 하는 것
인터넷 - DNS
도메인에서 IP주소는 어떻게 찾을까?
DNS Root
네임서버
DNS 재귀
확인서버
캐시확인
재귀 : 조건을 만
족할 때까지 찾기
TLD서버
(최상위서버)
cloud
fl
are
google등의
네임서버
example.com
.com, .net 등
의 최상위 서버
네임서버 위치
를 알려줌
example.com
의 ip주소를 알
고 있음
최상위 서버위치
를 알려줌
ip주소를 받음
37. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
38. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
Hyper Text : 하이퍼 링크를 가지고 있는 문서
39. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
Hyper Text : 하이퍼 링크를 가지고 있는 문서
얘 말구요
40. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
Hyper Text : 하이퍼 링크를 가지고 있는 문서 = HTML
41. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
HTML을 전송하기 위한 프로토콜
42. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
HTML, JSON, XML, 이미지, 동영상, 오디오등
을 전송하기 위한 프로토콜 (이름은 유지)
44. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP 어디서 사용하나요?
클라이언트에서 서버로 데이터 전송
45. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
클라이언트에서 서버로 데이터 전송
HTTP Request
HTTP Response
46. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
HTTP Request
HTTP Response
The Internet
47. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
HTTP Request
HTTP Response
URL, HTTP 메서드, 헤더, 바디
The Internet
48. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
https://developer.mozilla.org/ko/search?query=http#hash_example
SCHEME HOST PATH QUERY FRAGMENT
49. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
GET 정보 검색시 사용, 웹페이지 요청 및 데이터 조회
POST 서버에 데이터 생성 혹은 업데이트시 사용
PUT 서버 데이터의 업데이트시 사용
DELETE 서버 데이터 삭제시 사용
PATCH 리소스의 부분 업데이트를 위한 요청
기타 HEAD, OPTIONS
50. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
헤더는 요청에 대한 추가정보를 제공
51. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
URL, HTTP 메서드, 헤더, 바디
• 요청 헤더
• HTTP요청시 사용할 수 있는 헤더
• 서버가 요청을 맞춤으로 처리할 수 있도록 보내는 정보.
• 캐싱제어, 사용자 에이전트, 레퍼러등
• 응답 헤더
• HTTP응답에 사용하는 헤더
• 응답의 상세한 컨텍스트를 제공하기 위해 사용
52. 백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
HTTP Request
HTTP Response
HTML JSON XML
HTML JSON XML
TEXT
TEXT
53. 백엔드 개발자가 알아야 하는 것
데이터베이스
데이터베이스
관계형 데이터베이스
NoSQL 데이터베이스
MySQL PostgreSQL SQL Server Oracle
MongoDB Cassandra Redis Elasticsearch
61. 백엔드 개발자가 알아야 하는 것
데이터베이스 - RDB
테이블간에 관계를 맺음 -> 관계형 데이터베이스
62. 백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL
NoSQL 이란?
Not Only SQL을 의미
RDB와 다른 데이터 저장, 조회 방식을
사용하는 데이터베이스
63. 백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL
RDB와 다른 데이터 저장, 조회방식은 무엇일까?
도큐먼트, 키-밸류, 컬럼기반, 그래프 기반
64. 백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL
• 도큐먼트 기반 : MongoDB, CouchDB
• 키-밸류 : Redis, DynamoDB
• 컬럼 기반 : 카산드라, HBase
• 그래프 : Neo4j, OrientDB
65. 백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL의 특징
• 유연한 스키마
• 고정된 스키마가 없거나, 유연한 스키마를 제공.
• 쓰기시에는 유연하게 쓸 수 있으나, 읽을 때에는 스키마가 필요함
• 빠른 읽기/쓰기 성능 : 특정 유형의 쿼리와 작업에 최적화되어 있음. key-value는 빠른
읽기 쓰기에 적합, 그래프 데이터베이스는 복잡한 관계 및 연결을 분석하는데 유리함
• 대량의 데이터를 분산 처리
• NoSQL 데이터베이스는 분산된 환경에서 대량의 데이터 베이스를 처리하도록 설계
되어 있음.
• 고가용성 및 복구
• 많은 NoSQL데이터베이스는 복제, 백업, 분할의 기능을 제공
• 일관성과 가용성의 트레이드 오프 (CAP 정리)
66. 백엔드 개발자가 알아야 하는 것
데이터베이스 - CAP이론
CAP 정리가 뭘까?
분산시스템에서 일관성(Consistency), 가용성
(Availability), 분할 내성(Partition tolerance)을
동시에 만족할 수 없다.
세 가지중 두가지만 선택가능하다.
72. 백엔드 개발자가 알아야 하는 것
프로그래밍언어
안정적인 언어는 어떤 것들이 있을까?
문제가 생겼을 때 해결책 찾기가 상대적으로 쉬운 언어들
73. 백엔드 개발자가 알아야 하는 것
프로그래밍언어
안정적인 언어는 어떤 것들이 있을까?
• Python
• 문법이 간결 하여 학습이 쉬움
• 백엔드 개발, 데이터 분석, AI
• JavaScript (Node.js)
• 프론트엔드와 백엔드 모두 사용가능.
• 백엔드 개발, 실시간 어플리케이션
• Java (JVM)
• 큰 규모의 애플리케이션을 개발하기 위한 라이브러리가 충실함
• C#
• 마이크로소프트에서 만든 소프트웨어들 간의 시너지가 강력하다
• Go
• 간결하고 성능이 좋다. 빌드시 바이너리 하나만 배포하면 되므로 마이크로서비스 개발에 좋음
74. 백엔드 개발자가 알아야 하는 것
웹프레임워크
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
76. 백엔드 개발자가 알아야 하는 것
웹프레임워크
웹프레임워크는 크게 2가지로 구분
마이크로 프레임워크, 풀스택 프레임워크
77. 백엔드 개발자가 알아야 하는 것
웹프레임워크 - 마이크로 프레임워크
• 간단하고 가볍다
• 확장성이 좋다
• 설정이 간단하여 빠르게 개발 시작 가능
• Flask (Python), Express (Node.js), Ktor (Kotlin), Gin (Golang) 같은 것이 있음
마이크로 프레임워크는 기본적인 기능만 제공
78. 백엔드 개발자가 알아야 하는 것
웹프레임워크 - 풀스택 프레임워크
• 많은 기능 : 프론트엔드, 백엔드, 데이터베이스 관리등의 다양한 기능 제공
• 재사용가능한 컴포넌트와 라이브러리를 포함
• 프로젝트의 기본 구조와 패턴을 제공하여 일관성 유지
• Django (Python), NestJS (Node.js), Spring(Java), Revel (Golang) 같은 것이 있음
풀스택 프레임워크는 웹 애플리케이션 개발에 필요한 거의 모든 기능과 도구를 제공
79. 백엔드 개발자가 알아야 하는 것
API개발
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
80. 백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST GraphQL gRPC
81. 백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST - REpresentational State Transfer
82. 백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST - REpresentational State Transfer
• 로이 토마스 필딩의 박사학위 논문에 최초로 소개
• 표준화된 인터페이스 원칙을 따른다
• URI를 사용하여 리소스에 접근
• 상태가 없다 (Stateless)
• 각 요청은 필요한 모든 정보를 포함해야함
• 캐시가능
• 응답은 캐시가 가능 여부를 명시적으로 나타냄
83. {
"title": "RESTful 웹 서비스",
"author": "Leonard Richardson",
"publish_date": "2021-01-15",
"stock": 5,
"borrow_status": "Available"
}
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST - REpresentational State Transfer
제목: "RESTful 웹 서비스"
저자: "Leonard Richardson"
출판일: "2021-01-15"
재고: 5권
대출 상태: 대출 가능
Resource의 State
JSON
GET POST PUT
Representational
http://books.com/restful-web-service
URI
85. 백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
• Facebook에서 2015년 공개한 데이터 질의 및 조작 언어
• GraphQL은 말그대로 Query Language이므로 쿼리언어 스펙이다
• 클라이언트가 서버로부터 데이터를 효과적으로 가져오게 하는 것이 목적
• 단일 엔드포인트를 가진다
• 실시간 업데이트 지원
• 구독 기능이 있어서 클라이언트가 실시간으로 데이터 변경 수신 가능
86. GraphQL API
REST API
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL 과 REST 비교
/post /comment /author
post comment author
/graphql
단일 엔드포인트
87. {
"data": {
"book": {
"title": "나혼자만 레벨업",
"author": "추공",
"createDate": "20201011"
}
}
}
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
JSON
query {
book(id: 123) {
title
author
createdDate
}
}
88. {
"data": {
"book": {
"title": "나혼자만 레벨업",
"author": "추공",
"viewCount": 123123123,
"createDate": "20201011"
}
}
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
JSON
query {
book(id: 123) {
title
author
viewCount
createdDate
}
}
서버에서 데이터를 효과적으로 가져온다
90. 백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
gRPC
• Google에서 개발한 고성능, 오픈소스, 범용 RPC프레임워크
• HTTP/2를 기반으로 동작 : 저지연, 효율적인 데이터 전송, TCP커넥션 하나로 여러요
청 동시처리
• Protocol Bu
ff
fers(protobuf)라는 인터페이스 정의 언어를 사용
• 다양한 언어에 대한 클라이언트, 서버 라이브러리를 제공
• 양방향 스트리밍 가능
• 클라이언트는 요청에 대한 타임아웃을 지정할 수 있음
91. 백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
gRPC Request
gRPC Response
101010101010
101101010101
010101010010
syntax = "proto3";
service HelloService {
rpc SayHello (HelloRequest) returns
(HelloResponse);
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
syntax = "proto3";
service HelloService {
rpc SayHello (HelloRequest) returns
(HelloResponse);
}
message HelloRequest {
string name = 1;
}
message HelloResponse {
string message = 1;
}
hello.proto hello.proto
server1 server2
92. 백엔드 개발자가 알아야 하는 것
버전관리
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
95. 백엔드 개발자가 알아야 하는 것
버전관리 - git
버전 관리 시스템
SVN (Subversion)
개발자1 개발자3
개발자2
commit
update
commit
update
commit
update
중앙의 버전 관리 서버에 저장소가 있음
코드 히스토리 확인시 서버에 접속 필요
96. 백엔드 개발자가 알아야 하는 것
버전관리 - git
버전 관리 시스템
SVN (Subversion)
개발자1 개발자3
개발자2
commit
update
commit
update
commit
update
서버에 문제가 생기면 모두가 히스토리 조회 불가능
97. 백엔드 개발자가 알아야 하는 것
버전관리 - git
• 리눅스 커널 개발을 위해 Linus Torvalds가 개발
• 분산 버전 관리 : 개발자의 로컬 머신에 코드의 전체 히스토리가 저장됨.
• 브랜치 생성 및 병합이 서버에 부하를 주지 않아. 매우 빠르고 간단하다
• 대부분의 경우 SVN보다 빠른 성능을 제공
Git - 분산 버전 관리 시스템
98. 백엔드 개발자가 알아야 하는 것
push
pull | fetch
push
pull | fetch
Git - 분산 버전 관리 시스템
개발자1
commit log status
branch merge revert
push
pull | fetch
개발자2
commit log status
branch merge revert
개발자3
commit log status
branch merge revert
개발자의 로컬 디렉터리에 저장소를 복제
99. 서버에 문제가 생겨도 거의 대부분의 작업 가능
백엔드 개발자가 알아야 하는 것
push
pull | fetch
push
pull | fetch
Git - 분산 버전 관리 시스템
개발자1
commit log status
branch merge revert
push
pull | fetch
개발자2
commit log status
branch merge revert
개발자3
commit log status
branch merge revert
100. 백엔드 개발자가 알아야 하는 것
버전관리 - git
명령어 설명
git init 새로운 Git 저장소를 초기화합니다.
git clone [URL] 원격 저장소를 로컬에 복제합니다.
git add [filename] 파일을 스테이징 영역에 추가합니다.
git commit -m "[message]" 변경 내역을 커밋합니다.
git status 변경된 파일과 현재 상태를 표시합니다.
git branch 현재 브랜치 목록을 표시합니다.
git checkout [branch_name] 특정 브랜치로 전환합니다.
git merge [branch_name] 현재 브랜치에 다른 브랜치를 병합합니다.
git pull 원격 저장소의 변경 내역을 로컬에 가져옵니다.
git push 로컬의 변경 내역을 원격 저장소에 반영합니다.
101. 백엔드 개발자가 알아야 하는 것
인증과 인가
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
102. 백엔드 개발자가 알아야 하는 것
인증과 인가
•
인증 Authentication
사용자의 신원을 확인하는 것
로그인 과정에서 이름과 비밀번호를 입력
103. 백엔드 개발자가 알아야 하는 것
인증과 인가
인가 Authorization
인증된 사용자의 권한을 확인하는 것
파일에 대한 읽기 / 쓰기 권한이 있는가
104. 백엔드 개발자가 알아야 하는 것
데이터 표현법
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
107. 백엔드 개발자가 알아야 하는 것
JSON - JavaScript Object Notation
• 경량의 데이터 교환 형식
• 사람과 기계 둘 다 사용하기 쉽다
• 일반적으로 key-value 쌍으로 구성
• 거의 대부분의 프로그래밍 언어에서 지원
• 주석을 지원하지 않음
109. 백엔드 개발자가 알아야 하는 것
YAML - YAML Ain't Markup Language
• JSON과 마찬가지로 사람과 기계가 사용하기 편하다
• 중괄호가 아닌 들여쓰기를 사용하여 JSON보다 조금 더 간결하며 읽기 편함
• 거의 대부분의 프로그래밍 언어에서 지원
• 설정이 복잡한 프로그램에서 사용하는 경우가 많다. ( ex : k8s, ansible)
• 주석을 지원
110. 백엔드 개발자가 알아야 하는 것
YAML - YAML Ain't Markup Language
• --- 문서 시작 표시
• 문자열, 숫자, 부울값 : name, age, isStudent
• 배열 : 각 항목은 -로 구분
• 객체 : addresses의 항목
• null : courses
• 주석 가능
111. 백엔드 개발자가 알아야 하는 것
리눅스
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
112. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 현재 작업 디렉터리의 경로를 출력
pwd (Print Working Directory)
113. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 디렉터리를 변경
cd (Change Directory)
114. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 새로운 디렉터리를 생성
mkdir (Make Directory)
115. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리를 복사
cp (Copy)
116. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리를 삭제
rm (Remove)
117. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리의 이름 변경 혹은 위치 이동
mv (Move)
118. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일의 내용을 출력
cat (Concatenate)
119. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 새로운 빈 파일을 생성하거나 파일의 타임 스탬프 업데이트
touch
120. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 문자열이나 변수를 출력
echo
121. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 시스템의 IP 주소와 네트워크 인터페이스 정보 출력
ip addr
122. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 시스템의 IP 주소와 네트워크 인터페이스 정보 출력
ifcon
fi
g (Interface Con
fi
guration)
123. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 소켓의 통계를 출력
• -t: TCP 소켓을 표시
• -u: UDP 소켓을 표시
• -l: 리스닝(listening) 상태의 소켓만 표시
• -n: 서비스 이름 대신 포트 번호를 표시
ss (Socket Statistics)
124. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 네트워크 연결을 읽고 쓰는 유틸리티.
• 네트워크 연결 확인시
• 서버에서 특정 포트를 열고 대기
• 서버의 포트에 접속하기
nc (Netcat)
125. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 명령어의 경로를 출력
which
126. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일의 마지막 부분을 출력
tail
127. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리를 검색
fi
nd
128. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 현재 실행중인 프로세스의 목록을 출력
• -a: 모든 사용자의 프로세스를 보여줌
• -u: 프로세스 소유자, CPU 사용률, 메모리 사용률 등의 정보를 포함한 출력을 제공
• -x: 터미널에 연결되지 않은 프로세스도 보여줌
ps (Process Status)
129. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일에서 주어진 패턴과 일치하는 라인을 검색
grep (Global Regular Expression Print)
130. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 주어진 프로세스 ID(PID)의 프로세스를 종료
kill
131. 백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 명령어에 대한 별칭 설정
alias
132. 백엔드 개발자가 알아야 하는 것
배치처리
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
138. 백엔드 개발자가 알아야 하는 것
클라우드 서비스
• GitHub Action에서 배치 처리 가능
• AWS 람다, Google Cloud Functions, Azure Function 등의 서비스로 배치처리
가능
• AWS Batch, Google Cloud Data
fl
ow 등의 특화 서비스도 있음
139. 백엔드 개발자가 알아야 하는 것
CI/CD
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
141. 백엔드 개발자가 알아야 하는 것
CI/CD
• 개발자들이 자신의 코드 변경 사항을 중앙의 저장소에 통합하는 프로세스
• 버그의 조기 발견으로 소프트웨어 품질 향상이 목적
• 코드 커밋 > 자동 빌드 > 자동 테스트(단위 테스트, 통합 테스트)
CI (Continuous Integration) - 지속적 통합
142. 백엔드 개발자가 알아야 하는 것
CI/CD
• Production 환경까지 자동으로 배포하는 것
• 소프트웨어를 빠르고 안전하게 프로덕션 환경에 배포하는 것이 목적
• 모든 변경 사항이 자동 테스트를 거쳐서 배포되게 된다.
CD (Continuous Delivery | Deployment) - 지속적 전달
143. 백엔드 개발자가 알아야 하는 것
도커 - 컨테이너
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
151. 백엔드 개발자가 알아야 하는 것
도커
• 빠른 배포
• 컨테이너는 시작과 종료가 빠르므로 애플리케이션의 배포를 빠르게 할 수 있다
• 확장이 쉽다
• kubernetes 같은 오케스트레이션을 사용하면 노드 추가로 확장 가능
• 리소스 효율성이 좋다
• 가상 머신보다 훨씬 더 적은 리소스를 사용하므로, 동일한 하드웨어에서 더 많은 애플리
케이션을 실행할 수 있다
도커의 특징
152. 백엔드 개발자가 알아야 하는 것
클라우드 서비스
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
153. 백엔드 개발자가 알아야 하는 것
클라우드 서비스
• 인터넷을 통하여 제공되는 서비스를 의미
• 보통 IaaS, PaaS, SaaS 3가지 카테고리로 구분
154. 백엔드 개발자가 알아야 하는 것
클라우드 서비스 - IaaS (Infra as a Service)
• 기술적으로는 하드웨어 가상화가 필요
• 사용자는 디스크, 네트워크, CPU, 메모리등의 기본적인 인프라를 사용할 수 있다.
• AWS의 EC2, Google Cloud의 Compute Engine, Azure의 Virtual Machine
155. 백엔드 개발자가 알아야 하는 것
클라우드 서비스 - PaaS (Platform as a Service)
• 소프트웨어를 개발 & 실행하기 위한 플랫폼과 환경을 제공
• 인프라적인 부분과 배포를 크게 신경쓰지 않고, 개발만 하고자 하는 경우 사용
• Google App Engine, Heroku
156. 백엔드 개발자가 알아야 하는 것
클라우드 서비스 - SaaS (Software as a Service)
• 웹브라우저를 통해 사용할 수 있는 애플리케이션을 제공
• 사용자는 소프트웨어의 설치, 업데이트, 유지보수를 신경쓰지 않아도 된다.
• Dropbox, MS O
ffi
ce 365 등
157. 백엔드 개발자가 알아야 하는 것
클라우드 서비스
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
158. 백엔드 개발자가 알아야 하는 것
보안
• 공격자는 보안이 가장 약한 곳을 공략한다
• 전통적으로 가장 약한 연결 고리는 사람이다 -> 회사가 커질 수록 보안이 빡세짐
• 백엔드 개발자라면 웹서비스의 대표적이 취약점 정도는 알고 있는 것이 좋다
159. 백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거나 하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
160. 백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
161. 백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
162. 백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
163. 백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
164. 백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
165. 백엔드 개발자가 알아야 하는 것
아키텍처
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
166. 백엔드 개발자가 알아야 하는 것
아키텍처
• 큰 시스템을 구성하는 주요 구성 요소와 그 요소들 간의 관계를 표현하는 설계도나 청사진
• 3계층 아키텍처, 마이크로 서비스 아키텍처, 이벤트 주도 아키텍처 등이 있음
167. 백엔드 개발자가 알아야 하는 것
아키텍처
• 소프트웨어를 여러 계층으로 분리하여 각 계층이 특정 기능을 수행하도록 하는 아키텍처
• 전형적으로는 프레젠테이션 계층, 비즈니스 로직 계층, 데이터 액세스 계층, 데이터베이스
계층 등으로 구성
• 각 계층은 오직 바로 아래의 계층만을 호출하도록 설계 된다
• 장점: 분리된 관심사를 통해 유지보수와 확장이 용이
• 단점: 성능에 영향을 줄 수 있으며, 유연성이 제한될 수 있다
계층형 아키텍처
168. 백엔드 개발자가 알아야 하는 것
아키텍처
• 복잡한 애플리케이션을 작은, 독립적인 서비스들로 분리하는 아키텍처
• 각 서비스는 독립적으로 배포되며, 특정 비즈니스 기능을 수행
• 서비스들은 네트워크를 통해 서로 통신합니다, 주로 RESTful API나 메시지 큐를 사용
• 장점: 확장성, 유연성, 독립적인 배포와 실패 격리 등의 이점이 있다
• 단점: 네트워크 오버헤드, 데이터 일관성 관리, 서비스 간의 복잡한 상호작용 등의 문제가
있을 수 있다
마이크로서비스 아키텍처
169. 백엔드 개발자가 알아야 하는 것
아키텍처
• 확장성이 좋은 애플리케이션을 만드는데 사용되는 분산 비동기 아키텍터 패턴
• 시스템은 이벤트를 기반으로 동작한다
• 이벤트는 시스템 내부 외부에서 발생하는 특정 상황 혹은 변경을 나타냄
• 적게는 수십개에서 많게는 수백개의 이벤트 큐가 존재
• 컴포넌트간의 직접적인 의존성이 적어서, 확장성이 좋다
• 이벤트의 흐름과 상호작용을 추적하고 관리하는 것이 복잡할 수 있다
• 여러 이벤트가 동시에 발생시, 이벤트의 순서를 보장하는 것이 어려울 수 있다
이벤트 주도 아키텍처