[스프링과 스프링부트]
- Spring
- 현재 내가 다루고 있는 ‘그’ 스프링을 의미할 확률이 ↑
2. Spring Boot
- 모든 XML을 @(어노테이션)으로 바꾸기 위해서 나온 것
- web.xml, pom.xml, applicationContext.xml, mybatis.xml, jpa.xml
- xxx.xml == 설정파일이라고 생각! ( == .properties)
- 길고 복잡하고 가독성 떨어지는 xml 파일을 어노테이션을 통해 자바에서 한줄로 표현 (xml 설정들은 필연적으로 가독성이 떨어짐 >> @ JAVA에 설정을 직접할 수 있다! 가독성 ↑
- 어노테이션을 왜달았는지 설명, 이 어노테이션이 뭐하는 애인지 설명
- 주석을 잘 달자
3.Spring 프레임워크
- 가장 보편적인 스프링.
- 웹 개발 프레임워크 == EJB(고대의 웹 개발 프레임워크..)
- 자유도가 낮아 모든 웹 개발 환경이 고정되어있다는 장점
- 비싸고, 어려워서 진입장벽 높음
4.Spring legacy
- 은행, 국가기관 등.. 확실한 성능이 보장되어 있지 않은 이상 시스템을 바꾸지 않는 곳에서 사용
- 새로운 게 나와도 적용하기 어려움
“IoC와 AOP를 지원하는 경량의 프레임워크”
- 경량 == 가볍다. 자바에서 가볍다는 건 POJO를 뜻함. —> NOT POJO 사용량이 적음 → Servlet 사용이 매우 줄어들음 == FrontController (반드시 써야하는 서블릿!)만 남기고 서블릿 사용을 줄임. → 일반 클래스를 사용하는 것!! 스프링이 지원해준다. POJO만 쓰도록
- 프레임워크 == 틀, 구조
→ 개발자 수준이 상향 평준화 → 일관성 유지 → 유지보수 용이 (개발자의 궁극적인 목표)
⇒ 아주 가벼운 클래스들로만 구성되어있는 일관된 형태로 구성됨
3.IoC : 제어의 역행
▶ 낮은 결합도 유지에 용이 ▶ 원래는 개발자가 제어를 해왔는데, 이제는 역할바꿔서 컨테이너(Spring)가 제어하겠다! ▶ 서블릿 컨테이너(서블릿을 new 하니까 서블릿 컨테이너) == 톰캣 == 웹서버 ▶ == 객체화를 담당하는 것 ▶ == new를 담당하는 것
4. AOP : 관점 지향 프로그래밍 (↔ OOP : 객체 지향 프로그래밍)
▶ 높은 응집도
⇒ IoC, AOP 둘이 합쳐서 결합도는 낮고 응집도는 높은 코드를 만들어냄.
[ 1. 스프링 컨테이너란? ]
“Spring이 객체를 대신 만들어서 관리해주는 창고(공장)”
객체를 생성하고 보관하고 연결해준다.
new는 객체를 생성하는 것이고, 뭔가를 연결하려면 new를 통해서 두 요소를 함께 연결해주어야 하는데 그거를 스프링이 알아서 처리해주는 것이다. ⇒ “의존성 주입(DI)”
예를 들어서, 직접 new를 사용해서 작성한다면
SamsungTV tv = new SamsungTV();
SamsungRemote remote = new SamsungRemote();
tv.setRemote(remote);
직접 new와 setter를 사용해서 작성 해주어야 하는데
Spring을 사용한다면 위와 같은 코드를 작성하지 않고
<bean id="remote" class="test.SamsungRemote" />
<bean id="tv" class="test.SamsungTV">
<property name="remote" ref="remote" />
</bean>
applicationContext.xml 이라는 파일에 다음과 같이 선언만 해주면
SamsungRemote remote = new SamsungRemote();
SamsungTV tv = new SamsungTV();
tv.setRemote(remote);
다음과 같은 코드를 작성하지 않아도 스프링이 자동 생성해준다.
(XML에 선언만 하면 위의 코드는 자동 생성되는 것)
즉, 내가 XML이나 어노테이션을 통해서 지시만 해두면 Spring이 부하 마냥 알아서 처리해주는거다!
나는 xml이나 어노테이션만 작성해두면 되는 것!
[ 스프링은 무엇을 참고해서 객체를 만드는가? ]
- XML
- applictaionContext.xml 같은 설정 파일을 의미. Bean 정보를 읽어온다.
- 스프링 설정을 외부 파일(XML)로 작성하는 방식
<bean id="tv" class="test.SamsungTV" />
<bean id="remote" class="test.SamsungRemote" />
2. 어노테이션
- 자바 코드에 직접 힌트(@)를 달아서 알려주는 방식
- @Component, @Service, @Autowired와 같은 코드에 적힌 @~~ 힌트를 읽어온다.
@Component // 이 클래스는 객체로 만들어줘~
public class SamsungTV {
@Autowired // 이 필드는 자동으로 주입해줘~
private SamsungRemote remote;
}
'웹 개발' 카테고리의 다른 글
DB 이관 (0) | 2025.04.19 |
---|---|
[Spring] 2일차 (1) | 2025.04.18 |
싱글톤 패턴이란? (0) | 2025.04.15 |
중간 프로젝트 - 테이블 정규화 및 반정규화 (0) | 2025.04.12 |
do, did (1) | 2025.04.11 |