Spring Boot (5)

ysh·2023년 7월 20일
0

Spring Boot

목록 보기
39/53

검색 기능

형식

https://
www.google.com - 도메인
/search - 엔드포인트
?q=폴라리스&ie=UTF-8 - 쿼리스트링


쿼리스트링 - 주소에 변수를 담아 보낼 때 사용
?변수=값&변수=값&...

@PathVariable

경로에서 매개변수를 받을 때의 표현식
변수 이름은 동일해야 함

// controller
@GetMapping("/emp/{employeeId}")
    public ModelAndView getEmpDetailPage(@PathVariable Integer employeeId){

@RequestParam

  • 쿼리스트링을 자바 변수로 받을 수 있다
  • 꼭 필요한 값이 아니면 required = false
  • 디폴트 값은 null, 지정하고 싶을 시 defaultValue = (디폴트 값)
  • name = "firstName"은 생략 가능(변수명이 같을 때)
// controller
public ModelAndView getEmpListPage(@RequestParam(name="firstName", required = false, defaultValue = "asdf") String firstName)```

repository (추가)

  • jpaRepository로 DB에서 특정 문자열이 포함된 데이터를 대소문자 구분없이 받아오고 싶을 때 쓰는 함수명 (챗 gpt 검색)
List<EmployeesEntity> findByFirstNameContainingIgnoreCase(String firstName);

service (추가)

public List<ResEmpTableDTO> getSearchEmpTablePageData(String firstName){
        if(firstName == null){
            return ResEmpTableDTO.fromEntityList(employeesRepository.findAll());
        } else {
            return ResEmpTableDTO.fromEntityList(employeesRepository.findByFirstNameContainingIgnoreCase(firstName));
        }
    }

controller (추가)

List<ResEmpTableDTO> resEmpTableDTOList = empService.getSearchEmpTablePageData(firstName);

흐름

이용자

  • /emp 엔드포인트에 접속
  • 조건 : firstName이 ne인 사람 검색

주소창

  • /emp?firstName=ne

컨트롤러

  • @GetMapping("/emp")
  • @RequestParam : 쿼리스트링 -> 변수
  • 서비스에 조건에 맞는 직원 리스트 요청

서비스

  • 리포지토리에 조건에 맞는 직원Entity 요구

리포지토리

  • 조건에 맞게 검색 후 서비스에 반환

서비스

  • 반환된 리스트를 dto로 만들어 컨트롤러에 반환

컨트롤러

  • /emp?firstName=ne의 결과 반환

HTTP

  • 요청(Request)과 응답(Response)

요청 메소드(클라이언트 -> 서버)

  • GET : URL에 해당하는 자료의 전송 요청
  • POST : 클라이언트가 서버에서 처리할 수 있는 자료 보냄
  • PATCH : URL의 데이터를 부분적으로 수정을 요청
  • PUT : URL에 지정한 데이터를 저장하도록 요청
  • DELETE: URL의 정보를 제거할 것을 요청

상태 코드

https://developer.mozilla.org/ko/docs/Web/HTTP/Status

  • 2XX
    200 : 성공
  • 4XX : 클라이언트 잘못
    400 : 문법 오류
    401 : 비인증
    403 : 접근 권한 없음
    404 : 리소스를 찾을 수 없음
    405 : 허용되지 않은 메소드
  • 5XX : 개발자 잘못
    500 :

HTTPS

: 전송 내용이 암호화되어 전달된다.


REST(Representational State Transfer)

: 주소는 명사, 메소드는 동사
: 웹 기반의 클라이언트와 서버 사이에서 데이터를 효율적으로 교환하고 조작할 수 있도록 하는 것
: 웹 서비스를 개발할 때 REST 아키텍처 스타일을 따르면, 일관성과 확장성을 가진 클라이언트-서버 모델을 구현할 수 있으며, 웹 상에서 다양한 플랫폼과 기기에서 동작하는 클라이언트와 통신할 수 있다.

  • 아키텍처 : 시스템의 구조를 설계하고 구성하는 원칙과 규칙의 집합

특징

1. 자원 (Resources):
모든 자원은 고유한 식별자(URI)를 가지고 있으며, 이러한 자원들은 서버에 존재합니다. 예를 들면, 사용자, 상품, 주문과 같은 데이터가 자원이 될 수 있습니다.

2. 행위 (Actions):
클라이언트는 HTTP 메서드를 사용하여 자원을 조작합니다. 주요 HTTP 메서드로는 GET(조회), POST(생성), PUT(수정), DELETE(삭제) 등이 있습니다. 이러한 메서드들을 통해 자원에 대한 행위를 정의합니다.

3. 표현 (Representation):
서버는 클라이언트에게 JSON, XML 등과 같은 데이터 형식으로 자원을 제공합니다. 클라이언트는 이러한 표현을 이해하고 처리할 수 있어야 합니다.

4. 상태 없음 (Stateless):
REST 아키텍처는 상태를 관리하지 않습니다. 클라이언트의 모든 요청은 독립적으로 처리되며, 이전 요청과 관련된 정보가 서버에 저장되지 않습니다. 이로 인해 서버의 확장성과 성능이 향상됩니다.

5. 계층화 (Layered System):
클라이언트는 서버와 직접 통신하며 중간에 프록시 서버나 캐시 등을 이용하여 서버의 구현을 추상화할 수 있습니다.

REST API

  • RESTful한 웹 서비스를 개발하기 위해 제공되는 인터페이스
  • 클라이언트와 서버 간의 통신을 위한 규칙과 규약을 제공,
    데이터에 대한 CRUD작업을 HTTP 메서드(GET, POST, PUT, DELETE)를 이용하여 수행
  • URI*를 사용하여 데이터를 식별, 클라이언트는 URI로 서버의 데이터에 접근

ex) 사용자 정보를 조회하기 위한 REST API 엔드포인트는 "/users"이며, HTTP GET 메서드를 사용하여 해당 엔드포인트로 요청을 보내면 사용자 정보를 얻을 수 있

URI

예제

출력을 화면이 아닌 데이터로
-> @ResponseBody + @Contorller = @RestController

package com.example.hr1.domain.main.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;

import com.example.hr1.domain.main.dto.ResMainDTO;
import com.example.hr1.domain.main.service.MainService;

// @Controller
// @ResponseBody
@RestController
public class MainControllerApiV1 {
    
    @Autowired
    private MainService mainService;

    @GetMapping("/api/v1/main")
    public  List<ResMainDTO> getMainData(){
    	// hr 데이터베이스의 region 리스트 불러오는 함수
        return mainService.getMainPageData();
    }

}

RESTful

  • REST 아키텍처 스타일을 준수하여 애플리케이션을 개발하는 것
  • REST 원칙을 적용하여 자원을 표현하고, HTTP 메서드를 활용하여 자원 관리
  • REST API를 따르는 것을 포함하며, 자원과 자원 간의 관계를 잘 설계하여 일관성과 가독성을 높이는 것이 목표

ex) RESTful하게 프로그래밍한 애플리케이션은 URI 구성에 명사와 동사를 적절히 사용하고, HTTP 메서드를 적절한 의미에 맞게 사용하여 리소스를 관리

profile
유승한

1개의 댓글

comment-user-thumbnail
2023년 7월 20일

많은 도움이 되었습니다, 감사합니다.

답글 달기