Spring 심화 1주차

Doyoon Lee·2021년 9월 10일
0

Spring

목록 보기
6/7

스프링 프레임워크 학습 전략

  • 스프링 학습이 어려운 이유
    • 약 20여년 간 진화된 프레임워크
    • 개발 편의성 증대해주는 방향으로 발전. But, 원리 파악은 어려움
    • 방대한 양의 관련 기능과 옵션. But, 모듈화가 잘 되어있음
  • 스프링 학습 전략
    1. 간단한 프로젝트들을 만들어서 사용법 위주의 경험을 쌓는다.
    2. 그 프로젝트들에 원하는 기능들을 기획하고 추가해 본다.
    3. 필요한 부분들을 중점적으로 학습한다.
    4. 스프링 학습은 주제 별로, 이해가 가는 부분까지만 학습 반복

H2 웹콘솔 설정

spring.h2.console.enabled=true
spring.datasource.url=jdbc:h2:mem:springcoredb
  • 다음 코드를 application.properties에 붙여넣으면 H2 웹콘솔을 사용할 수 있다.

  • http://localhost:8080/h2-console 해당 URL로 들어간 후, JDBC URL을 다음과 같이 설정하면 jdbc:h2:mem:springcoredb DB가 정상적으로 동작한다.


JSON 처리 라이브러리 추가

  • JSON을 자바로, 자바를 JSON으로 바꿀 때 필요한 라이브러리
  • bulid.gradle 파일의 dependencies 안에 원하는 라이브러리를 추가하면 된다.
  • 다른 사람이 만든 라이브러리 추가 방법
    1. mvn 사이트에서 "JSON" 라이브러리 검색
    2. Grable 탭 클릭
    3. 내용 복사하여 build.gradle > dependencies 안에 붙여넣기
    4. dependencies 옆의 Run 버튼 클릭
    5. import 완료
  • build.gradle 안의 dependencies에서 오른쪽 클릭 후, generate -> add maven artifact dependency에서 좀 더 쉽게 추가할 수 있다.

Controller의 역할

  • Servlet과 Controller
    • Servlet(서블릿)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말한다.
    • Controller의 경우, Servlet과 다르게 Spring에서 자동으로 해주는 기능(ex. json으로 자동 변환)이 많다.
  • 스프링의 Controller

    - @Controller는 스프링 서버 개발자 입장에서 시작점과 끝점으로 보이지만, 사실 스프링이 사용자의 요청(Request)와 응답(Response)을 처리해주고 있다.
  • View를 통한 HTML 응답
@Controller
class ExamController {
	@GetMapping("/home")
	public String home() {
		return "/home.html";
	}
}
  • 자바 객체 -> JSON 변환(@ResponseBody를 통해 스프링이 알아서 해줌)
@Controller
class ExamController {
	@Autowird
	private ProductRepository productRepository

	@GetMapping("/product/list")
	public @ResponseBody List<Product> getProducts() {
		return productRepository.findAll();
	}
}
  • RestController(@Controller + @ResponseBody)
    - ResponseBody를 넣지 않아도 응답으로 가는 자바 객체는 모두 다 JSON으로 변환을 해준다.
@RestController
class ExamController {
	@Autowird
	private ProductRepository productRepository

	@GetMapping("/product/list")
	public List<Product> getProducts() {
		return productRepository.findAll();
	}
}

객체지향 프로그래밍

서버 개발자들은 서버에서의 처리가 대부분 비슷하다는 걸 깨닫고, 처리 과정을 크게 3개(Controller, Service, Repository)로 분리했다.

  • Controller

    - 클라이언트의 요청을 받음
    - 요청에 대한 처리는 서비스에게 전담
    - 서비스의 결과를 클라이언트에게 응답

  • Service

    - 비지니스 로직(서버에서 사용자의 요구사항 처리)을 처리
    - DB 정보가 필요할 때는 Repository에게 전담

  • Repository

    - DB 관리(연결, 해제, 자원관리)
    - DB CRUD 작업 처리

  • 전체 흐름


DI(의존성 주입)의 이해

  • 강한 결합

    - 각각의 Controller는 모두 다른 Service1 객체를 가지고 있다. 또한 생성된 Service1은 각각 다른 Repository1 객체를 가지고 있다.
    - 이러한 강한 결합을 해결하는 방법은 DI(의존성 주입)이다.
  • DI(Dependency Injection)
    • 하나의 객체에서 다른 객체가 필요할 때, 객체를 직접 생성하지 않고 이미 생성되어 있는 객체를 가져오는 작업이다. 한국말로 "의존성 주입"이라고 부른다.
  • IoC(Inversion of Control)
    • 프로그램의 제어의 흐름이 뒤바뀐다고 해서 "제어의 역전(IoC: Inversion of Control)이라고 부른다. 사용자가 자신이 필요한 객체를 생성해서 사용하는 것이 일반적인데, 반대로 필요한 객체를 요청하면 어디서 어떻게 만들어졌는지 알 필요 없는 객체가 사용자의 손에 쥐어진다. 그럼 사용할 객체의 생성자가 바뀌더라도 사용자 입장에서는 알 수 없고, 알 필요도 없다. 그냥 용도에 맞게 사용만 하면 된다.
  • 변경된 의존관계 다이어그램

스프링 IoC 컨테이너 사용하기

  • DI를 사용하기 위해서는 객체 생성이 우선되어야 한다. 이 객체는 스프링 프레임워크가 필요한 객체를 생성하여 관리하는 역할을 대신해준다.
  • 빈(Bean): 스프링이 생성해주는 객체
  • 스프링 IoC 컨테이너: 빈을 모아둔 통

스프링의 Annotation

  • @Controller, @RestController, @Service, @Repository와 같이 앞에 '@'를 붙이는 것을 어노테이션(Annotation)이라고 부른다.
  • 모두 스프링의 빈으로 등록되지만, 좀 더 특별한 역할을 맡은 빈들이다.

스프링 프레임워크

  • 스프링 프레임워크는 Java 기반의 enterprise applications(기업용 애플리케이션)의 개발 편의서을 제공해준다.
  • 스프링은 결국 기업용 애플리케이션의 요구사항 해결에 초점을 맞춘 프레임워크
  • 기업용 애플리케이션의 특성: 신뢰성이 중요, 서버의 안정성 유지가 중요, 데이터 관리가 중요
  • 스프링은 개발자들이 요구사항에만 집중하여 개발할 수 있도록 해준다. SQL 등 부가적으로 신경써야할 것을 대신 처리해준다.

0개의 댓글