본문 바로가기

(4)

배워서 바로 쓰는 스프링 부트 2 - 한빛미디어

벌써 한빛미디어 서평단 활동 3번째 개발 서적이다. 이번 서적은 웹 개발자라면 꼭 공부해야하는 봄.... 스프링이다!! 주 언어가 Java이고 웹 개발자를 지망한다면 Spring은 꼭 공부해야 할 것이고 Spring MVC도 어느정도의 숙련도를 요구한다. (필요한 만큼 알면 된다고 하는데, 더 고급진 개발자가 되고싶다면 다다익선이다) 스프링 자체는 워낙 방대한 내용이기 때문에 전부 다 챙기다는건 쉽지 않을 것이다. 스프링은 객체지향 프로그래밍을 도와주는 프레임워크다. 객체지향설계를 공부하면서 스프링을 공부한다면 더 많이 와닿을 것이다. 어느 자바 웹 개발자 박OO 차장 대략적인 박차장의 개발인생 그렇다 웹 개발자라면... (Node 라거나.... Angular 라거나... Python은 잘 모르겠다) 스..

cannot access javax.servlet.ServletException class file for javax.servlet.ServletException not found 오류

'코드로 배우는 스프링 웹 프로젝트'의 예제를 따라하던 중(xml이 아닌 자바로 설정하는 스프링프레임워크 예제) 테스트 코드를 작성한 뒤 실행하는 과정에서 아래와 같은 오류가 발생했다. 오류의 원인이 'java servlet api'가 없기 때문에 발생한 에러고 아래와 같은 의존성을 추가해주면 정상적으로 작동할 것이라고 했다. maven javax.servlet javax.servlet-api 4.0.1 provided 그랬더니 기존의 오류는 나타나지 않았고 새로운 오류가 나타났다. 위 오류는 ApplicationContext를 제대로 로드하지 못했다는 걸로 봤을때, Test 클래스 설정을 잘못한게 아닌가라는 추측을 하였고, 예상대로 클래스 위에 어노테이션 설정이 다르다는 것을 알게되었다. (책의 예제에..

스프링의 특징과 의존성 주입

해당 내용은 '코드로 배우는 스프링 웹 프로젝트' 책을 공부하면서 정리한 내용입니다. 프레임 워크는 '뼈대나 근간을 이루는 코드들의 묶음' 이라고 할 수 있다. 스프링은 인기 있는 프레임워크이다. 많은 프레임워크 중에서도 스프링 프레임워크가 인기있는 이유는 아래와 같은 스프링의 차별성 때문이다. 복잡함에 반기를 들어서 만들어진 프레임워크 엔터프라이즈급 프레임워크들의 가장 큰 문제는 복잡하다는 것이었다. 많은 케이스를 처리할 수 있고 다양한 기능을 가지다보니 하나의 기능을 위해 너무 많은 구조가 필요한 상태였다. 이러한 복잡성을 해결하기 위해서 나온 경량화된 프레임워크가 스프링이다. 일반적인 Java의 클래스와 인터페이스를 이용하는 구조여서 진입 장벽이 높지 않고, 복잡한 프레임워크에 비해 가벼워 빠르게 ..

@Get, @Post, Delete, @Put, @Patch Mapping

Spring Boot를 이용하면서 이전에는 (주로 4.3.18 버전의 스프링 MVC를 사용했다) 보지 못했던 맵핑들이 자주 보였는데, 그 중에서도 Mapping 부분에 Get, Post 등이 직접 언급되는 어노테이션이 나오는 걸 보고 구글링하게 되었다. 간략한 내용이지만 정리를 해보려고 한다. (혹시나 헷갈리면 확인하기 위함이 제일 클 것 같다!) Spring 4.3 버전에 추가된 내용으로는 기존의 @RequestMapping(value="/", method="...")의 어노테이션의 사용을 조금 더 명시적이고 효율적인 방법으로 사용하기 위해 @GetMapping, @PostMapping, @DeleteMapping, @PutMapping, @PatchMapping의 메소드가 생겼다. 기본적인 작동원리 ..

개발서적

배워서 바로 쓰는 스프링 부트 2 - 한빛미디어

728x90

벌써 한빛미디어 서평단 활동 3번째 개발 서적이다. 이번 서적은 웹 개발자라면 꼭 공부해야하는 봄.... 스프링이다!!

 

주 언어가 Java이고 웹 개발자를 지망한다면 Spring은 꼭 공부해야 할 것이고 Spring MVC도 어느정도의 숙련도를 요구한다. (필요한 만큼 알면 된다고 하는데, 더 고급진 개발자가 되고싶다면 다다익선이다) 스프링 자체는 워낙 방대한 내용이기 때문에 전부 다 챙기다는건 쉽지 않을 것이다. 스프링은 객체지향 프로그래밍을 도와주는 프레임워크다. 객체지향설계를 공부하면서 스프링을 공부한다면 더 많이 와닿을 것이다. 

 

어느 자바 웹 개발자 박OO 차장

 

대략적인 박차장의 개발인생 

 

그렇다 웹 개발자라면... (Node 라거나.... Angular 라거나... Python은 잘 모르겠다) 스프링의 숙명을 받아들이자! 스프링과 스프링 부트의 구별을 먼저 하는게 좋을 것 같다. 스프링을 사용하기 위해서 처음부터 설정을 할려면.... 처음하는 입장에서 정말 힘들다(심지어 몇번 해봤음에도, 버전의 문제라던지 gradle, maven의 차이? 라거나 그런 차이 때문에 계속 빌드를 실패하는 경우가 허다하다..).  환경설정만 트라이 하다가 실패한적이 많을 것이다. 스프링 부트는 이런 환경설정을 자동으로 해줌으로써 개발자가 개발에만 집중할 수 있는 환경을 제공한다. IDE에서 바롱 스프링 부트 환경으로 프로젝트를 만들 수 있기도 하고(IDE마다 방식이 다름, 인텔리제이는 Ultimate 버전만 가능한걸로 알고, 이클립스도 가능했던걸로 아는데, 안해봐서 잘 모르겠다. 구글 선생님께 물어보자!),  IDE로 스프링 부트 프로젝트를 생성하는 방법도 있지만, Spring Initializr 로 생성하는 방식이 있다.  (Maven/Gradle 프로젝트 중에 어떤걸 만들지, Java/Kotlin/Groovy 중 어떤 언어를 사용할지, 스프링 부트는 몇 버전을 사용할지 고를 수 있다)

 

위와 같이 생겼고 아래와 같이 필요한 의존성을 추가해주면 된다.  예로들어 JPA와 Spring MVC, Spring JDBC를 추가해보자! 의존성 추가는 우측에 ADD DEPENDENCIES... (맥 기준 단축키로 ⌘ + B) 를 클릭하면 아래와 같은 창이 뜨고 여기서 검색해서 원하는 의존성을 추가하면 된다. 

 위와 같이 검색 결과가 나오면 클릭해준다. 그러면 아래와 같이 우측 Dependencies에 의존성이 추가할 의존성 목록이 생긴다.

 

이렇게 의존성 추가를 다 했으면, GENERATE 버튼을 눌려서 github 혹은 zip 파일로 다운받아 압출을 푼 뒤 프로젝트를 진행하면 된다.


그렇다 어쨋거나 스프링 부트는 프로덕션 환경에서 실행할 수 있는 애플리케이션 개발을 쉽고 빠르게 할 수 있다. 서드파티 라이브러리나 스프링 플랫폼 설정이 처음부터 들어 있어 최소한의 작업으로 개발을 시작할 수 있다. 

설정을 변경하지 않는다면 내장된 컨테이너로 톰캣을 사용해 미리 준비된 환경에 따라 동작한다. 스프링 부트를 사용하여 애플리케이션을 개발하면 명령줄로 실행 가능한 하나의 JAR파일을 만들 수 있다. 명령줄에서 java -jar 명령의 인수로 작성한 JAR 파일을 지정해 실행하면 내장된 톰캣이 실행된 후 개발한 애플리케이션이 실행된다.

개발자는 톰캣 등의 애플리케이션 서버를 준비할 필요 없이 단순히 실행만으로 애플리케이션을 동작할 수 있다. 또한 WAR 파일을 만들 수 있어 기존 환경에 애플리케이션 서버가 있다면 스프링 부트를 기존 방법처럼 사용해 애플리케이션을 배포할 수 있다. 

스프링MVC의 기능은 어느정도 알아야 웹 개발이 가능하겠지만, 스프링의 기초(환경설정 등..)부터 학습하며 스프링으로 프로젝트를 진행하는데에는 적지 않은 시간이 소모된다. 당장 프로젝트를 만들고 싶다면 스프링 부트를 사용해보는 것이 좋다는 생각이 든다. 

배워서 바로 쓰는 스프링 부트 2의 목차를 알아보자 총 12챕터로 구성이 되어있다.


목차

Chap1. 스프링 부트의 구성

Chap2. 웹 애플리케이션의 공통 처리

Chap3. 데이터 액세스

Chap4. 보안

Chap5. 화면 개발

Chap6. API 개발

Chap7. 팀 개발

Chap8. 운용

Chap9. 시스템 아키텍처 구성

Chap10. 스프링 5와 스프링 부트 2의 신기능

Chap11. 로컬 개발 환경 구축

Chap12. 예제 애플리케이션 


스프링 책은 3 ~ 4권 정도 읽어봤지만 스프링 부트가 주제인 서적은 처음 읽어봤다. 그래서인지 목차의 구성이 스프링 코어에 집중된 책과는 다소 다르다르다고 느껴졌고, 각 챕터에 어떤 내용이 나올지? 궁금함이 많이 생겼다.  책을 가볍게 읽어나가면서, 내가 쓰고있는 스프링 부트의 기능들은 정말 새발의 피였다는 것을 느끼게 돼었다. 

아무래도 백엔드 개발에 대해서 아무리 해박하더라도 결국 서버에 배포할 줄 모르면 나의 프로젝트를 만들 수 없다. 스프링 부트 책이라 사실 스프링 부트를 활용하는 방법만 어느정도 있겠지? 라는 생각을 했었다. 목차를 봐도 언뜻 알 수 있지만, 단순히 스프링 부트의 활용(물론 부트의 많은 기능들을 서술하고 있다.. 사실 다 기억도 안날정도라서 모르는 것들은 메모를 해두고 다시 볼려고 한다)만 있는 것이 아니라, 인프라(DB, 무정지 배포), 유지보수성을 높이는데 도움이 되는 내용들도 언급하고 있다.

매주 진행하고 있는 스터디에서 다음주부터 본격적으로 프로젝트를 하나 진행해보려고 한다. 때마침 오늘은 AWS 서버와 CI / CD 환경을 구축했다. 원래 계획했던 개발 환경이 있었는데, 이 책을 통해서 나 또한 견문이 많이 넓어졌다. 가능한 빨리, Version 1을 만들고 책의 내용들은 하나씩 추가하며 Version 2, 3 ... 등 계속해서 기능을 추가해볼 예정이다. 

배워서 바로 쓰는 스프링 부트2를 읽으면서, 배워서 바로 쓰는 스프링 프레임워크는 어떨까? 라는 생각이 많이 들었다. 기회가 된다면 읽어보고 싶다.

빠르게 자신의 웹 프로젝트를 개발하고 싶은 개발자들에게 '스프링 부트'는 매력적인 tool일 것이다. 하지만 스프링 부트도 기본적인 지침서가 있어야 한다. 사실 스프링 부트 지침서를 하나 구해서 읽어봤었는데, 만족스럽지 못했었다. 하지만 이번 책은 나의 기대치에도 부합하고, 오히려 생각지도 못한 간지러운 부분도 긁어준 느낌이다. 

"배워서 바로 쓰는" 시리즈 는 이제부터 눈여겨 볼 것이다. 다음 책 나오기만 해봐라 

728x90
각종 오류 및 해결 방법

cannot access javax.servlet.ServletException class file for javax.servlet.ServletException not found 오류

728x90

 

'코드로 배우는 스프링 웹 프로젝트'의 예제를 따라하던 중(xml이 아닌 자바로 설정하는 스프링프레임워크 예제) 테스트 코드를 작성한 뒤 실행하는 과정에서 아래와 같은 오류가 발생했다.

오류의 원인이  'java servlet api'가 없기 때문에 발생한 에러고 아래와 같은 의존성을 추가해주면 정상적으로 작동할 것이라고 했다.

maven

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

 

그랬더니 기존의 오류는 나타나지 않았고 새로운 오류가 나타났다. 

 

위 오류는 ApplicationContext를 제대로 로드하지 못했다는 걸로 봤을때, Test 클래스 설정을 잘못한게 아닌가라는 추측을 하였고, 예상대로 클래스 위에 어노테이션 설정이 다르다는 것을 알게되었다. (책의 예제에서 자바로 설정시에 @ContextConfiguration 맵핑을 어떻게 바꿔야 하는지에 대한 설명이 없었다) (내가 성급했다 뒷부분에 설명이 있었다. loader도 필요없다고 책에는 쓰여있다) 

(어떤 Config 클래스를 등록해야하는건지 몰라서 일단 두개 다 넣었었는데, RootConfig만 넣어도 된다. RootConfig는 root-context.xml을 대신하는 것이다) 

Log4j 어노테이션을 활성화 해도 Log가 안찍히는 오류가 있었는데 log4j.xml을 설정해주지 않아서 그렇다고 한다. (여기까지 오류를 해결해두고 급한 과제 부터해결해놓고 다음에 이 오류를 해결해보고자 한다) 

참고 : https://eternalteach.tistory.com/43

 

error: cannot access ServletException class file for javax.servlet.ServletException not found

java servlet api 추가하니 해결 gradle // https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '4.0.1' maven..

eternalteach.tistory.com

참고 : https://cnpnote.tistory.com/entry/SPRING-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9C%A0%EB%8B%9B-%ED%85%8C%EC%8A%A4%ED%8A%B8-%EC%A4%91%EC%97%90-ApplicationContext%EB%A5%BC%EB%A1%9C%EB%93%9C%ED%95%98%EC%A7%80-%EB%AA%BB%ED%96%88%EC%8A%B5%EB%8B%88%EB%8B%A4

 

[SPRING] 스프링 유닛 테스트 중에 ApplicationContext를로드하지 못했습니다.

스프링 유닛 테스트 중에 ApplicationContext를로드하지 못했습니다. 내 응용 프로그램 컨텍스트 스프링 자바 - 구성을 사용하여 Junit 기능 테스트를 실행하려고합니다. 나는 Spring이나 Junit에 문제가 있는지..

cnpnote.tistory.com

 

728x90
Spring Framework Module

스프링의 특징과 의존성 주입

728x90

해당 내용은 '코드로 배우는 스프링 웹 프로젝트' 책을 공부하면서 정리한 내용입니다. 

 프레임 워크는 '뼈대나 근간을 이루는 코드들의 묶음' 이라고 할 수 있다. 스프링은 인기 있는 프레임워크이다. 많은 프레임워크 중에서도 스프링 프레임워크가 인기있는 이유는 아래와 같은 스프링의 차별성 때문이다.

  • 복잡함에 반기를 들어서 만들어진 프레임워크
    엔터프라이즈급 프레임워크들의 가장 큰 문제는 복잡하다는 것이었다. 많은 케이스를 처리할 수 있고 다양한 기능을 가지다보니 하나의 기능을 위해 너무 많은 구조가 필요한 상태였다. 이러한 복잡성을 해결하기 위해서 나온 경량화된 프레임워크가 스프링이다. 일반적인 Java의 클래스와 인터페이스를 이용하는 구조여서 진입 장벽이 높지 않고, 복잡한 프레임워크에 비해 가벼워 빠르게 엔터프라이즈급의 시스템을 작성할 수 있다. 

  • 프로젝트의 전체 구조를 설계할 때 유용한 프레임워크
    다른 프레임워크들은 웹이나 데이터베이스 영역 등의 전문적인 영역에 대해서만 지원하는 경우가 많았고, 비즈니스 로직을 처리하는 부분에 대한 설계는 개발자의 역량에 맡기는 경우가 많았다. 반면에 스프링은 어느 한 분야에 집중하지 않고, 전체를 설계하는 용도로 사용될 수 있었다. 스프링이 Web이라는 제한된 영역에 많이 사용되기는 하지만, 근본적인 사상 자체는 OOP 구조를 뒷받침하고 구조를 설계하는 사상이다. 스프링의 큰 특징중 하나인 의존성 주입(DI)가 이에 대한 설명이다.

  • 다른 프레임워크들의 포옹
    스프링은 전체 구조에 집중했기 때문에 특정한 영역의 프레임워크와 공존하는 방식으로 사용할 수 있었다. 다른 프레임워크들은 특정 프레임워크를 채택하면 해당 영역 전체를 수정해야 하는 고질적인 문제를 가지고 있는 반면에 스프링은 다른 프레임워크들과의 통합을 지원했기 때문에 최소한의 수정이 가능했다. 스프링의 최대 장점은 기본 뼈대를 흔들지 않고, 여러 종류의 프레임워크를 혼용해서 사용할 수 있다는 점이다.

  • 개발 생산성과 개발도구의 지원
    스프링의 경우 이론적으로는 개발자가 제대로 이해해야 하는 부분이 많았지만, 결과적으로 코드의 양은 확실히 줄어들 수 있었고, 유지 보수에 있어서도 XML의 설정 등을 이용했기 때문에 환영받을 수 있었다. STS나 Eclipse, Intellij 등의 플러그인의 지원 역시 다른 프레임워크들에 비해서 빠른 업데이트가 되었기 때문에 별도의 새로운 개발도구에 대한 적응이 없이도 개발이 가능했다. 

스프링의 주요한 변화는 다음과 같다.

  • Spring 2.5버전 : 어노테이션을 활용하는 설정을 도입하면서 편리한 설정과 개발이 가능하도록 지원
  • Spring 3.0버전 : 별도의 설정 없이도 Java 클래스만으로 설정 파일을 대신할 수 있게 지원 
  • Spring 4.0버전 : 모바일 환경과 웹 환경에서 많이 사용되는 REST 방식의 컨트롤러 지원
  • Spring 5.0버전 : Reactor를 이용한 Reactive 스타일의 개발 환경 지원'

스프링의 주요 특징

  • POJO 기반의 구성 
  • 의존성 주입(Dependency Injection)을 통한 객체 간의 관계 구성 
  • AOP(Aspect-Oriented-Programming) 지원
  • 편리한 MVC 구조
  • WAS의 종속적이지 않은 개발 환경

POJO 기반의 구성 

스프링의 성격 자체가 가벼운 프레임워크지만, 그 내부에는 객체 간의 관계를 구성할 수 있는 특징을 가지고 있다. 스프링은 다른 프레임워크들과 달리 이 관계를 구성할 때 별도의 API 등을 사용하지 않는 POJO(Plain Old Java Object)의 구성만으로 가능하도록 제작되어 있다. 쉽게 말해 일반적인 Java 코드를 이용해서 객체를 구성하는 방식을 그대로 스프링에서 사용할 수 있다는 얘기다. 

이것이 중요한 이유는 코드를 개발할 때 개발자가 특정한 라이브러리나 컨테이너의 기술에 종속적이지 않다는 것을 의미하기 때문이다. 개발자는 가장 일반적인 형태로 코드를 작성하고 실행할 수 있기 때문에 생산성에도 유리하고, 코드에 대한 테스트 작업 역시 좀 더 유연하게 할 수 있다는 장점이 생긴다. 

의존성 주입(DI)과 스프링

스프링에 대한 얘기를 하면서 빠지지 않는 개념이 이 '의존성 주입'이라는 개념이다. 의존성(Dependency)이라는 것은 하나의 객체가 다른 객체 없이 제대로 된 역할을 할 수 없다는 것을 의미한다. (흔히 A 객체가 B 객체 없이 동작이 불가능한 상황을 'A가 B에 의존적이다'라고 표현한다) 

'주입(Injection)'은 말 그대로 외부에서 '밀어 넣는 것'을 의미한다. 의존성과 주입을 결합해서 생각해 보면 '어떤 객체가 필요한 객체를 외부에서 밀어 넣는다'는 의미가 된다. 그렇다면 왜 외부에서 객체를 주입하는 방식을 사용하는지에 대한 의문이 들것이다. 그 이유는 '주입을 받는 입장에서는 어떤 객체인지 신경 쓸 필요가 없다'는 것이다. 즉 '어떤 객체에 의존하든 자신이 역할은 변하지 않는다'와 같은 의미이다. 

'의존성 주입' 방식을 사용하려면 추가적인 하나의 존재가 필요하게 된다. 이 존재는 의존성이 필요한 객체를 찾아서 '주입'하는 역할을 하게된다. 

스프링은 이러한 구조를 만드는데 적합한 구조로 설계되어 있다. 스프링에서는 'ApplicationContext'라는 존재가 필요한 객체들을 생성하고, 필요한 객체들을 주입하는 역할을 해주는구조이다. 따라서 스프링을 이용하면 개발자들은 기존의 프로그래밍과달리 객체와 객체를 분리해서 생성하고, 이러한 객체들을 엮는(wiring) 작업을 하는 형태의 개발을 하게 된다. 스프링에서는 ApplicationContext가 관리하는 객체들을 '빈(Bean)'이라는 용어로 부르고, 빈과 빈 사이의 의존관계를 처리하는 방식으로 XML 설정, 어노테이션 설정, Java 설정 방식을 이용할 수 있다

AOP의 지원

좋은 개발환경의 중요 원칙은 '개발자가 비즈니스 로직에만 집중할 수 있게 한다.' 이다. 이 목표를 이루기 위해서는 몇 가지 중요한 원칙이 있지만, 가장 쉽게 생각할 수 있는 것이 '반복적인 코드의 제거'라고 할 수 있다. 스프링은 프레임워크를 이용한 개발은 이러한 반복적인 코드를 줄이고, 핵심 비즈니스 로직에만 집중할 수 있다.

대부분의 시스템이 공통으로 가지고 있는 보안, 로그, 트랜잭션 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는 '횡단 관심사(cross-concern)'라고 한다. 스프링은 이러한 횡단 관심사를 분리해서 제작하는 것이 가능하다. AOP(Aspect Orinted Programming)는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패러다임이다. 

스프링은 AOP를 AspectJ의 문법을 통해서 작성할 수 있는데, 이를 통해서 개발자는 1) 핵심 비즈니스 로직에만 집중해서 코드를 개발할 수 있게 되었고, 2) 각 프로젝트마다 다른 관심사를 적용할 때 코드의 수정을 최소화시킬 수 있었으며, 3) 원하는 관심사의 유지보수가 수월한 코드를 구성할 수 있다. 

