

스프링 부트 프로젝트를 시작하고 아무것도 작성하지 않은 상태에서 서버를 구동하면 위와 같은 404 Not Found 오류 화면을 만날 수 있다. (type=Not Found, status=404)라는 메시지는 HTTP 오류 코드 중 하나로, 브라우저가 요청한 페이지를 찾을 수 없다는 뜻이다. 즉, 스프링 부트 서버가 http://localhost:8080/ 요청을 처리할 수 있는 컨트롤러가 없기 때문에 발생하는 오류이다.
스프링 부트는 서버 역할을 하기 때문에, 클라이언트로부터 요청을 받으면 즉시 적절한 응답을 준비해야 한다.
이 과정이 정상적으로 동작하려면 URL이 컨트롤러 메서드와 매핑되어 있어야 하며, 이를 위해 컨트롤러 클래스를 작성해야 한다.
스프링 부트 프로젝트를 시작하고 아무것도 작성하지 않은 상태에서 서버를 구동 시 위와 같은 오류 화면을 만날 수 있다. (type=Not Found, status=404)라는 메시지는 HTTP 오류 코드 중 하나로, 브라우저가 요청한 페이지를 찾을 수 없다는 뜻이다. 즉, 스프링 부트 서버가 http://localhost:8080/라는 요청을 해석할 수 없기에 이와 같은 오류가 발생한 것이다.
컨트롤러 클래스를 만들고, @GetMapping 또는 @PostMapping과 같은 어노테이션을 적용하면 해당 URL과 메서드가 연결된다.
package com.mysite.sbb;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
@Controller
public class MainController {
@GetMapping("/sbb")
public void index() {
System.out.println("index");
}
}
@Controller@GetMapping("/")@PostMapping, @PutMapping, @DeleteMapping 등 다른 HTTP 메서드도 지원위의 코드를 실행하면 여전히 오류가 발생한다. 이는 메서드가 void를 반환하기 때문인데, 이럴 경우 스프링은 다음과 같이 동작한다.
package com.mysite.sbb;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
public class MainController {
@GetMapping("/sbb")
@ResponseBody
public String index() {
return "index";
}
}
@ResponseBody데이터베이스(Database, 이하 DB)는 구조화된 데이터를 저장, 관리, 검색할 수 있는 저장소로, 현대의 대부분 웹 서비스는 사용자가 생성하는 다양한 데이터를 안전하고 효율적으로 관리하기 위해 DB를 활용한다. 하지만 자바와 데이터베이스 간에는 언어 차이 문제가 존재했는데,
이로 인해 자바 애플리케이션이 데이터베이스와 통신하기 위해선 복잡한 SQL을 작성해야 했다.
객체(Object)와 관계형 데이터베이스(Relational Database) 간의 데이터를 자동으로 매핑(변환)해 주는 기술로, 자바와 DB 간의 언어 격차를 없애 준다.
따라서 ORM를 익히면 별도의 SQL 문법을 배우지 않아도 DB를 사용할 수 있기 때문에 매우 편리하다.
User user = new User("김철수", 25);
userRepository.save(user);INSERT INTO users (name, age) VALUES ('김철수', 25);ORM을 사용하면:
이와 같은 장점을 지니게 되며, 자바에는 다음과 같은 대표적인 ORM 기술이 있다.
스프링 부트는 JPA를 ORM 기술의 표준으로 사용한다. JPA는 인터페이스 모음이므로, 이 인터페이스를 구현한 실제 클래스가 필요하다.
자바 프로그램에서 JPA를 사용하여 데이터베이스에 데이터를 저장하거나 조회하려면 다음과 같은 설정이 필요하다.
build.gradle 파일 수정
Java 프로젝트 (build.gradle)
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
kotlin 프로젝트(build.gradle.kts)
dependencies {
implementation("org.springframework.boot:spring-boot-starter-data-jpa")
}
implementation이란?
필요란 라이브러리 설치를 위해 가장 일반적으로 사용하는 설정으로, 해당 라이브러리가 변경되더라도 이 라이브러리와 연관된 모든 모듈을 컴파일하지 않고, 변경된 내용과 관련이 있는 모듈만 컴파일하므로 프로젝트를 리빌드(rebuild)하는 속도가 빠름
application.properties or application.yml 수정
application.properties
// JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
application.yml (권장)
jpa:
properties:
hibernate:
format_sql: true # SQL을 보기 좋게 포맷팅하여 출력 (들여쓰기, 줄바꿈 등)
highlight_sql: true # 콘솔에서 SQL 구문을 색상으로 하이라이트 표시
use_sql_comments: true # SQL에 주석 추가하여 어떤 엔티티/메서드에서 생성된 쿼리인지 표시
hibernate:
ddl-auto: update # 애플리케이션 시작 시 엔티티 변경사항을 DB 스키마에 자동 반영
show-sql: true # 실행되는 SQL 쿼리를 콘솔에 출력하여 확인 가능
# 개발 환경
spring:
jpa:
hibernate:
ddl-auto: update # 스키마 자동 업데이트
show-sql: true # SQL 쿼리 출력으로 디버깅
# 운영 환경
spring:
jpa:
hibernate:
ddl-auto: none # 수동 스키마 관리로 안전성 확보
show-sql: false # 성능상 SQL 출력 비활성화ddl-auto: update 로 편리하게 사용하되, 운영 환경에서는 성능 저하 방지를 위해 비활성화 후 배포 권장.스프링 부트는 MySQL, 오라클 DB, MSSQL 등 굵직한 DBMS를 연결해 사용하기도 하지만, 개발 시에는 자바 기반의 경량 DBMS인 H2 데이터베이스를 사용하여 빠르게 개발하고 실제 운영 시스템에는 앞서 말한 규모 있는 DBMS를 사용하는 것이 일반적이다.
https://wikidocs.net/161164
H2 데이터베이스 사용은 윗 링크 참조!