spring framework

이정연·2023년 1월 24일
0

spring

목록 보기
1/5

애플리케이션을 사용할 때 사용하는 개발을 위한 framework

  • Django
  • Express
  • Flask
  • Lalavel
  • spring

🎯spring framework의 장점

  • 객체 지향 설계 원칙에 맞는 개사용과 확장이 가능한 애플리케이션 개발 스킬을 향상시킴
  • POJO(Plan Old Java Object)기반의 구성
  • DI(Dependency Injection) 지원
  • AOP(Aspect Oriented Programming, 관점지향 프로그래밍) 지원

🎯spring framework를 쓰는 이유

1. JSP 방식

  • 실제로 옛날에는 프런트/백엔드 영역을 구분하지 않고 양쪽을 모두 개발하는 개발자들이 많았다
  • 그러다보니 프런트영역과 백엔드 영역의 코드가 뒤섞이게 되었다.
  • 기존의 jsp 방식의 문제점은 코드 자체가 너무길어서 가독성도 떨어지고, 복잡하다
  • 그렇기 때문에 유지 보수 측면에선 최악의 방식이라고 할 수 있다.

2. 서블릿(Servlet)을 이용한 애플리케이션

  • Servlet은 클라이언트 웹 요청 처리에 특화된 Java 클래스의 일종임
  • 클라이언트 측의 JSP 코드에서 서버 측 Java 코드는 서블릿 클래스로 분리했기 때문에 클라이언트와 서버 간에 어느 정도 역할이 분리되었다고 볼 수 있다.
  • 그럼에도 코드 자체가 쓸데없이 기능에비해 길다는 단점이 있었다.

3. Spring MVC를 이용한 애플리케이션

  • 결과적으로 spring MVC를 이용하게 되었다.
  • 서블릿 방식에서 개발자가 직접했었던 작업들을 spring이 대신 해준다.
  • 예를 들어 클라이언트의 요청에 담긴 데이터를 꺼내오는 작업
  • 예를 들어 캐릭터셋을 지정해주는 작업 등.
  • 하지만, 애플리케이션의 기본구조를 잡는 설정이 여전히 불편했었다.

예제코드

@Controller
public class ToDoController {
    @RequestMapping(value = "/todo", method = RequestMethod.POST)
    @ResponseBody
    public List<ToDo> todo(@RequestParam("todoName")String todoName,
                               @RequestParam("todoDate")String todoDate) {
        ToDo.todoList.add(new ToDo(todoName, todoDate));
        return ToDo.todoList;
    }
    @RequestMapping(value = "/todo", method = RequestMethod.GET)
    @ResponseBody
    public List<ToDo> todoList() {
        return ToDo.todoList;
    }
}

기본틀

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/spring-config/applicationContext.xml</param-value>
    </context-param>
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
    <servlet>
        <servlet-name>dispatcher</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring-config/dispatcher-servlet.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
    .
    .
    .

4. Spring Boot을 이용한 애플리케이션

예제코드

@RestController
public class TodoController {
    private TodoRepository todoRepository;
    @Autowired
    TodoController(TodoRepository todoRepository) {
        this.todoRepository = todoRepository;
    }
    @PostMapping(value = "/todo/register")
    @ResponseBody
    public Todo register(Todo todo){ // (1)
        todoRepository.save(todo); // (2)
        return todo;
    }
    @GetMapping(value = "/todo/list")
    @ResponseBody
    public List<Todo> getTodoList(){
        return todoRepository.findAll(); // (3)
    }
}
  • 클라이언트 측에서 전달한 요청 데이터를 (1)과 같이 Todo라는 클래스에 담아서 한번에 전달함
  • (2),(3)과 같이 데이터베이스에 저장해서 데이터 액세스 처리까지 함.

Spring Boot의 구성 파일

spring.h2.console.enabled=true
spring.h2.console.path=/console
spring.jpa.generate-ddl=true
spring.jpa.show-sql=true
  • spring MVC와는 비교도 안되게 간단해짐.
  • 이는 복잡한 설정들을 spring에서 대신 처리해주도록 함.

Spring Boot를 쓰는 이유

  • XML기반의 복잡한 설계 방식 지양
  • 의존라이브러리의 자동 관리
  • 애플리케이션 설정의 자동 구성
  • 프로덕션급 애플리케이션의 손쉬운 빌드
  • 내장된 WAS를 통한 손쉬운 배포

애플리케이션 설정의 자동 구성

  • 예를들어 아래와 같은 코드들이 존재한다면
implementation 'org.springframework.boot:spring-boot-starter-web
implementation 'org.springframework.boot:spring-boot-starter-jdbc
  • 웹 애플리케이션을 띄울 서블릿 컨테이너 설정을 자동으로 구성한다
  • 애플리케이션에 데이터베이스 연결이 필요하다고 추측한 뒤 JDBC 설정을 자동으로 구성한다.

다음과 같은 설정으로 적용할 수 있다.
즉, @SpringBootApplication 애너테이션만 추가해주면된다.

@SpringBootApplication  // (1)
public class SampleApplication {
    public static void main(String[] args) {
        SpringApplication.run(SampleApplication.class, args);
    }
}

프로덕션급 애플리케이션의 손쉬운 빌드

  • 직접 빌드 결과물을 War파일형태로 WAS(Web Application Server)에 올릴 필요가 없다.

여기서 빌드 명령을 실행하고

생성된 jar파일은 즉시 시작 가능한 애플리케이션 실행 파일로 사용된다.

  • WAS(Web Application Server)란?
    java 기반의 웹 애플리케이션을 배포하는 일반적인 방식은 구현한 코드를 WAR 파일 형태로 빌드 한 후에 WAS라는 서버에 배포해서 해당 애플리케이션을 실행하는 것이다.(대표적 WAS 는 Tomcat)

내장된 WAS를 통한 손쉬운 배포

  • Spring Boot은 Apache Tomcat이라는 WAS를 내장하고 있기때문에 별도의 WAS를 구축할 필요가 없다.
  • Spring Boot을 통해 빌드된 jar 파일을 이용해서 아래와 같은 명령어 한 줄만 입력 해주면 서비스 가능한 웹 애플리케이션을 실행 할 수 있다.
java -jar <jar 파일명>.jar
profile
반갑습니다.

0개의 댓글