SERVER

[3기 SERVER 스터디] 2주차(A) - Spring Boot3 입문

yuna9 2024. 10. 8. 14:34

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: 스프링 부트 서버가 실행될 때 자동으로 로딩되는 설정 파일이다. 데이터베이스 설정, 로깅 설정 등을 포함한다.

스프링 부트 요청-응답 과정

  1. 클라이언트(예: Postman)에서 톰캣 서버로 HTTP 요청을 보낸다.
  2. 요청이 스프링 부트 내부로 전달되면, 디스패처 서블릿이 URL을 분석하고 적절한 컨트롤러를 찾아 요청을 전달한다.
  3. 컨트롤러는 요청을 처리할 수 있는 메서드를 찾고, 필요한 경우 비즈니스 계층과 퍼시스턴스 계층을 통해 데이터를 가져온다.
  4. 뷰 리졸버가 템플릿 엔진을 사용해 HTML 문서를 생성하거나, JSON, XML 등의 데이터를 생성한다.

생성된 응답이 클라이언트로 전송되어 결과를 확인할 수 있다.