트랜잭션의 지원

데이터베이스를 이용할 때 반드시 신경 써야 하는 부분은 하나의 업무가 여러 작업으로 이루어지는 경우의 트랜잭션 처리이다. 이 트랜잭션 처리는 상황에 따라서 복잡하게 구성될 수도 있고, 아닐 수도 있는데, 그때마다 코드를 이용해서 처리하는 작업은 개발자에게는 상당히 피곤한 일이다. 스프링은 이런 트랜잭션의 관리를 어노테이션이나 XML로 설정할 수 있기 때문에 개발자가 매번 상황에 맞는 코드를 작성할 필요가 없도록 설계되었다. 

 

스프링이 동작하면 생기는 일 

  • 스프링 프레임워크가 시작되면 먼저 스프링이 사용하는 메모리 영역을 만들게 되는데 이를 컨텍스트(Context)라고 한다. 스프링에서는 ApplicationContext라는 이름의 객체가 만들어진다. 
  • 스프링은 자신이 객체를 생성하고 관리해야 하는 객체들에 대한 설정이 필요하다. 이에 대한 설정이 root-context.xml 파일이다.
  • root-context.xml에 설정되어 있는 <context:component-scan> 태그의 내용을 통해서 'org.zerock.sample' 패키지를 스캔(scan)하기 시작한다. 
  • 해당 패키지에 있는 클래스들 중에서 스프링이 사용하는 @Component라는 어노테이션이 존재하는 클래스의 인스턴스를 생성한다. 
  • Restaurant 객체는 Chef 객체가 필요하다는 어노테이션(@Autowired) 설정이 있으므로, 스프링은  Chef 객체의 레퍼런스를 Restaurant 객체에 주입한다. 

