[Spring] Week3 - Section 4~7

pos++·2023년 9월 16일

Spring

목록 보기
3/9
post-thumbnail

스프링 빈과 스프링 컨테이너 - 컴포넌트 스캔 방식

스프링 컨테이너에서 스프링 빈을 관리함
스프링 빈(객체)을 스프링 컨테이너에 등록
-> 객체를 여러군데에서 new하지 않고 등록된 객체 하나를 공용으로 사용

스프링 빈 등록
@Controller
@Repository
@Service
이 어노테이션들을 보고 스프링이 객체를 생성해서 스프링 컨테이너에 넣어줌 (@Component를 포함함)


의존과 의존성

Dependency Injection:
생성자를 만든 후 @Autowired 를 써주면,
스프링이 스프링 컨테이너에 등록되어있는 연관된 객체(스프링 빈)을 찾아서 연결해줌


DIP(Dependency Inversion Principle)

객체지향 5원칙 중 하나.
의존 관계를 맺을 때 변화하기 쉬운 것에 의존하기보다는, 변화하지 않는 것에 의존하자
-> 가급적 객체의 상속은 인터페이스를 통해서 이루어져야 한다


JDBC와 JPA
JDBC(Java Database Connectivity) : 자바가 DB에 접속할 수 있도록 해주는 자바 API

스프링 JdbcTemplate

  • JDBC API의 반복되는 코드를 대부분 제거해준다
  • SQL은 직접 작성해야 한다

JPA(Java Persistence API) : 자바 진영의 ORM기술 표준. 여러 업체들이 구현함 (hibernate, ...)
ORM(Object Relational Mapping) : 객체와 Relational DB를 mapping한다. Annotation으로~

  • 반복되는 코드를 대부분 제거해준다
  • SQL도 직접 만들어서 실행해준다(JPQL)
  • EntityManager로 모든게 동작함. DB까지 연결해서 스프링이 만들어준다 -> 그걸 injection 받으면 됨
  • JPA를 통한 모든 데이터 변경은 트랜잭션(@Transactional) 안에서 실행해야 한다

스프링 데이터 JPA

  • 리포지토리에 구현 클래스 없이 인터페이스만으로 개발을 완료하는게 가능해진다
    스프링 데이터 JPA가 인터페이스에 대한 구현체를 만들어내고 스프링 빈으로 등록해준다 (extends JpaRepository 필요)

  • 기본 CRUD 기능을 모두 제공해준다 (findByName(), findByEmail() 등)


[+]
1. GetMapping("hello")의 의미

: /hello 경로로 들어온 HTTP GET 요청을 해당 어노테이션이 붙은 메소드에 매핑되어 실행 (/hello)
URL http://localhost:8080/hello 를 통해서 접속


2. model의 용도

: 비즈니스 로직, 자료구조

model은 controller와 view 간 데이터를 전달하는 데 사용되는 객체.

(1) 굳이 model을 쓰는 이유

: controller는 데이터를 가공, view에 전달함 -> 이 중간 매개체로 model을 전달한다!

(2) "data"를 model에 전달하여 html 파일에서 사용하는 방법

@GetMapping("/example")
public String example(Model model) {
    String data = "Hello World!";
    model.addAttribute("data", data);
    return "example";
}

3. 아래 코드에서 return "hello"; 를 하는 이유.

-> controlle에서 해당 요청을 처리한 후 보여줄 view의 이름을 반환하는 것.
resources/templates 아래에 있는 hello.html 을 찾아기기 위해


4. 만약 @GetMapping 밑에 @ResponseBody를 삽입한다면 localhost:8080/hello-string에 접속 시 무엇이 출력될까

@ResponseBody 어노테이션을 사용하면 view를 찾지 않고, 메소드가 반환하는 객체를 직접 HTTP 응답 본문으로 전송.

따라서, 해당 어노테이션을 사용하면 REST API와 같이 JSON, XML 등의 형식으로 데이터를 반환하는 경우에 매우 유용


5. JPA란

(1) 왜 쓰는가:

JPA는 객체와 관계형 데이터베이스 간의 매핑을 자동으로 처리해주기 때문에,

개발자가 직접 SQL을 작성하지 않고도 객체 지향적인 방식으로 데이터베이스를 다룰 수 있음



강의: 스프링 입문 - 코드로 배우는 스프링부트, 웹 MVC, DB 접근 기술 (김영한)

profile
밀린 TIL 업로드 조금씩 정리중...

0개의 댓글