API 란?

Application Programming Interface 의 줄임말

응용 프로그램에서 사용할 수 있도록 다른 응용 프로그램을 제어할 수 있게 만든 인터페이스를 뜻한다. API를 사용하면 내부 구현 로직을 알지 못해도 정의되어 있는 기능을 쉽게 사용할 수 있다.

 

인터페이스(Interface)란 어떤 장치간 정보를 교환하기 위한 수단이나 방법을 의한다. 대표적인 예로는 마우스, 키보드, 터치패드 등이 있다.

 

REST 란?

REST는 Representational State Transfer의 줄임말

자원의 이름으로 구분하여 해당 자원의 상태를 교환하는 것을 의미한다. REST는 서버와 클라이언트의 통신 방식 중 하나이다.

HTTP URI(Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method를 통해 자원을 교환하는 것이다.

*HTTP Method : Create, Read, Update, Delete

 

REST 의 특징 

1. Server-Client 구조

  자원이 있는 쪽이 Server, 요청하는 쪽이 Client 

  클라이언트와 서버가 독립적으로 분리되어 있어야 한다.

 

2. Stateless

  요청 간에 클라이언트 정보가 서버에 저장되지 않아야 한다.

  서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리해야 한다.

 

3. Cacheable

  HTTP 프로토콜을 그대로 사용하기 때문에 HTTP의 특징인 캐싱 기능을 적용하였다.

  대량의 요청을 효율적으로 처리하기 위해 캐시를 사용한다.

 

4. 계층화 (Layered System)

  클라이언트는 서버의 구성과 상관 없이 REST API 서버로 요청.

  서버는 다중 계층으로 구성될 수 있다.(로드밸런싱, 보안 요소, 캐시 등)

 

5. Code on Demand

  요청을 받으면 서버에서 클라이언트로 코드 또는 스크립트를 전달하여 클라이언트 기능 확장

 

6. 인터페이스 연관성(Uniform Interface)

  정보가 표준 형식으로 전송되기 위해 구성 요소간 통합 인터페이스를 제공한다.

  HTTP 프로토콜을 따르는 모든 플랫폼에서 사용 가능하게끔 설계

 

 

REST 의 장점

 HTTP 표준 프로토콜을 사용하는 모든 플랫폼에서 호환 가능하다.

 서버와 클라이언트의 역할을 명확하게 분리해준다.

 여서 서비스 설계에서 발생하는 문제점을 최소화 해준다.

 

 

REST API 란?

 REST 아키텍쳐의 조건을 준수하는 어플리케이션 프로그래밍 인터페이스를 뜻한다. 

최근 많은 API 가 REST API로 제공되고 있다. 일반적으로 REST 아키텍쳐를 구현하는 웹 서비스를 RESTful 하다고 표현한다.

 

 

REST API 특징

REST 기반으로 시스템을 분산하여 확장성과 재사용성을 높인다. HTTP 표준을 따르고 있어 여러 프로그래밍 언어로 구현할 수 있다.

 

REST API 설계 규칙

1. 웹 기반의 REST API를 설계할 경우에는 URI 를 통해 자원을 표현해야 한다.

  ex ) https://thinkground.studio/member/589   

       Resource : member

       Resource id : 589

 

2. 자원에 대한 조작은 HTTP Method(CRUD)를 통해 표현해야 한다.

  URI 에 행위가 들어가서는 안되고, HEADER를 통해 CRUD를 표현하여 동작을 요청해야 한다.

 

3. 메세지를 통한 리소스 조작

  HEADER를 통해 content-type을 지정하여 데이터를 전달한다. 대표적 형식으로는 HTML, XML, JSON, TEXT 가 있다.

 

4. URI에는 소문자를 사용한다.

 

5. Resource의 이름이나 URI가 길어질 경우 하이픈(-)을 통해 가독성을 높일 수 있다.

 

6. 언더바(_)는 사용하지 않는다.

 

7. 파일 확장자를 표현하지 않는다.

 

 

'Back-End > Spring Boot + Kotlin' 카테고리의 다른 글

REST 와 RESTful  (0) 2024.02.07
Swagger  (1) 2023.11.08
Post API  (0) 2023.11.02
Spring Boot 기초  (0) 2023.11.01
Maven 과 Gradle  (0) 2023.10.29

