[Spring Boot] 시작

·2025년 5월 15일

just공부

목록 보기
22/41

개념

package com.mysite.irms;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class HelloController {
	@GetMapping("/hello")
    @ResponseBody
    public String Hello() {
    	return "Hello World!";
    }
}
  • @Controller : HelloController 클래스가 컨트롤러의 기능을 수행한다는 의미
  • hello 메소드에 적용된 @GetMapping("/hello") annotation은 http://localhost:8080/hello URL 요청 발생 시 hello 메소드 실행되게 함
    • /hello URL과 hello 메소드를 매핑하는 역할
    • URL과 메소드명이 동일할 필요는 없음
  • Java의 annotation은 자바의 클래스, 메소드, 변수 등에 정보를 부여해 부가 동작을 가능하게끔 함
  • 매핑한다는 뜻은 특정 URL 경로를 서버의 특정 메소드와 연결하는 것을 의미
  • Get 방식의 URL 요청을 위해 @GetMapping을 사용
  • Post 방식의 URL 요청을 위해 @PostMapping을 사용
  • @ResponseBody annotation은 hello 메소드의 출력 결과가 문자열 그 자체임을 나타냄

로컬 서버 실행하기

  • Boot Dashboard에서 프로젝트 선택
  • 활성화된 버튼 중 가장 왼쪽 버튼을 클릭해 서버 실행

  • 브라우저에서 localhost:8080/hello 로 확인
  • /hello URL이 요청되면 컨트롤러인 HelloController의 /hello URL과 매핑된 hello 메소드가 호출되고, 문자열이 브라우저에 출력됨

Devtools, lombok 설치하기

Spring Boot Devtools

  • 내용 수정 후 서버를 재시작하지 않고 바로 반영되게끔 하는 도구
  • build.gradle
    ...
    dependencies {
    	...
      developmentOnly 'org.springframework.boot:spring-boot-devtools`
    }
  • 적용하기 위해 build.gradle 파일 선택 후 우클릭하여 [Gradle] - [Refresh Gradle Project] 클릭
  • Boot Dashboard에서 서버 재시작

lombok

  • 소스 코드를 작성할 때 자바 클래스에 annotation을 사용하여 자주 쓰는 Getter 메소드, Setter 메소드, 생성자 등을 자동으로 생성해주는 도구
  • https://projectlombok.org/download 에서 Download
  • cmd 창에서 lombok.jar 파일이 있는 경로로 이동 후 java -jar lombok.jar 명령어 실행
  • [Specify location] 을 클릭하여 STS가 설치된 경로를 선택 후, [Install/Update] 버튼 클릭
  • 종료
  • STS 재시작
  • build.gradle 파일에서 아래와 같이 입력
    ...
    dependencies {
    	...
      compileOnly 'org.projectlombok:lombok'
      annotationProcessor 'org.projectlombok:lombok'
    }
  • 적용하기 위해 build.gradle 파일 선택 후 우클릭하여 [Gradle] - [Refresh Gradle Project] 클릭

getter, setter 메소드 만들기

package com.mysite.irms;

import lombok.Getter;
import lombok.RequiredArgsConstructor;
import lombok.Setter;

@Getter
@RequiredArgsConstructor
// @Setter
public class HelloLombok {
	private final String hello;
	private final int lombok;
	
	public static void main(String[] args) {
		HelloLombok helloLombok = new HelloLombok("hello", 5);
				
		System.out.println(helloLombok.getHello());
		System.out.println(helloLombok.getLombok());
	}
}
  • hello, lombok 속성에 final을 추가하고 @RequiredArgsConstructor annotation을 적용하면 해당 속성들을 필요로 하는 생성자가 자동 생성됨

final은 뒤에 오는 자료형과 변수들을 변경 불가하게 만듦

  • final이 없다면 생성자에 포함되지 않음
  • final을 적용하면 속성값을 변경할 수 없기 때문에, @Setter는 의미가 없어져, Setter 메소드도 사용 불가

Spring boot 프로젝트 구조

src/main/java 디렉토리

  • 자바 파일을 저장

com.mysite.irms 패키지

  • 자바 파일을 저장하는 공간
  • Controller, Form, DTO, Entity, Service 등의 자바 파일이 위치
  • Controller : URL 요청을 처리
  • Form : 사용자 입력 검증

IrmsApplication.java 파일

  • 프로그램의 시작을 담당
  • 프로젝트명 + Application.java 파일
package com.mysite.irms;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class IrmsApplication {

	public static void main(String[] args) {
		SpringApplication.run(IrmsApplication.class, args);
	}
}
  • SpringBootApplication annotation이 적용되어 있어야만 함
  • 이 annotation을 통해 스프링 부트 애플리케이션을 시작할 수 있음

