[3기 SERVER 스터디] 2주차(A) - Spring Boot3 입문
1장 ~ 3장
GDG on Campus, SWU 지부의 Server 부서 스터디 시간에 진행한 내용입니다. OT 이후로 두번째 시간으로 교재는 신선영 작가님의 <스프링 부트 3 백엔드 개발자 되기: 자바 편>을 활용했습니다.
01장. 자바 백엔드 개발자가 알아두면 좋은 지식
서버와 클라이언트
첫 번째로, 인터넷 서비스는 보통 서버와 클라이언트가 관계를 맺기 때문에 이 둘의 관계를 잘 이해해야 한다.
- 클라이언트는 ****서버로 요청하는 프로그램을 모두 일컬어 말한다.
- ex) 웹 브라우저
- 서버는 클라이언트의 요청을 받아 처리하는 주체이다.
데이터베이스
데이터베이스는 여러 사람이 데이터를 한 군데에 모아놓고 여러 사람이 사용할 목적으로 관리하는 데이터 저장소이다. 흔히 데이터베이스를 말할 때 MySQL, 오라클, 포스트그레SQL 등을 이야기하는데 엄밀히 말하면 이것들은 데이터베이스 관리 시스템이다.
- RDB는 Relational Database의 약자로 관계형 데이터베이스라는 뜻이다.
- 가장 많이 사용하는 데이터베이스
- 데이터를 행과 열로 이루어진 테이블로 관리하며, 기본키를 사용해 각 행을 식별
- SQL은 Structured Query Language의 약자로 말그대로 쿼리, 즉, 데이터 검색을 하는 언어이다.
- NoSQL은 SQL을 안 쓴다는 의미로 사용되지만 최근에는 Not Only SQL의 의미로 많이 사용한다.
- RDB는 데이터 저장, 질의, 수정, 삭제가 용이하지만 성능을 올리는 게 쉽지 않음. 데이터베이스의 성능을 높이려면 머신의 성능을 좋게 하는 스케일 업 또는 머신을 여러 대로 분리하는 스케일 아웃이라는 것이 필요.
- 스케일 아웃은 데이터베이스 분산이 필요하지만 이때 트랜잭션을 사용하면 성능이 떨어지게 됨. 이러한 문제들을 해결하기 위해 NoSQL이 등장
아이피와 포트
- 아이피는 인터넷에서 컴퓨터 또는 기기들이 서로를 식별하고 통신하기 위한 주소이다. 그래서 아이피를 알면 서버를 찾을 수 있다.
- 포트는 그 서버에서 운용되고 있는 서비스를 구분하기 위한 번호이다.
- ex) 아이피가 백화점이라면 포트는 각자 다른 물건을 살 수 있는 매장
라이브러리와 프레임워크
백엔드 개발에 필요한 모든 코드를 온전히 혼자서 개발하려면 엄청난 시간이 들게 되는데 이때 이미 다른 사람(단체)이 만든 라이브러리와 프레임워크를 가져와 사용하게 되면 개발 효율이 높아진다.
- 라이브러리는 애플리케이션 개발에 필요한 기능인 클래스, 함수 등을 모아놓은 코드의 모음이다.
- 프레임워크는 소프트웨어 개발을 수월하게 하기 위한 소프트웨어 개발 환경이다.
- 일하기 위한 틀을 제공
- 정해진 틀에서 개발해야 한다는 단점이 있지만 개발 효율은 굉장히 높음
백엔드 개발자의 업무
앞서 웹 프로그래밍에 대한 기초 내용을 공부해봤는데 그렇다면 백엔드 개발자는 어떤 일을 할까? 백엔드 개발자의 주된 업무는 서버 측 애플리케이션을 개발하는 일이다. 대개는 아래의 순서대로 업무를 진행한다.
자바 애너테이션
- 자바 애너테이션은 자바로 작성한 코드에 추가하는 표식을 말한다.
- @기호를 사용
@Override 선언된 메서드가 오버라이드 되었음, 메서드를 재정의 @Deprecated 더 이상 사용되지 않음 @SuppressWarnings 컴파일 경고를 무시함
1장은 여기까지였습니다. 스프링 부트를 공부하기 전에 필요한 개념을 익힐 수 있었던 시간이었습니다. 이 개념들을 바탕으로 앞으로 스프링 부트에 대한 실습을 진행할 예정입니다.
02장
스프링 | 스프링부트 | |
목적 | 엔터프라이즈 애플리케이션 개발을 더 쉽게 만들기 | 스프링의 개발을 더 빠르고 쉽게 하기 |
설정 파일 | 수동 설정 | 자동 구성 |
XML | 일부 파일은 XML로 직접 생성하고 관리 | 사용하지 않음 |
인메모리 데이터베이스 지원 | 지원안함 | 자동 설정 지원 |
서버 | 프로젝트를 띄우는 서버를 별도로 수동 설정 | 내장형 서버를 제공해 별도의 설정 필요 없음 |
- 스프링: 제어의 역전(IoC) + 의존성 주입(DI)
- 제어의 역전: 객체 관리
- 의존성 주입: 어떤 클래스가 다른 클래스에 의존
public class A{ @Autowired B b; }
@Component //클래스 MyBean 빈으로 등록
public class MyBean{
}
- 관점 지향 프로그래밍(AOP)
- 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심기준으로 모듈화함
- 이식 가능한 서비스 추상화(PSA)
- 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스
03장
스프링 부트 3의 구조
스프링 부트 3는 각 계층이 서로 통신하는 구조로 이루어져 있다.
여기서 계층이란 각자의 역할과 책임이 있는 소프트웨어의 구성 요소를 말한다.
각 계층은 서로 소통할 수 있지만, 다른 계층에 직접적인 간섭이나 영향을 주지 않는다.
스프링 부트의 주요 계층
그렇다면 스프링 부트의 주요 계층에는 무엇이 있을까?
1. 프레젠테이션 계층
- HTTP 요청을 받아 비즈니스 계층으로 전송한다.
- 컨트롤러
2. 비즈니스 계층
- 모든 비즈니스 로직을 처리한다.
- 서비스
3. 퍼시스턴스 계층
- 데이터베이스 관련 로직을 처리한다.
- 리포지리
여기서 주의할 점은 계층은 개념적인 영역이며, 컨트롤러/서비스/리포지토리는 실제 구현을 위한 영역이라는 것이다.
스프링 부트 프로젝트 구조
스프링 부트 프로젝트는 일반적으로 다음과 같은 구조를 가진다.
- main 폴더: 실제 코드와 프로젝트 실행에 필요한 리소스 파일이 위치한다.
- test 폴더: 프로젝트의 소스 코드를 테스트하기 위한 코드와 리소스 파일이 위치한다.
- build.gradle: 빌드 설정 파일로, 의존성이나 플러그인 설정 등을 포함한다.
- settings.gradle: 빌드할 프로젝트의 정보를 설정하는 파일이다.
main 디렉터리 구조
- static: JavaScript, CSS, 이미지와 같은 정적 파일을 저장한다.
- templates: HTML과 같은 뷰 관련 파일을 저장한다.
- application.yml: 스프링 부트 서버가 실행될 때 자동으로 로딩되는 설정 파일이다. 데이터베이스 설정, 로깅 설정 등을 포함한다.
스프링 부트 요청-응답 과정
- 클라이언트(예: Postman)에서 톰캣 서버로 HTTP 요청을 보낸다.
- 요청이 스프링 부트 내부로 전달되면, 디스패처 서블릿이 URL을 분석하고 적절한 컨트롤러를 찾아 요청을 전달한다.
- 컨트롤러는 요청을 처리할 수 있는 메서드를 찾고, 필요한 경우 비즈니스 계층과 퍼시스턴스 계층을 통해 데이터를 가져온다.
- 뷰 리졸버가 템플릿 엔진을 사용해 HTML 문서를 생성하거나, JSON, XML 등의 데이터를 생성한다.
생성된 응답이 클라이언트로 전송되어 결과를 확인할 수 있다.