본문 바로가기

Spring boot/Blog 프로젝트 만들기(JPA)

[Blog] 블로그 프로젝트 만들기 - 1 (REST API)

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) 확인

  • 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__jap_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
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password: 
  jpa:
    show-sql: true        # 실행되는 SQL 쿼리를 콘솔에 출력
    hibernate:
      ddl-auto: create     # 애플리케이션 실행 시 데이터베이스 테이블을 새로 생성 (운영 환경에서는 update나 validate 권장)
      format_sql: true     # 출력되는 SQL 쿼리를 읽기 쉽게 포맷팅
    database-platform: org.hibernate.dialect.H2Dialect  # H2 데이터베이스에 맞는 Hibernate 방언 설정
    properties:
      hibernate:
        highlight_sql: true   # SQL 쿼리에서 키워드를 강조 (색상 적용)

  h2:
    console:
      enabled: true # H2 콘솔을 활성화하는 설정 (true로 설정 시 웹 콘솔 사용 가능)
    path: /h2-console # H2 콘솔에 접근할 수 있는 경로 설정 (기본 경로는 /h2-console)

  # 디버깅을 위한 로깅 설정
  logging:
    level:
      org:
        springframework:
          jdbc: DEBUG          # JDBC 관련 로그 출력
          hibernate:
            SQL: DEBUG           # Hibernate SQL 쿼리 출력
            type:
              descriptor.sql: TRACE  # SQL 쿼리에 바인딩된 파라미터 값 출력

 

 

 

application-dev-prod.yml
spring:
  datasource:
    url: jdbc:h2:mem:testdb
    driver-class-name: org.h2.Driver
    username: sa
    password: 
  jpa:
    show-sql: true        # 실행되는 SQL 쿼리를 콘솔에 출력
    hibernate:
      ddl-auto: create     # 애플리케이션 실행 시 데이터베이스 테이블을 새로 생성 (운영 환경에서는 update나 validate 권장)
      format_sql: true     # 출력되는 SQL 쿼리를 읽기 쉽게 포맷팅
    database-platform: org.hibernate.dialect.H2Dialect  # H2 데이터베이스에 맞는 Hibernate 방언 설정
    properties:
      hibernate:
        highlight_sql: true   # SQL 쿼리에서 키워드를 강조 (색상 적용)

  h2:
    console:
      enabled: true # H2 콘솔을 활성화하는 설정 (true로 설정 시 웹 콘솔 사용 가능)
    path: /h2-console # H2 콘솔에 접근할 수 있는 경로 설정 (기본 경로는 /h2-console)

  # 디버깅을 위한 로깅 설정
  logging:
    level:
      org:
        springframework:
          jdbc: DEBUG          # JDBC 관련 로그 출력
          hibernate:
            SQL: DEBUG           # Hibernate SQL 쿼리 출력
            type:
              descriptor.sql: TRACE  # SQL 쿼리에 바인딩된 파라미터 값 출력

 

728x90