본문 바로가기
백엔드/스프링 부트세부 공부

스프링과 스프링 부트의 차이/ 스프링만 사용했을때의 불편함.

by 임지혁코딩 2023. 12. 30.

가장먼저, SPRING과 SPRING BOOT의 차이를 알고 가자 . 

 

 스프링(Spring)은 프레임워크이며, 스프링 부트(Spring Boot)는 스프링 프레임워크를 기반으로 한 도구입니다. 스프링은 설정 파일을 작성해야 하지만, 스프링 부트는 자동 설정을 제공하여 간편하게 개발할 수 있습니다. 또한, 스프링 부트는 내장 서버를 제공하여 쉽게 웹 애플리케이션을 실행할 수 있습니다. Spring은 스프링 프레임워크를 보다 세밀하게 제어하고자 하는 경우에, Spring Boot는 빠르고 간단하게 스프링 애플리케이션을 개발하고자 하는 경우에 사용됩니다.

-SPRING 사이트 참고.

 

사실 BOOT를 기본적으로 사용해왔기 때문에, 추가적인 개념을 공부하는 위주로 공부에 임하자. 

 

++전자정부 프레임워크가 스프링 기반임을 꺠달았다. 

 

자바->스프링->스프링부트 모두를 사용해 개발을 진행해보고 .

어떤것이 실제로 도움이 되었는지를 확인해보겠다. 

 

OOP란? 객체지향 프로그래밍이다. 

다시한번 정리하자면, 소프트웨어를 기능 논리보다는 데이터나 객체로 설계하는 구조이다 .

절차지향 프로그래밍은 하고싶은 기능을 나열해서 이를 구현한다. 

OOP는 확실히, 구현과 반복에 좋다.

 

Spring을 왜 썼을까? - java를 안전하고 다양한 프로그램을 지원하기 위하여 노력한다.

 

spring boot를 사용하다보면, 연결과 이런것들이 굉장히 자동적이기 때문에 개념이 살짝 약해도 충분히 코딩이 가능하다. 그러나 , 앞으로 어떤 상황에 놓일지 모르기 떄문에 사용해보겠다 .

 

IOC->개념의 흐름을 변경한다. 원래는 server라는 것이 받아오고,valid하고, 다시 return까지 . 

즉 validate등이 변경되면 ,즉시 server에 영향이 온다. 

 

server가 , request만 아니라 dao 또한 매개변수로 받고 이러한 기능들을 method화하지 않는다.

(dao에 되어있따.) 이는 즉, dao가 마음대로 기능을 변경할수 있다는 의미이다.

이렇게 직접 넣어서 사용하는 것이 ioc라고 했었는데, 그 이유가 이거였따. 

 

라이브러리? 내가 직접 호출하는 Assertions같은것. 

Dmakeservice. 를 @Autowired로 직접 주입해주었다. (이것이 스프링 방식이었다)

Resource -> 자원을 제공(boot와 일반 스프링과 개념자체는 같은 개념이다)

validation,databinding이런것들은 spring boot를 사용함과 같은 개념이다. 

SPEL또한 동일하다. 

@VALUE("${VALUE.FROM.FILE}"). 동일하다. 이를 SPRING이 해석하고 접근하여 문자열로 받아온다

 

AOP 재재재 복습 -> 

@Transactional -> update method가 , return service.score로 획득한다고 본다.

transactional 어노테이션이 자동으로 지원한다. 

transactional이 aop를 활용하여 커밋의 부분, 제거의 부분 등의 기분에 따라서 join point에 맞추어 사용함을 다시한번 상기하자 . 

 

개인적인 실습 이후에는, java에 비해 spring은 의존성 주입이 조금더 편리하게 변경되었다.

그 이후에는 spring boot에서, 이것보다 더 편하게 변경되었다.

 

package com.example;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

public class MainApp {
    public static void main(String[] args) {
        // applicationContext.xml에서 ApplicationContext 생성
        ApplicationContext context = new ClassPathXmlApplicationContext("applicationContext.xml");

        // MyService 빈을 가져와서 사용
        MyService myService = (MyService) context.getBean("myService");
        myService.displayMessage();
    }
}

 

-spring에서, 직접 application context를 지정하고, 각 빈 , 컴포넌트 들을 연결해주고 해야하는 번거로운 예시이다. 

package com.example; public class MyService { private String message; public MyService(String message) { this.message = message; } public void displayMessage() { System.out.println("Message from MyService: " + message); } }

이것 또한 불편한 예시중 하나이다. 자세한 부분은 생략하지만, 스스로 이렇게 생성자를 주입해줘야하는 불편함이 존재한다. 그렇다고 해서 항상 spring boot를 사용할 수 있는것은 아니기 때문에, 이러한 방식에 대해서도 이해하고 있자. 

 

spring boot는 내부 서버를 가지고 있어 쉽게 웹 어플리케이션을 작동시킬수 있다 .

spring에서는, build.gradle에서 의존성 등을 추가해줘야 한다. 

 

굉장히 번거로운 작업들이기 때문에, spring boot의 사용 이유가 더 명확해졌다.

허나 기본적인 spring의 작동 구조는 알아야 겠으며, 이를 위해 이번 페이지를 작성했다. 

'백엔드 > 스프링 부트세부 공부' 카테고리의 다른 글

Configuration으로 기타 설정  (0) 2024.01.10
Thymeleaf 상세부  (0) 2024.01.08
기타 기능 2 , devtool, actuator  (0) 2024.01.05
추가 기술들  (2) 2024.01.01
BOOT의 기능  (1) 2023.12.30