네, 알겠습니다. 제안해 드린 내용을 기존 글에 통합하여 하나의 완성된 버전으로 만들어 드리겠습니다.
스프링 프레임워크: 자바 애플리케이션 개발을 위한 포괄적인 프로그래밍 및 구성 모델. 스프링의 핵심 원칙과 스프링 부트의 주요 특징을 정리.
스프링의 근간: IoC (제어의 역전), DI (의존성 주입), AOP (관점 지향 프로그래밍).
IoC 컨테이너: 스프링이 객체를 직접 생성하고 관리하는 공간.
개발자는 프레임워크 규칙에 맞게 설계, 제어권은 프레임워크에 위임.
효과: 객체 간 결합도(Coupling) 저하, 코드 재사용성 및 유지보수성 향상.
대표 DI 어노테이션: @Autowired
핵심 비즈니스 로직과 부가 기능(공통 관심사)을 분리하여 개발하는 방식.
공통 관심사 예시: 로깅, 트랜잭션, 보안.
효과: 코드 중복 감소, 핵심 로직의 가독성 및 집중도 향상.
IoC 컨테이너가 객체를 찾아서 등록(Bean 등록)하기 위해 사용하는 핵심적인 어노테이션들. 각 어노테이션은 클래스의 역할을 명시.
* @Component: 가장 기본이 되는 컴포넌트 스캔 어노테이션. 역할이 애매한 경우 사용.
@Controller / @RestController
역할: 사용자의 요청을 처리하는 웹(Presentation) 계층을 명시.
* @RestController는 @ResponseBody가 포함되어 JSON/XML 형태의 데이터 반환에 특화.
@Service
역할: 핵심 비즈니스 로직을 처리하는 서비스(Service) 계층을 명시.
@Repository
역할: 데이터베이스에 접근하는 데이터 접근(Persistence) 계층을 명시.
* Spring이 제공하는 예외 변환 기능을 자동 적용.
Auto-configuration: 의존성 기반으로 설정을 자동 구성.
Embedded Server: Tomcat 등 웹 서버 내장, 별도 설치 불필요.
Standalone: 실행 가능한 JAR 파일 하나로 간편하게 패키징 및 배포.
Opinionated: spring-boot-starter로 버전 충돌 없이 의존성을 자동 관리.
소프트웨어를 Model, View, Controller 세 역할로 분리하는 아키텍처.

Model: 데이터와 비즈니스 로직 담당. DB와 상호작용.
View: 사용자 UI 화면 담당.
* Controller: 사용자 요청 처리, Model과 View 연결.
최초 한 번만 객체를 생성하고, 이후 모든 곳에서 해당 객체를 공유하여 사용.
* 스프링 컨테이너는 내부 객체(Bean)를 기본적으로 싱글톤으로 관리. 메모리 효율성 증대.
Spring Boot는 REST API 개발에 최적화. REST는 웹에서 자원을 주고받는 규칙.
* 무상태성 (Stateless): 서버가 클라이언트의 상태를 저장하지 않음. 각 요청을 독립적으로 처리하여 확장성 확보.
| 어노테이션 | 주요 용도 |
|---|---|
| @GetMapping | 데이터 조회 (Read) |
| @PostMapping | 데이터 생성 (Create) |
| @PutMapping / @PatchMapping | 데이터 수정 (Update) |
| @DeleteMapping | 데이터 삭제 (Delete) |
애플리케이션의 여러 컨트롤러에서 발생하는 예외를 한 곳에서 효율적으로 처리하는 방법.
* 필요성: 중복된 예외 처리 코드를 줄이고, 일관된 형식의 에러 응답을 클라이언트에게 전달하기 위함.
@RestControllerAdvice 또는 @ControllerAdvice
역할: 모든 컨트롤러에 걸쳐 전역적으로 적용되는 예외 처리 클래스를 정의.
@ExceptionHandler(Exception.class)
역할: @RestControllerAdvice 클래스 내에서 특정 예외가 발생했을 때 실행될 메소드를 지정.
* Exception.class 부분에 처리하고자 하는 특정 예외 클래스(e.g., IllegalArgumentException.class)를 명시.
Spring Web: 웹 개발 핵심. MVC, RESTful API 기능 제공.
Lombok: @Getter, @Builder 등 반복적인 코드 자동 생성.
Spring Security: 인증(Authentication)과 인가(Authorization) 담당.
JPA / MyBatis: 데이터베이스 연동 기술.
* JUnit: 단위 테스트 프레임워크.