스프링부트 시작하기
스프링 부트를 공부하면서 프로젝트 개발 했더니 개념이 완벽하지 않아 처음부터 개념 정리를 하기로 했다.
참고한 책은 [스프링 부트 3 백엔드 개발자 되기 - 신선영] 이다.
백엔드 개발자가 알아 두면 좋은 지식들
클라이언트란?
- 클라이언트는 서버로 요청하는 프로그램을 모두 일컬어 말한다. 웹 브라우저가 바로 대표적인 클라이언트 중 하나이다.
서버란?
- 서버는 클라이언트의 요청을 받아 처리하는 주체이다.
백엔드 개발자의 업무
- 과제 할당 -> 과제 분석 -> 개발 -> 테스트 -> QA -> 배포 -> 유지보수
CI/CD란?
- CI는 지속적인 통합이라는 뜻으로, 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트되어 저장소에 통합되는 것.
- CD는 지속적인 배포를 말한다.
- CI는 저장소에 코드가 반영되는 것을 말하고, CD는 실제 프로덕션 환경까지 변경된 코드가 반영되는 것을 의미한다.
백엔드 프로그래밍 언어
- 자바/코틀린 - 스프링/스프링부트
- 파이썬 - 플라스크/장고
- 자바스크립트/타입스크립트 - 익스프레스/NextJS
- go, 러스트, C++, C#
스프링 부트 시작하기
- 엔터프라이즈 애플리케이션: 대규모 복잡한 데이터를 관리하는 애플리케이션
- WAS: 웹 어플리케이션을 실행하기 위한 장치, 스프링 부트에서는 내장 WAS 톰캣, 제티, 언더토우가 있음
- 제어의 역전(IoC): 다른 객체를 직접 생성하거나 제어하는 것이 아니라 외부에서 관리하는 객체를 가져와 사용하는 것
public class A {
private B b;
}
- 의존성 주입(Dependency Injection): 어떤 클래스가 다른 클래스에 의존한다는 뜻
- @Autowired: 스프링 컨테이너에 있는 빈이라는 것을 주입하는 역할. 빈은 스프링 컨테이너에서 관리하는 객체를 말한다.
빈과 스프링 컨테이너
스프링 컨테이너란?
- 스프링 컨테이너는 빈을 생성하고 관리한다. 또한 개발자가 @Autowired 같은 에너테이션을 사용해 빈을 주입받을 수 있게 DI를 지원하기도 한다.
빈이란?
- 빈은 스프링 컨테이너가 생성하고 관리하는 객체이다. 앞에서 본 코드에서 B가 바로 빈이다.
클래스에 @Component 애너테이션을 붙이면 클래스가 빈으로 등록 되고, 스프링 컨테이너에서 이 클래스를 관리한다. 이때 빈의 이름은 클래스 이름의 첫 글자를 소문자로 바꿔 관리합니다. 따라서 MyBean 클래스의 빈 이름은 myBean이다.
@Component
public class MyBean{
}
관점 지향 프로그래밍
- AOP(Aspect Oriented Programming) - 프로그래밍에 대한 관심을 핵심 관점, 부가 관점으로 나누어서 관심 기준으로 모듈화하는 것을 의미한다.
이식 가능한 서비스 추상화
- PSA(Portable Service Abstraction) - 스프링에서 제공하는 다양한 기술들을 추상화해 개발자가 쉽게 사용하는 인터페이스를 말한다. 대표적인 예로 클라이언트의 매핑과 클래스, 매서드의 매핑을 위한 에너테이션이 있다. 스프링에서 데이터베이스에 접근하기 위한 기술로는 JPA, MyBatis, JDBC 같은 것들이 있다.
정리
- 스프링 프레임워크는 IoC/DI를 통해 객체 간의 의존 관계를 설정하고, AOP를 통해 핵심 관점과 부가 로직을 분리해 개발하며, PSA를 통해 추상화된 다양한 서비스들을 일관된 방식으로 사용하도록 한다.
스프링 부트 스타터
- spring-boot-starter-web: Spring MVC를 사용해서 RESTful 웹 서비스를 개발할 때 필요한 의존성 모음
- spring-boot-starter-test: 스프링 애플리케이션을 테스트하기 위해 필요한 의존성 모음
- spring-boot-starter-validation: 유효성 검사를 위해 필요한 의존성 모음
- spring-boot-starter-actuator: 모니터링을 위해 애플리케이션에서 제공하는 다양한 정보를 제공하기 쉽게하는 의존성 모음
- spring-boot-starter-data-jpa: ORM을 사용하기 위한 인터페이스의 모음인 JPA를 더 쉽게 사용하기 위한 의존성 모음
스프링 MVC란?
- MVC 패턴은 애플리케이션을 개발할 때 사용하는 디자인 패턴이다.
- 애플리케이션의 개발 영역을 MVC(Model, View, Controller)로 구분하여 각 역할에 맞게 코드를 작성하는 개발 방식이다.
스프링 부트 3 코드 이해하기
@SpringBootApplication
- 이 클래스는 자바의 main() 메서드와 같은 역할을 한다. 즉, 여기서 스프링 부트가 시작된다.
@SpringBootConfiguration
- 스프링 부트 관련 설정을 나타내는 애너테이션.
@ComponentScan
- 사용자가 등록한 빈을 읽고 등록하는 애너테이션이다. @Component라는 애너테이션을 가진 클래스들을 찾아 빈으로 등록하는 역할을 한다.
애너테이션명 | 설명 |
---|---|
@Configuration | 설정 파일 등록 |
@Repository | ORM 매핑 |
@Controller, @RestController | 라우터 |
@Service | 비즈니스 로직 |
@EnableAutoConfiguration
- 스프링 부트에서 자동 구성을 활성화하는 애너테이션이다.
핵심 요약
- 스프링은 엔테프라이즈 애플리케이션을 쉽게 개발할 수 있도록 도와주는 프레임 워크입니다.
- IoC는 제어의 역전, DI는 의존성 주입을 뜻합니다.
- 스프링 부트는 스프링을 더 빠르고 쉽게 사용하기 위한 도구로서 스타터와 자동 구성을 제공합니다.
- 애너테이션은 자바 소스 코드에 추가하는 표식입니다.
- @SpringBootApplication은 스프링 부트 관련된 설정을 하는 애너테이션으로 이루어져 있습니다.
- @Component 애너테이션이 있는 클래스는 빈으로 등록된다.
'스프링부트' 카테고리의 다른 글
[스프링 부트(Spring Boot)] 블로그 만들기(1)(글 생성, POST) (4) | 2024.09.19 |
---|---|
[스프링 부트(Spring Boot)] 데이터 베이스 조작(ORM, JPA, Hibernate, Spring data JPA) (0) | 2024.09.19 |
[스프링 부트(Spring Boot)] 테스트 코드(given-when-then 패턴) (0) | 2024.09.04 |
[스프링 부트(Spring Boot)] 구조 이해하기(controller, service, repository) (1) | 2024.09.04 |