나 혼자 Spring 공부
8월에 있는 공모전에 SpringBoot로 백엔드 개발을 하기로 계획하여, 프로젝트 진행과 동시에 Spring에 대해 알아가려 한다.
본 내용은 직접 서칭 및 공식 사이트 그리고 개인적인 생각도 첨부되어 있으니 참고하여 봐주시길 바랍니다. :)
1부. SpringBoot? Spring? Gradle과 Maven은 뭘까
스프링 부트 vs 스프링
추상적으로 표현하자면 스프링은 원초적인 느낌이고, 스프링 부트는 스프링의 셋팅을 어느정도 해 둔 상태
스프링으로 하면 모든 설정들을 다 하나씩 바꿔줘야하지만, 스프링부트는 사이트에서 설정만 하면 되어 편리함
공식 사이트 설명에 따르면, SpringBoot는 바로 실행할 수 있는 독립 실행형으로, Spring 기반의 서비스를 쉽게 만들 수 있게 한다.
[ 특징 ]
- stand-alone Spring 어플리케이션 생성가능
- 자동으로 필요한 spring과 써드파티 라이브러리 구성함
- 코드를 생성하고 XML구성을 할 필요 없음
- Tomcat, Jetty, Undertow등 내장하고 있어서 WAR 파일이 필요없다
- 'starter'를 제공하여 빌드 구성 단순화함
https://spring.io/projects/spring-boot#overview
스프링부트에서 Gradle과 Maven 차이는 ?
먼저 Gradle과 Maven은 빌드 툴(Build Tool)이다.
자세한 설명과 둘의 비교는 공식 사이트에 잘 설명되어 있다. (공식 사이트)
https://gradle.org/maven-vs-gradle/
Gradle은 구글에서 지정한 안드로이드 공식 툴. 기본적이라 모든 생태계로 확장 용이함
Maven은 엄격한 모델이 있어 커스터마이즈에 제한이 있음
속도는 Incrementality, Build cash, Gradle Daemon 측면에서 Gradle이 훨씬 빠름 (최대 100배 정도)
사용자 측면에서는 Maven이 IDE 지원이 많아 편리함. 하지만 Gradle도 IDE 개선중이라 좋음 (gradle tasks로 cli와 로깅 지원)
의존 관계 는 둘다 로컬로 캐시하고 병렬 다운로드 가능함
Maven은 제한적이라 버전별로만 종속성 재정의 가능함. Gadle은 종속성 규칙이 있어 자유롭게 변경 가능함
Mabven은 유닛과 통합 테스트가 분리되지 않는 등 테스트에서 제약이 있지만, Gradle은 의존성 범위를 커스텀화할 수 있어 모델링과 고속 빌드 할 수 있다.
그렇다면 사용은 ?
Gradle이 최근에 나오기도하고, SpringBoot와 Android에 더 많이 이용된다.
2부. 스프링부트로 웹사이트 개발 어떻게 해야할까?
JPA, MVC는 뭘까 그리고 React로 프론트 적용가능한가?
스프링 공식 사이트를 들어가면 SpringBoot 바로 아래 SpringFramework과 그 안에 Spring MVC가 보인다.
또 그 아래에는 Spring Data와 그 아래에 JDBC, JPA가 보인다.
다 한 번씩 본 단어들인데 정확히 어떤 역할을 하는걸까?
한 마디로 정리하면 다음과 같다.
MVC
MVC : Model, View, Controller를 지칭하는 말로, 스프링 프레임워크 초반 부터 포함된 Servlet API기반 오리지널 웹 프레임워크이다.
MVC 형태로 기능 구현함. (ex. 정확하진 않지만 추상적인 느낌으로 클래스 객체를 모델로, controller가 기능 구현하고 view는 프론트단 이라 생각하니 의미가 와닿았다.)
* 스프링 프레임워크 : 모든 종류의 Deployment 플랫폼에서 자바 기반의 enterprise 어플리케이션을 위한 프로그래밍 언어와 구성 모델을 제공함 (spring)
JDBC
JDBC (Java Database Connectivity) : 자바에서 DB에 접속할 있도록하는 자바 API
- 자바로 DB를 연결하여 쿼리 실행을 가능케 함
- DriverManager로 Connection 인스턴스를 얻고, 이를 통해 Statement를 얻는다. Statement객체를 이용해 ReesultSet을 얻어낼 수 있음
JPA
JPA (Java Persistence API) : 자바의 ORM 기술 표준
*ORM : Object-Relation Mapping 으로 객체 RDB를 매핑함. 즉 객체와 데이터베이스를 자동으로 매칭해주어 개발 편의를 높임
→ JPA를 이용하면 JDBC보다 훨씬 더 편리하게 개발 가능함.