안녕하세요!
DEVOCEAN YOUNG 3기의 김승언, 김여진, 송하연, 홍효정, 황지수입니다.
이번에 데보션영에서 원하는 도서를 지원 받아 스터디 할 수 있는 기회가 주어졌는데, 저희가 선정한 도서는 ‘아는 만큼 보이는 백엔드 개발’ 이라는 도서였습니다 📖
총 4회의 오프라인 스터디를 통해 책의 내용을 깊이 있게 살펴보았고, 각 장에서 인상적이었던 내용들을 정리하여 후기를 나누고자 합니다!
💡 책 선정 이유
저희 모두 데보션영 3기의 백엔드 파트로 평소 백엔드 개발에 많은 관심을 가지고 있었는데요!
'아는 만큼 보이는 백엔드 개발'은 백엔드의 기초부터 전반적인 내용을 체계적으로 설명하고 있어, 백엔드 개발의 기초를 탄탄히 다질 수 있는 도서로 선정하였습니다.
👇🏻 자세한 내용은 노션 페이지에서 확인하실 수 있습니다 :)
https://mirage-cobweb-874.notion.site/10590ab9c09c8052ba2af717790d3c39
📕 챕터별 내용 요약
1장 백엔드 시작하기
- 웹 개발은 프론트엔드와 백엔드로 나뉩니다.
- 프론트엔드는 HTML, CSS, 자바스크립트로 사용자 인터페이스(UI)를 구축하고, 백엔드는 서버와 데이터베이스 관리, API 개발을 담당합니다.
- 서버는 클라이언트의 요청을 처리하며, 웹 서버와 웹 애플리케이션 서버로 구분됩니다.
- 백엔드 개발자는 서버 개발, 데이터베이스 관리, API 구축, 보안, 인프라 관리 등 다양한 업무를 수행합니다.
2장 CS 기초지식
- 네트워크는 컴퓨터들이 통신망으로 연결된 시스템이며, IP 주소와 도메인 네임을 통해 장치들이 서로 소통합니다.
- 운영체제는 프로세스와 스레드를 관리하며, CPU가 여러 작업을 번갈아 처리하는 콘텍스트 스위칭과 스레드 간 동기화 문제가 발생할 수 있습니다.
- 데이터베이스는 DBMS를 통해 데이터를 효율적으로 관리하며, 정규화를 통해 데이터 중복을 방지하고 트랜잭션 단위로 작업을 수행합니다.
- 자료구조는 배열, 연결리스트, 스택, 큐, 그래프, 트리, 맵 등의 다양한 구조로 데이터를 저장하고 처리합니다.
3장 백엔드 개발 언어와 프레임워크
- 프로그래밍 패러다임에는 명령형, 절차지향, 객체지향, 함수형 프로그래밍이 있습니다.
- 명령형은 문제 해결 과정을 순차적으로 나열하며, 절차지향은 순서에 따라 명령을 수행합니다. 객체지향은 사물을 속성과 기능으로 모델링해 클래스를 정의하고, 함수형 프로그래밍은 불변성과 선언형 방식으로 데이터를 처리합니다.
- 백엔드 개발 언어로는 자바스크립트, 자바, 파이썬 등이 있으며, 프레임워크로는 Express.js, Nest.js, 스프링, Django 등이 주로 사용됩니다.
- 각 언어와 프레임워크는 프로젝트의 요구사항에 맞게 선택해야 합니다.
4장 DBMS
- RDBMS(관계형 데이터베이스)는 데이터를 테이블 형태로 저장하며, SQL을 통해 데이터를 생성, 조회, 수정, 삭제하는 시스템입니다.
- 테이블은 속성과 튜플로 구성되며, 테이블 간의 관계는 1:1, 1:N, N:M등의 형태로 표현되어 데이터 간의 연관성을 관리합니다.
- SQL의 DDL, DML, DCL 명령어를 사용해 테이블 구조를 정의하고 데이터를 조작하며, 조인 연산을 통해 여러 테이블의 데이터를 함께 조회할 수 있습니다.
- 반면, NoSQL은 관계형 데이터베이스와 달리 테이블 구조 없이 도큐먼트, 키-값, 그래프 데이터베이스 등을 사용해 유연하게 데이터를 저장하고 관리합니다.
- MongoDB와 같은 NoSQL 시스템에서는 컬렉션과 도큐먼트 구조를 사용해 데이터를 관리하며, insert, find, update, delete 등의 명령어로 데이터를 효율적으로 처리합니다.
5장 API
- API는 응용 프로그램 간의 상호작용을 가능하게 하는 인터페이스로, 클라이언트와 서버 간의 통신을 지원합니다.
- REST API는 자원을 URI로 명시하고, HTTP 메서드를 통해 CRUD 연산을 수행하는 표준화된 방식이며, 설계 시 URI에 명사 사용, 소문자 표기, 파일 확장자 제외 등의 규칙을 따릅니다.
- GraphQL은 REST API와 달리 클라이언트가 원하는 데이터를 직접 요청할 수 있어, 프론트엔드가 데이터 요청을 더 유연하게 제어할 수 있는 방식입니다.
- API 명세서는 API의 구조와 기능을 문서화한 것으로, Swagger와 같은 도구를 통해 REST API를 문서화하여 개발자들이 쉽게 활용할 수 있도록 합니다.
6장 버전 관리 시스템
- 버전 관리 시스템은 파일의 변화를 시간에 따라 기록하고, 필요 시 이전 버전으로 되돌릴 수 있도록 하는 시스템입니다.
- 중앙 집중식은 서버를 중심으로 관리하며, 서버에 문제가 생기면 작업이 불가능한 반면, 분산식은 모든 사용자가 자신의 컴퓨터에 저장소를 가지는 방식으로, 깃(Git)이 대표적입니다.
- 깃은 Working Directory, Staging Area, Local Repository의 작업 영역으로 나뉘며, 변경 사항을 기록하고 관리합니다.
- 깃허브(GitHub)는 웹 기반의 버전 관리 저장소로, 깃 프로젝트를 원격으로 업로드하고 협업할 수 있는 플랫폼입니다.
- git init, git add, git commit 등의 명령어로 로컬에서 버전을 관리하고, git push와 git pull로 원격 저장소와 동기화할 수 있습니다. 브랜치는 독립적인 작업을 위해 사용되며, 병합 시 충돌이 발생할 수 있습니다.
7장 클라우드 컴퓨팅
- 클라우드 컴퓨팅은 언제 어디서든 인터넷을 통해 접속할 수 있는 컴퓨팅 환경을 의미합니다.
- 클라우드 도입 전에는 사용자가 직접 컴퓨팅 자원을 보유하고 관리하는 방식의 온프레미스 시스템을 사용했습니다.
- 클라우드 서비스를 제공하는 방식에는 퍼블릭, 프라이빗, 하이브리드 등이 있으며, 제공 범위에 따라 IaaS, PaaS, SaaS 등으로 나뉩니다.
- 여러 클라우드 서비스 제공자 중 AWS의 경우, EC2, S3, RDS, IAM 등의 다양한 클라우드 서비스를 제공하고 있습니다.
- EC2: 가상 서버 서비스
- S3: 파일을 저장하는 데 사용되는 스토리지 서비스
- RDS: 관계형 데이터베이스를 구축하고 관리할 수 있도록 돕는 서비스
- IAM: AWS 자원에 접근하고 사용할 수 있는 사용자 권한 제어 서비스
- EC2 인스턴스를 구축하고, 웹 애플리케이션을 배포하는 실습을 진행했습니다.
8장 가상화와 컨테이너
- 가상화는 하나의 물리적인 서버를 여러 개의 가상 서버로 분할해 사용하는 기술을 의미합니다. 이는 서버의 활용도를 높여주고, 안정적인 개발 환경을 제공합니다.
- 가상화의 종류에는 개발 환경 가상화, 머신 가상화, 운영체제 수준 가상화 등이 있습니다.
- 컨테이너는 가상화의 기술 중 하나로, 격리된 여러 개의 실행 환경을 제공하는 기술입니다. 가상 머신과 다르게 자체적인 게스트 운영체제가 없고 호스트 운영체제의 자원을 공유 받아 실행한다는 점에서 웹 애플리케이션을 더 빠르게 실행하고, 본 시스템의 물리적인 자원을 더 효율적으로 활용할 수 있다는 장점이 있습니다.
- 컨테이너 플랫폼 중 가장 대표적인 도커는 클라이언트와 서버 구조를 띄고 있으며, 도커 클라이언트와 데몬은 API를 통해 요청을 서로 주고 받을 수 있습니다.
- 컨테이너 오케스트레이션은 서버 클러스터에서 다수의 컨테이너를 관리하는 프로세스로, 컨테이너의 생성, 배포, 관리, 확장을 자동화하는데 사용하는 도구를 컨테이너 오케스트레이션 도구라고 말합니다. 대규모 컨테이너 기반 웹 애플리케이션을 관리하는데 필수적으로 필요하며 컨테이너를 보다 쉽게 관리 및 확장 가능하고, 다수의 컨테이너를 안정적으로 운영할 수 있습니다.
9장 웹 애플리케이션 아키텍처
- 다양한 도구와 기술을 사용해 웹 애플리케이션을 설계하고 구현하는 방법론인 웹 애플리케이션 아키텍처를 소개합니다. 웹 애플리케이션 아키텍처는 설계에 따라 웹 애플리케이션의 유지 보수성과 확장성 등이 결정되기 때문에 매우 중요합니다.
- 웹 애플리케이션의 종류로는 하나의 대규모 응용 프로그램으로 구성된 전통적인 소프트웨어 아키텍처인 모놀리식 아키텍처, 웹 애플리케이션을 여러 개의 작은 서비스 단위로 분해해 각각의 서비스를 독립적으로 개발, 배포, 운영하는 방식인 마이크로서비스 아키텍처, 특정 서비스를 구현하기 위한 서버가 존재하지 않는 아키텍처인 서버리스 아키텍처 등이 있습니다.
- 웹 애플리케이션의 개념과 다양한 종류의 아키텍처의 장점과 단점을 보며 어떤 아키텍처 서비스를 사용하는 것이 좋을지에 대한 생각도 할 수 있는 챕터였습니다.
10장 테스트와 CI/CD
- 테스트와 지속적 통합/지속적 배포를 의미하는 CI/CD에 대한 내용을 확인할 수 있습니다.
- 테스트 코드를 작성해 웹 애플리케이션의 기능, 동작 등을 확인하고 검증한다면 기능적 요구 사항 충족 확인, 협업을 원활하게 진행, 기존에 설계했던 요구 사항 항목을 재정리할 수 있는 이점이 있습니다 테스트의 종류로는 단위의 개체를 테스트하는 단위 테스트, 모듈 간의 상호작용을 테스트하는 통합 테스트, 시스템 테스트가 있습니다.
- CI/CD는 ‘지속적 통합/지속적 배포’라는 의미를 담고 있습니다. CI/CD 파이프라인은 소스 코드를 빌드-테스트-배포하는 과정을 거쳐 개발을 추진하는 프로세스입니다.
- 10장에서는 각 테스트 종류별로 테스트 코드를 직접 적어볼 수 있어 이해가 더욱 잘 되는 챕터였습니다. 또한 다양한 CI/CD 도구들을 알려주어 찾아보며 도구들을 직접 확인해 볼 수 있었습니다.
11장 백엔드 개발 총정리
- 백엔드 개발 과정은 프로젝트 생성과 업로드, 도커 파일 작성 및 서버 세팅, CI/CD 파이프라인 구축과 배포로 나눌 수 있습니다.
- 프로젝트를 생성하고 디렉토리 구조를 설정합니다. 주요 디렉토리는 설정 관련 클래스(config), 도메인 모델 클래스(domain), 클라이언트 요청 처리 및 응답 반환(controller), 비즈니스 로직 구현(service), 데이터베이스 접근(dao)입니다. 데이터베이스 정보는 application.yml에 저장하고 API를 구현하여 깃허브에 업로드합니다.
- 다음으로 도커 파일을 작성하여 도커 이미지를 생성하고, AWS Elastic Beanstalk를 이용해 서버를 설정합니다. AWS IAM 대시보드에서 액세스 키와 비밀 액세스 키를 발급받습니다.
- CI/CD 파이프라인을 구축하려면 깃허브 저장소에 AWS 액세스 키를 등록하고, 깃허브 액션을 설정하여 자동으로 빌드, 테스트, 배포를 진행합니다. 이 과정에는 Dockerrun.aws.json 파일을 작성하여 도커 컨테이너를 배포하고, 배포가 성공적으로 이루어졌는지 확인하는 단계가 포함됩니다.
12장 백엔드 커리어 설계하기
- 백엔드 개발자는 API 개발, 데이터베이스 관리, 서버 설정 등 다양한 업무를 수행하며, 하드 스킬과 소프트 스킬이 요구됩니다.
- 아키텍트는 시스템 아키텍처를 설계하고 기술 결정을 내리는 역할을 담당합니다.
- DBA는 데이터베이스의 설계와 유지보수를 담당합니다.
- 데브옵스 엔지니어는 코드 배포와 개발 인프라 자동화, CI/CD 유지보수를 담당합니다.
- 프로젝트 매니저는 개발 전략 수립, 요구 사항 조정, 개발 및 성과 측정을 관리합니다.
- 풀스택 개발자는 프론트엔드와 백엔드 개발을 모두 수행합니다.
- CTO는 기술 전략을 수립하고 전체 개발을 총괄합니다.
✏️ 개별 소감 및 후기
김승언
이 스터디에 참여하면서 백엔드 개발에 대한 전체적인 지식을 다시 정리할 수 있어서 너무 유익했습니다! 이 책은 기초부터 차근차근 설명해줘서 백엔드 개발을 처음 접하는 사람들도 쉽게 이해할 수 있을 것 같았어요:)
특히 인상 깊었던 부분은 클라우드 컴퓨팅과 컨테이너 관련 내용이었는데요! 평소에 클라우드와 관련된 개념을 헷갈려 했었는데, 책에서 실습 예시를 통해 더 쉽게 공부해 볼 수 있었습니다! 덕분에 기초 지식에 대한 자신감이 붙었고 프로젝트에서 클라우드 기반 서비스를 다룰 때 더 잘 대응할 수 있을 것 같아요ㅎㅎ
스터디원들도 소통이 너무 좋아서 즐거웠구요..! 비슷한 관심사를 가진 팀원들과 백엔드 관련 지식을 공유하고, 서로의 경험을 나누면서 새로운 인사이트를 많이 얻은 것 같아요! 단순히 책을 읽는 것에서 그치지 않고, 다른 사람들과 같이 배우는 점이 많았던 소중한 시간이었습니다! 앞으로도 백엔드 개발자로서 더 성장할 수 있는 발판이 될 것 같아요!
김여진
프로젝트에서 백엔드로 개발을 해본 경험은 있지만 차근차근 공부해 보지 않아서 이번 기회에 백엔드의 전반적인 부분을 정리하고자 이 도서를 신청하게 되었습니다.
CS 기초 지식부터, 프레임워크, DBMS, API 등등 백엔드 개발에 필요한 부분들을 넓고 얕게 배울 수 있는 책이었습니다. 특히 프로젝트에서 냅다 만들어냈던 API 부분을 체계적으로 정리할 수 있었습니다. 또한 소프트웨어공학을 공부하면서 설계 패턴과 아키텍처들에 흥미가 생겼는데 이 책에서 웹 애플리케이션 아키텍처까지고 다루고 있어서 좋았습니다.
“백엔드 개발을 처음 시작하려 한다! 백엔드 개발에 관련된 지식을 한번 정리하고 싶다!” 하는 사람들에게 적극 추천하는 책입니다!
데보션영 활동을 하면서 다른 조 사람들을 많이 만날 수 없는 게 아쉬웠는데 도서 스터디를 통해 더 많은 영들을 만날 기회를 가질 수 있어서 좋았습니다.
송하연
백엔드 개발 공부를 하며 기초부터 정리를 하고싶어서 이 책을 선정했는데, 책에서 백엔드 개발에 필요한 다양한 지식을 폭넓게 다룰 수 있어 매우 유익하였습니다. 백엔드 개발의 핵심 개념에 대해 정리하면서 백엔드에 대한 이해를 한층 깊게 할 수 있었던 계기가 된거 같습니다.
이 책은 백엔드 개발의 기초부터 차근차근 설명하고있어 백엔드 개발을 잘 모르는 사람도 이해하기 쉽고, 백엔드 개발 진로에 고민 중인 분들에게도 좋은 책이라고 생각합니다!
이번 스터디를 통해 비슷한 관심사를 가진 다른 조 영분들 만나 서로의 경험을 공유하며 많은 인사이트를 얻을 수 있어 좋았습니다~~
홍효정
백엔드에 대한 이론적인 공부를 할 수 있는 계기라고 생각하여 ‘아는 만큼 보이는 백엔드 개발’ 도서 스터디에 참여하게 되었습니다.
백엔드 개발을 하면서 필요한 다양한 이론 지식(API, DBMS, 테스트) 등의 개념과 바탕을 살펴보면서 직접 코드를 작성해 보기도 하고 구현해 보면서 확실하게 이해하고 머릿속에 담아갈 수 있었습니다!
백엔드 개발을 하기 전 이론 지식을 먼저 알고 싶으시거나 저처럼 백엔드 개발을 하면서도 모르는 부분, 이해가 안 가는 부분들이 있었다 싶은 사람들에게 정말 좋은 책이라고 생각합니다!
스터디를 통해 처음으로 다른 조의 분들과 소통하고 공부하면서 다양한 이야기도 나누는 좋은 시간이었습니다!
황지수
백엔드 개발자를 꿈꾸며 여러 프로젝트에 참여했었지만 CS에 대해 제대로 이해하고 있는지에 대해서 생각해 본 적은 없었습니다. 그래서 "아는 만큼 보이는 백엔드 개발" 도서 스터디를 통해 개발에 대한 전반적인 내용을 정리하고, 알고 있는 내용을 복습하는 시간을 가져보고자 했습니다. 책이 간결하지만 핵심 내용으로만 구성되어있어 빠르고 쉽게 CS 지식을 복습 해볼 수 있다는 점이 가장 좋았던 것 같습니다. 특히, 제가 맡았던 클라우드 컴퓨팅 및 가상화와 컨테이너 개념은 내용을 혼자 이해하기 굉장히 어려운데 이 책은 여러 실습을 통해 개념에 조금 더 쉽게 접근할 수 있게 구성되어 있어 클라우드를 공부하는데 도움이 많이 된 것 같습니다. 책이 두껍지 않아서 프로젝트를 병행하며 빠르게 도서 스터디를 끝낼 수 있었던 것 또한 좋았습니다. 4회차라는 길지 않은 시간이었지만 함께 스터디에 열심히 참여한 스터디원들에게 동기부여해줘서 고맙다고 말해주고 싶어요! 같은 백엔드 파트 친구들과 만나서 여러가지 백엔드 관련 이야기를 할 수 있어서 좋았습니다~!