Spring
- Java 기반의 웹 어플리케이션을 만들 수 있는 백엔드 프레임워크
- Java로 다양한 어플리케이션을 만들기 위한 프로그래밍 툴
Spring 구조

Spring 프레임워크 특징
- IoC (Inversion of Control, 제어 반전)
- DI (Dpendency Injection, 의존성 주입)
- AOP (Aspect Object Programming, 관점 지향 프로그래밍)
- POJO (Pain Old Java Object 방식)
IoC
- Inversion of Control, 제어 반전
- 객체의 생성부터 소멸까지 개발자가 직접 하는 것이 아닌 spring container가 대신해주는 것
- 의존성을 역전시켜 제어권을 직접 갖지 않는 것
- 제어권이 개발자가 아닌 IoC에 있음
- IoC가 개발자의 코드를 호출해 필요한 객체를 생성, 소멸해 생명 주기를 관리
class Sample {
private Apple apple = new Apple();
}
class Sample {
private Apple apple;
public Sample(Apple apple) {
this.apple = apple;
}
}
class SampleTest {
Apple apple = new Apple();
Sample sample = new Sample(apple);
}
- Apple 객체의 제어권이 Sample에 있는 것이 아니라 SampleTest에 있음
DI
- Dependency Injection, 의존성 주입
- 구성 요소의 의존 관계가 소스코드 내부가 아닌 외부의 설정 파일을 통해 정의되는 것
- DI를 통해서 IoC를 이룸
- 코드 간의 재사용률 ↑ 모듈 간의 결합도 ↓
- 느슨한 결합
- 결합 : 무엇인가를 변경하는 데에 얼마나 많은 작업이 관련되어 있는지에 대한 측정
- 필드 주입을 가장 많이 사용
@Autowired
private FieldService fieldService;
private SetterService setterService;
@Autowired
public void setSetterService(SetterService setterService) {
this.setterService = setterService;
}
private final ConstructorService constructorService;
@Autowired
public ExampleComponent(ConstructorService constructorService) {
this.constructorService = constructorService;
}
AOP
- Aspect Object Programming, 관점 지향 프로그래밍
- 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 보고, 그 관점을 기준으로 각각 모듈화
- 비즈니스 로직과 공통 모듈로 구분한 후, 개발자의 코드 밖에서 필요한 시점에 비즈니스 로직을 삽입하여 실행
- 비즈니스 로직을 분리하기 편함 → 회사에서 spring을 많이 사용

- 계좌 이체, 입출금, 이자 계산 로직을 처리할 때, 공통적으로 로깅, 보안, 트랜잭션 작업 수행 필요
- AOP는 공통 관심 (로깅, 보안, 트랜잭션) 을 따로 빼내어 객체별로 처리하는 것이 아닌 관점별로 외부에서 접근해 사용하도록 만듦
POJO
- Plain Old Java Object, 단순한 자바 오브젝트
- 객체 지향적인 원리에 충실하면서 환경과 기술에 종속되지 않고, 필요에 따라 재사용될 수 있는 방식으로 설계된 오브젝트
- getter, setter와 같이 기본적인 기능만 가진 자바 오브젝트
Spring Boot
- Spring을 더 쉽게 이용하기 위한 도구
- Spring을 이용하기 위해 필요한 여러 세팅 작업들 (ex. 톰캣 서버 설정, xml 설정 등) 없이 쉽고 빠르게 프리엠워크를 사용할 수 있도록 만들어진 것
- 최근에는 kotlin 이용하여 spring을 개발하면서 maven보다는 gradle 많이 사용
- snapshot : 만들어지는 중
- RC1 : 거의 만들어졌으나 아직 배포 ❌
- 3.x.x 버전으로 선택하기
Spring Boot 동작 환경

Spring Project 생성
- Group : 기업명 or 도메인
- Artifact : jar 파일로 빌드했을 때, 결과물로 나올 이름
- 일반적으로 Artifact와 name (project name) 은 동일
타임리프 : spring 내에서의 view 엔진
실무에서는 프론트 / 백을 나누므로 사용 X (교육 중에서만 사용)
node.js에서의 ejs와 유사
Spring MVC

- http 요청을 controller에서 가장 먼저 받음
- controller 내에서 문자열 return
→ 해당 이름을 가진 파일 (템플릿) 을 찾음
→ 이를 변환하여 브라우저에 보여줌
ex) return "hello"; → hello.html 찾음
- static 폴더 내의 index.html
→ "/" url이 mapping되지 않은 경우, default로 이를 보여줌
- but @GetMapping("/") 이 있을 경우, url이 우선 순위이기 때문에 return한 파일명을 가진 페이지를 보여줌
Thymeleaf
- Spring 내에서의 view 엔진 템플릿
- node.js에서의 ejs와 유사
- 실무에서는 프론트 / 백을 나누므로 사용 ❌ (교육 중에서만 사용)