Spring boot

블로그 프로젝트 만들기1

ryeonng 2024. 10. 1. 16:25

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 : 테스트 실행 시에만 필요한 의존성, 컴파일 시에는 필요하지 않음.

 

 

빌드 시스템

빌드 시스템은 소프트웨어 개발에서 소스 코드를 실행 가능한 프로그램으로 변환하는 일련의 과정을 자동화하는 도구 또는 프로세스를 말한다.

 

1. 컴파일 :

  • 개발자가 작성한 소스 코드를 기계가 이해할 수 있는 바이트 코드 또는 기계어로 변환하는 과정이다. (자바 소스 파일(.java)을 컴파일하여 .class 파일로 변환)

2. 의존성 관리 :

  • 프로젝트에서 사용하는 외부 라이브러리(예: JUnit, Spring 등)를 자동으로 다운로드하고, 적절한 버전을 유지하며, 이를 프로젝트에 포함시킨다. (Gradle, Maven 같은 도구 사용)

3. 패키징 :

  • 컴파일된 소스 코드와 함께 필요한 파일(리소스, 설정 파일 등)을 하나로 패키징하여 배포 가능한 형태로 만든다. (자바 프로젝트의 경우 JAR(Java Archive) 파일을 생성)

4. 테스트 자동화 :

  • 코드가 작성되면, 빌드 시스템은 자동으로 테스트를 실행하여 코드가 올바르게 동작하는지 확인한다. (Gradle이나 Maven에서 JUnit 테스트를 자동으로 실행)

5. 배포 :

  • 빌드가 완료되면, 프로그램을 서버나 배포 환경에 자동으로 배포하는 기능을 지원할 수 있다. (CI/CD 도구와 연계하여 애플리케이션을 클라우드 환경에 배포)

GradleMaven은 대표적인 빌드 시스템 도구로, 각각 의존성 관리, 컴파일 테스트, 패키징, 배포 등의 작업을 자동화하는 데 사용된다.

 

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' 카테고리의 다른 글

블로그3 - 레포지토리 만들기  (2) 2024.10.02
블로그2 - 엔티티 만들기  (0) 2024.10.01
단방향, 양방향 매핑  (1) 2024.09.30
영속성 컨텍스트  (0) 2024.09.30
엔티티 매니저  (0) 2024.09.30