API 14

인프런 워밍업 클럽 0기 - BE 2일차 과제

문제 1 두 수를 입력하면, 다음과 같은 결과 나오는 GETAPI를 만들어 보자! path : /api/v1/calc이다. 쿼리 파라미터 : num1, num2 1. CalculatorController @RestController public class CalculatorController { @GetMapping("/api/v1/calc") public Calc Calculator(CalcNumber request) { return new Calc(request); } } 2. Calc Class package com.group.libraryapp.homework; public class Calc { private int add; private int minus; private int multiply..

Inflearn 2024.02.21

Spring Boot으로 웹 출시까지 #12. 권한에 맞는 화면 구성 및 API 호출 & 13. JPA 이용한 커스텀 쿼리 만들기

사용자 권한에 따라 API 제한 하기 @Secured, @RolesAllowed, @PreAuthorize 혹은 새로운 어노테이션을 만들어서 접근 권한을 설정 가장 간단한 @Secured를 이용 WebSecurityConfig Class에서 아래 부분에서 @Autowired를 주석처리 해주니 일단 에러가 임시방편으로 해결되었다. 근데 Signup하고 signin이 되는 과정으로 안넘어간다. 로그인이 안되는중 => 게시판도 안보임. MySQL [mydb]> select * from user; +----+----------+--------------------------------------------------------------+---------+ | id | username | password | ..

Spring/SpringBoot 2022.06.06

MessageConverter & JPA

자바 Object 파이썬 Object 서로 호환하게 해주는게 JSON MessageConverter가 자동으로 번역해서 던져준다. 자바에서는 Jackson 라이브러리가 자바 Object가 JSON으로 변경해준다. @ResponseBody => Buffered writer @RequestBody => Buffered Reader JPA JPA는 Java Persistence API이다. 데이터 베이스가 종료되도 영구히 데이터를 기록할 수 있는 환경을 제공해주는걸 JPA라 한다. 즉 자바 (Java) 프로그램을 영구적으로 (Persistence) 저장할 때 인터페이스 (API) 가 JPA이다. JPA는 ORM 기술이다. JPA는 반복적인 CRUD 작업을 생략하게 해준다. JPA는 영속성 컨텍스트를 가지고 있..

Spring/SpringBoot 2022.05.06

HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 & HTTP 메시지 컨버터

HTTP API를 제공하는 경우에는 HTML이 아니라 데이터를 전달해야 한다. HTTP 메시지 바디에 JSON 같은 형식으로 데이터를 실어 보낸다. HTML이나 뷰 템플릿 사용해도 HTTP 응답 메시지 바디에 HTML 데이터가 담겨서 전달됨. 정적 리소스나 뷰 템플릿 거치지 않고, 직접 HTTP 응답 메시지를 전달하는 경우를 말함 // ResponseBodyController Class package hello.springmvc.basic.response; import hello.springmvc.basic.HelloData; import lombok.extern.slf4j.Slf4j; import org.springframework.http.HttpStatus; import org.springframe..

Spring/SpringMVC 2022.05.01

HTTP 상태코드 2xx 3xx 4xx 알아보자.

2xx에 대해서 보자. 클라이언트의 요청을 성공적으로 처리 200 Ok 201 Created 202 Accepted 204 No Content 클라이언트에서 요청한 걸 가지고 서버에서 생성한걸 뜻함 200은 요청이 성공이 된 것이고 201은 요청이 성공해서 새로운 리소스가 생성이 되는데 생성된 리소스는 응답의 Location 헤더 필드로 식별이 가능하다. 202 Accepted는 요청이 접수되었으나 처리가 완료되지 않은 걸 뜻하고 배치 처리 같은 곳에서 사용 예) 요청 접수 후에 1시간 뒤 배치 프로세스가 요청을 처리한다. 204 No Content는 서버가 요청을 성공적으로 수행을 했지만, 응답 페이로드 본문에 보낼 데이터가 없는 걸 뜻한다. 예) 문서 편집기에서 sava 버튼 save 버튼의 결과로 ..

HTTP 2022.04.27

HTTP 상태코드 소개

