REST API란
REST API(Representational State Transfer Application Programming Interface)는 네트워크 상에서 자원을 요청하고 조작하기 위한 아키텍처 스타일입니다. REST API는 주로 HTTP 프로토콜을 기반으로 하며, 클라이언트와 서버 간의 통신을 단순하고 효율적으로 수행할 수 있도록하는 표준화 된 약속입니다.
REST API의 주요 특징
- 무상태성 (Statelessness): 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않습니다. 모든 요청에는 필요한 모든 정보가 포함되어 있어야 합니다.
- 클라이언트-서버 구조: 클라이언트와 서버는 서로 독립적으로 동작하며, 클라이언트는 요청을 보내고 서버는 그에 대한 응답을 제공합니다.
- 자원 기반: API는 자원(데이터)에 대해 동작하며, 각 자원은 고유한 URI를 통해 식별됩니다. 자원은 예를 들어 사용자, 파일, 게시물 등이 될 수 있습니다.
- HTTP 메서드 사용:
- GET: 자원을 조회할 때 사용
- POST: 새로운 자원을 생성할 때 사용
- PUT: 기존 자원을 업데이트할 때 사용
- DELETE: 자원을 삭제할 때 사용
- 표현의 다양성: JSON, XML 등 다양한 형식으로 데이터를 주고받을 수 있으며, 대부분의 REST API는 가볍고 직관적인 JSON 포맷을 선호합니다.
프로젝트 생성
plugins {
id 'java'
id 'org.springframework.boot' version '3.2.10'
id 'io.spring.dependency-management' version '1.1.6'
}
group = 'com.example'
version = '0.0.1-SNAPSHOT'
java {
toolchain {
languageVersion = JavaLanguageVersion.of(21)
}
}
configurations {
compileOnly {
extendsFrom annotationProcessor
}
}
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation 'org.springframework.boot:spring-boot-starter-web'
compileOnly 'org.projectlombok:lombok'
developmentOnly 'org.springframework.boot:spring-boot-devtools'
runtimeOnly 'com.h2database:h2'
//runtimeOnly 'com.mysql:mysql-connector-j'
annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
}
tasks.named('test') {
useJUnitPlatform()
}
의존성 범위 지정(Dependency Scope) 확인
빌드 시스템이란?
빌드 시스템은 소프트웨어 개발에서 소스 코드를 실행 가능한 프로그램으로 변환하는 일련의 과정을 자동화하는 도구 또는 프로세스를 말합니다.
- 컴파일:
- 개발자가 작성한 소스 코드를 기계가 이해할 수 있는 바이트 코드 또는 기계어로 변환하는 과정입니다. ( 자바 소스 파일(.java)을 컴파일하여 .class 파일로 변환)
- 의존성 관리:
- 프로젝트에서 사용하는 외부 라이브러리(예: JUnit, Spring 등)를 자동으로 다운로드하고, 적절한 버전을 유지하며, 이를 프로젝트에 포함시킵니다. (Gradle, Maven 같은 도구 사용)
- 패키징:
- 컴파일된 소스 코드와 함께 필요한 파일(리소스, 설정 파일 등)을 하나로 패키징하여 배포 가능한 형태로 만듭니다. (자바 프로젝트의 경우 JAR(Java ARchive) 파일을 생성)
- 테스트 자동화:
- 코드가 작성되면, 빌드 시스템은 자동으로 테스트를 실행하여 코드가 올바르게 동작하는지 확인합니다. (Gradle이나 Maven에서 JUnit 테스트를 자동으로 실행)
- 배포:
- 빌드가 완료되면, 프로그램을 서버나 배포 환경에 자동으로 배포하는 기능을 지원할 수 있습니다.(CI/CD 도구와 연계하여 애플리케이션을 클라우드 환경에 배포)
Gradle과 Maven은 대표적인 빌드 시스템 도구로, 각각 의존성 관리, 컴파일, 테스트, 패키징, 배포 등의 작업을 자동화하는 데 사용됩니다.
application.yml
spring:
application:
name: class_blog_jpa_v1
server:
port: 8080
datasource:
url: jdbc:mysql://localhost:3306/jpa_demo?useSSL=false&serverTimeZone=Asia/Seoul
driver-class-name: com.mysql.cj.jdbc.Driver
username: root
password: asd123
profiles:
active: dev # prod # 기본 활성화 프로파일을 dev로 설정
application-dev.yml 파일 수정
server:
servlet:
encoding:
charset: utf-8 # 요청 및 응답에 UTF-8 인코딩을 사용하여 한글 및 특수문자가 깨지지 않도록 설정
force: true # 강제로 UTF-8 인코딩을 적용, 클라이언트가 다른 인코딩을 요청하더라도 무시하고 UTF-8을 사용
port: 8080 # 서버가 8080 포트에서 실행되도록 설정
spring:
mustache:
servlet:
expose-session-attributes: true # Mustache 템플릿에서 세션 속성에 접근할 수 있도록 허용
expose-request-attributes: true # Mustache 템플릿에서 요청 속성에 접근할 수 있도록 허용
datasource:
driver-class-name: org.h2.Driver # 데이터베이스 드라이버로 H2 DB를 사용
url: jdbc:h2:mem:test;MODE=MySQL # H2 인메모리 데이터베이스를 MySQL 호환 모드로 사용 (테스트용)
username: sa # 데이터베이스 연결 시 기본 사용자 이름
password: # 데이터베이스 기본 비밀번호 (비어 있음)
h2:
console:
enabled: true # H2 데이터베이스 콘솔을 활성화하여 브라우저에서 데이터베이스를 관리할 수 있도록 함
#sql:
#init:
#data-locations:
#- classpath:db/data.sql # 애플리케이션 초기화 시 실행할 데이터 삽입 SQL 파일의 경로 (data.sql)
jpa:
hibernate:
ddl-auto: create # 애플리케이션이 시작될 때 데이터베이스 테이블을 자동으로 생성
show-sql: true # Hibernate가 실행하는 SQL 쿼리를 콘솔에 출력
properties:
hibernate:
format_sql: true # 출력되는 SQL 쿼리를 포맷팅하여 읽기 쉽게 출력
defer-datasource-initialization: true # 데이터베이스 초기화가 지연되도록 설정하여 JPA 설정 후에 데이터 초기화
output:
ansi:
enabled: always # 콘솔 출력 시 ANSI 색상을 항상 사용하도록 설정 (색상을 통해 로그를 더 쉽게 구분 가능)
logging:
level:
'[com.example.class_blog_jpa_v1]': DEBUG # 특정 패키지(com.tenco.blog_jpa_step1) 수준에서 DEBUG 레벨로 로깅을 설정
'Spring boot > 개념 공부' 카테고리의 다른 글
Stream API (0) | 2024.10.01 |
---|---|
블로그 엔티티 만들기 - 2 (0) | 2024.10.01 |
단방향,양방향 매핑에 대한 이해 (0) | 2024.10.01 |
영속성 컨텍스트란? (0) | 2024.10.01 |
엔티티 매니저에 대해 알아보자. (1) | 2024.10.01 |