본문 바로가기

spring/spring 정리

Spring Framework 개발 순서, 어노테이션

 

Spring Framework 개발 순서

 

1. SQL Table 작성
어떤 데이터를 어떻게 저장하고 관리할지 목록 작성 및 데이터 크기 관리 결정한다.

2. DTO 작성 
테이블 내에 들어갈 데이터들이 들어갈 개체 생성 및  프론트에서 이용할 데이터들 목록 생성한다
 
3. DAO,  Service, SQL 구문 작성
데이터 검색을 위한 SQL구문을 작성한다.
SQL을 만들고 나서 그 과정을 DAO와 변수 이름을 맞춰 작성한다.


4. Controller 작성
어떤 DTO를 넘겨주고 데이터 송신 방식을  get, post, delete 등으로 할지 결정한다
백엔드에서는 프론트 단에서 화면을 만들기 전까지 제대로 SQL 구문이 가는지 Postman 등을 이용해서 화면단으로 넘어가는 데이터 전송을 테스트한다.

5. jsp css 화면단 연결 작성
Controller에서 보내주는 DTO들을 사용해서 페이지 작성한다.
프론트의 경우 데이터 없이 화면을 완성할 수 있는데 이후에 데이터가 넘어오지 않는경우 대부분 Controller의 문제이다.

 

 

Spring Bean


Spring IoC 컨테이너가 관리하는 자바 객체를 빈(Bean)이라고 부릅니다. 이전 포스팅에서 제어의 역전 (IOC, Inversion Of Control)에 대하여 간략하게 알아보았는데요. IOC의 특징은 아래와 같습니다.

일반적으로 처음에 배우는 자바 프로그램에서는 각 객체들이 프로그램의 흐름을 결정하고 각 객체를 직접 생성하고 조작하는 작업(객체를 직접 생성하여 메소드 호출)을 했습니다. 즉, 모든 작업을 사용자가 제어하는 구조였습니다. 예를 들어 A 객체에서 B 객체에 있는 메소드를 사용하고 싶으면, B 객체를 직접 A 객체 내에서 생성하고 메소드를 호출합니다. 하지만 IOC가 적용된 경우, 객체의 생성을 특별한 관리 위임 주체에게 맡깁니다. 이 경우 사용자는 객체를 직접 생성하지 않고, 객체의 생명주기를 컨트롤하는 주체는 다른 주체가 됩니다. 즉, 사용자의 제어권을 다른 주체에게 넘기는 것을 IOC(제어의 역전) 라고 합니다.


우리가 알던 기존의 Java Programming 에서는 Class를 생성하고 new를 입력하여 원하는 객체를 직접 생성한 후에 사용했었습니다. 하지만 Spring에서는 직접 new를 이용하여 생성한 객체가 아니라, Spring에 의하여 관리당하는 자바 객체를 사용합니다. 이렇게 Spring에 의하여 생성되고 관리되는 자바 객체를 Bean이라고 합니다. Spring Framework 에는 Spring Bean 을 얻기 위하여 ApplicationContext.getBean() 와 같은 메소드를 사용하여 Spring 에서 직접 자바 객체를 얻어서 사용합니다.

 

 

Spring의 대표적인 Annotation

 

JAVA에서 Annotation 이라는 기능이 있습니다. 사전상으로는 주석의 의미이지만 Java 에서는 주석 이상의 기능을 가지고 있습니다. Annotation은 자바 소스 코드에 추가하여 사용할 수 있는 메타데이터의 일종입니다. 소스코드에 추가하면 단순 주석의 기능을 하는 것이 아니라 특별한 기능을 사용할 수 있습니다.


Annotation은 클래스와 메서드에 추가하여 다양한 기능을 부여하는 역할을 합니다. Annotation을 활용하여 Spring Framework는 해당 클래스가 어떤 역할인지 정하기도 하고, Bean을 주입하기도 하며, 자동으로 getter나 setter를 생성하기도 합니다. 특별한 의미를 부여하거나 기능을 부여하는 등 다양한 역할을 수행할 수 있습니다.