클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 1xx(informational): 요청이 수신되어 처리중 2xx(Successful): 요청 정상 처리 3xx(Redirection): 요청을 완료하려면 추가 행동이 필요 4xx(Client Error): 클라이언트 오류, 잘못된 문법등으로 서버가 요청을 수행 못함 5xx(Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함 만약에 모르는 상태 코드가 나타나면? 클라이언트가 인식할 수 없는 상태코드를 서버가 반환하면? 클라이언트는 상위 상태코드로 해석해서 처리한다. 미래에 새로운 상태 코드가 추가되어도 클라이언트를 변경하지 않아도 된다. 299 이건 뭐고 -> 2xx니까 Successful이다. 451 이거는? -> 4xx..

카테고리 없음 2022.04.27

HTTP API 설계 예시

HTTP API 설계 예시를 살펴보자. HTTP API - 컬렉션 POST 기반 등록 예) 회원 관리 API 제공 HTTP API - 스토어 PUT 기반 등록 예) 정적 컨텐츠 관리, 원격 파일 관리 HTML FORM 사용 웹 페이지 회원 관리 GET, POST만 지원 회원 관리 시스템을 만든다고 하자. / members는 collections라고 한다. 회원 목록 / members => GET 회원 등록 / members => POST 회원 조회 / members/{id} -> GET 회원 수정 / members/{id} -> PATCH, PUT, POST 회원 삭제 / members/{id} -> DELETE POST -신규 자원 등록 특징 클라이언트는 등록될 리소스의 URI를 모른다. 회원 등록 /..

HTTP 2022.04.27

클라이언트에서 서버로 데이터 전송

클라이언트에서 서버로 데이터 전송 HTTP API 설계 예시 데이터 전달 방식은 크게 2가지가 있는데 쿼리 파라미터를 통한 데이터 전송 GET 주로 정렬 필터(검색어) 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원 가입, 상품 주문, 리소스 등록, 리소스 변경 4가지 상황을 보자. 정적 데이터 조회 이미지, 정적 텍스트 문서 동적 데이터 조회 주로 검색, 게시판 목록에서 정렬 필터(검색어) HTML Form을 통한 데이터 전송 회원 가입, 상품 주문, 데이터 변경 HTTP API를 통한 데이터 전송 회원 가입, 상품 주문, 데이터 변경 서버 to 서버, 앱 클라이언트, 웹 클라이언트(Ajax) 정적 데이터 조회 쿼리 파라미터 미사용 이미지 리소스를 만들어서 클라이언트에게 내려준다. ..

HTTP 2022.04.27

HTTP 메서드의 속성

안전(Safe Methods) 멱등(Idempotent Methods) 캐시가능(Cacheable Methods) 안전(Safe) Safe 호출해도 리소스를 변경하지 않는다. 계속 호출을 하여서 로그 같은게 쌓여서 장애가 발생하면? 안전은 해당 리소스만 고려 / 그러한 부분까지 고려 안한다. 멱등(Idempotent) f(f(x)) = f(x) 한 번 호출하든 두 번 호출하든 100 번을 호출하든 결과가 같다. 멱등 메서드 GET: 한 번 조회를 하든, 두 번 조회하든 같은 결과가 조회된다. PUT: 결과를 대체하는데 같은 요청을 여러번 해도 최종 결과는 같다. DELETE: 결과를 삭제하는데 같은 요청을 여러번 해도 삭제된 결과는 같다. POST: 이 아이는 멱등이 아니다. 두 번 호출하면 같은 결제가..

HTTP 2022.04.27

HTTP API

API 설계를 해보자. 회원 목록 조회 회원 조회 회원 등록 회원 수정 회원 삭제 아래의 좋지 않은 설계를 보자. 회원 목록 조회 / read-member-list 회원 조회 / read-member-by-id 회원 등록 / creadte-member 회원 수정 / update-member 회원 삭제 / delete-member 가장 중요한 것은 리소스 식별이다. API URI 고민 리소스의 의미는? 회원을 등록하고 수정하고 조회하는게 리소스는 아님 회원이라는 개념 자체가 바로 리소스 리소스를 어떻게 식별할까 회원을 등록하고 수정하고 조회하는 것을 모두 배제 회원이라는 리소스만 식별하자. 회원 리소스를 URI에 매핑 리소스 식별, URI 계층 구조 활용(URI 설계는 리소스 식별 + URI 계층 구조로 ..

HTTP 2022.04.27