JPA
블로그 프로젝트 만들기
yoooon1212
2024. 10. 1. 11:01
REST API
(Representational State Transfer Application Programming Interface)
네트워크 상에서 자원을 요청하고 조작하기 위한 아키텍처 스타일
주로 HTTP 프로토콜을 기반으로 하며,
클라이언트와 서버 간의 통신을 단순하고 효율적으로 수행할 수 있도록하는 표준화 된 약속입니다.
REST API의 주요 특징
- 무상태성 (Statelessness): 각 요청은 독립적이며, 서버는 클라이언트의 상태를 저장하지 않습니다. 모든 요청에는 필요한 모든 정보가 포함되어 있어야 합니다.
- 클라이언트-서버 구조: 클라이언트와 서버는 서로 독립적으로 동작하며, 클라이언트는 요청을 보내고 서버는 그에 대한 응답을 제공합니다.
- 자원 기반: API는 자원(데이터)에 대해 동작하며, 각 자원은 고유한 URI를 통해 식별됩니다. 자원은 예를 들어 사용자, 파일, 게시물 등이 될 수 있습니다.
- HTTP 메서드 사용:
- GET: 자원을 조회할 때 사용
- POST: 새로운 자원을 생성할 때 사용
- PUT: 기존 자원을 업데이트할 때 사용
- DELETE: 자원을 삭제할 때 사용
- 표현의 다양성: JSON, XML 등 다양한 형식으로 데이터를 주고받을 수 있으며, 대부분의 REST API는 가볍고 직관적인 JSON 포맷을 선호합니다.
프로젝트 생성



build.gradle
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) 확인
implementation: 애플리케이션 컴파일 및 런타임 시 필요한 의존성.
compileOnly: 컴파일 시에만 필요한 의존성, 런타임 시 포함되지 않음.
developmentOnly: 개발 중에만 필요한 의존성, 프로덕션 빌드에는 포함되지 않음.
runtimeOnly: 런타임 시에만 필요한 의존성, 컴파일 시에는 필요하지 않음.
annotationProcessor: 컴파일 시에 어노테이션 프로세싱에 필요한 의존성. (컴파일 과정 중에 특정 어노테이션을 해석하고, 그에 따라 추가적인 코드를 생성하거나 검증하는 작업)
testImplementation: 테스트 코드의 컴파일 및 실행 시 필요한 의존성.
testRuntimeOnly: 테스트 실행 시에만 필요한 의존성, 컴파일 시에는 필요하지 않음.
빌드 시스템이란?
빌드 시스템은 소프트웨어 개발에서 소스 코드를 실행 가능한 프로그램으로 변환하는 일련의 과정을 자동화하는 도구 또는 프로세스를 말합니다.
- 컴파일:
- 개발자가 작성한 소스 코드를 기계가 이해할 수 있는 바이트 코드 또는 기계어로 변환하는 과정입니다. ( 자바 소스 파일(.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 # 기본 활성화 프로파일을 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:testdb;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 레벨로 로깅을 설정
실행 결과
Hibernate가 실행하는 sql 쿼리가 콘솔에 출력되는 것을 확인할 수 있습니다.
