개발 환경 구축

진크·2022년 2월 20일
1
post-thumbnail

Spring Boot Project 생성하기

Spring Initializr
스프링부트 프로젝트를 쉽게 만들기 위해 Spring Initializr 사이트에서 템플릿을 다운로드해서 임포트 하시면 됩니다. 제가 알기론 인텔리제이 Ultaimate 버전에서는 프로젝트 만드는 기능을 따로 지원하는 것으로 알고 있는데, 저는 Community 버전을 사용 중이기에 약간의 불편함만 가지고 넘어가겠습니다.

  • Project: Gradle Project
  • Language: Java
  • Spring Boot: 2.6.3
  • Packaing: Jar
  • Java: 11
  • Dependencies: Spring Boot DevTools, Lombok, Spring Web, Thymeleaf, Spring Data JPA, H2 Database, MySQL Driver 등..(나중에 build.gralde 파일에서 추가할 수 있습니다.)

스프링부트 프로젝트 Dependencies 추가

  • Thymeleaf: 서버에서 가공한 데이터를 뷰에 보여주기 위한 템플릿 엔진
  • Spring Data JPA: JPA를 쉽게 구현할 수 있도록 도와주는 모듈
  • H2 Database: H2 Databas는 자바 기반의 관계형 데이터베이스로 매우 가볍고 빠른 데이터 베이스입니다. 디스크 기반의 데이터 저장뿐만 아니라 메모리 내에 데이터를 저장하는 인메모리 데이터베이스 기능을 지원합니다.
  • MySQL Driver: 프로젝트에서 사용할 데이터베이스는 MySQL이기에 해당 의존성을 추가합니다.

설정 완료 후 [GENERATE] 버튼을 누르면 아티팩트의 이름과 같은 zip파일이 다운로드 되는데, 자신이 사용하는 워크스페이스에 해당 알집을 풀어주면 됩니다.

기본 패키지 구조

생성된 프로젝트의 기본 패키지는 위와 같습니다.

  1. src/main/java 패키지 아래는 자바 소스코드를 작성합니다.
  2. src/main/resources 디렉토리 아래는 HTML, CSS, JS, 이미지 파일 등의 정적 리소스를 저장합니다.
  3. 쇼핑몰 제작 프로젝트를 진행하면서 사용할 템플릿 엔진인 thymeleaf는 기본적으로 뷰를 src/main/resources/templates에서 찾습니다. 해당 디렉토리 아래에 HTML 파일들을 작성하고, Controller Class에서 반환한 뷰와 동일한 이름의 html 파일을 찾아서 웹 브라우저에 띄워줍니다.
  4. src/test/java 패키지 아래에는 테스트 코드를 작성합니다.

좀 더 예쁘게 꾸며보자

🐢
추가로 패키지 테마에 관한 부분입니다. 굳이 안쓰고 기본으로 사용하셔도 되는데, 저는 뭔가 테마를 적용하면 더 가독성이 좋아지는거 같다는 건 헛소리고 그냥 예쁩니다.

  • 인텔리제이 상반 메뉴바 [IntelliJ IDEA] → Preferences → Plugins
    • Atom Material Icons
    • One Dark theme
  • Preferences → Edit → Font : D2Conding ligature

application.properties → yaml 파일로 변경

🐢
properties 와 yaml 의 차이를 알고 싶다면 다음 글을 참고하시면 되겠습니다.
Spring Boot에서 application.yml vs application.properties 차이점

//파일 경로: src/main/resources/application.yml

# 애플리케이션 포트 설정
server:
    port: 80


spring:
	# MySQL 연결 설정
    datasource:
        driverClassName: com.mysql.jdbc.Driver
        url: jdbc:mysql://localhost:3306/shop
        username: 유저ID
        password: 유저PW
	# JPA 설정
	jpa:
        hibernate:
            ddl-auto: create # 데이터베이스 초기화 전략
        properties:
            hibernate:
                show_sql: true # 실행되는 쿼리 콘솔 출력
                format_sql: true # 콘솔창에 출력되는 쿼리를 가동성이 좋게 포맷팅
        database-platform: org.hibernate.dialect.MySQL5Dialect

저는 개인적으로 yaml 파일이 더 가독정이 좋다고 느껴져서 properties 보다는 yaml 파일로 셋팅하겠습니다. 포트는 80으로 설정하겠습니다. 이유는 없습니다.

데이터베이스 초기화 전략은 실제 운영환경이 아니므로 개발 편의상 create 옵션을 사용해 진행하겠습니다. 운영환경에서는 절대로 create, create-drop, update를 사용하면 안 된다고 합니다. 운영 서버에서는 테이블 생성 및 컬럼 추가, 삭제, 변경은 데이터베이스에서 직접하며, none을 사용하거나 validate를 이용하여 정상적인 매핑 관계만 확인합니다.

데이터베이스 초기화 전략 - DDL AUTO 옵션

  • none: 사용하지 않음
  • create: 기존 테이블 삭제 후 테이블 생성
  • create-drop: 기존 테이블 삭제 후 테이블 생성, 종료 시점에 테이블 삭제
  • update: 변경된 스키마 적용
  • validate: 엔티티와 테이블 정상 매핑 확인

프로젝트 실행

  • 위와 같이 포트(80)를 설정했다면 프로젝트 실행시에 해당 포트가 확인이 됩니다.
  • 이제 크롬창 하나를 열고 localhost:설정한 포트를 입력하시면 Whitelabel Error Page가 나올껍니다.
    Error Page라고 나오지만 정상적으로 연결된 것입니다.

Hello World 출력하기

  • 웹 애플리케이션에 대한 기본 설정이 끝났습니다.
  • 개발의 시작을 알리는 마법의 주문 “Hello World”를 출력해보겠습니다.
//src/main/java/me/jincrates/gobook/GobookApplication.java

package me.jincrates.gobook;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class GobookApplication {

	public static void main(String[] args) {
		SpringApplication.run(GobookApplication.class, args);
	}

	@GetMapping(value = "/")
	public String HelloWorld() {
		return "Hello World";
	}
}

@RestController

  • @RestController는 Restful Web API를 좀 더 쉽게 만들기 위해 스프링 프레임워크 4.0에 도입된 기능입니다.
  • @RestController는 @Controller와 @ResponseBody를 합쳐 놓은 어노테이션입니다.
    • @Controller 어노테이션은 해당 클래스 요청을 처리하는 컨트롤러로 사용합니다.
    • @ResponseBody 어노테이션은 자바 객체를 HTTP 응답 본문의 객체로 변환해 클라이언트에게 전송합니다.
    • 이를 통해 따로 html 파일을 만들지 않아도 웹 브라우저에 “Hello Wolrd”라는 문자열을 출력할 수 있습니다.

위와 같이 나오는 것을 확인하셨다면 다시 원상복구....

//src/main/java/me/jincrates/gobook/GobookApplication.java

package me.jincrates.gobook;

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

@SpringBootApplication
public class GobookApplication {

	public static void main(String[] args) {
		SpringApplication.run(GobookApplication.class, args);
	}
}
profile
철학있는 개발자 - 내가 무지하다는 것을 인정할 때 비로소 배움이 시작된다.

0개의 댓글