SlideShare a Scribd company logo
1 of 170
Download to read offline
박승규 2023.10.17
삶이 편해지는 백엔드 개발 지식
목차
• 자기소개
• 백엔드 개발자의 마인드
• 백엔드 개발자가 알아야하는 것
• 질문 답변
자기소개
• 이름 : 박승규
• 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음
• 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발
• 좋아하는 언어 : 파이썬
• 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php
• 활동들
• 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU
• 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776
• 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로
• 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/
3-164797583
• 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
자기소개
• 이름 : 박승규
• 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음
• 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발
• 좋아하는 언어 : 파이썬
• 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php
• 활동들
• 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU
• 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776
• 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로
• 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/
3-164797583
• 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
자기소개
• 이름 : 박승규
• 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음
• 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발
• 좋아하는 언어 : 파이썬
• 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php
• 활동들
• 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU
• 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776
• 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로
• 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/
3-164797583
• 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
자기소개
• 이름 : 박승규
• 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음
• 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발
• 좋아하는 언어 : 파이썬
• 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php
• 활동들
• 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU
• 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776
• 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로
• 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/
3-164797583
• 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
자기소개
• 이름 : 박승규
• 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음
• 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발
• 좋아하는 언어 : 파이썬
• 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php
• 활동들
• 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU
• 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776
• 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로
• 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/
3-164797583
• 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
자기소개
• 이름 : 박승규
• 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음
• 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발
• 좋아하는 언어 : 파이썬
• 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php
• 활동들
• 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU
• 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776
• 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로
• 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/
3-164797583
• 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
백엔드 개발자의 마인드
정성적 사고 정량적 사고
백엔드 개발자의 마인드
백엔드 개발자의 마인드
정성적 사고 정량적 사고
백엔드 개발자의 마인드
소비자 제작자
백엔드 개발자의 마인드
혼자 잘하기 함께 자라기
혼자 잘하기 함께 자라기
백엔드 개발자가 알아야 하는 것
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증 과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
이걸 다 알아야 하나요?
백엔드 개발자가 알아야 하는 것
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증 과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
모두 외워야할 필요는 없지만,
찾아서 할 수 있을 정도는 되어야 해요
백엔드 개발자가 알아야 하는 것
인터넷
인터넷
인터넷의 동작
DNS
HTTP
백엔드 개발자가 알아야 하는 것
인터넷
백엔드 개발자가 알아야 하는 것
인터넷
전 세계를 연결한 거대한 네트워크
백엔드 개발자가 알아야 하는 것
인터넷
컴퓨터 두 대가 통신할 때
백엔드 개발자가 알아야 하는 것
인터넷
컴퓨터 열 대가 직접 통신할 때
백엔드 개발자가 알아야 하는 것
인터넷
컴퓨터 열 대가 직접 통신할 때
라우터를 추가합시다
백엔드 개발자가 알아야 하는 것
인터넷
10대의 컴퓨터와 하나의 라우터
백엔드 개발자가 알아야 하는 것
인터넷
네트워크의 네트워크
백엔드 개발자가 알아야 하는 것
인터넷
네트워크의 네트워크의 네트워크
백엔드 개발자가 알아야 하는 것
인터넷
네트워크의 네트워크의 네트워크
아주 먼 곳과 통신하려면??
백엔드 개발자가 알아야 하는 것
인터넷
네트워크의 네트워크의 네트워크
아주 먼 곳과 통신하려면??
모뎀을 추가합시다
백엔드 개발자가 알아야 하는 것
인터넷
네트워크가 통신사(ISP)와 연결됨
백엔드 개발자가 알아야 하는 것
인터넷
A
B
C
D
E
A
B
C
D
E
ISP1 ISP2
ISP와 연결된 네트워크끼리 연결
백엔드 개발자가 알아야 하는 것
인터넷
A
B
C
D
E
A
B
C
D
E
ISP1 ISP2
무한확장 -> 인터넷
백엔드 개발자가 알아야 하는 것
인터넷 - DNS
인터넷 상에 있는 컴퓨터를 어떻게 찾을까?
백엔드 개발자가 알아야 하는 것
인터넷 - DNS
인터넷 상에 있는 컴퓨터를 어떻게 찾을까?
IP 주소
백엔드 개발자가 알아야 하는 것
인터넷 - DNS
인터넷 상에 있는 컴퓨터를 어떻게 찾을까?
➜ ~ ping google.com
PING google.com (142.250.206.206): 56 data bytes
백엔드 개발자가 알아야 하는 것
인터넷 - DNS
도메인에서 IP주소는 어떻게 찾을까?
DNS Server
백엔드 개발자가 알아야 하는 것
인터넷 - DNS
도메인에서 IP주소는 어떻게 찾을까?
DNS Root
네임서버
DNS 재귀
확인서버
캐시확인
재귀 : 조건을 만
족할 때까지 찾기
TLD서버
(최상위서버)
cloud
fl
are
google등의
네임서버
example.com
.com, .net 등
의 최상위 서버
네임서버 위치
를 알려줌
example.com
의 ip주소를 알
고 있음
최상위 서버위치
를 알려줌
ip주소를 받음
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
Hyper Text : 하이퍼 링크를 가지고 있는 문서
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
Hyper Text : 하이퍼 링크를 가지고 있는 문서
얘 말구요
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
Hyper Text : 하이퍼 링크를 가지고 있는 문서 = HTML
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
HTML을 전송하기 위한 프로토콜
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP Hyper Text Transfer Protocol
HTML, JSON, XML, 이미지, 동영상, 오디오등
을 전송하기 위한 프로토콜 (이름은 유지)
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP 어디서 사용하나요?
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
HTTP 어디서 사용하나요?
클라이언트에서 서버로 데이터 전송
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
클라이언트에서 서버로 데이터 전송
HTTP Request
HTTP Response
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
HTTP Request
HTTP Response
The Internet
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
HTTP Request
HTTP Response
URL, HTTP 메서드, 헤더, 바디
The Internet
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
https://developer.mozilla.org/ko/search?query=http#hash_example
SCHEME HOST PATH QUERY FRAGMENT
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
GET 정보 검색시 사용, 웹페이지 요청 및 데이터 조회
POST 서버에 데이터 생성 혹은 업데이트시 사용
PUT 서버 데이터의 업데이트시 사용
DELETE 서버 데이터 삭제시 사용
PATCH 리소스의 부분 업데이트를 위한 요청
기타 HEAD, OPTIONS
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
헤더는 요청에 대한 추가정보를 제공
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
URL, HTTP 메서드, 헤더, 바디
• 요청 헤더
• HTTP요청시 사용할 수 있는 헤더
• 서버가 요청을 맞춤으로 처리할 수 있도록 보내는 정보.
• 캐싱제어, 사용자 에이전트, 레퍼러등
• 응답 헤더
• HTTP응답에 사용하는 헤더
• 응답의 상세한 컨텍스트를 제공하기 위해 사용
백엔드 개발자가 알아야 하는 것
인터넷 - HTTP
어떻게 요청을 보내나요?
URL, HTTP 메서드, 헤더, 바디
HTTP Request
HTTP Response
HTML JSON XML
HTML JSON XML
TEXT
TEXT
백엔드 개발자가 알아야 하는 것
데이터베이스
데이터베이스
관계형 데이터베이스
NoSQL 데이터베이스
MySQL PostgreSQL SQL Server Oracle
MongoDB Cassandra Redis Elasticsearch
백엔드 개발자가 알아야 하는 것
데이터베이스
데이터베이스가 무엇인가요?
백엔드 개발자가 알아야 하는 것
데이터베이스
데이터베이스가 무엇인가요?
데이터 저장, 검색, 수정, 삭제를
가능하게한 정리된 데이터의 모음
일반적으로 데이터베이스 소프트웨어를 의미한다.
백엔드 개발자가 알아야 하는 것
데이터베이스
데이터베이스는 어떤 것들이 있나요?
백엔드 개발자가 알아야 하는 것
데이터베이스
데이터베이스는 어떤 것들이 있나요?
크게는 RDB와 NoSQL로 구분
백엔드 개발자가 알아야 하는 것
데이터베이스 - RDB
RDB란?
백엔드 개발자가 알아야 하는 것
데이터베이스 - RDB
RDB란?
Relational Database의 약자로
행과 열로 이루어진 테이블로 데이터를 관리
백엔드 개발자가 알아야 하는 것
데이터베이스 - RDB
RDB란?
백엔드 개발자가 알아야 하는 것
데이터베이스 - RDB
테이블간에 관계를 맺음 -> 관계형 데이터베이스
백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL
NoSQL 이란?
Not Only SQL을 의미
RDB와 다른 데이터 저장, 조회 방식을
사용하는 데이터베이스
백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL
RDB와 다른 데이터 저장, 조회방식은 무엇일까?
도큐먼트, 키-밸류, 컬럼기반, 그래프 기반
백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL
• 도큐먼트 기반 : MongoDB, CouchDB
• 키-밸류 : Redis, DynamoDB
• 컬럼 기반 : 카산드라, HBase
• 그래프 : Neo4j, OrientDB
백엔드 개발자가 알아야 하는 것
데이터베이스 - NoSQL의 특징
• 유연한 스키마
• 고정된 스키마가 없거나, 유연한 스키마를 제공.
• 쓰기시에는 유연하게 쓸 수 있으나, 읽을 때에는 스키마가 필요함
• 빠른 읽기/쓰기 성능 : 특정 유형의 쿼리와 작업에 최적화되어 있음. key-value는 빠른
읽기 쓰기에 적합, 그래프 데이터베이스는 복잡한 관계 및 연결을 분석하는데 유리함
• 대량의 데이터를 분산 처리
• NoSQL 데이터베이스는 분산된 환경에서 대량의 데이터 베이스를 처리하도록 설계
되어 있음.
• 고가용성 및 복구
• 많은 NoSQL데이터베이스는 복제, 백업, 분할의 기능을 제공
• 일관성과 가용성의 트레이드 오프 (CAP 정리)
백엔드 개발자가 알아야 하는 것
데이터베이스 - CAP이론
CAP 정리가 뭘까?
분산시스템에서 일관성(Consistency), 가용성
(Availability), 분할 내성(Partition tolerance)을
동시에 만족할 수 없다.
세 가지중 두가지만 선택가능하다.
백엔드 개발자가 알아야 하는 것
데이터베이스 - CAP 정리
일관성
가용성
분할 내성
백엔드 개발자가 알아야 하는 것
데이터베이스 - CAP 정리
일관성
가용성
분할 내성
분산 시스템에서 분할 내성을 빼면 100% 장애없는 시
스템을 만들어야 하므로 P를 빼는 것은 불가능하다.
그러므로 모든 분산 시스템은 CP이거나 AP이다.
백엔드 개발자가 알아야 하는 것
프로그래밍언어
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
프로그래밍언어
프로그래밍 언어 어떻게 선택할까?
특별한 이유가 없다면 안정적인 언어를 선택하자
백엔드 개발자가 알아야 하는 것
프로그래밍언어
안정적인 언어는 어떤 것들이 있을까?
백엔드 개발자가 알아야 하는 것
프로그래밍언어
안정적인 언어는 어떤 것들이 있을까?
문제가 생겼을 때 해결책 찾기가 상대적으로 쉬운 언어들
백엔드 개발자가 알아야 하는 것
프로그래밍언어
안정적인 언어는 어떤 것들이 있을까?
• Python
• 문법이 간결 하여 학습이 쉬움
• 백엔드 개발, 데이터 분석, AI
• JavaScript (Node.js)
• 프론트엔드와 백엔드 모두 사용가능.
• 백엔드 개발, 실시간 어플리케이션
• Java (JVM)
• 큰 규모의 애플리케이션을 개발하기 위한 라이브러리가 충실함
• C#
• 마이크로소프트에서 만든 소프트웨어들 간의 시너지가 강력하다
• Go
• 간결하고 성능이 좋다. 빌드시 바이너리 하나만 배포하면 되므로 마이크로서비스 개발에 좋음
백엔드 개발자가 알아야 하는 것
웹프레임워크
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
웹프레임워크
웹프레임워크는 크게 2가지로 구분
백엔드 개발자가 알아야 하는 것
웹프레임워크
웹프레임워크는 크게 2가지로 구분
마이크로 프레임워크, 풀스택 프레임워크
백엔드 개발자가 알아야 하는 것
웹프레임워크 - 마이크로 프레임워크
• 간단하고 가볍다
• 확장성이 좋다
• 설정이 간단하여 빠르게 개발 시작 가능
• Flask (Python), Express (Node.js), Ktor (Kotlin), Gin (Golang) 같은 것이 있음
마이크로 프레임워크는 기본적인 기능만 제공
백엔드 개발자가 알아야 하는 것
웹프레임워크 - 풀스택 프레임워크
• 많은 기능 : 프론트엔드, 백엔드, 데이터베이스 관리등의 다양한 기능 제공
• 재사용가능한 컴포넌트와 라이브러리를 포함
• 프로젝트의 기본 구조와 패턴을 제공하여 일관성 유지
• Django (Python), NestJS (Node.js), Spring(Java), Revel (Golang) 같은 것이 있음
풀스택 프레임워크는 웹 애플리케이션 개발에 필요한 거의 모든 기능과 도구를 제공
백엔드 개발자가 알아야 하는 것
API개발
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST GraphQL gRPC
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST - REpresentational State Transfer
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
REST - REpresentational State Transfer
• 로이 토마스 필딩의 박사학위 논문에 최초로 소개
• 표준화된 인터페이스 원칙을 따른다
• URI를 사용하여 리소스에 접근
• 상태가 없다 (Stateless)
• 각 요청은 필요한 모든 정보를 포함해야함
• 캐시가능
• 응답은 캐시가 가능 여부를 명시적으로 나타냄
{
"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
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
• Facebook에서 2015년 공개한 데이터 질의 및 조작 언어
• GraphQL은 말그대로 Query Language이므로 쿼리언어 스펙이다
• 클라이언트가 서버로부터 데이터를 효과적으로 가져오게 하는 것이 목적
• 단일 엔드포인트를 가진다
• 실시간 업데이트 지원
• 구독 기능이 있어서 클라이언트가 실시간으로 데이터 변경 수신 가능
GraphQL API
REST API
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL 과 REST 비교
/post /comment /author
post comment author
/graphql
단일 엔드포인트
{
"data": {
"book": {
"title": "나혼자만 레벨업",
"author": "추공",
"createDate": "20201011"
}
}
}
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
JSON
query {
book(id: 123) {
title
author
createdDate
}
}
{
"data": {
"book": {
"title": "나혼자만 레벨업",
"author": "추공",
"viewCount": 123123123,
"createDate": "20201011"
}
}
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
GraphQL
JSON
query {
book(id: 123) {
title
author
viewCount
createdDate
}
}
서버에서 데이터를 효과적으로 가져온다
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
백엔드 개발자가 알아야 하는 것
API 개발 - 아키텍처 스타일
gRPC
• Google에서 개발한 고성능, 오픈소스, 범용 RPC프레임워크
• HTTP/2를 기반으로 동작 : 저지연, 효율적인 데이터 전송, TCP커넥션 하나로 여러요
청 동시처리
• Protocol Bu
ff
fers(protobuf)라는 인터페이스 정의 언어를 사용
• 다양한 언어에 대한 클라이언트, 서버 라이브러리를 제공
• 양방향 스트리밍 가능
• 클라이언트는 요청에 대한 타임아웃을 지정할 수 있음
백엔드 개발자가 알아야 하는 것
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
백엔드 개발자가 알아야 하는 것
버전관리
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
버전관리 - git
Git - 분산 버전 관리 시스템
백엔드 개발자가 알아야 하는 것
버전관리 - git
Git - 분산 버전 관리 시스템
백엔드 개발자가 알아야 하는 것
버전관리 - git
버전 관리 시스템
SVN (Subversion)
개발자1 개발자3
개발자2
commit
update
commit
update
commit
update
중앙의 버전 관리 서버에 저장소가 있음
코드 히스토리 확인시 서버에 접속 필요
백엔드 개발자가 알아야 하는 것
버전관리 - git
버전 관리 시스템
SVN (Subversion)
개발자1 개발자3
개발자2
commit
update
commit
update
commit
update
서버에 문제가 생기면 모두가 히스토리 조회 불가능
백엔드 개발자가 알아야 하는 것
버전관리 - git
• 리눅스 커널 개발을 위해 Linus Torvalds가 개발
• 분산 버전 관리 : 개발자의 로컬 머신에 코드의 전체 히스토리가 저장됨.
• 브랜치 생성 및 병합이 서버에 부하를 주지 않아. 매우 빠르고 간단하다
• 대부분의 경우 SVN보다 빠른 성능을 제공
Git - 분산 버전 관리 시스템
백엔드 개발자가 알아야 하는 것
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
개발자의 로컬 디렉터리에 저장소를 복제
서버에 문제가 생겨도 거의 대부분의 작업 가능
백엔드 개발자가 알아야 하는 것
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
백엔드 개발자가 알아야 하는 것
버전관리 - 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 로컬의 변경 내역을 원격 저장소에 반영합니다.
백엔드 개발자가 알아야 하는 것
인증과 인가
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
인증과 인가
•
인증 Authentication
사용자의 신원을 확인하는 것
로그인 과정에서 이름과 비밀번호를 입력
백엔드 개발자가 알아야 하는 것
인증과 인가
인가 Authorization
인증된 사용자의 권한을 확인하는 것
파일에 대한 읽기 / 쓰기 권한이 있는가
백엔드 개발자가 알아야 하는 것
데이터 표현법
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
데이터 표현법 - JSON과 YAML
백엔드 개발자가 알아야 하는 것
JSON
백엔드 개발자가 알아야 하는 것
JSON - JavaScript Object Notation
• 경량의 데이터 교환 형식
• 사람과 기계 둘 다 사용하기 쉽다
• 일반적으로 key-value 쌍으로 구성
• 거의 대부분의 프로그래밍 언어에서 지원
• 주석을 지원하지 않음
백엔드 개발자가 알아야 하는 것
JSON - JavaScript Object Notation
• 문자열, 숫자, 부울값 : name, age, isStudent
• 배열 : addresses, friends
• 객체 : addresses의 항목
• null : courses
백엔드 개발자가 알아야 하는 것
YAML - YAML Ain't Markup Language
• JSON과 마찬가지로 사람과 기계가 사용하기 편하다
• 중괄호가 아닌 들여쓰기를 사용하여 JSON보다 조금 더 간결하며 읽기 편함
• 거의 대부분의 프로그래밍 언어에서 지원
• 설정이 복잡한 프로그램에서 사용하는 경우가 많다. ( ex : k8s, ansible)
• 주석을 지원
백엔드 개발자가 알아야 하는 것
YAML - YAML Ain't Markup Language
• --- 문서 시작 표시
• 문자열, 숫자, 부울값 : name, age, isStudent
• 배열 : 각 항목은 -로 구분
• 객체 : addresses의 항목
• null : courses
• 주석 가능
백엔드 개발자가 알아야 하는 것
리눅스
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 현재 작업 디렉터리의 경로를 출력
pwd (Print Working Directory)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 디렉터리를 변경
cd (Change Directory)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 새로운 디렉터리를 생성
mkdir (Make Directory)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리를 복사
cp (Copy)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리를 삭제
rm (Remove)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리의 이름 변경 혹은 위치 이동
mv (Move)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일의 내용을 출력
cat (Concatenate)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 새로운 빈 파일을 생성하거나 파일의 타임 스탬프 업데이트
touch
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 문자열이나 변수를 출력
echo
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 시스템의 IP 주소와 네트워크 인터페이스 정보 출력
ip addr
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 시스템의 IP 주소와 네트워크 인터페이스 정보 출력
ifcon
fi
g (Interface Con
fi
guration)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 소켓의 통계를 출력
• -t: TCP 소켓을 표시
• -u: UDP 소켓을 표시
• -l: 리스닝(listening) 상태의 소켓만 표시
• -n: 서비스 이름 대신 포트 번호를 표시
ss (Socket Statistics)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 네트워크 연결을 읽고 쓰는 유틸리티.
• 네트워크 연결 확인시
• 서버에서 특정 포트를 열고 대기
• 서버의 포트에 접속하기
nc (Netcat)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 명령어의 경로를 출력
which
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일의 마지막 부분을 출력
tail
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일이나 디렉터리를 검색
fi
nd
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 현재 실행중인 프로세스의 목록을 출력
• -a: 모든 사용자의 프로세스를 보여줌
• -u: 프로세스 소유자, CPU 사용률, 메모리 사용률 등의 정보를 포함한 출력을 제공
• -x: 터미널에 연결되지 않은 프로세스도 보여줌
ps (Process Status)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 파일에서 주어진 패턴과 일치하는 라인을 검색
grep (Global Regular Expression Print)
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 주어진 프로세스 ID(PID)의 프로세스를 종료
kill
백엔드 개발자가 알아야 하는 것
리눅스 - 21가지 필수 명령어
• 명령어에 대한 별칭 설정
alias
백엔드 개발자가 알아야 하는 것
배치처리
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
배치처리
배치처리는 왜 필요할까?
백엔드 개발자가 알아야 하는 것
배치처리
• 대량의 작업을 한번에 실행하여 자원을 효율적으로 사용
• 수동으로 해야하는 작업을 자동화할 수 있음
• 시스템의 피크 시간을 피해 실행하여 부하를 분산
배치처리는 왜 필요할까?
백엔드 개발자가 알아야 하는 것
배치처리 - crontab
* * * * * echo "hello" > /dev/pts/0
┬ ┬ ┬ ┬ ┬
│ │ │ │ │
│ │ │ │ │
│ │ │ │ └───────── 요일 (0 - 6) (0:일요일, 1:월요일,…, 6:토요일)
│ │ │ └───────── 월 (1 - 12)
│ │ └───────── 일 (1 - 31)
│ └───────── 시 (0 - 23)
└───────── 분 (0 - 59)
백엔드 개발자가 알아야 하는 것
배치처리 - jenkins
백엔드 개발자가 알아야 하는 것
배치처리 프레임워크 사용 - spring-batch
백엔드 개발자가 알아야 하는 것
클라우드 서비스
• GitHub Action에서 배치 처리 가능
• AWS 람다, Google Cloud Functions, Azure Function 등의 서비스로 배치처리
가능
• AWS Batch, Google Cloud Data
fl
ow 등의 특화 서비스도 있음
백엔드 개발자가 알아야 하는 것
CI/CD
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
CI/CD
백엔드 개발자가 알아야 하는 것
CI/CD
• 개발자들이 자신의 코드 변경 사항을 중앙의 저장소에 통합하는 프로세스
• 버그의 조기 발견으로 소프트웨어 품질 향상이 목적
• 코드 커밋 > 자동 빌드 > 자동 테스트(단위 테스트, 통합 테스트)
CI (Continuous Integration) - 지속적 통합
백엔드 개발자가 알아야 하는 것
CI/CD
• Production 환경까지 자동으로 배포하는 것
• 소프트웨어를 빠르고 안전하게 프로덕션 환경에 배포하는 것이 목적
• 모든 변경 사항이 자동 테스트를 거쳐서 배포되게 된다.
CD (Continuous Delivery | Deployment) - 지속적 전달
백엔드 개발자가 알아야 하는 것
도커 - 컨테이너
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
도커
컨테이너 기반의 가상화 플랫폼
백엔드 개발자가 알아야 하는 것
도커
• 애플리케이션과 애플리케이션을 실행하는데 필요한 모든 환경을 하나의 패키지로 묶은 것
• 도커파일을 빌드하면 도커 이미지가 만들어지고 이를 실행하면 도커 컨테이너가 된다.
컨테이너
백엔드 개발자가 알아야 하는 것
도커
도커는 왜 사용하나요?
백엔드 개발자가 알아야 하는 것
도커
내 컴퓨터에서는 잘 되는데요?
도커는 왜 사용하나요?
백엔드 개발자가 알아야 하는 것
도커
도커는 왜 사용하나요?
컨테이너 환경에서는 환경이 달라져도 동일하게 동작
백엔드 개발자가 알아야 하는 것
도커
• 물리머신을 가상화 한다는 점에서는 비슷하다
• VM은 하이퍼바이저(하드웨어 추상화 계층), 게스트 OS가 같이 올라가기 때문에 무거움
• 도커는 컨테이너 엔진위에 애플리케이션이 동작하므로 상대적으로 가볍다
가상 머신 같은거 아닌가요?
백엔드 개발자가 알아야 하는 것
도커
가상 머신 같은거 아닌가요?
백엔드 개발자가 알아야 하는 것
도커
• 빠른 배포
• 컨테이너는 시작과 종료가 빠르므로 애플리케이션의 배포를 빠르게 할 수 있다
• 확장이 쉽다
• kubernetes 같은 오케스트레이션을 사용하면 노드 추가로 확장 가능
• 리소스 효율성이 좋다
• 가상 머신보다 훨씬 더 적은 리소스를 사용하므로, 동일한 하드웨어에서 더 많은 애플리
케이션을 실행할 수 있다
도커의 특징
백엔드 개발자가 알아야 하는 것
클라우드 서비스
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
클라우드 서비스
• 인터넷을 통하여 제공되는 서비스를 의미
• 보통 IaaS, PaaS, SaaS 3가지 카테고리로 구분
백엔드 개발자가 알아야 하는 것
클라우드 서비스 - IaaS (Infra as a Service)
• 기술적으로는 하드웨어 가상화가 필요
• 사용자는 디스크, 네트워크, CPU, 메모리등의 기본적인 인프라를 사용할 수 있다.
• AWS의 EC2, Google Cloud의 Compute Engine, Azure의 Virtual Machine
백엔드 개발자가 알아야 하는 것
클라우드 서비스 - PaaS (Platform as a Service)
• 소프트웨어를 개발 & 실행하기 위한 플랫폼과 환경을 제공
• 인프라적인 부분과 배포를 크게 신경쓰지 않고, 개발만 하고자 하는 경우 사용
• Google App Engine, Heroku
백엔드 개발자가 알아야 하는 것
클라우드 서비스 - SaaS (Software as a Service)
• 웹브라우저를 통해 사용할 수 있는 애플리케이션을 제공
• 사용자는 소프트웨어의 설치, 업데이트, 유지보수를 신경쓰지 않아도 된다.
• Dropbox, MS O
ffi
ce 365 등
백엔드 개발자가 알아야 하는 것
클라우드 서비스
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
보안
• 공격자는 보안이 가장 약한 곳을 공략한다
• 전통적으로 가장 약한 연결 고리는 사람이다 -> 회사가 커질 수록 보안이 빡세짐
• 백엔드 개발자라면 웹서비스의 대표적이 취약점 정도는 알고 있는 것이 좋다
백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거나 하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
백엔드 개발자가 알아야 하는 것
보안 - 대표적인 취약점
• 인젝션
• 악의적인 데이터 삽입으로 공격. ex ) SQL 인젝션
• 크로스 사이트 스크립팅 (XSS)
• 웹페이지에 악의적인 스크립트를 삽입하여 웹사이트 로드시 실행되게 하는 취약점
• 크로스 사이트 요청 위조 (CSRF)
• 공격자가 사용자를 속여, 그 사용자의 권한으로 원하지 않는 요청을 서버에 보내는 것
• 인증, 인가 문제
• 평문 패스워드, 토큰 노출, 토큰 재사용, 토큰 만료 없음, 권한을 너무 많이 주는 것등, 권
한 제한이 제대로 되어 있지 않거하는 문제.
• Dos, DDoS 공격
• 서비스를 중단시키기 위한 대량의 요청을 보내는 공격
백엔드 개발자가 알아야 하는 것
아키텍처
인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발
버전관리 인증과 인가 데이터 표현법 리눅스 배치처리
CI / CD 도커 클라우드 서비스 보안 아키텍처
백엔드 개발자가 알아야 하는 것
아키텍처
• 큰 시스템을 구성하는 주요 구성 요소와 그 요소들 간의 관계를 표현하는 설계도나 청사진
• 3계층 아키텍처, 마이크로 서비스 아키텍처, 이벤트 주도 아키텍처 등이 있음
백엔드 개발자가 알아야 하는 것
아키텍처
• 소프트웨어를 여러 계층으로 분리하여 각 계층이 특정 기능을 수행하도록 하는 아키텍처
• 전형적으로는 프레젠테이션 계층, 비즈니스 로직 계층, 데이터 액세스 계층, 데이터베이스
계층 등으로 구성
• 각 계층은 오직 바로 아래의 계층만을 호출하도록 설계 된다
• 장점: 분리된 관심사를 통해 유지보수와 확장이 용이
• 단점: 성능에 영향을 줄 수 있으며, 유연성이 제한될 수 있다
계층형 아키텍처
백엔드 개발자가 알아야 하는 것
아키텍처
• 복잡한 애플리케이션을 작은, 독립적인 서비스들로 분리하는 아키텍처
• 각 서비스는 독립적으로 배포되며, 특정 비즈니스 기능을 수행
• 서비스들은 네트워크를 통해 서로 통신합니다, 주로 RESTful API나 메시지 큐를 사용
• 장점: 확장성, 유연성, 독립적인 배포와 실패 격리 등의 이점이 있다
• 단점: 네트워크 오버헤드, 데이터 일관성 관리, 서비스 간의 복잡한 상호작용 등의 문제가
있을 수 있다
마이크로서비스 아키텍처
백엔드 개발자가 알아야 하는 것
아키텍처
• 확장성이 좋은 애플리케이션을 만드는데 사용되는 분산 비동기 아키텍터 패턴
• 시스템은 이벤트를 기반으로 동작한다
• 이벤트는 시스템 내부 외부에서 발생하는 특정 상황 혹은 변경을 나타냄
• 적게는 수십개에서 많게는 수백개의 이벤트 큐가 존재
• 컴포넌트간의 직접적인 의존성이 적어서, 확장성이 좋다
• 이벤트의 흐름과 상호작용을 추적하고 관리하는 것이 복잡할 수 있다
• 여러 이벤트가 동시에 발생시, 이벤트의 순서를 보장하는 것이 어려울 수 있다
이벤트 주도 아키텍처
수고하셨습니다

More Related Content

What's hot

[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
MinGeun Park
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
devCAT Studio, NEXON
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
devCAT Studio, NEXON
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
devCAT Studio, NEXON
 

What's hot (20)

NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현NDC12_Lockless게임서버설계와구현
NDC12_Lockless게임서버설계와구현
 
서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)서버학개론(백엔드 서버 개발자를 위한)
서버학개론(백엔드 서버 개발자를 위한)
 
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
고려대학교 컴퓨터학과 특강 - 대학생 때 알았더라면 좋았을 것들
 
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
[140315 박민근] 젠킨스를 이용한 자동빌드 시스템 구축하기(ci)
 
손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.손코딩뇌컴파일눈디버깅을 소개합니다.
손코딩뇌컴파일눈디버깅을 소개합니다.
 
Windows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCPWindows Registered I/O (RIO) vs IOCP
Windows Registered I/O (RIO) vs IOCP
 
신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비신입 SW 개발자 취업 준비
신입 SW 개발자 취업 준비
 
임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012임태현, MMO 서버 개발 포스트 모템, NDC2012
임태현, MMO 서버 개발 포스트 모템, NDC2012
 
송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010송창규, unity build로 빌드타임 반토막내기, NDC2010
송창규, unity build로 빌드타임 반토막내기, NDC2010
 
Introduction to Node JS.pdf
Introduction to Node JS.pdfIntroduction to Node JS.pdf
Introduction to Node JS.pdf
 
Introduction to Node.js
Introduction to Node.jsIntroduction to Node.js
Introduction to Node.js
 
Introduction Node.js
Introduction Node.jsIntroduction Node.js
Introduction Node.js
 
우아한 모노리스
우아한 모노리스우아한 모노리스
우아한 모노리스
 
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
오딘: 발할라 라이징 MMORPG의 성능 최적화 사례 공유 [카카오게임즈 - 레벨 300] - 발표자: 김문권, 팀장, 라이온하트 스튜디오...
 
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
[야생의 땅: 듀랑고] 서버 아키텍처 Vol. 2 (자막)
 
Massive service basic
Massive service basicMassive service basic
Massive service basic
 
NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀NDC 11 자이언트 서버의 비밀
NDC 11 자이언트 서버의 비밀
 
이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정이벤트 기반 분산 시스템을 향한 여정
이벤트 기반 분산 시스템을 향한 여정
 
임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013임태현, 게임 서버 디자인 가이드, NDC2013
임태현, 게임 서버 디자인 가이드, NDC2013
 
Multiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theoremMultiplayer Game Sync Techniques through CAP theorem
Multiplayer Game Sync Techniques through CAP theorem
 

Similar to 삶이편해지는_백엔드_개발자_지식.pdf

OCE - Cno 2014 private sector oriented open paas oce
OCE - Cno 2014 private sector oriented open paas   oceOCE - Cno 2014 private sector oriented open paas   oce
OCE - Cno 2014 private sector oriented open paas oce
uEngine Solutions
 

Similar to 삶이편해지는_백엔드_개발자_지식.pdf (20)

PHP로 웹개발을 해보자
PHP로 웹개발을 해보자PHP로 웹개발을 해보자
PHP로 웹개발을 해보자
 
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
소프트웨어 개발 트랜드 및 MSA (마이크로 서비스 아키텍쳐)의 이해
 
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기 [아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
[아이펀팩토리] 클라이언트 개발자, 서버 개발 시작하기
 
SOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AISOSCON 2017 - Backend.AI
SOSCON 2017 - Backend.AI
 
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
초고속 웹사이트 개발을 위한 Codeigniter PHP Framework
 
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
20181108 HBSmith에서는 이렇게 AWS IaC로 배포한다
 
개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호개발자로써 갖춰야할 스킬들 - 최용호
개발자로써 갖춰야할 스킬들 - 최용호
 
Local Dev
Local DevLocal Dev
Local Dev
 
Cloud life seminar open shift,이준영(배포용)
Cloud life seminar   open shift,이준영(배포용)Cloud life seminar   open shift,이준영(배포용)
Cloud life seminar open shift,이준영(배포용)
 
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
AWS와 함께하는 DevOps이야기 :: 박선용 :: AWS Summit Seoul 2016
 
OCE - Cno 2014 private sector oriented open paas oce
OCE - Cno 2014 private sector oriented open paas   oceOCE - Cno 2014 private sector oriented open paas   oce
OCE - Cno 2014 private sector oriented open paas oce
 
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes[D2 COMMUNITY] Open Container Seoul Meetup -  마이크로 서비스 아키텍쳐와 Docker kubernetes
[D2 COMMUNITY] Open Container Seoul Meetup - 마이크로 서비스 아키텍쳐와 Docker kubernetes
 
About Programmer 2021
About Programmer 2021About Programmer 2021
About Programmer 2021
 
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
[야생의 땅: 듀랑고] 지형 관리 완전 자동화 - 생생한 AWS와 Docker 체험기
 
Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기Laravel로 스타트업 기술 스택 구성하기
Laravel로 스타트업 기술 스택 구성하기
 
RAD Studio 10.2 도쿄
RAD Studio 10.2 도쿄RAD Studio 10.2 도쿄
RAD Studio 10.2 도쿄
 
DevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle DeveloperDevOps 시대의 새로운 Role - Full Cycle Developer
DevOps 시대의 새로운 Role - Full Cycle Developer
 
141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작141118 최창원 웹크롤러제작
141118 최창원 웹크롤러제작
 
Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos Private PaaS with Docker, spring cloud and mesos
Private PaaS with Docker, spring cloud and mesos
 
Upgrade VCL! 오래된 프로그램, 최신 버전으로 탈바꿈하기
Upgrade VCL! 오래된 프로그램, 최신 버전으로 탈바꿈하기Upgrade VCL! 오래된 프로그램, 최신 버전으로 탈바꿈하기
Upgrade VCL! 오래된 프로그램, 최신 버전으로 탈바꿈하기
 

삶이편해지는_백엔드_개발자_지식.pdf

  • 2. 목차 • 자기소개 • 백엔드 개발자의 마인드 • 백엔드 개발자가 알아야하는 것 • 질문 답변
  • 3. 자기소개 • 이름 : 박승규 • 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음 • 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발 • 좋아하는 언어 : 파이썬 • 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php • 활동들 • 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU • 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776 • 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로 • 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/ 3-164797583 • 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
  • 4. 자기소개 • 이름 : 박승규 • 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음 • 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발 • 좋아하는 언어 : 파이썬 • 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php • 활동들 • 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU • 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776 • 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로 • 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/ 3-164797583 • 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
  • 5. 자기소개 • 이름 : 박승규 • 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음 • 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발 • 좋아하는 언어 : 파이썬 • 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php • 활동들 • 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU • 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776 • 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로 • 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/ 3-164797583 • 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
  • 6. 자기소개 • 이름 : 박승규 • 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음 • 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발 • 좋아하는 언어 : 파이썬 • 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php • 활동들 • 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU • 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776 • 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로 • 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/ 3-164797583 • 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
  • 7. 자기소개 • 이름 : 박승규 • 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음 • 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발 • 좋아하는 언어 : 파이썬 • 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php • 활동들 • 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU • 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776 • 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로 • 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/ 3-164797583 • 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
  • 8. 자기소개 • 이름 : 박승규 • 하는 일 : 카카오엔터테인먼트에서 백엔드 개발자로 일하고 있음 • 해본 일 : 웹개발(IE와 jquery로 개발하던 시절), 플랫폼 개발, 인프라, 게임서버 개발 • 좋아하는 언어 : 파이썬 • 써본 언어들 : 자바, 자바스크립트, 파이썬, Go, kotlin, shell, php • 활동들 • 유튜브 : 카카오 개발자 되는법 https://www.youtube.com/watch?v=4pv6vJgr4gU • 책 : Node.js 백엔드 개발자 되기 https://www.yes24.com/Product/Goods/118379776 • 강의 : 초보 백엔드 개발자 로드맵, 파이썬, 그냥 재미로 • 슬라이드 : 파이콘2019 파이썬 3대장을 만나보자 https://www.slideshare.net/SeungKyooPark/ 3-164797583 • 영상 : 파이썬으로 크롤러 만들기 https://www.youtube.com/watch?v=QAj1vbUdztQ
  • 9. 백엔드 개발자의 마인드 정성적 사고 정량적 사고 백엔드 개발자의 마인드
  • 13. 백엔드 개발자의 마인드 혼자 잘하기 함께 자라기
  • 15. 백엔드 개발자가 알아야 하는 것 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처
  • 16. 백엔드 개발자가 알아야 하는 것 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증 과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처 이걸 다 알아야 하나요?
  • 17. 백엔드 개발자가 알아야 하는 것 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증 과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처 모두 외워야할 필요는 없지만, 찾아서 할 수 있을 정도는 되어야 해요
  • 18. 백엔드 개발자가 알아야 하는 것 인터넷 인터넷 인터넷의 동작 DNS HTTP
  • 19. 백엔드 개발자가 알아야 하는 것 인터넷
  • 20. 백엔드 개발자가 알아야 하는 것 인터넷 전 세계를 연결한 거대한 네트워크
  • 21. 백엔드 개발자가 알아야 하는 것 인터넷 컴퓨터 두 대가 통신할 때
  • 22. 백엔드 개발자가 알아야 하는 것 인터넷 컴퓨터 열 대가 직접 통신할 때
  • 23. 백엔드 개발자가 알아야 하는 것 인터넷 컴퓨터 열 대가 직접 통신할 때 라우터를 추가합시다
  • 24. 백엔드 개발자가 알아야 하는 것 인터넷 10대의 컴퓨터와 하나의 라우터
  • 25. 백엔드 개발자가 알아야 하는 것 인터넷 네트워크의 네트워크
  • 26. 백엔드 개발자가 알아야 하는 것 인터넷 네트워크의 네트워크의 네트워크
  • 27. 백엔드 개발자가 알아야 하는 것 인터넷 네트워크의 네트워크의 네트워크 아주 먼 곳과 통신하려면??
  • 28. 백엔드 개발자가 알아야 하는 것 인터넷 네트워크의 네트워크의 네트워크 아주 먼 곳과 통신하려면?? 모뎀을 추가합시다
  • 29. 백엔드 개발자가 알아야 하는 것 인터넷 네트워크가 통신사(ISP)와 연결됨
  • 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, 이미지, 동영상, 오디오등 을 전송하기 위한 프로토콜 (이름은 유지)
  • 43. 백엔드 개발자가 알아야 하는 것 인터넷 - HTTP HTTP 어디서 사용하나요?
  • 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
  • 54. 백엔드 개발자가 알아야 하는 것 데이터베이스 데이터베이스가 무엇인가요?
  • 55. 백엔드 개발자가 알아야 하는 것 데이터베이스 데이터베이스가 무엇인가요? 데이터 저장, 검색, 수정, 삭제를 가능하게한 정리된 데이터의 모음 일반적으로 데이터베이스 소프트웨어를 의미한다.
  • 56. 백엔드 개발자가 알아야 하는 것 데이터베이스 데이터베이스는 어떤 것들이 있나요?
  • 57. 백엔드 개발자가 알아야 하는 것 데이터베이스 데이터베이스는 어떤 것들이 있나요? 크게는 RDB와 NoSQL로 구분
  • 58. 백엔드 개발자가 알아야 하는 것 데이터베이스 - RDB RDB란?
  • 59. 백엔드 개발자가 알아야 하는 것 데이터베이스 - RDB RDB란? Relational Database의 약자로 행과 열로 이루어진 테이블로 데이터를 관리
  • 60. 백엔드 개발자가 알아야 하는 것 데이터베이스 - RDB RDB란?
  • 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)을 동시에 만족할 수 없다. 세 가지중 두가지만 선택가능하다.
  • 67. 백엔드 개발자가 알아야 하는 것 데이터베이스 - CAP 정리 일관성 가용성 분할 내성
  • 68. 백엔드 개발자가 알아야 하는 것 데이터베이스 - CAP 정리 일관성 가용성 분할 내성 분산 시스템에서 분할 내성을 빼면 100% 장애없는 시 스템을 만들어야 하므로 P를 빼는 것은 불가능하다. 그러므로 모든 분산 시스템은 CP이거나 AP이다.
  • 69. 백엔드 개발자가 알아야 하는 것 프로그래밍언어 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처
  • 70. 백엔드 개발자가 알아야 하는 것 프로그래밍언어 프로그래밍 언어 어떻게 선택할까? 특별한 이유가 없다면 안정적인 언어를 선택하자
  • 71. 백엔드 개발자가 알아야 하는 것 프로그래밍언어 안정적인 언어는 어떤 것들이 있을까?
  • 72. 백엔드 개발자가 알아야 하는 것 프로그래밍언어 안정적인 언어는 어떤 것들이 있을까? 문제가 생겼을 때 해결책 찾기가 상대적으로 쉬운 언어들
  • 73. 백엔드 개발자가 알아야 하는 것 프로그래밍언어 안정적인 언어는 어떤 것들이 있을까? • Python • 문법이 간결 하여 학습이 쉬움 • 백엔드 개발, 데이터 분석, AI • JavaScript (Node.js) • 프론트엔드와 백엔드 모두 사용가능. • 백엔드 개발, 실시간 어플리케이션 • Java (JVM) • 큰 규모의 애플리케이션을 개발하기 위한 라이브러리가 충실함 • C# • 마이크로소프트에서 만든 소프트웨어들 간의 시너지가 강력하다 • Go • 간결하고 성능이 좋다. 빌드시 바이너리 하나만 배포하면 되므로 마이크로서비스 개발에 좋음
  • 74. 백엔드 개발자가 알아야 하는 것 웹프레임워크 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처
  • 75. 백엔드 개발자가 알아야 하는 것 웹프레임워크 웹프레임워크는 크게 2가지로 구분
  • 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
  • 84. 백엔드 개발자가 알아야 하는 것 API 개발 - 아키텍처 스타일 GraphQL
  • 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 } } 서버에서 데이터를 효과적으로 가져온다
  • 89. 백엔드 개발자가 알아야 하는 것 API 개발 - 아키텍처 스타일
  • 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 도커 클라우드 서비스 보안 아키텍처
  • 93. 백엔드 개발자가 알아야 하는 것 버전관리 - git Git - 분산 버전 관리 시스템
  • 94. 백엔드 개발자가 알아야 하는 것 버전관리 - git Git - 분산 버전 관리 시스템
  • 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 도커 클라우드 서비스 보안 아키텍처
  • 105. 백엔드 개발자가 알아야 하는 것 데이터 표현법 - JSON과 YAML
  • 107. 백엔드 개발자가 알아야 하는 것 JSON - JavaScript Object Notation • 경량의 데이터 교환 형식 • 사람과 기계 둘 다 사용하기 쉽다 • 일반적으로 key-value 쌍으로 구성 • 거의 대부분의 프로그래밍 언어에서 지원 • 주석을 지원하지 않음
  • 108. 백엔드 개발자가 알아야 하는 것 JSON - JavaScript Object Notation • 문자열, 숫자, 부울값 : name, age, isStudent • 배열 : addresses, friends • 객체 : addresses의 항목 • null : courses
  • 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 도커 클라우드 서비스 보안 아키텍처
  • 133. 백엔드 개발자가 알아야 하는 것 배치처리 배치처리는 왜 필요할까?
  • 134. 백엔드 개발자가 알아야 하는 것 배치처리 • 대량의 작업을 한번에 실행하여 자원을 효율적으로 사용 • 수동으로 해야하는 작업을 자동화할 수 있음 • 시스템의 피크 시간을 피해 실행하여 부하를 분산 배치처리는 왜 필요할까?
  • 135. 백엔드 개발자가 알아야 하는 것 배치처리 - crontab * * * * * echo "hello" > /dev/pts/0 ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ │ │ │ │ │ └───────── 요일 (0 - 6) (0:일요일, 1:월요일,…, 6:토요일) │ │ │ └───────── 월 (1 - 12) │ │ └───────── 일 (1 - 31) │ └───────── 시 (0 - 23) └───────── 분 (0 - 59)
  • 136. 백엔드 개발자가 알아야 하는 것 배치처리 - jenkins
  • 137. 백엔드 개발자가 알아야 하는 것 배치처리 프레임워크 사용 - spring-batch
  • 138. 백엔드 개발자가 알아야 하는 것 클라우드 서비스 • GitHub Action에서 배치 처리 가능 • AWS 람다, Google Cloud Functions, Azure Function 등의 서비스로 배치처리 가능 • AWS Batch, Google Cloud Data fl ow 등의 특화 서비스도 있음
  • 139. 백엔드 개발자가 알아야 하는 것 CI/CD 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처
  • 140. 백엔드 개발자가 알아야 하는 것 CI/CD
  • 141. 백엔드 개발자가 알아야 하는 것 CI/CD • 개발자들이 자신의 코드 변경 사항을 중앙의 저장소에 통합하는 프로세스 • 버그의 조기 발견으로 소프트웨어 품질 향상이 목적 • 코드 커밋 > 자동 빌드 > 자동 테스트(단위 테스트, 통합 테스트) CI (Continuous Integration) - 지속적 통합
  • 142. 백엔드 개발자가 알아야 하는 것 CI/CD • Production 환경까지 자동으로 배포하는 것 • 소프트웨어를 빠르고 안전하게 프로덕션 환경에 배포하는 것이 목적 • 모든 변경 사항이 자동 테스트를 거쳐서 배포되게 된다. CD (Continuous Delivery | Deployment) - 지속적 전달
  • 143. 백엔드 개발자가 알아야 하는 것 도커 - 컨테이너 인터넷 데이터베이스 프로그래밍언어 웹프레임워크 API개발 버전관리 인증과 인가 데이터 표현법 리눅스 배치처리 CI / CD 도커 클라우드 서비스 보안 아키텍처
  • 144. 백엔드 개발자가 알아야 하는 것 도커 컨테이너 기반의 가상화 플랫폼
  • 145. 백엔드 개발자가 알아야 하는 것 도커 • 애플리케이션과 애플리케이션을 실행하는데 필요한 모든 환경을 하나의 패키지로 묶은 것 • 도커파일을 빌드하면 도커 이미지가 만들어지고 이를 실행하면 도커 컨테이너가 된다. 컨테이너
  • 146. 백엔드 개발자가 알아야 하는 것 도커 도커는 왜 사용하나요?
  • 147. 백엔드 개발자가 알아야 하는 것 도커 내 컴퓨터에서는 잘 되는데요? 도커는 왜 사용하나요?
  • 148. 백엔드 개발자가 알아야 하는 것 도커 도커는 왜 사용하나요? 컨테이너 환경에서는 환경이 달라져도 동일하게 동작
  • 149. 백엔드 개발자가 알아야 하는 것 도커 • 물리머신을 가상화 한다는 점에서는 비슷하다 • VM은 하이퍼바이저(하드웨어 추상화 계층), 게스트 OS가 같이 올라가기 때문에 무거움 • 도커는 컨테이너 엔진위에 애플리케이션이 동작하므로 상대적으로 가볍다 가상 머신 같은거 아닌가요?
  • 150. 백엔드 개발자가 알아야 하는 것 도커 가상 머신 같은거 아닌가요?
  • 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. 백엔드 개발자가 알아야 하는 것 아키텍처 • 확장성이 좋은 애플리케이션을 만드는데 사용되는 분산 비동기 아키텍터 패턴 • 시스템은 이벤트를 기반으로 동작한다 • 이벤트는 시스템 내부 외부에서 발생하는 특정 상황 혹은 변경을 나타냄 • 적게는 수십개에서 많게는 수백개의 이벤트 큐가 존재 • 컴포넌트간의 직접적인 의존성이 적어서, 확장성이 좋다 • 이벤트의 흐름과 상호작용을 추적하고 관리하는 것이 복잡할 수 있다 • 여러 이벤트가 동시에 발생시, 이벤트의 순서를 보장하는 것이 어려울 수 있다 이벤트 주도 아키텍처