스프링 부트(Spring Boot)는 스프링(Spring)을 더 쉽게 이용하기 위한 도구
스프링 이용하여 개발을 할 때, 이것저것 세팅을 해야 될 요소들이 많다. 여러가지를 세팅해야되는 진입 장벽이 존재하여 Spring 을 처음 배우려는 사람들은 중도에 그만두는 경우가 많다고 한다. Spring Boot는 매우 간단하게 프로젝트를 설정할 수 있게 하여, Spring 개발을 조금 더 쉽게 만들어주는 역할을 하고 있으며, 생산성을 위해 많이 사용 된다고 한다.
위의 구조에서 나온 것과 같이 User는 스프링을 사용하기 위해서 이것저것 다양한 설정을 직접 해줘야된다는 문제점이 있다. 개발자가 실행환경이나 의존성 관리 등의 인프라 관련 등에 쓰는 에너지가 소요하며, 프로그래밍을 하는 데 있어 매우 중요한 비즈니스를 만들기 위한 프로그래밍에 조금 더 에너지를 투입할 수 있게 Spring의 많은 부분을 자동화하였고, 많은 개발자들이 현재 Spring Boot을 이용하여 개발을 진행하고 있다.
🔗 관련 참고 글 : https://melonicedlatte.com/2021/07/12/230800.html
build.gradle
설정plugins {
id 'java'
id 'org.springframework.boot' version '3.0.2'
id 'io.spring.dependency-management' version '1.1.0'
}
group = 'com.multicampus'
version = '1.0-SNAPSHOT'
java {
sourceCompatibility = '17'
}
repositories {
mavenCentral() //의존성을 받을 저장소를 지정
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' //spring MVC를 사용해서 RESTful 웹 서비스를 개발할 때 필요한 의존성
testImplementation 'org.springframework.boot:spring-boot-starter-test'
}
tasks.named('test') {
useJUnitPlatform()
}
package com.multicampus;
public class Main {
public static void main(String[] args){System.out.println("메인");}
}
package com.multicampus.springbootdeveloper;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class SpringbootDeveloperApplication {
public static void main(String[] args) {
SpringApplication.run(SpringbootDeveloperApplication.class, args);
}
}
package com.multicampus.springbootdeveloper;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class TestController {
@GetMapping("/test")
public String test(){
return "Hello springboot!";
}
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web' //spring MVC를 사용해서 RESTful 웹 서비스를 개발할 때 필요한 의존성
testImplementation 'org.springframework.boot:spring-boot-starter-test'
// 스프링 데이터 베이스 JPA
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
runtimeOnly 'com.h2database:h2' //인메모리 데이터베이스
compileOnly 'org.projectlombok:lombok' //롬복
annotationProcessor 'org.projectlombok:lombok'
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
//spring MVC를 사용해서 RESTful 웹 서비스를 개발할때 필요한 의존성 모음
testImplementation 'org.springframework.boot:spring-boot-starter-test'
스프링 어플리케이션을 테스트 하기 위해 필요한 의존선 모음
'org.springframework.boot:spring-boot-starter-validation' 유효성 검사
'org.springframework.boot:spring-boot-starter-actuator' 모니터링 기능
'org.springframework.boot:spring-boot-starter-data-jpa' ORM을 사용할때 필요한 인터페이스 모음 JPA 의존성 주입
}
스프링부트
는 스프링을 더 빠르고 쉽게 사용하기 위한 도구 , 스타터와 자동구성을 제공
애너테이션
이란 자바소스 코드에 추가하는 표식
모두 @Component
을 가지고 있다.
알맞은 애너테이션을 선택하여 사용한다.
라우터
란 HTTP요청과 메서드를 연결하는 장치@GetMapping("/test") ==> /test GET 요청이 오면 test()메소드 실행해라package com.multicampus.springbootdeveloper;
import jakarta.persistence.*;
import lombok.*;
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor
@Getter
@Entity
public class Member {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="id", updatable = false)
private Long id; // db 테이블의 id 컬럼과 매칭
@Column(name="name", nullable = false)
private String name; //db테이블의 name 컬럼과 매칭
}
package com.multicampus.springbootdeveloper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
public class TestController {
@Autowired
TestService testService;
@GetMapping("/test")
public List<Member> getAllMember(){
// TestService에서 멤버 목록을 가져와서 반환하는 코드 추가
List<Member> members = testService.getAllMembers();
return members;
}
}
package com.multicampus.springbootdeveloper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class TestService {
@Autowired
MemberRespository memberRepository;
public List<Member> getAllMembers() {
return memberRepository.findAll();
}
}
package com.multicampus.springbootdeveloper;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository //db에서 데이터를 가져오는 퍼시스턴스 계층 역할 : member 테이블에 접근하여 Memver
public interface MemberRespository extends JpaRepository<Member, Long> {
}
spring:
jpa:
show-sql: true
properties:
hibernate:
format_sql: true
defer-datasource-initialization: true
INSERT INTO member (id, name) VALUES (1, 'name1')
INSERT INTO member (id, name) VALUES (2, 'name2')
INSERT INTO member (id, name) VALUES (3, 'name3')
given-when-then
패턴
테스트 코드를 세 단계로 구분해 작성
given : 테스트 실행을 준비하는 단계
when : 테스트를 진행하는 단계
예시
package com.multicampus.springbootdeveloper;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
import java.awt.*;
public class test {
@DisplayName("새로운 메뉴를 저장한다.")
@Test
public void saveMenuTest(){
//given : 메뉴를 저장하기 위한 준비 과정
final String name ="아메리카노";
final int price = 3000;
final Menu americano = new Menu(name, price);
//when : 실제 메뉴를 저장
final long saveId = menuService.save(americano);
//then : 메뉴가 잘 추가 되었는지 검증
final Menu saveMenu = menuService.findById(savedId).get();
assertThat(saveMenu.getName()).isEqualTo(name);
assertThat(saveMenu.getPrice()).isEqualTo(price);
}
}
이 날 많은 일?이 있었다 팀이 4조 => 3조로 줄었다... 이와 관련된 거는 팀 프로젝트 안에다가 회고 써야지 스프링부트랑 스프링은 다른데... 음 뭔 느낌인지 알것 같으면서도 모르겠음