src/main/resources 디렉토리

  • 자바 파일을 제외한 HTML,CSS, Javascript, 환경 파일 등을 저장하는 공간

templates 디렉토리

  • 템플릿 파일을 저장
    • 자바 코드를 삽입할 수 있는 HTML 형식의 파일

static 디렉토리

  • 프로젝트의 css, js 파일, 이미지 파일 등을 저장

application.properties 파일

  • 프로젝트의 환경 설정
  • 환경 변수, 데이터베이스 등이 설정을 저장

src/test/java 디렉토리

  • 프로젝트에서 작성한 파일을 테스트하는 코드를 저장
  • JUnit과 스프링 부트의 테스트 도구를 사용하여 서버를 실행하지 않은 상태에서 src/main/java 디렉토리에 작성한 코드를 테스트 가능
    • JUnit : 테스트 코드를 작성하고, 작성한 테스트 코드를 실행할 때 사용하는 자바의 테스트 프레임워크

build.gradle 파일

  • Gradle이 사용하는 환경 파일
  • 프로젝트에 필요한 플러그인과 라이브러리를 설치하기 위한 내용 작성

JPA로 DB 사용

H2 데이터베이스 설치

  • H2 데이터베이스
    • 자바 기반의 경량 DBMS

1. build.gradle

dependencies {
...
runtimeOnly 'com.h2database:h2'
}
  • [Gradle] - [Refresh Gradle Project] 클릭

2. src/main/resources 디렉토리의 application.properties 파일에 새로운 설정 추가

# DATABASE
spring.h2.console.enabled = true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:~/springdb/local
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
  • spring.h2.console.enabled : H2 콘솔에 접속할 것인지
  • spring.h2.console.path : H2 콘솔로 접속하기 위한 URL 경로
  • spring.datasource.url : 데이터베이스에 접속하기 위한 경로
  • spring.datasource.driverClassName : 데이터베이스에 접속할 때 사용하는 드라이버 클래스명
  • spring.datasource.username : 데이터베이스의 사용자명 (기본값인 sa로 설정)
  • spring.datasource.password : 데이터베이스의 비밀번호

3. spring.datasource.url에 설정한 경로에 해당하는 DB 파일을 만들어야 함

  • jdbc:h2:~/springdb/local로 설정했으므로, 코드에서 ~/springdb/에 하위 경로에 H2 데이터베이스 파일로 local.mv.db라는 파일을 생성해야 함.
  • cmd를 켜 copy con local.mv.db 실행-> Ctrl+Z 누르기 -> Enter 키로 파일을 생성한다.
    • 1개 파일이 복사되었다는 문구가 뜨면 성공.
  • 생성된 파일을 찾아 설정된 기본 경로(C:\Users\[username])\springdb 폴더 밑으로 local.mv.db 파일을 옮겨주었다.
  • local.mv.db파일은 0kb로 생성되어야만 함.

4. H2 콘솔을 통해 데이터베이스에 접속 가능. 로컬 서버를 재시작 후, 브라우저에서 http:localhost:8080/h2-console 에 접속

  • JDBC URL 에 본인이 application.properties 파일에 설정한 경로대로 수정해준 후, [연결]을 클릭

JPA 환경 설정하기

1. build.gradle 파일 수정

dependencies {
...
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
}
  • [Gradle] - [Refresh Gradle Project] 클릭

2. application.properties 파일 수정

# JPA
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
  • spring.jpa.hibernate.ddl-auto : 엔티티 기준, 데이터의 테이블을 생성하는 규칙 설정

Entity : 테이블 매핑하기

@Id

  • id 속성에 적용한 @Id annotation은 id 속성을 기본키로 지정

@GeneratedValue

  • 데이터를 저장할 때 해당 속성에 값을 일일이 입력하지 않아도 자동으로 1씩 증가하여 저장됨
  • strategy = GenerationType.IDENTITY : 고유한 번호를 생성하는 방법을 지정
    • GenerationType.IDENTITY : 해당 속성만 별도로 번호가 차례대로 증가시키게끔 함

@Column

  • Entity의 속성은 테이블의 열 이름과 일치
  • 열의 세부 설정을 위해 @Column 을 사용
  • length는 열의 길이를 설정할 때 사용
  • columnDefinition : 열 데이터의 유형이나 성격을 정의
    • columnDefinition="TEXT" : 텍스트를 열 데이터로 넣을 수 있음을 의미, 글자 수를 제한할 수 없는 경우에도 사용
profile
Whatever I want | Interested in DFIR, Security, Infra, Cloud

0개의 댓글