#1 : 스프링부트 프로젝트의 구성
01.src/main/java 디렉터리
- 해당 디렉토리의 com.~.~ 패키지는 자바파일을 작성하는 디렉토리이다.
- 자바 파일은 컨트롤러, 폼, DTO, 엔티티, 서비스 파일 등이 있다.
02. ~Application.java 파일
- [프로젝트명]Application.java 파일은 스프링부트를 생성할 때 자동으로 생성되는 파일이다.
- 시작을 담당하는 파일이며 반드시 @SpringBootApplication 어노테이션이 적용되어 있어야한다.
03. src/main/resources 디렉터리
- 자바 파일을 제외한 html, css, js, 환경파일 등을 작성하는 디렉토리이다.
04. templates 디렉터리
- 템플릿 파일을 저장하는 디렉토리이다. (질문 목록, 질문 상세 등의 파일 저장)
- 템플릿 파일은 html 파일로, 자바 객체와 연동이 된다.
05. static 디렉터리
- css, js, 이미지파일 등을 저장하는 디렉토리이다.
06. application.properties 파일
- 프로젝트의 환경, 데이터베이스 등의 설정을 저장하는 파일
07. src/test/java 디렉터리
- 프로젝트에 작성한 파일을 테스트하기 위한 테스트 코드를 작성하는 디렉토리이다.
- JUnit 과 스프링부트의 테스트 도구를 사용, 서버를 실행하지 않은 상태에서 테스트가 가능하다.
08. build.gradle 파일
- 그레들이 사용하는 환경파일이다.
- 그레들은 그루비를 기반으로 한 빌드도구로, 이전 세대 빌드 도구의 단점을 보완하고 장점을 취합한 도구이다.
- 프로젝트에 필요한 플러그인과 라이브러리 등을 기술한다. ( maven의 pom.xml과 같은 기능을 하는 듯! )
#2 : 컨트롤러
01. URL 매핑
- /sbb 요청 시 문자열 출력 컨트롤러 생성하기
* MainController.java 파일 생성
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 어노테이션 적용 시, MainController 클래스는 스프링부트의 컨트롤러가 된다.
@GetMapping 어노테이션 적용 시 요청된 URL과의 매핑을 담당한다.
즉, 스프링 부트는 "/sbb" 요청 발생 시 해당 url과 매핑되는 index 메서드를 컨트롤러임이 명시된 MainController에서 찾아 실행하는 것이다.
위의 코드를 실행 시 status가 500인 에러 페이지를 확인할 수 있는데, 값을 콘솔에 출력만 하고 반환하지 않아 생기는 오류이다. 아래와 같이 코드를 수정한 후 실행 시 오류없이 실행되는 것을 확인할 수 있다.
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(){
//System.out.println("index");
return "sbb 요청 리턴";
}
}

