Spring Boot
스프링 부트(Spring Boot)는 스프링(Spring)을 더 쉽게 이용하기 위한 도구이다. 스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많은데, Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여 Spring 개발을 조금 더 쉽게 만들어주는 역할을 한다.
User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점이 있다. 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요되는데, 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행하고 있다.
참고 : https://melonicedlatte.com/2021/07/11/174700.html
Controller
Spring Framework의 Controller는 사용자가 화면(View)단에서 입력이나 어떤 이벤트를 했을 경우, 그 이벤트에 맞는 화면(View)이나 비지니스 로직(Model)을 실행할 수 있도록 업데이트 해주는 역할을 한다. 즉, Model과 View를 연결해주는 다리 역할이라고 할 수 있다. 서버에서 기능별 URL이라는 API를 개설해 놓았고, 클라이언트는 필요한 정보를 얻기 위해 적절한 API에 요청한다. 즉 Controller는 이런 창구 역할을 하는 API들을 모아놓은 클래스라고 할 수 있다.
- Front-end에서 들어오는 클라이언트 측의 요청이 가장 먼저 서버 측과 맞닿는 부분
- Client의 요청을 받았을 때 그 요청에 대해 실제 업무를 수행하는 Service를 호출
- 클라이언트가 보낸 데이터가 있다면 Service를 호출할 때 전달하기 쉽게 데이터의 가공
- 모델의 업무 수행이 완료되면 그 결과를 바탕으로 화면을 구성하도록 View에 전달
- @Controller 어노테이션을 사용하여 만들어진 컨트롤러 클래스에 라우팅(Routing)할 수 있도록 요청 URL에 대해 해당하는 메소드를 매핑해줄 수 있도록 하기 위해 @RequestMapping 어노테이션을 사용한다.
참고 : https://yongku.tistory.com/2348
Service
- Service : Controller의 요청을 받아 알맞은 정보를 가공 Controller에게 재전달한다.
- Service는 위에서 언급했듯이 Repository에서 얻어온 정보를 바탕으로 자바 문법을 이용하여 가공 후 다시 Controller에게 정보를 보내는 곳이다.
- 클라이언트 즉 controller 쪽에서 바로 데이터베이스에 접근하여 정보를 얻고 가공해서 가져가는 것은 위험하다.
- 정보를 직접 CRUD하고 가공하는 과정에서 테이블에 저장된 원본의 정보가 손상될 우려가 크기 때문이다.
- 따라서 정보 변동의 위험이 큰 로직은 Service에서 진행한다.
- 추가로 이때 원본의 데이터를 사용하는 것이 아니라 데이터베이스에서 추출한 정보의 복사본인 DTO를 만들어서 로직을 조작한다.
Repository
- Repository는 직역해도 '저장소'로 데이터베이스와 깊은 연관이 있음을 알 수 있다.
- 데이터단에 직접 매칭되는 Entity라는 것이 있는데, 이 Entity를 통해 데이터 테이블이 생성이 되면, 받아온 정보를 데이터베이스(ex. MySQL, mariaDB)에 저장하고 조회하는 기능을 수행한다.
- Repository : Entity에 의해 생성된 DB에 접근하는 메서드를 사용하기위한 interface이다.
- JPA를 상속받음으로써 기본적인 CRUD의 동작(함수 사용)이 가능해진다.
- JpaRepository<대상 엔티티, Entity에 접근할 객체의 Type>
< 중간 정리 >
- 컨트롤러 : @Controller (프레젠테이션 레이어, 웹 요청과 응답을 처리함)
- 로직 처리 : @Service (서비스 레이어, 내부에서 자바 로직을 처리함)
- 외부I/O 처리 : @Repository (퍼시스턴스 레이어, DB나 파일같은 외부 I/O 작업을 처리함)
DAO, DTO, VO 란?
DAO
- DAO(Data Access Object) 는 데이터베이스의 data에 접근하기 위한 객체. DataBase에 접근 하기 위한 로직 & 비지니스 로직을 분리하기 위해 사용한다.
DTO
- DTO(Data Transfer Object) 는 계층 간 데이터 교환을 하기 위해 사용하는 객체로, DTO는 로직을 가지지 않는 순수한 데이터 객체(getter & setter 만 가진 클래스)이다.
- 유저가 입력한 데이터를 DB에 넣는 과정을 보면,
- 유저가 자신의 브라우저에서 데이터를 입력하여 form에 있는 데이터를 DTO에 넣어서 전송한다.
- 해당 DTO를 받은 서버가 DAO를 이용하여 데이터베이스로 데이터를 집어넣는다.
VO
- VO(Value Object) 값 오브젝트로써 값을 위해 쓰인다. read-Only 특징(사용하는 도중에 변경 불가능하며 오직 읽기만 가능)을 가진다.
- DTO와 유사하지만 DTO는 setter를 가지고 있어 값이 변할 수 있다.
참고 : https://melonicedlatte.com/2021/07/24/231500.html
Entitiy
데이터베이스는 엑셀처럼 2차원 테이블이라고 생각하면 되는데, 이 테이블에 서비스에서 필요한 정보를 다 저장하고 활용하게 된다.
엑셀의 세로의 열 부분이 Column 이고, 가로의 행 부분이 엔티티 객체가 된다. 이 테이블 전체가 엔티티 이고, 각 1개의 행들이 엔티티 객체가 되는 것이라고 생각하면 된다.
- 실제 DB에 저장되는 내용들을 구현하는 class이다.
- 테이블에 대응하는 하나의 클래스라고 생각
- 하나의 객체가 DB의 하나의 Column처럼 작용한다.
참고 : https://velog.io/@jayjay28/%EC%97%94%ED%8B%B0%ED%8B%B0Entity
Annotation
- 사전적 의미로는 주석이라는 뜻이다.
- 자바에서 Annotation은 코드 사이에 주석처럼 쓰이며 특별한 의미, 기능을 수행하도록 하는 기술이다.
- 프로그램에게 추가적인 정보를 제공해주는 메타데이터라고 볼 수 있다.
- meta data : 데이터를 위한 데이터
참고(꼭 읽어보기) : https://velog.io/@ruinak_4127/Annotation%EC%9D%B4%EB%9E%80
JPA
- Java 진영에서 ORM(Object-Relational Mapping) 기술 표준으로 사용하는 인터페이스 모음
- 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스
- 인터페이스 이기 때문에 Hibernate, OpenJPA 등이 JPA를 구현함
- 참고로, JPA는 수정 메소드를 제공하지 않는다. 하지만 당연히 수정은 필요하기 때문에 JPA는 데이터 수정시, 매핑된 객체(테이블 데이터)를 조회해서 값을 변경 후 커밋하면 DB 서버에 UPDATE 문을 전송하여 UPDATE를 실행한다.
- 추가적으로 알아둬야 할 것은, 스프링에서 흔히 사용하는 것으로 알고있는 JPA는, JPA를 이용하는 spring-data-jpa 프레임워크이지 JPA는 아니다.
참고 : https://dbjh.tistory.com/77
@RequestParam, @PathVariable, @RequestBody
@RequestBody
- 요청이 온 데이터(JSON이나 XML형식)를 바로 Class나 model로 매핑하기 위한 Annotation이다.
- POST나 PUT, PATCH로 요청을 받을때에, 요청에서 넘어온 body 값들을 자바 타입으로 파싱해준다.
- HTTP POST 요청에 대해 request body에 있는 request message에서 값을 얻어와 매핑한다.
- RequestData를 바로 Model이나 클래스로 매핑한다.
- 이를테면 JSON 이나 XML같은 데이터를 적절한 messageConverter로 읽을 때 사용하거나 POJO 형태의 데이터 전체로 받는 경우에 사용한다.
@RequestParam
- @PathVariable과 비슷하다.
- request의 parameter에서 가져오는 것이다. method의 파라미터에 사용된다.
- ?moviename=thepurge 와 같은 쿼리 파라미터를 파싱해준다.
- HTTP GET 요청에 대해 매칭되는 request parameter 값이 자동으로 들어간다.
- url 뒤에 붙는 parameter 값을 가져올 때 사용한다.
- @RequestParam 어노테이션의 괄호 안의 문자열이 전달 인자 이름(실제 값을 표시)이다.
@PathVariable
- method parameter 앞에 사용하면서 해당 URL에서 {특정값}을 변수로 받아 올 수 있다.
- HTTP 요청에 대해 매핑되는 request parameter 값이 자동으로 Binding 된다.
- uri에서 각 구분자에 들어오는 값을 처리해야 할 때 사용한다.
- REST API에서 값을 호출할 때 주로 많이 사용한다.
< 간단 정리 >
@RequestParam : GET 방식으로 넘어온 URI의 queryString을 받기 적절
@PathVariable : URI 경로의 일부를 파라미터로 사용할 때 이용
@RequestBody : xml이나 json 기반의 메시지를 사용하는 요청의 경우 유용
참고 :
'Coding > Spring' 카테고리의 다른 글
[06] 항해99 주특기 입문 1주차 (1-5) - 팀과제 (키워드 정리) (2) | 2022.11.30 |
---|---|
[05] 항해99 주특기 입문 1주차 (1-4) - Delete 수정하기 (0) | 2022.11.30 |
[04] 항해99 주특기 입문 1주차 (1-3) - 코드 흐름 읽어보기 (0) | 2022.11.30 |
[03] 항해99 주특기 입문 1주차 (1-2) - PostMan/h2-console (0) | 2022.11.30 |
[02] 항해99 주특기 입문 1주차 (1-1) - Use Case, API 명세서 (0) | 2022.11.30 |