본문 바로가기
나의 공부

스프링, 스프링부트? 왜사용할까.

by 이숴 2023. 4. 20.
반응형

취준을 하면서 갑자기 궁금해졌습니다.

 

스프링과 스프링부트의 차이점이 뭘까?

 

그리고 스프링부트로 백엔드 개발을 하면 좋은 점이 뭘까. 문득 궁금하지 않으신가요? 저또한 그렇습니다.

 

그래서 저도 조사하면서 찾은 내용을 공유할까합니다.

 

스프링

스프링이란 스프링프레임워크라고 하죠

 

원래 ejb라는 기술이 스프링이전에 백엔드 개발로 많이 쓰이던 기술인데, 아주 고된 작업이 었다고 합니다...

이 고된 작업, 겨울이라고도 할 수 있겠죠? 겨울이 지나고 새로운 봄, 새로운 기술이 왔다고 해서 이름을 스프링이라고 명명했습니다.

 

우리는 스프링을 써서 왜 백엔드 작업을 할까요? 여러 이유가 존재합니다.

 

일단 객체지향 언어 자바와 코틀린 기반으로 작업이 되기 때문에, 개발 효율성이 아주 뛰어납니다. 코드를 재사용하거나 모듈화를 지원하기 때문에 개발시간을 줄이고 유지보수를 용이하게 할 수 있습니다.

 

또 AOP를 지원하고 확장성을 지원해서 관심사 별로 코드를 분리하여 작성할 수 있고, 스프링 프레임워크가 지원하는 다양한 라이브러리는 우리에게 편한 개발을 할 수 있도록 도와줍니다.

 

이외에도 정말 많은 장점이 존재하는 스프링, 꼭 써야겠죠?? 

 

스프링부트

스프링부트는 뭘까요.

 

스프링부트란 스프링에서 지원하는 모든 프레임워크의 구성요소를 아주 손쉽게 설정을 할 수 있도록 도와주는 기능을 한다고 보면 될 것같아요.

 

스프링 프레임워크 위에서 작업을 하기전에는 무수히 많은 설정을 정한 후에! 개발을 할  수 있다고 해요.

xml 형식의 설정파일

위 설정은 저도 모릅니다 ㅎㅎ..

 

하지만 스프링부트로 작업을 하면,

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
	implementation 'org.springframework.boot:spring-boot-starter-web'
	implementation 'com.google.guava:guava:30.1.1-jre'

	// 검증 validation
	implementation 'org.springframework.boot:spring-boot-starter-validation'
	implementation 'com.fasterxml.jackson.datatype:jackson-datatype-hibernate5'

	// test ? 값 확인
	implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.8'

	implementation group: 'io.jsonwebtoken', name: 'jjwt-api', version: '0.11.5'
    testImplementation 'org.projectlombok:lombok:1.18.26'
	testImplementation 'org.projectlombok:lombok:1.18.26'// jwt

	runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-impl', version: '0.11.2'
	runtimeOnly group: 'io.jsonwebtoken', name: 'jjwt-jackson', version: '0.11.2'

	//querydsl 추가
	implementation "com.querydsl:querydsl-jpa:${queryDslVersion}"
	annotationProcessor "com.querydsl:querydsl-apt:${queryDslVersion}"

	compileOnly 'org.projectlombok:lombok'
	runtimeOnly 'com.h2database:h2'
	annotationProcessor 'org.projectlombok:lombok'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	testImplementation 'org.springframework.security:spring-security-test'
	implementation 'org.springframework.boot:spring-boot-starter-security'
}

이렇게 아주 간단하게 버전을 신경쓰지 않고, 설정을 마무리 할 수 있습니다. 버전은 또 스프링이 맞춰서 정해주기 때문에 저희는 크게 생각하지 않아도 돼요!

 

이렇게 많은 스프링 프레임워크 요소를 쉽게 사용할  수 있다는 점에서 스프링부트의 장점이 나타난다고 할 수 있을 것 같습니다.

 

정말 중요한 점으로는 DI 컨테이너를 지원한다는 점인데요. 백엔드 개발을 할 때 의존성이 매우 중요한데, 저희는 객체를 자바로만 생성, 관리해주여도 DI 컨테이너에서 의존성 주입을 알아서 해주기 때문에 정말 편리합니다.

 

다른 것으로는 톰캣같은 내장 서버를 가지고 있기 떄문에 간단한 배포 서버 구축이 가능해집니다.

 

하지만 꼭 백엔드 작업은 스프링으로만 이루어지지 않습니다. 필자가 개발하면서 NodeJS, Django 등 중에서도 스프링을 사용하면 좋은 이유를 모르면 안될 것 같았같습니다.

 

왜쓰냐?

자바를 기반으로 스프링으로 백엔드 개발을 하는 이유는 명확합니다. 높은 안정성과 성능이라고 할 수 있을 것 같습니다. NodeJS의 경우 js 이외에 언어를 추가로 알 필요없이 프론트, 백엔드작업을 동시에 할 수 있고, ssr을 쉽게 구현할 수 있다고 하지만, 대규모 어플리케이션에서의 관리, 설계가 복잡할 수 있고, Java기반과 비교했을 때, 비교적 안정성이 떨어질 수도 있다고 합니다.

 

스프링은 Java를 기반으로 한 강력한 객체 지향 프로그래밍이 가능하고(NodeJS도 객체지향 프로그래밍은 가능합니다) 또 스프링프레임워크 기반의 라이브러리와 이외의 다양한 모듈을 지원합니다. 또 스프링부트 기반의 개발의 편리성을 가지고 있죠.

 

하지만 Java라는 언어에대해 높은 이해도가 요구되고, 프론트 작업을 스프링으로 할 수 없다는 점이 있습니다. 그래서 다른 언어로 협업을 이루어야한다는 점이 있을 것같습니다.

 

현업에서도 이러한 특징들이 명확하게 나타나서 사용영역이 나뉘는 것같아요.

 

스타트업같은 소규모 프로젝트에서는 NodeJS의 수요가 늘어나고, 대기업이나 대규모 프로젝트에서는 스프링 프레임워크 수요가 늘어나는 것처럼. 물론 전부가 아닐 것이라고 생각합니다.

 

이제 담주에 면접인데.. 면접시에 이렇게 물어보면 스프링은 어떤 장점이 있고, 부트와의 차이점은 이렇습니다! 하고 답변할 것을 생각해보았습니다.

반응형

'나의 공부' 카테고리의 다른 글

객체지향 설계 원칙 SOLID  (0) 2023.04.27
JPA? 왜사용할까.  (0) 2023.04.21
JPA의 N+1 문제와 해결  (0) 2023.04.12
프로세스, 스레드, 멀티 스레드?  (0) 2023.04.06
정규화는 뭘까? 정규화의 예시  (0) 2023.03.30

댓글