빌리 관리 도구란?

프로젝트에서 필요한 xml, properties, jar 파일들을 자동으로 인식하여 빌드해주는 도구 

소스 코드를 컴파일, 테스트, 정적분석 등을 하여 실행가능한 앱으로 빌드해줌

프로젝트 정보 관리, 테스트 빌드, 배포 등의 작업을 진행해줌

외부 라이브러리를 참조하여 자동으로 다운로드 및 업데이트의 관리해줌 

 

자바의 대표적인 빌드도구 : Ant, Maven, Gradle

 

 

메이븐 (Maven) 이란?

자바의 대표적인 관리 도구였던 Ant를 대체하기 위해 개발됨

프로젝트의 외부 라이브러리를 쉽게 참조할 수 있게 pom.xml 파일로 명시하여 관리 

참조한 외부 라이브러리에 연관된 다른 라이브러리도 자동으로 관리됨

 

메이븐을 사용하는 이유 

기존에 사용하던 Ant는 빌드의 기능만 가지고 있음

자동으로 라이브러리를 관리해주는 기능이 추가된 Maven을 사용

다운받아 사용하던 라이브러리에 변동 사항이 있으면 자동으로 업데이트 하여 적용됨

 

Ant

  • XML 기반의 빌드 스크립트
  • 자유로운 빌드 단위 지정
  • 간단하고 사용하기 쉬움
  • 대규모 프로젝트에서 복잡해지는 경향이 있음
  • 라이프 사이클이 없음

 

Maven

  • XML 기반의 빌드 스크립트
  • 라이프 사이클 도입
  • pom.xml로 편하게 Dependency 관리
  • 대규모 프로젝트에서 복잡해지는 경향이 있음
더보기

pom.xml의 역할

- 프로젝트 정보 관리

- 해당 프로젝트에서 사용하는 외부 라이브러리 관리

- 해당 프로젝트의 빌드 관련 설정

 

Maven의 대표 태그 설명

  • modelVersion : maven의 버전을 의미
  • groupId : 프로젝트 그룹 id를 뜻하며, 일반적으로 대표하는 사이트 도메인을 역순으로 적어 사용
  • artifactId : groupId외에 다른 프로젝트와는 구분될 수 있는 프로젝트의 id를 작성
  • version : 프로젝트의 버전을 의미하며 개발 단계에 따라 구분하여 작성
  • name : 프로젝트의 이름
  • description : 해당 프로젝트의 간략한 설명을 작성
  • properties : pom.xml 파일 내에서 빈번하게 사용되는 중복 상수를 정의하는 영역 해당 영역의 상수를 사용하기 위해서는 ${태그명} 의 형태로 사용한다.
  • dependendies : 해당 프로젝트에서 의존성을 가지고 사용하는 라이브러리를 정의하는 영역 각 라이브러리마다 <dependency> 태그를 사용하여 구분
  • build : 프로젝트 빌드와 관련된 정보를 설정하는 영역

 

Gradle 이란?

Groovy 스크립트를 활용한 빌드 관리 도구

안드로이드 프로젝트의 표준 빌드 시스템으로 채택

멀티 프로젝트(Multi-Project)의 빌드에 최적화 하여 설계됨

Maven에 비해 더 빠른 처리속도를 가지고 있음

Maven에 비해 더 간결한 구성이 가능함

 

Gradle과 Maven 비교

  • Gradle에 비해 Maven이 점유율이 더 높은 상황(점차 Gradle 점유율이 오르는 중)
  • Gradle에 비해 Maven 성능이 떨어짐
  • Maven에 비해 Gradle이 대규모 프로젝트에서의 성능이 좋음
  • Mavne : pom.xml  Gradle : build.gradle
  • Gradle은 설치 없이 사용할 수 있다. 

Gradle 대표 용어 설명

  • repositories : 라이브러리가 저장된 위치 등 설정
  • mavenCentral : 기본 Maven Repository
  • dependencies : 라이브러리 사용을 위한 의존성 설정

'Back-End > Spring Boot + Kotlin' 카테고리의 다른 글

REST 와 RESTful  (0) 2024.02.07
Swagger  (1) 2023.11.08
Post API  (0) 2023.11.02
Spring Boot 기초  (0) 2023.11.01
REST API  (2) 2023.10.30

+ Recent posts