[spring boot] Rest API

JeaHyuck·2021년 10월 7일
0
post-thumbnail

우선.. 기존 Spinrg을 사용하던 뉴비 개발자 입장으로써 처음 접해보는 Spring boot는 ... 이해하기 쉬웠다

이유는 Spring boot는 Spring보다 편하게 쓰라고 나온 거다 ! 라는 말이 있는것 처럼 실제로 편하기도 했다.

Spring boot + Mybatis + Oracle + vue.js

오늘은 MVC패턴을 완성한 과정을 기록하기로 했다.

기존에 Spring MVC와 비슷하게 Service패키지(Model), Controller패키지(Controller), VO(Value Object)패키지로 나누어서 만들었고,

Mapper 또한 resources파일 밑에 mapper/~~Mapper/~Mapper.xml라고 만들어 주었고

프로퍼티파일에는

#db connection(Oracle)
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@localhost:1521/xe
spring.datasource.username=c##jh
spring.datasource.password=1234

# MyBatis
# mapper.xml 위치 지정
mybatis.mapper-locations:classpath:mapper/**/*.xml

# model 프로퍼티 camel case 설정
mybatis.configuration.map-underscore-to-camel-case=false

# 패키지 명을 생략할 수 있도록 alias 설정
mybatis.type-aliases-package=com.atoz_develop.mybatissample.model

# mapper 로그레벨 설정
logging.level.com.atoz_develop.mybatissample.repository=TRACE

이런식으로 작성했다.

다른점

다른점이라면 Spring Boot 에는 @SpringBootApplication이라는 어노테이션이 존재하는데...

@SpringBootApplication 이란?
@SpringBootAplication 어노테이션은 auto-configuration을 담당합니다.

다시 이야기 하자면 @SpringBootAplication 어노테이션으로 인해 스프링 부트의 자동 설정, 스프링 Bean 읽기와 생성이 모두 자동으로 설정됩니다.

@SpringBootAplication 어노테이션이 있는 위치부터 설정을 읽어가기 때문에 이 어노테이션을 포함한 클래스는 항상 프로젝트의 최상단에 위치해야만 합니다.

@SpringBootAplication의 내부 구조
@SpringBootAplication의 내부 구조를 간단히 살펴 보면 아래와 같습니다.


@SpringBootApplication을 이용하면 위 코드를 보면 알 수 있듯이 세가지의 어노테이션을 포함하고 있습니다.

  • @EnableAutoConfiguration

  • @ComponentScan

  • @SpringBootConfiguration

이 세가지의 어노테이션이 @SpringBootAplication의 특징인데 아래에서 간단히 설명하겠습니다.

@EnableAutoConfiguration – 설정 자동 등록하기
@EnableAutoConfiguration은 Spring boot의 핵심으로써, 미리 정의되어 있는 Bean들을 가져와서 등록해줍니다.

미리 정의되어 있는 Bean들은 spring-boot-autoconfigure > META-INF > spring.factories에 위치하여 있습니다.

@ComponentScan – 빈 등록하기
스프링에서 관리하는 POJO를 ‘빈(Bean)’이라고 합니다.

@ComponentScan은 현재 패키지 이하에서 아래와 같은 어노테이션이 붙어 있는 클래스들을 찾아서 빈으로 등록하는 역할을 합니다.

@Component
@Configuration
@Repository
@Service
@Controller
@RestController

@SpringBootConfiguration - @Configuration의 용도

@Configuration은 spring 에 빈 팩토리를 위한 오브젝트를 설정을 담당하는 클래스라고 인식 할 수 있도록 알려주는 어노테이션입니다.

@SpringBootConfiguration은 @Configuration의 대안이라고 할 수 있습니다.

@Configuration와 거의 같은 일을 하지만 가장 큰 차이점이라고 하면 @SpringBootConfiguration을 사용하면 구성을 자동으로 찾을 수 있다는 것 입니다. 이것은 단위 또는 통합 테스트에 특히 유용 할 수 있습니다.

출처: https://coooding.tistory.com/33 [아직은 정체성이 없는 블로그]

쉽게 말해서..

1. @SpringBootApplication의 의미는 @Configuration + @EnableAutoConfiguration + @ComponentScan 을 합친 것이다.

-1 @Configuration 이란?
현재 클래스가 Spring의 설정 파일임을 알려주는 어노테이션
== Spring이 Java config로 간주한다!
Configuration을 클래스에 적용하고 @Bean을 해당 클래스의 메소드에 적용하면
@Autowired로 빈을 부를 수 있다.
개발자가 생성한 class를 Bean으로 생성 할 때 Single Tone으로 한번만 생성하고
@Component는 Bean을 생성 할 때 java에서 new로 생성하듯이 생성한다.

-2 @EnableAutoConfiguration 이란?
Spring boot 클래스패스 세팅 및 다양한 Bean 추가 등을 시켜주는 어노테이션
어플리케이션에 추가된 설정들을 자동으로 추가해주는 어노테이션

-3 @ComponentScan 이란?
다른 컴포넌트, 서비스, 설정 등을 찾을 수 있게 도와주는 어노테이션
즉 자바 클래스를 스프링 빈이라고 표시하고
스프링의 component-scanning 기술을 통해 ApplicationContext에 빈으로 등록하게 하는 역할

== @Component를 검색하도록 도와준다

@Configuration 클래스도 컴포넌트로서 검색 대상이 된다.

...쉽지않네 ? 아무튼 이해한건 spring boot 실행을 하기 전 bean을 등록해주는, 어플리케이션에 추가된 설정들을 자동으로 추가해주는 어노테이션을 합친거라 생각한다..또한 다른 컴포넌트를 찾게 도와주는 어노테이션도 추가된다.

결론은

이 @SpringBootApplication 어노테이션이 달린 클라스파일에다가

@MapperScan(basePackageClasses = ShopVueFrontApplication.class)를 넣어주면 @Mapper어노테이션이 달린 인터페이스들을 찾아준다.

그래서 Mapper 인터페이스를 작성하고 @Mapper 어노테이션을 붙여주면 끝

그 후 Mapper.xml 파일에 가서 해당 인터페이스와 연결시켜주면 된다. ( 주의할점 : 확장자는 없어야한다. )

profile
기억보단 기록을

0개의 댓글