본문 바로가기
3.1SpringBoot/3.1.2 묘공단 SpirngBoot3

[묘공단/spring] 6장 블로그 기획하고 API만들기 - 개념

by Dohi._. 2023. 10. 11.

포스팅 목차  (책의 목차와 다릅니다 개인적으로 공부한 내용입니다)

6장 블로그 기획하고 API만들기 - 개념 

  6-1.  API - REST API

  6-2. H2

 

6-1.  API - REST API

 

API( Application Programming Interface) 란 네트워크에서 API는 프로그램 간에 상호작용하기 위한 매개체를 말합니다

이해가 처음엔 잘 안되기에

예를 한번 들어보겠습니다

우리(클라이언트)가 웹 사이트의 주소를 입력해서 "멋있는 도히의블로그를 보여줘!" 라는 요청을 했다고 가정합시다.

그러면 API는 이 요청을 받아서 서버에게 가져다 줍니다.

그러면 서버는 API가 가져온 요청을 처리해서 "멋있는 도히의 블로그"라는 결과물을 만들어서 API에게 전달합니다.

API는 최종 결과물을 브라우저에 보내주기에 우리는 "멋있는 도히의 블로그"를 화면으로 볼 수 있게되는 겁니다.

 

요약하면 클라이언트의 요청을 서버에 전달하고, 서버의 결과물을 클라이언트에게 돌려주는 역할을 합니다

 

REST API ( Representational State Transfer api)는 웹의 장점을 최대한 활용하는 api입니다 이름의 뜻을 풀어서 해석하면 

자원을 이름으로 구분해서 자원의 상태를 주고받는 api방식입니다.

REST API는 기술보다는 URL의 설계방식을 말합니다 . 이설계방식을 따랐을 때 얻는 장단점이 무엇이고 REST API가 뭔지 더 자세하게 알아보겠습니다.

 

REST API의 장단점

장점

  • URL만 보고 무슨 행동을 하는 API인지 알 수 있음
  • 무상태 특징으로 클라이언트와 서버의 역할이 분리
  • HTTP표준을 사용하는 모든플렛폼에서 사용가능

단점

  • HTTP매서드(GET,POST와 같은 방식)의 개수에 제한
  • 공식적으로 제공되는 표준 규약이 없음

REST API 사용방법

  1. URL에는 동사를 사용하지 말고 자원을 표시한다.
  2. 동사는 HTTP 메서드

 

합치면 URL에는 동사는 HTTP메서드로 그외 동사를 사용하지 말고 자원을 표시한다.

자원은 가져오는 데이터를 말합니다.