(Restaurant 객체의 필드에 Chef가 있고 이는 @Autowird 속성이 있다) 

 

728x90
Spring Framework Module

@Get, @Post, Delete, @Put, @Patch Mapping

728x90

Spring Boot를 이용하면서 이전에는 (주로 4.3.18 버전의 스프링 MVC를 사용했다) 보지 못했던 맵핑들이 자주 보였는데, 그 중에서도 Mapping 부분에 Get, Post 등이 직접 언급되는 어노테이션이 나오는 걸 보고 구글링하게 되었다. 간략한 내용이지만 정리를 해보려고 한다. (혹시나 헷갈리면 확인하기 위함이 제일 클 것 같다!)

 

Spring 4.3 버전에 추가된 내용으로는 기존의 @RequestMapping(value="/", method="...")의 어노테이션의 사용을 조금 더 명시적이고 효율적인 방법으로 사용하기 위해 @GetMapping, @PostMapping, @DeleteMapping, @PutMapping, @PatchMapping의 메소드가 생겼다.

기본적인 작동원리

요청( HTTP(S) ) @맵핑 어노테이션
GET @GetMapping
POST @PostMapping
DELETE @DeleteMapping
PATCH, PUT @PatchMapping, @PutMapping

 

기존의 요청 방식

@RequestMapping(value = "/test", method = RequestMethod.GET
public void TestCase(HttpServletRequest request, HttpServletResponse response) {
   // do something
} 

 

- @GetMapping 사용 방법(다른 것도 동일)

@GetMapping(value = "/test2")
public void TestCase2(HttpServletRequest request, HttpServletResponse response) {
  // do something
}

 

위에서 GetMapping 을 상황에 따라서 @PostMapping, @DeleteMapping, @PatchMapping, @PutMapping 등으로 바꾸기만 하면 된다.

더 명시적이다는 면에서 코드 가독성이 올라간다.(주관적인 의견이지만 대부분이 그렇다고 생각할 것이다. 코드를 보는데 노력하지 않아도 한눈에 보이는 장점이 있다)

728x90