이러한 Annotation을 통하여 코드량이 감소하고 유지보수하기 쉬우며, 생산성이 증가됩니다. Spring에서 사용하는 많은 Annotation에 대하여 정리해보려고 합니다.

 

@Component
개발자가 생성한 Class를 Spring의 Bean으로 등록할 때 사용하는 Annotation입니다. Spring은 해당 Annotation을 보고 Spring의 Bean으로 등록합니다.


@ComponentScan
Spring Framework는 @Component, @Service, @Repository, @Controller, @Configuration 중 1개라도 등록된 클래스를 찾으면, Context에 bean으로 등록합니다. @ComponentScan Annotation이 있는 클래스의 하위 Bean을 등록 될 클래스들을 스캔하여 Bean으로 등록해줍니다.


@Bean
@Bean Annotation은 개발자가 제어가 불가능한 외부 라이브러리와 같은 것들을 Bean으로 만들 때 사용합니다.


@Controller
Spring에게 해당 Class가 Controller의 역할을 한다고 명시하기 위해 사용하는 Annotation입니다.


@RequestHeader
Request의 header값을 가져올 수 있으며, 해당 Annotation을 쓴 메소드의 파라미터에 사용합니다.


@RequestMapping
@RequestMapping(value=”“)와 같은 형태로 작성하며, 요청 들어온 URI의 요청과 Annotation value 값이 일치하면 해당 클래스나 메소드가 실행됩니다. Controller 객체 안의 메서드와 클래스에 적용 가능하며, 아래와 같이 사용합니다.
Class 단위에 사용하면 하위 메소드에 모두 적용됩니다.
메소드에 적용되면 해당 메소드에서 지정한 방식으로 URI를 처리합니다


@RequestParam
URL에 전달되는 파라미터를 메소드의 인자와 매칭시켜, 파라미터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용합니다. Json 형식의 Body를 MessageConverter를 통해 Java 객체로 변환시킵니다.


@RequestBody
Body에 전달되는 데이터를 메소드의 인자와 매칭시켜, 데이터를 받아서 처리할 수 있는 Annotation으로 아래와 같이 사용합니다. 클라이언트가 보내는 HTTP 요청 본문(JSON 및 XML 등)을 Java 오브젝트로 변환합니다. 아래와 같이 사용합니다.
클라이언트가 body에 json or xml 과 같은 형태로 형태로 값(주로 객체)를 전송하면, 해당 내용을 Java Object로 변환합니다.


@ModelAttribute
클라이언트가 전송하는 HTTP parameter, Body 내용을 Setter 함수를 통해 1:1로 객체에 데이터를 연결(바인딩)합니다. RequestBody와 다르게 HTTP Body 내용은 multipart/form-data 형태를 요구합니다. @RequestBody가 json을 받는 것과 달리 @ModenAttribute 의 경우에는 json을 받아 처리할 수 없습니다.


@ResponseBody
@ResponseBody은 메소드에서 리턴되는 값이 View 로 출력되지 않고 HTTP Response Body에 직접 쓰여지게 됩니다. return 시에 json, xml과 같은 데이터를 return 합니다.


@Autowired
Bean을 주입받기 위하여 @Autowired 를 사용합니다. Spring Framework가 Class를 보고 Type에 맞게(Type을 먼저 확인 후, 없으면 Name 확인) Bean을 주입합니다.

 

@GetMapping
RequestMapping(Method=RequestMethod.GET)과 똑같은 역할을 합니다


@PostMapping
RequestMapping(Method=RequestMethod.POST)과 똑같은 역할을 합니다.


@SpringBootTest
Spring Boot Test에 필요한 의존성을 제공해줍니다.

 

'spring > spring 정리' 카테고리의 다른 글

spring 기본 개념  (0) 2022.09.24