본문 바로가기

서버개발스터디/1주차 (Spring\JPA\H2)

#01 실습 정리!

1주차 과제 중 Spring Boot 실습에 대해서만 정리한다.

 

우리가 목표로 하는 부분은 JPA를 사용해서 클라이언트 요청으로 부터 JPA를 이용해서 데이터를 화면에 

보여주는게 목표!!! 

여기에서 데이터는 프로젝트가 올라갈 때 가 데이터를 넣어서 클라이언트 요청에 응답하는 예제!! 

 

 

(너무 간단한 셈플 프로젝트 생성 이지만 내부에서 사용 할 기술에 대한 배경과 개념을 #02부터 정리 하기 때문에 #01의 내용을 어느정도 안다고 생각된다면 바로 #02로 넘어가서 우리가 사용하는 기술의 등장배경과 간단한 개념에 대해서 알아보자 )

 

툴은 각자 어느걸 사용해도 상관이 없다 ~ 이유는 정말 심플하게 만들 거라서...  나는 내가 자주쓰는 VSCode 로 진행 할 예정이다.  혹시라도 VSCode에서 Spring Boot 셋팅에 대한 부분은 다루지 않을 거라서 

기본적으로 셋팅이 되어 잇다고 가정한다. 

(그냥 검색하면 다른 사람들이 정리한 내용이 바로 나온다... 검색 ㄱㄱ)

 

1. Spring Boot 프로젝트 생성 

 

Ctrl + Shift + P   를 누르면 아래 이미지 처럼 >와 함께 입력창이 나타나고 여기에 > Spring Initializr: Create a Maven Project 라고 입력하고 Enter~ 

 

 

스프링 부트 Mavne 프로젝트 생성

 

 

이번에는 버전을 선택 하라고 나온다. 가장 위에나온 버전을 선택하겠다~~ 2.4.5

 

스프링부트 버전선택

 

 

버전을 선택하면 Language 를선택하라고 나온다.  Java 선택 

 

Language 선택

 

 

사용할 언어를 선택하면 GroupId 를 입력 하라고 나오는데 기본 com.example 로 진행한다.

 

 

 

 

이번에는 Artifact Id 를 입력한다. 본인은 study 로 한다.

 

 

 

 

Pakaging 타입 선택   Jar 

 

 

 

Java 버전선택   8 

 

 

 

dependencys 선택하기~  

우리는 총 4개를 선택 한다. 

JPA

H2

Lombok

Web

 

총 4개를 선택하면 이렇게 표시가 되고 선택된 4개를 클릭하면 프로젝트 생성위치를 선택해주면 끝 !

 

 

 

그럼 아래 그림과 같이 프로젝트가 생성이 된다.

 

 

최초 프로젝트 구조

 

 

여기부터 시작이다 사실 사용하는 Tool이 모두 다를 것이고 

Spring Boot는 엄청 심플하게 프로젝트를 알아서 만들어 주기 때문에

무리없이 진행 했을 거라고생각됨!! 

 

 

 

이제부터는 JPA를 사용하기 위해서 Model을 만들고 가 데이터를 생성한다.

우선 총 3개의 폴더를 추가한다.

 

controller / model / repository

 

controller : 당연히 클라이언트 요청이 들어오면 받아주는 역활을 한다.

model : JPA에서 사용할 Entity class 작성

repository : springframework.data.jpa.repository.JpaRepository 를 extends 해줄 interface 생성

 

 

 

폴더생성

 

우리는 상품정보가 있는 Product 클래스를 만들어 주고 

Lombok 어노테이션  @Data, @AllArgsConstructor, @NoArgsConstructor 를 클래스 위에 정의하고

JPA 어노테이션 @Entity 는 클래스 위에 정의해서 Entity 라고 명시해주고  필드에는 @Id 를 명시해서 

해당 Entity 의 PK를 알려준다. ( 혹시라도 PK의 개념이 없으시다면 RDBMS에 대해서 PK, FK 정도는 찾아보기!)

 

 

 

JPA 를 사용하기 위해서 Reposotory 폴더에 ProductRepository.java interface 를 만들고

JpaRepository<ProductInteger> 를 extends 해준다.

 

package com.example.study.repository;

import com.example.study.model.Product;

import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ProductRepository extends JpaRepository<Product, Integer>{
    
}

 

 

 

이제 클라이 언트에서 요청이 들어오면 받아줄 Controller 를 만든다 이때 우리는 Rest API를 만들거기 때문에 일반 @Controller 어노테이션이 아닌 @RestController 어노테이션을 사용해서 @ResponseBody를 하나하나 달아 주어야 하는 수고를 덜어주자. 

 

클래스는 ProductController.java 라고 만들고 해당 클래스 위에 @RestController 를 명시하고

ProductRepository를 사용해야 되기 때문에 @Autowired 를 사용해서 IOC컨테이너에게 빈 주입을 해달라고 

요청한다. 

 

 

그리고 총 2개의 Method를 만들고 @RequestMapping으로 전체 / Id별 조회를 수행 하도록 작성한다.

package com.example.study.controller;

import java.util.List;

import com.example.study.model.Product;
import com.example.study.repository.ProductRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class ProductController {
    

    @Autowired
    private ProductRepository productRepository;

    @RequestMapping("/product")
    public List<Product> getProducts() {
        return productRepository.findAll();
    }

    @RequestMapping("/product/{id}")
    public Product getProductById(@PathVariable("id") int id) {
        return productRepository.findById(id).get();
    }
}

 

 

 이제 서버를 띄우고 클라이언트가 localhost:8080/product  라고 입력을 하면 productRepository.findAll() 에 의해서 모든 데이터가 조회 될 것이다

 

그런데 우리는 아직... 데이터를 넣어준 적이 없기 때문에 아무것도 조회되지 않기 때문에 

테스트를 위해서 서버가 올라올 때 조회 할 가 데이터를 만들어서 넣어준다.

 

package com.example.study;

import com.example.study.model.Product;
import com.example.study.repository.ProductRepository;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.Bean;

@SpringBootApplication
public class StudyApplication {

	@Autowired
    private ProductRepository productRepository;

	@Bean
    public ApplicationRunner applicationRunner() {
        return new ApplicationRunner(){

			@Override
			public void run(ApplicationArguments args) throws Exception {
				productRepository.save(new Product(1, "iPad 4 Mini", 500.01, 2));
                productRepository.save(new Product(2, "H&M T-Shirt White", 10.99, 10));
                productRepository.save(new Product(3, "Charli XCX - Sucker CD", 19.99, 5));
			}
		};
    }

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

}

 

자 이렇게 만들고 나서 실제 서버를 구동시켜보자 

(우리는 내장톰켓을 사용할거라서 따로 Tomcat의 설치를 필요없다.)

 

 

 

 

 

 

서버가 잘 올라왔고 Port번호를 확인한 후 (기본 8080) 

 

브라우저에서 요청을 날려본다. 

http://localhost:8080/product

 

 

이렇게 동일하게 데이터가 조회된다면  성공!! 

 

1주차 실습은 완료했으나   사용한 기술에 대한 정리가 부족하다

그래서 #02부터는 해당 기술의 등장배경등을 알아본다.

 

어떤 기술이 왜 나왔는지 알고 사용한다면 조금 더 정확하게 사용 할 수 있기에!! 정리정리!!

 

 

'서버개발스터디 > 1주차 (Spring\JPA\H2)' 카테고리의 다른 글

#03 JPA의 등장  (0) 2021.05.12
#02 ORM 이란?  (0) 2021.05.12
1주차 스터디 실습 & 포스팅 목록 정리  (0) 2021.05.12