토비의 스프링 정리

토비의 스프링 - 9.2 개발도구와 환경

ksb-dev 2022. 10. 27. 21:37

9.2.1 JavaSE와 JavaEE

  • 스프링3.0은 JavaSE 5 버전에서 추가된 새로운 언어와 문법의 특징을 최대한 활용해서 개발했기 때문에, JDK 5.0 이상을 필요로 함
  • 일부 기능은 JDK 6.0 API를 이용했기 때문에 필요하다면 JDK 6.0을 써야 함
  • 스프링 3.0이 사용될 자바 엔터프라이즈 플랫폼으로는 J2EE 1.4 버전이나 JavaEE 5.0이 필요함
  • 스프링 3.0 자체는 JDK 6.0과 JavaEE 5.0을 기준으로 개발됐지만, 주요기능은 JDK 5.0에서 동작하는 J2EE 1.4 버전과 호환되게 제작됨
  • 다만, J2EE 1.4 버전 서버를 사용할 때는 JDK 5.0에서 동작하는지 반드시 확인해야 됨
  • 만약 WAS 자체가 JDK 5.0에서는 사용할 수 없다면 스프링 3.0의 이용은 불가능 함

9.2.2 IDE

  • 스프링 애플리케이션은 JDK 5.0 이상의 언어를 지원하는 자바 개발도구와 스키마를 지원하는 XML 편집기 정도만 있다면 어디서든 개발할 수 있음
  • 여기에, ANT나 Maven 같은 빌드 툴을 지원하고 톰캣이나 자바 서버로 바로 배포해서 실행할 수 있는 환경을 지원하는 통합개발환경(IDE)를 사용하면 좋음
  • IDE에는 이클립스, 넷빈즈, IntelliJ 등이 있음

9.2.3 SpringSource Tool Suite

  • 흔히, STS로 불림
  • 스프링 애플리케이션 개발에 IDE를 이클립스로 선택했다면, 스프링소스가 직접 제공하는 이클립스 확장판인 STS를 사용하는 것이 좋음
  • STS는 최신 이클립스를 기반으로 주요한 스프링 지원 플러그인과 관련 도구를 모두 모아서 스프링 개발에 최적화되도록 만들어진 IDE임
  • 스프링팀이 매번 베타 버전, RC 버전을 거치면서 플러그인 호환성 문제나 버전 이슈를 충분히 검증하기때문에 STS를 사용하는 것이 좋음

9.2.4 SpringIDE 플러그인

  • SpringIDE는 스프링 개발에 유용한 기능을 제공하는 플러그인 모음
  • 빈 클래스 이름 자동 완성이나, 빈 클래스 내의 모든 프로퍼티 목록 및 타입을 CTRL+SpaceBar로 확인할 수 있음
  • 빈설정 오류검증을 통해 잘못된 프로퍼티 이름을 지정하면 오류마크를 통해 오류를 찾을 편리하게 수 있음
  • 프로젝트 생성, 설정파일 생성, 빈 등록 위저드는 필요한 라이브러리 선정이나 빌드 스크립트 추가 및 프로젝트 구조를 편리하게 추가할 수 있음
  • 그 외에도 빈 의존관계 그래프 및 AOP 적용 대상 표시 등 다양하고 편리한 기능도구를 제공함

9.2.5 STS 플러그인

  • STS 플러그인은 서버 배치와 같은 추가 기능을 제공함
  • STS 대부분의 최신 JavaEE, dmServer, tcServer, Cloud Foundary로 배치할 수 있는 기능을 제공함
  • 이외에도, WMForce와 같은 VMWare 가상화 클라우드 서비스에도 손쉽게 스프링 애플리케이션 배치를 할 수 있게 지원함
  • 대시보드 화면도 STS 플러그인의 기능임
  • 기타 플러그인
    1. M2Eclipse
      • Maven을 지원하는 이클립스 플러그인
    2. AJDT
      • AspectJ AOP를 이용한 개발을 지원하는 툴
    3. VMCI
      • VMWare 서버 또는 워크스테이션의 연동을 지원하는 플러그인
      • 가상화 서버나 클라우드 서비스에 관한 기능
    4. 이클립스 표준 플러그인
      • 이클리스 플랫폼에서 제공하는 주요 표준 플러그인
      • WTP(Web Tool Platform), EMP(Eclipse Mmodeling Project), Mylyn, DSDP(Device Software Development Platform) 등이 있음

9.2.6 라이브러리 관리와 어려움

  • 스프링 자체만 해도 20개 가까이 세분화된 jar 모듈이 존재함
  • 직접 참조하는 라이브러리는 100개가 넘음
  • 필요한 기능과 사용하기로 결정한 기술에 다라서 적절한 선택이 필요함
  • 하지만, 라이브러리마다 여러 개의 버전이 있고 같은 라이어브리의 다른 버전이 동시에 필요해서 발생하는 문제도 있음
  • 이 문제는 재패키징(Repackaging)을 통해 해결할 수 있음
  • 한쪽 버전의 클래스를 다른 패키지로 옮겨서 서로 구별되는 클래스로 만들어주는 방법임
  • 재패키징의 작업은 모든 소스 또는 바이트코드를 일일이 찾아서 수정해야 되므로 복잡한 작업임
  • 재패키징을 도와주는 jarjar를 이용하면 재패키징이 편리함

9.2.7 빌드 툴과 라이브러리

  • Maven과 ANT은 자바의 대표적인 빌드 툴임
  • Maven은 ANT과 달리 선언적임
  • 프로젝트의 주요한 구조와 특징, 필요한 정보를 POM의 프로젝트 모델정보로 만들어두면, 이를 참조해서 Maven에 미리 정해진 정차에 따라 빌드 또는 프로젝트 관리 작업을 진행 할 수 있음
  • Maven은 전이적(Transitive) 의존 라이브러리 추적 기능이 있음
  • POM에 의존정보를 하나 지정하면, 지정된 라이브러리가 동작하는데 필요한 다른 라이브러리도 자동으로 원격서버에서 다운로드함
  • 라이브러리에는 필수 라이브러리와 선택 라이브러리가 있음
  • 특정 기술을 동작시키는데 필수적으로 필요한 것만 필수 라이브러리로 인식하여 다운받고, 별다른 선언이 없으면 선택 라이브러리는 다운받지 않음
  • 선택 라이브러리를 다운받기 위해서는 명시적으로 POM에 선언해줘야 함

9.2.8 스프링 모듈의 두 가지 이름과 리포지토리

  • 스프링 모듈 jar 파일의 이름에는 두 가지 종류가 있음
    1. Maven 명명 규칙을 따르는 모듈
    2. spring-core-3.0.7.RELEASE.jar
    3. OSGi 명명 규칙을 따르는 모듈
    4. org.springframework.core-3.0.7.RELEASE.jar
  • 두 가지 모두 동일하지만, 배포되는 기술에 따라 관례적으로 다른 이름을 사용함
  • 스프링의 모든 모듈은 OSGi 호환 모듈로 만들어져 있음
  • OSGi 스타일의 이름을 사용하도록 권장하고 있음
  • OSGi 호환 이름을 같은 스프링 모듈에 사용할 경우 Maven의 표준 리포지토리 대신 스프링소스가 제공하는 엔터프라이즈 번들 리포지토리를 사용해야 함