Java Spring
은 웹 애플리케이션을 개발하기 위한 프레임워크로서, 여러 가지 기능과 모듈을 제공하여 개발자들이 더 효율적으로 애플리케이션을 개발할 수 있게 도와줍니다. Spring은 주로 엔터프라이즈급 애플리케이션 개발을 위해 사용되며, IoC (Inversion of Control), AOP (Aspect-Oriented Programming), 데이터 액세스, 웹 개발 등 다양한 영역에서 지원을 제공합니다. Spring은 설정을 통해 여러 컴포넌트를 관리하고 연결할 수 있는 구조를 제공하여 개발자가 높은 유연성과 확장성을 가진 애플리케이션을 개발할 수 있도록 도와줍니다.
DI (Dependency Injection):
DI는 "의존성 주입"이라고 하며, 객체지향 프로그래밍에서 중요한 원칙 중 하나입니다. 객체들 간의 의존성을 줄이기 위해 사용됩니다. 일반적으로 클래스 A가 클래스 B에 의존할 때, 클래스 A가 직접 클래스 B를 생성하는 것이 아니라 외부에서 클래스 B의 인스턴스를 생성하여 클래스 A에 주입해줌으로써 의존성을 해결합니다. 이렇게 하면 클래스 A와 B는 서로 독립적으로 변경될 수 있으며, 코드의 재사용성과 유지보수성이 높아집니다.
IoC (Inversion of Control):
IoC는 "제어의 역전"이라고 하며, 소프트웨어 설계 패턴 중 하나입니다. 기존의 프로그램은 개발자가 흐름을 제어하고 모든 객체를 생성하고 관리하는 것이 일반적이지만, IoC는 그 반대로 개발자가 흐름의 제어를 포기하고 프레임워크 또는 컨테이너에게 제어 권한을 넘기는 개념입니다. 이러한 제어 권한 넘김으로써, 개발자는 의존성을 관리하는데 집중하며, 프레임워크가 객체의 생성과 라이프사이클 관리를 대신 수행하게 됩니다.
IoC 컨테이너 (IoC Container):
IoC 컨테이너는 IoC를 구현한 것으로, Spring 프레임워크에서 주로 사용됩니다. 이 컨테이너는 애플리케이션의 컴포넌트들과 그들 사이의 의존성을 관리합니다. 컨테이너는 객체의 생성과 소멸을 담당하며, 객체들 간의 의존성을 자동으로 해결해줍니다. 개발자는 컨테이너에 필요한 설정 정보를 제공하고, 컨테이너는 이 정보를 바탕으로 애플리케이션의 구성 요소들을 자동으로 조립하고 관리합니다. 이를 통해 개발자는 애플리케이션의 비즈니스 로직에 집중할 수 있게 되며, 전체적인 애플리케이션의 유연성과 확장성이 증가하게 됩니다.
Spring Boot
는 Spring 기반의 애플리케이션을 더 쉽고 빠르게 개발하기 위한 도구입니다. Spring Boot는 애플리케이션을 위한 초기 설정과 부트스트래핑을 자동으로 처리하여 개발자가 복잡한 설정을 걱정하지 않고도 빠르게 개발할 수 있게 도와줍니다. 또한 내장된 서버(주로 Tomcat이나 Undertow)를 사용하여 애플리케이션을 실행하고, 간단한 명령어로 애플리케이션을 빌드하고 실행할 수 있도록 지원합니다.
@SpringBootApplication:
이 어노테이션은 Spring Boot 애플리케이션의 주 진입점을 정의하는 클래스에 붙입니다. 이 클래스는 애플리케이션을 실행할 때 Spring Boot의 설정을 로드하고 컴포넌트 스캔을 수행하며, 내장된 웹 서버를 구동합니다.
@RestController:
이 어노테이션은 Spring MVC 컨트롤러 클래스에 적용되며, RESTful 웹 서비스를 위한 컨트롤러임을 나타냅니다. 이 어노테이션을 사용하면 해당 컨트롤러의 메서드들은 HTTP 요청과 응답을 처리하고 JSON 형식의 데이터를 반환할 수 있습니다.
@RequestMapping:
이 어노테이션은 컨트롤러의 메서드에 URL 패턴을 매핑하여 특정 URL에 대한 요청을 처리하도록 지정합니다. 예를 들어, @RequestMapping("/api/users")
는 "/api/users" URL에 대한 요청을 처리하는 메서드에 붙일 수 있습니다.
@Autowired:
이 어노테이션은 의존성 주입을 위해 사용됩니다. Spring Boot는 이 어노테이션을 사용하여 필요한 의존성을 자동으로 주입하고 객체 간의 연결을 관리합니다.
@GetMapping, @PostMapping, @PutMapping, @DeleteMapping:
이들 어노테이션은 각각 GET, POST, PUT, DELETE HTTP 메서드에 대한 매핑을 지정합니다. 예를 들어, @GetMapping("/users/{id}")
는 GET 메서드로 "/users/{id}" URL에 대한 요청을 처리하는 메서드에 사용될 수 있습니다.
@Configuration:
이 어노테이션은 Spring의 설정 클래스임을 나타내며, 이 클래스 안에 Bean 등록과 같은 설정 정보를 정의할 수 있습니다.
@Bean:
이 어노테이션은 Spring Bean을 정의하는 메서드에 붙입니다. Spring 컨테이너가 해당 메서드의 반환 값을 Bean으로 관리하게 됩니다.
@Value:
이 어노테이션은 프로퍼티 값을 주입하는데 사용됩니다. Spring Boot의 application.properties
나 application.yml
파일에서 정의한 설정 값을 가져와서 필드에 주입할 수 있습니다.
@SpringBootTest:
이 어노테이션은 Spring Boot 애플리케이션의 통합 테스트를 위해 사용됩니다. 테스트 클래스에 이 어노테이션을 붙이면 Spring Boot 컨텍스트가 로드되고 테스트 환경이 구성됩니다.
Spring Boot Starter 종속성:
Spring Boot Starter는 특정 기능이나 라이브러리를 사용하기 위한 종속성을 제공합니다. 예를 들어, spring-boot-starter-web
은 웹 애플리케이션 개발을 위한 필요한 종속성을 자동으로 추가해주는 스타터입니다.