예를 들어 저의 블로그의 지금 주소를 보면( https://dohi-blog.tistory.com/49) 게시글의 id로 게시글을 불러오는 주소입니다

게시글의 id가 49인 게시글을 가져와서 보는 URL인거죠

 

HTTP메서드라는 것은 서버에 요청을 하는 방법을 나눈 것인데 주로 사용하는 메서드는 아래에 표에 있듯 

GET, POST, PUT, DELETE를 주로 사용합니다

각각 만들고(Create), 읽고(read), 업데이트하고(update),삭제(delete)하는 역할을 담당하는데 이것들을 크루드(CRUD)라고 부릅니다.

 

한번 예시로 정리 해보죠

예문 적합성 설명
/articles/1 적합 동사가 없고,
1번글을 가져온다는 의미 명확함 , 적합 
/articles/show/1
/show/articles/1
부적합 show라는 동사가 있음 , 부적합
GET/articles/1 적합 id가 1인 글을 조회하는 API
POST/articles/1 적합 id가 1인 글을 추가하는 API
PUT/articles/1 적합 id가 1인 글을 수정하는 API
DELETE/articles/1 적합 id가 1인 글을 삭제하는 API

 

이외에도 슬래시는 계층관계를 나타내거나, 밑줄대신 하이픈을 사용하거나 등등의 규칙이 있지만

간단하게 이정도만 배우고 실습을 위한 준비를 해보고자 합니다.

 

6-2 H2

개발이나 테스트 용도로 가볍고 편리한 DB 웹 화면 제공하는 H2를 설치해보겠습니다.

 

우선 build.gradle 파일에 jdbc, h2 데이터베이스 관련 라이브러리 추가를 하고 설치를 진행 하겠습니다.

  • implementation 'org.springframework.boot:spring-boot-starter-jdbc'
  • runtimeOnly 'com.h2database:h2'

설치 주소 및 주의사항

주의!  h2 데이터베이터 설치 버전 관련
Spring Boot (2.X.X) 1.4.200 버전을 설치
Spring Boot (3.X.X) 2.1.214 버전이상을 설치
https://www.h2database.com/html/download-archive.html  (버전별 설치주소)

버전을 착각하고 만약 이미 설치하고 실행까지 했다면 다시 설치한 이후에 ~/test.mv.db 파일을 꼭 삭제.
그렇지 않으면 다음 오류가 발생하면서 접속되지 않습니다. 
General error: "The write format 1 is smaller than the supported format 2 [2.0.206/5]" [50000-202] HY000/50000

 https://www.h2database.com 공식 다운로드 주소

 

설치후 별다른 세팅은 필요없이 일단은 console을 하고

다음부터 H2아이콘을 누르면 편하게 들어와진다. 

 

 

일단 H2의 데이터 베이스 방식은 2가지가 있습니다 1. 로컬 드라이브 사용(왼쪽사진), 2.인메모리 모드(오른쪽사진) 

 

사진에는 jdbc:h2:tcp://localhost/~/test 랑 jdbc:h2:mem:testdb가 있을 건데요 그리고 사진에는 생략된 jdbc:h2:~/test이 있습니다.

 

아래에서 차이점을 한번 확인해보겠습니다.

  1. jdbc:h2:~/test
    • 이 URL은 로컬 파일 시스템의 사용자 홈 디렉터리 아래에 있는 test라는 디렉터리에 데이터베이스 파일을 생성합니다.
    • 데이터베이스가 파일 시스템에 저장되기 때문에 애플리케이션을 재시작해도 데이터가 유지
  2. jdbc:h2:tcp://localhost/~/test
    • 이 URL은 TCP 서버 모드를 사용하여 H2 데이터베이스에 접근함
    • 로컬호스트(localhost)를 통해 접근하며, 데이터베이스 파일은 사용자 홈 디렉터리 아래의 test 디렉터리에 생성됨
    • 클라이언트-서버 방식으로 동작하며, 여러 클라이언트가 동시에 접근할 수 있음
  3. jdbc:h2:mem:testdb
    • 이 URL은 H2 데이터베이스를 인메모리 모드로 설정함.  파일 시스템에 데이터베이스 파일을 생성하지 않고, 메모리에 데이터베이스가 생성됨
    • 애플리케이션이 실행되는 동안에만 데이터가 유지, 애플리케이션이 종료되면 데이터베이스가 소멸

주로 로컬 파일 시스템을 사용할 경우

데이터베이스 파일 생성 할때 jdbc:h2:~/test로 한번 제작을 하고 홈 디렉터리에 ~/test.mv.db파일 생성 확인을 하고 

이후부터는 jdbc:h2:tcp://localhost/~/test 이렇게 접속을 합니다

tcp 서버 모드를 사용하여 DB를 접근을 하게되면 여러 클라이언트가 동시에 접근이 가능하기 때문입니다.

 

그리고 3번의 인메모리 모드인 경우는 파일시스템에 저장을 하지않고 메모리에 잠시 저장되는 휘발성 DB로 

연습을 할때 사용하기 좋습니다.

따라서 이번 실습에는 잠시 인메모리로 실습을 진행하도록 하겠습니다. 

 

H2-Console의 JDBC URL에 jdbc:h2:mem:testdb를 입력하고 연결을 누릅니다.

 

접속이 성공적으로 되었습니다. 추후 실습및 테스트에 사용할 설정을 마무리하였습니다

 

추가적으로 

application.yml의 예제 코드를 아래 따로 적어놓도록 하겠습니다 

 

  • application.yml  로컬 파일 코드
spring:
  datasource:
    url: jdbc:h2:tcp://localhost/~/test
    driver-class-name: org.h2.Driver
    username: sa
  h2:
    console:
      enabled: true
  jpa:
    hibernate:
      ddl-auto: update
  • 만약 resources/application.properties 로작성한다면
spring.datasource.url=jdbc:h2:tcp://localhost/~/test
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa

 

  • application.yml 인메모리 코드 (저희가 실습에 사용할 코드)
spring:
  jpa:
    show-sql: true
    properties:
      hibernate:
        format_sql: true
    defer-datasource-initialization: true
  datasource:
    url: jdbc:h2:mem:testdb
  h2:
    console:
      enabled: true

application.yml 인메모리 코드 설명 

  • jpa 섹션
    • show-sql: true: Hibernate가 생성하는 SQL 쿼리를 콘솔에 출력하도록 설정
    • properties:
      • hibernate:
        • format_sql: true: SQL 쿼리를 보기 좋게 포맷하도록 설정. 쿼리가 콘솔에 표시될 때 가독성을 높임
    • defer-datasource-initialization: true: 데이터 소스의 초기화를 지연. 애플리케이션이 시작될 때 데이터베이스를 자동으로 생성하지 않고, 실제로 데이터베이스 연결이 필요한 시점에 초기화를 수행
  • h2:
    • console:
      • enabled: true: H2 데이터베이스 콘솔을 활성화

 

이제 h2도 준비 다했으니 본격적으로 실습을 진행 해보도록 하겠습니다.


이 글은 골든래빗 《스프링 부트 3 백엔드 개발자 되기 - 자바 편》의 6장 써머리입니다.

 

728x90

댓글