스프링과 JPA를 이용한 웹개발_스프링 소개
스프링 소개
엔터프라이즈급 어플리케이션의 요구사항을 만족시키기 위해 스프링이 나왔다.
최종적인 스프링 프레임워크의 목표는 의존성 제거 !!
Spring
개발자에게도 봄이 찾아왔다는 뜻..(믿거나 말거나)
- 오픈 소스 JAVA 플랫폼 !
- 개발할 때 쉽고 편리하고 빠르게 작성할 수 있다.
Spring Framework
- POJO(Plain Old Java Object)s
- IoC(Inversion of Control)/DI(Dependency Injection)
- AOP(Aspect-oriented programming)
- PAS(Portable Service Abstraction): remind JDBC(interface and implementation)
POJO Programming Model(Plain Old Java Object)
스프링은 객체 지향 프로그래밍의 기본 원칙을 따르며, 특정한 인터페이스나 클래스를 상속받거나 특정한 프레임워크에 의존하지 않는 일반적인 Java 객체를 사용하자!
해서는 안되는 것
- 미리 지정된 클래스를 extends 하는 것
- 미리 정의된 인터페이스를 implement 하는 것
- 미리 정의된 Annotation을 포함하는 것
➡️이미 정의된 무언가를 사용한다는 것은 의존적일 수 밖에 없기 때문!
➕하지만 실제 개발할 때는 이것들을 지키며 개발하기에는 한계가 있기 때문에 어느정도만 지키면서 하는 경우가 많다
스프링 프레임워크
🤔Spring VS Spring Boot의 차이점은 무엇인가요?
Spring을 사용하도록 도와주는 것이 Spring Boot이다!
Spring Boot의 장점이 뭔데요?
- 라이브러리 관리 자동화
- 스타터(Starter)라는 것을 이용해 특정 기능에 필요한 라이브러리 의존성을 더욱 간단히 처리
- 설정의 자동화
- 개발자들은 복잡한 설정을 하지 않고도 개발이 가능
- 라이브러리 버전 자동 관리
- 스프링 라이브러리 외에 서드파티 라이브러리 사용 시 호환되는 버전으로 다운로드
- 테스트 환경과 내장 Tomcat
- JUnit을 비롯한 테스트 관련 라이브러리들이 기본적으로 포함
- Tomcat 서버를 내장(embed Tomcat)하고 있기 때문에 단지 main() 메소드를 가진 클래스를 실행하는 방식으로 서버를 구동
- 독립적으로 실행 가능한 JAR
- 웹 애플리케이션도 WAR가 아닌 JAR파일로 패키징 하여 사용
➡️기존에는 Spring이 제공하는 라이브러리가 너무 많아서 환경설정을 하기에 굉장히 힘들었는데, Spring Boot가 나오면서 편리해졌다!
Spring for OOP
- 다형성과 추상화를 뜻한다.
- 코드를 유지 보수하기에 유용하게 만들어 준다!
Ex) Warrior와 MAgician, Dragon이 세가지의 공통부분을 인터페이스로 Character로 묶고, 구현은 각 객체에서 하게 한다.
그렇게 되면 예를들어 Warrior 객체에서 수정사항이 생겼을 때 Game은 수정하지않아도 되고, Warrior만 수정하면된다!
Dependency Injection(의존성)
➡️인터페이스를 구현해서 그것을 의존해야지, 구체적인 구현 클래스를 바로 의존하는 것은 바람직하지 않다!
➡️앞선 예시처럼 공통 메소드는 MemberPrint에 정의하고, 각 객체에서 인터페이스를 구현하는 방식
PrintInfo랑 MemberPrint의 KoreanMemberPrint랑 의존적인 관계임!
그러나 이후에 EnglishMemberPrint()로 바꾸고 싶어지면?
KoreanMemberPrint를 EnglishMemberPrint로 교체하면 된다!
➡️인터페이스를 참조하더라도, 결국 코드의 수정은 발생하게 된다.
즉, 객체지향적으로 잘 설계된 코드이지만 코드 수정은 불가피하다.