멋사 Backend 39일차 🦁

신재원·2023년 6월 14일

🟩 Spring

📣 stereotype

  • 스테레오 타입 어노테이션이라고 하며,해당 클래스가 어떤 역할을 하는지 명확히 확인이 가능합니다.
    ( @Component, @Repository, @Service, @Controller 등)
  • 어노테이션 기반 AOP (관점 지향) 프로그래밍이며,
    실제 구현보다 역할적인 구분에 초점이 맞춰져 있습니다.

📣 Component 란?

  • 구성요소라는 뜻으로, 개발자가 작성한 ClassBean으로 등록한다는 것입니다. ( 해당 클래스를 빈으로 등록해라 )

  • 사용 예시

  • 해당 클래스는 Bean으로 등록하여 Spring이 관리한다는 것입니다.

ComponentScan

  • @ComponentScan : Component가 붙은 어노테이션을 Scan(검색) 합니다.
  • main 메소드에 있는 SpringBootApplication 어노테이션에는 @ComponentScan이 내장되어있습니다.

👀 알고 있는 @Service, @Controller, @Repository 등의 어노테이션은 @Component 어노테이션을 내장하고있어 main 메소드 실행시 Scan이 되는것입니다.

🌰 Bean 이란?

  • 개발자가 작성한 메소드를 통해 반환되는 객체를 Bean 으로 만드는 것입니다.
    ( 스프링이 관리하는 자바객체 )
  • 주로 @Configuration 어노테이션이 들어간 클래스에서 사용합니다.

📣 Configuration 이란?

  • 설정파일을 만들기 위한 어노테이션 or Bean을 등록하기 위한 어노테이션 입니다.
  • @Configuration을 사용함으로써 가시적으로, Bean을 등록할것이며, 설정파일이라는것을 알수있습니다.

<역할> Bean을 등록할때 "싱글톤" 을 보장합니다. (뒤에서 다룰 내용)

📢 RestController 란?

  • @Controller 와 달리 view 반환없이 문자열 뒤에서 배울 JSON 데이터를 주로 반환 합니다.
  • @RestController = @Controller + @ResponseBody 이며

@ResponseBody 란 ?
서버 ➡ 클라이언트 응답 이며, 자바 객체를 JSON 기반의 HTTP Body로 변환 합니다.

@RestController 예제 코드

@RestController // ResponseBody + Controller
@RequiredArgsConstructor
public class AppController {
private final AppService appService;

 @GetMapping("read")
    public String readOne(){
        appService.readStudent(1L);
        return "read-done";
    }
}

@ControllerResponseBody 사용한 예제

@Controller
@RequiredArgsConstructor
public class AppController {

private final AppService appService;

 @GetMapping("read")
    public @ResponseBody String readOne(){
        appService.readStudent(1L);
        return "read-done";
    }
}

실무에서는 @RestController@Controller 클래스를 별도로 만들어서 관리하는 것이 일반적입니다.

💬 JPA

  • 기존의 SQL 쿼리문 작성 없이, 메소드로 DB를 조작할수 있습니다.
  • 메소드를 커스텀하여 DB를 조작할수 있지만, 결국 SQL을 작성해야 써야되는 경우가 현업에서 존재합니다. (번외 참고)

반복적인 CRUD 작업을 JPA가 처리 해준다고 합니다.

  • 인터페이스 프로젝트를 생성후,
    extends JpaRepository <내가 사용할 Entity 클래스, 그 Entity의 ID 컬럼의 타입> 상속하여 사용합니다.
  • save 메소드
public void createStudent() {
// save 메소드 없이 되는이유는 JPA가 
// 기본적인 CRUD 메소드를 자동으로 해줌
studentRepository.save(newEntity);
}

save 메소드 처럼 Read Update Delete 메소드도 다 제공합니다.

Spring Data Jpa

SQL 쿼리문 없이 메소드를 커스텀하여 DB에 접근할수 있습니다.

  • SELECT * FROM students ORDER BY Name; 쿼리문가 동일한 작용을 합니다.

🍘 번외

❗❗ 중요

  • Lombok 라이브러리를 사용하여 편하게 getter, setter, 생성자 주입을 할수 있습니다. 하지만, 지루한 반복을 편리하게 해주는것이지 사용 의미를 알고있어야 합니다.
  • JPA 개념도 마찬가지입니다. SQL 작성하는 방법을 모르고 JPA 만 사용할줄 알면 좋은 개발자가 되지 못합니다.
    ( 쿼리문 작성 사용 방법을 알고있어야합니다. )

Reference

0개의 댓글