오늘도 정보처리기사 필기 cbt로 하루를 시작하였다.
아직 미흡한 점수이지만 차차 발전이 있을거라 믿어의심치 않는다!!
다음 토이프로젝트로는 사람들에게 가장 대중적으로 알려지고 대부분의 백엔드 개발자분들께서 포토폴리오로 활용하고 있는 게시판 제작을 하려했다. 저번에 JSP를 경험했으므로 이번에는 Spring boot를 활용 하여 게시판 제작을 하려했다.
하지만...
최근 유투브에서 본 영상에서 아직까지 대부분의 기업이 스프링부트를 쓰지않고 스프링을 쓰고 있으니 프로젝트를 스프링으로 만드는것이 좋다고하였다...
근데 스프링과 스프링부트는 무슨 차이가 있을까???
스프링의 프레임워크가 스프링부트가 아닌가..??
그래서 찾아보았다..!!
스프링 프레임워크란..
기존 개발방식에 의존성 주입, 관점지향 프로그래밍 등을 도입하여 결합도는 낮추어 단위 테스트가 용이하고 애플리케이션의 품질을 높이며 다양한 설정들로 인해 중복되는 코드들을 제거함으로써 더욱 편리하게 개발할수 있다는 장점이 있다.
스프링 부트란..
다양한 설정들 때문에 프로젝트를 세팅하는데에만 많은 시간이 소요된 것을 패키지로 제공함으로써 설정에 필요한 시간을 최소한으로 줄이고 개발자 더욱더 개발에만 집중 할 수 있또록 도와주는 프레임 워크이다.
그렇기 때문에 일반적인 상황에서의 웹개발이란 Spring Boot를, 특별한 설정이 필요한 상황이라면 Spring을 프레임 워크로 선택하여 개발하는 것을 추천한다.
Spring
- 오픈 소스 경량 프레임 워크
- 자바 개발자가 간단하고 안정적이며 확장 가능한 엔터프라이즈 애플리케이션을 빌드 할 수 있도록 함
- 비즈니스 개체를 관리하는 데 도움이되는 다양한 방법을 제공하는 데 중점을 둠
- Java 데이터베이스 연결 (JDBC), JavaServer Pages (JSP) 및 Java Servlet과 같은 기존 Java 프레임 워크 및 API (Application Programming Interface)에 비해 웹 애플리케이션 개발이 훨씬 쉬워짐
- AOP (Aspect-Oriented Programming), POJO (Plain Old Java Object) 및 DI (dependency injection)와 같은 다양한 새로운 기술을 사용하여 엔터프라이즈 애플리케이션을 개발
- 스프링 AOP 같은 서브 프레임 워크라고도 층의 집합
- Spring 개체 관계형 매핑 (Spring ORM). Spring Web Flow 및 Spring Web MVC 등이 있음
- 웹 응용 프로그램을 구성하는 동안 이러한 모듈을 별도로 사용 가능
- 모듈은 웹 응용 프로그램에서 더 나은 기능을 제공하기 위해 함께 그룹화 가능
Spring MVC
- Spring은 확장 가능한 애플리케이션을 만드는 데 널리 사용 되는 Spring MVC 프레임 워크를 제공
- Spring MVC 프레임 워크는 Model View, Controller라는 모듈의 분리를 가능하게하고 애플리케이션 통합을 원활하게 처리
- 개발자는 일반 Java 클래스를 사용하여 복잡한 응용 프로그램을 만들 수 있음
- 모델 객체는 맵을 사용하여 뷰와 컨트롤러간에 전달
Spring Boot
- Spring Boot는 기존의 스프링 프레임 워크 위에 구축 (스프링 프레임 워크 기반)
- 스프링의 모든 기능을 제공하면서도 스프링보다 사용하기 쉬움
- Spring Boot는 마이크로 서비스 기반 프레임 워크이며 매우 짧은 시간에 프로덕션 준비 애플리케이션을 만듦
- Spring Boot에서는 모든 것이 자동으로 구성됨
- 특정 기능을 활용하기 위해 적절한 구성을 사용하기 만
- Spring Boot는 REST API를 개발하려는 경우 매우 유용
- Spring Boot는 프로젝트를 war 또는 jar 파일로 변환하는 기능을 제공
- Tomcat의 인스턴스는 클라우드에서도 실행 가능
- 자주 사용하는 라이브러리가 미리 조합되어있음
- 복잡한 설정이 자동 처리됨
- 내장서버를 포함 (톰캣) 서버를 추가로 설치하지 않아도 바로 개발 가능
- 톰캣, 제티와 같은 WAS에 배포하지 않고도 실행할 수 있는 jar 파일로 웹어플리케이션 개발 가능
Spring boot의 4계층
- Presentation Layer : 이름에서 알 수 있듯이 view (예 : front-end 부분)로 구성
- Data Access Layer : 데이터베이스에 대한 CRUD (create, retrieve, update, delete)
- Service Layer : 서비스 클래스로 구성되며 데이터 액세스 계층에서 제공하는 서비스를 사용
- Integration Layer : 웹별 웹 서비스 (인터넷을 통해 사용 가능한 모든 서비스 및 XML 메시징 시스템 사용)로 구성
spring |
spring boot |
spring MVC |
엔터프라이즈 애플리케이션을 개발하는 오픈 소스 경량 프레임 워크 |
REST API를 개발하는 데 널리 사용되는 기존의 스프링 프레임 워크 위에 빌드 |
Model View이며 웹 애플리케이션 개발에 널리 사용되는 Controller 기반 웹 프레임 워크 |
의존성 주입 |
자동 구성 |
수동으로 빌드 |
명시 적으로 서버를 설정 |
Tomcat 및 Jetty 등과 같은 임베디드 서버를 제공 |
|
실행 시 배치 디스크립터가 필요 |
배치 디스크립터에 대한 요구 사항은 없음 |
배치 디스크립터가 필요 |
개발자는 많은 코드를 작성 |
코드 줄일 수 있음 , 개발 시간을 줄이고 생산성을 높임 |
개발에 더 많은 시간이 걸림 |
메모리 내 데이터베이스에 대한 지원을 제공하지 않음 |
H2와 같은 메모리 내 데이터베이스에 대한 지원을 제공 |
|
|
Presentation Layer, Data Access Layer, Service Layer, Integration Layer |
Model, View, Controller, Front Controller |
추가로 spring이전의 엔터프라이즈 프레임워크인 EJB에 대한 개념을 알아보겠다.
아직도 오래된 프로젝트, 공공기관에서 간혹가다 만날 수 있으며, 나도 잠깐 만난적이 있다.
EJB (Enterprise Java Beans)
- 엔터프라이즈 자바빈즈(Enterprise JavaBeans; EJB)는 기업환경의 시스템을 구현하기 위한 서버측 컴포넌트 모델
- 이제까지는 상속받으면 부모가 내꺼되고 해서 상속을 받고받고 하면 내가 없어짐 내가 상속으로 이미 결정됨 (EJB)
- 즉, EJB는 애플리케이션의 업무 로직을 가지고 있는 서버 애플리케이션
- EJB 사양은 Java EE의 자바 API 중 하나로, 주로 웹 시스템에서 JSP는 화면 로직을 처리하고, EJB는 업무 로직을 처리하는 역할
- 애플리케이션의 비즈니스 로직을 요약하는 서버 측 소프트웨어 구성 요소
- EJB 컨테이너는 컴퓨터 안정성, JSL (Java Servlet Lifecycle) 관리, 트랜잭션 절차 및 기타 웹 서비스를 포함한 웹 관련 소프트웨어 요소에 대한 런타임 환경을 제공
- EJB 응용 프로그램을 실행하려면 Jboss, Glassfish, Weblogic, Websphere 등과 같은 응용 프로그램 서버가 필요
- Life Cycle Management, Object Pooling, Transaction Processing, Security 등을 수행
EJB 세 가지 유형
Session Bean
- 세션 빈은 로컬, 원격 또는 웹 서비스 클라이언트에 의해 호출 될 수있는 비즈니스 로직을 포함
- Stateful 세션 빈 및
- Stateless 세션 빈
Message Driven Bean
- Session Bean과 마찬가지로 비즈니스 로직을 포함하고 있지만 메시지를 전달하여 호출
Entity Bean
- 데이터베이스에서 지속될 수있는 상태를 요약
- Bean Managed Persistence
- 컨테이너 관리 지속성
특징
- Java EE의 사양
- EJB 데이터 소스, JMS 리소스 및 JPA 리소스를 포함하여 컨테이너에 모든 것을 삽입 가능
출처 : https://devvoon.github.io/spring-spring_mvc-vs-spring_boot-vs-spring_mvc/
이러한 이유들로 이번 게시판 CRUD 공부는 Spring Boot가 아닌 Spring으로 개발을 진행해보려한다.
기업들에서 원하는 인재상이 되야지.. 내가 편하다고 스프링부트를 쓰는것은 현재 학생의 본분에서는 약간 어긋나는것 같다. 후일 스프링부트는 따로 공부할 예정이다.
다음 게시글부터는 스프링을 활용한 게시판만들기를 포스팅해보려한다.