이 때, @ResponseBody 어노테이션은 요청에 대한 응답으로 문자열을 리턴하라는 의미이다.
#3 : JPA
01.ORM : Object Relational Mapping
- ORM을 이용하면 자바 문법만으로 데이터베이스를 다룰 수 있다. 즉, ORM을 이용하면 개발자가 쿼리를 직접 작성하지 않아도 데이터베이스의 데이터를 처리할 수 있다.
- SQL 쿼리와 ORM
* SQL
insert into question (subject, content) values ('안녕하세요', '가입 인사드립니다 ^^');
insert into question (subject, content) values ('질문 있습니다', 'ORM이 궁금합니다');
* ORM
Question q1 = new Question();
q1.setSubject("안녕하세요");
q1.setContent("가입 인사드립니다 ^^");
this.questionRepository.save(q1);
Question q2 = new Question();
q2.setSubject("질문 있습니다");
q2.setContent("ORM이 궁금합니다");
this.questionRepository.save(q2);
ORM을 이용하면 따로 별도의 SQL문법을 배우지 않아도 되고 데이터베이스의 종류와 상관없이 일관성을 유지할 수 있다는 장점이 있다. 이러한 장점은 프로그램 유지, 보수에 큰 강점이 된다. 오류 발생률도 줄여준다.
위 코드에서 Question은 자바 클래스인데, 해당 클래스처럼 데이터를 관리하는 클래스를 엔티티라고 한다.
02. JPA : Java Pesistence API
- JPA는 자바 진영에서 ORM의 기술 표준으로 사용하는 인터페이스의 모음이다.
- JPA는 인터페이스이기 때문에 이를 구현하는 실제 클래스가 필요하다. 예를 들어 하이버네이트 등이 있다.
03. H2 데이터베이스
- H2 데이터베이스 설치
* build.gradle에 의존성에 아래 코드 추가
runtimeOnly 'com.h2database:h2'
runtimeOnly는 해당 라이브러리가 런타임 시에만 필요한 경우를 의미한다. 컴파일 시에만 필요한 경우엔 compileOnly를 사용한다.
* application.properties 수정
# DATABASE
spring.h2.console.enabled=true //h2 콘솔의 접속 허용 여부
spring.h2.console.path=/h2-console //콘솔 접속을 위한 url 경로
spring.datasource.url=jdbc:h2:~/local //데이터베이스 접속을 위한 경로
spring.datasource.driverClassName=org.h2.Driver //데이터베이스 접속 시 사용하는 드라이버
spring.datasource.username=sa //데이터베이스 사용자명
spring.datasource.password= //데이터베이스 패스워드
데이터베이스 경로로 설정한 위치에 local.mv.db 파일을 생성해주어야 한다.

- H2 콘솔로 데이터베이스 접속
* http://localhost:8080/h2-console로 콘솔 접속
* 한국어 설정 가능

* JDBC URL을 위에서 설정한 데이터베이스 경로로 변경 후 연결
04. JPA 환경설정
- 자바 프로그램에서 데이터베이스에 데이터를 저장, 조회하기 위해서는 JPA가 필요하다.
- JPA 설치
* build.gradle 파일 수정
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
implementation은 해당 라이브러리 설치를 위해 일반적으로 사용하는 설정이다. 해당 라이브러리가 변경되더라도 연관된 모든 모듈들을 컴파일하지 않고 직접 관련이 있는 모듈들만 컴파일 하기 때문에 rebiuld 속도가 빠르다.
* application.properties 파일 수정
# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect //데이터베이스 엔진 종류를 설정
spring.jpa.hibernate.ddl-auto=update //엔티티를 기준으로 테이블을 생성하는 규칙 정의
hibernate.ddl-auto=none : 엔티티가 변경되도 데이터베이스를 변경하지 않음
hibernate.ddl-auto=update : 엔티티의 변경된 부분만 적용
hibernate.ddl-auto=validate : 변경사항이 있는지 검사만 한다.
hibernate.ddl-auto=create : 스프링부트 서버가 시작될 때, 모두 드랍 후 다시 생성
hibernate.ddl-auto=create-drop : 위와 동일하지만 종료할 때도 모두 드랍한다.
보통은 update를 사용하고 운영환경에서는 none, 혹은 validate를 사용한다.
'T-I-L > [책] 요약&정리' 카테고리의 다른 글
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(답변등록,부트스트랩) - 2023. 08. 18 (0) | 2023.08.18 |
|---|---|
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(질문상세) - 2023. 08. 17 (0) | 2023.08.17 |
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(질문목록, 템플릿, 서비스) - 2023. 08. 16 (0) | 2023.08.16 |
| [점프 투 스프링부트] 2장 스프링부트의 기본 요소(엔티티,리포지토리) - 2023. 08. 14 (0) | 2023.08.14 |
| [점프 투 스프링부트] 1장 스프링부트 개발 준비 - 2023. 08. 10 (0) | 2023.08.10 |
