프로그래밍 언어를 좀더 편리하게 작성하도록 도와주는 프렘임워크
IOC (객체 관리) 와 DI(객체 주입) 와 AOP(공통 기능 분리)
핵심적인 비즈니스 로직으로부터 횡단 관심사를 분리하여 관리하는 방식

주요 개념:
Advice (공통 기능)
Join Point (실행 지점)
Pointcut (적용 범위)
Aspect (Advice + Pointcut 조합)
스프링 빈: 스프링 컨테이너에서 관리하는 객체.
설정 방법:
어노테이션 기반(@Component, @Service, @Repository)
Java 기반(@Configuration, @Bean)
XML 기반(beans.xml에서 설정)
트랜잭션: 하나의 작업 단위를 묶어서 실행하는 개념 (Commit 또는 Rollback).
스프링에서 트랜잭션 관리 방법:
선언적 트랜잭션 (@Transactional) → 주로 사용됨
프로그래밍 방식 트랜잭션 (PlatformTransactionManager 사용)
Spring Framework: 설정이 복잡하고, 수동 설정이 많음.
Spring Boot:
자동 설정(@SpringBootApplication)
내장 웹 서버 (Tomcat 포함)
간편한 의존성 관리 (Starter 패키지 지원)

✅ 클라이언트-서버 분리: 프론트엔드와 백엔드가 독립적으로 개발 가능
✅ 확장성: 다양한 플랫폼(웹, 모바일 등)에서 사용 가능
✅ 유지보수 용이: REST 원칙을 따르면 API 설계가 깔끔해짐
📌 한 줄 요약: RESTful API는 자원 중심의 URL 설계와 HTTP 메서드를 활용하는 API
@Repository
데이터 액세스 계층, dao 에 붙히는 어노테이션
@Bean
메서드에서 반환하는 객체를 Spring Bean으로 등록
@RestController = @Controller + @ResponseBody
응답을 모두 json 형식으로 한다.
@ResponseBody
문자열은 그대로 ,컨트롤러 메서드의 반환 값을 JSON 또는 XML 형식변경해서 응답
@RequestParam
파람에 있는 내용을 뽑기
@Transactional
단일 메소드로 묶음
@GeneratedValue 는 시퀀스가 자동으로 만들어지고 사용되게 해준다.
@Configuration //설정 클래스라고 알려준다.
관련 어노테이션
@ResponseBody RestController 에서는 @ResponseBody가 기본으로 json으로 응답한다.
Restful API 의 요청
앱에서도 밑의 방식처럼 요청을 보내서 데이터를 받아온다.
json 응답을 받아서 앱 UI에 출력
GET 방식에는 파람 쿼리를 타고 갈 수도 있음
GET /posts (?pageNum=)
post 추가
POST /posts
1번 post
GET /posts/1
------밑의 방식 javascript 로 페이지 요청을 할 때 사용 가능-------------------
1번 delete
DELETE /posts/1
1번 post 전체필드 수정
PUT /posts/1
1번 post 일부 수정
PATCH /posts/1