IoT 빅데이터 응용 교육 과정_하계

[IoT 빅데이터 응용 교육 과정] 웹 애플리케이션 (23.06.26_1)

연지양갱 2023. 6. 26. 14:08
728x90
반응형
SMALL

교재 :

https://thebook.io/080266/0126/

 

스프링 코딩 공작소: 4.2.3 실습 도서 정보를 관리하는 퍼시스턴스 계층 - 2

더북(TheBook): (주)도서출판 길벗에서 제공하는 IT 도서 열람 서비스입니다.

thebook.io

 

 

 

4.1 웹 애플리케이션의 계층적 구조

 

 

서블릿 관련 폴더 : 비지니스 폴더 

처리 결과 : jsp 파일

 

도메인 객체

메모리에 적제 -> getter, setter 필요

 

실습

 

퍼시스턴스 계층

데이터 액세스 계층을 의미

@Repository : 저장소 역할임

특정 클래스에 @Repository를 선언  - > 저장소

 

 

저장소 객체 생성하기 -> com.springmvc.repository

저장소 역할

 

import pakage 할때 단축키 : ctrl + shift + o(영어 오)

 

인터페이스 연결한 클래스 생성

new -> class -> 패키지 -> 이름 입력 -> 하단 interfaces -> add -> 

 

1. com.springmvc.repository 패키지 생성

2. BookRespository 인터페이스 생성

3. BookRepositoryImple 클래스 생성

코드 입력 코드입력

 

 

 

 

BookRespository =>  저장소 (인터페이스)

package com.springmvc.repository;

import java.util.List;
import com.springmvc.domain.Book;

public interface BookRepository {
	List<Book> getAllBooklist();	
}

List<Book> => Book 클래스의 데이터를 저장함(import com.springmvc.domain.Book;)

comspringmvc.domain에 있는 Book 객체를 불렀음!

==> Book클래스 객체만 담겨있는 List를 생성할 수 있음

 

getAllBooklist() => 책의 정보를 입력하는 리스트(변수명?) -> 추가 수정 삭제 가능

 

 

 

 

BookRepositoryimple => 해당 저장소에 저장할 데이터들

package com.springmvc.repository;

import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Repository;
import com.springmvc.domain.Book;

@Repository // 저장소
public class BookRepositoryImple implements BookRepository { // BookRepository(인터페이스)를 상속한 BookRepositoryImple
	// listOfBook => 데이터를 저장할 리스트(Book 객체를 담을 수 있는)
	// 도메인 객체
	private List<Book> listOfBooks = new ArrayList<Book>();
	
	// BookRepositoryimple을 바로 불러옴 -> 데이터 저장
	public BookRepositoryImple() {
		
		// Book1 생성
		Book book1=new Book("ISBN1234", "C# 교과서", 30000);
		book1.setAuthor("박용준");
		book1.setDescription("C# 교과서는 생애 첫 프로그래밍 언어로 C#을 시작하는 독자를 대상으로 한다. 특히 응용 프로그래머를 위한 C# 입문서로, C#을 사용하여 게임(유니티), 웹, 모바일, IoT 등을 개발할 때 필요한 C# 기초 문법을 익히고 기본기를 탄탄하게 다지는 것이 목적이다.");
		book1.setPublisher("길벗");
		book1.setCategory("IT 전문서");
		book1.setUnitsInStock(1000);
		book1.setReleaseDate("2020/05/29");
		
		// Book2 생성
		Book book2 = new Book("ISBN1235", "Node.js 교과서", 36000);
        book2.setAuthor("조현영");
        book2.setDescription("이 책은 프런트부터 서버, 데이터베이스, 배포까지 아우르는 광범위한 내용을 다룬다. 군더더기 없는 직관적인 설명으로 기본 개념을 확실히 이해하고, 노드의 기능과 생태계를 사용해 보면서 실제로 동작하는 서버를 만들어보자. 예제와 코드는 최신 문법을 사용했고 실무에 참고하거나 당장 적용할 수 있다.");
        book2.setPublisher("길벗");
        book2.setCategory("IT전문서");
        book2.setUnitsInStock(1000);
        book2.setReleaseDate("2020/07/25");
        
        
        Book book3 = new Book("ISBN1236", "어도비 XD CC 2020", 25000);
        book3.setAuthor("김두한");
        book3.setDescription("어도비 XD 프로그램을 통해 UI/UX 디자인을 배우고자 하는 예비 디자이너의 눈높이에 맞게 기본적인 도구를 활용한 아이콘 디자인과 웹&앱 페이지 디자인, UI 디자인, 앱 디자인에 애니메이션과 인터랙션을 적용한 프로토타이핑을 학습합니다.");
        book3.setPublisher("길벗");
        book3.setCategory("IT활용서");
        book3.setUnitsInStock(1000);
        book3.setReleaseDate("2019/05/29");
        
        // listOfBook에 해당 생성했던 데이터를 삽입
        listOfBooks.add(book1);
        listOfBooks.add(book2);
        listOfBooks.add(book3);
        
	}
	

	@Override
	// 인터페이스에 생성했던 getAllBooklist에
	// listOfBooks를 return
	public List<Book> getAllBooklist() {
		// TODO Auto-generated method stub
		return listOfBooks;
	}

}

 

 

 

 

 

 

 

 

 

서비스 계층

BookServiceimple.java

BookService.javai컴포

퍼시스턴스 -> 서비스계층 -> 컨트롤러

인터페이스 생성

비지니스 로직을 구현함

 

 

 servlet-context.xml 

->base-package = com.springmvc.controller => bean으로 설정

->com.springmvc.*로 바꿈

패키지 아래에 있는 것을 bean으로 생성함

접근 가능하도록 만들어줌

 

 

@Autowired :

컴포넌트 스캔을 설정하여 setter()메소드를 대체 가능함

외부 패키지에 정의된 BookRepository 클래스에 접근하려면 클래스 인스턴스인 bookRepository에 대한 Setter() 메서드를 작성해야함

하지만 @Autowired 애너테이션을 선언하여 대체하면 훨씬 편함

 

 

 

@Autowired를 사용하지 않았을 때

데이터 베이스, 데이터를 불러와야 함

bookRepository : 데이터베이스를 불러옴

@Service
public class BookServiceImpl implements BookService {
    private BookRepository bookRepository;

    public void setBookRepository(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }
}

 

 

 

 

 

프레젠테이션 계층

view , controller, model

 

controller가 모델에 데이터를 전송

model은 view에게 데이터를 보내어 보여줌

 

컨트롤러는 @Controller를 이용하여 표현

뷰는 자바 서버 페이지 표준 태그 라이브러리(JavaServer Pages Standard Tag Library, JSTL)를 적용하여 웹페이지를 표현

 

package com.springmvc.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import com.springmvc.domain.Book;
import com.springmvc.service.BookService;

@Controller //클라이언트에서 요청이 오면 처리역할을 담당
public class BookController {
	@Autowired // setter를 하지 않아도 외부 컴포넌트를 불러올 수 있음
	private BookService bookservice; // 저장소 객체인 BookRepository로 직접 접근하지 않고 서비스 객체로 저장소에 접근 -> 데이터베이스와 직접 연결 X
	
	
	
	@RequestMapping(value="/books", method=RequestMethod.GET)
	// http://localhost:8080/BookMarket/book로 입력하면 해당 데이터를 접근 가능
	// value로 매핑한 경로로 가면
	// requestBookList를 실행하게 됨	
	public String requestBookList(Model model) {
		List<Book> list= bookservice.getAllBookList(); // getAllBookList()를 가지고 옴
		model.addAttribute("bookList", list); // 모델에 booklist라는 키에 booklist를 저장
		return "books"; // view 이름, books.jsp
	}
	
}

 

 

 

 

컨트롤러와 의존 관계의 빈 객체 등록하기 : servlet-context.xml

base-package 속성 값을 공통 패키지인 com.springmvc.*로 수정

-> 전체 패키지만 삽입

 

 

jsp 파일

view

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %> ➊

jsp파일을 사용할 것임

jstl의 function태그를 jsp에서 사용함

 

bootstrap에 있는 css를 불러옴

 

forEach

		<c:forEach items="${bookList}" var="book">
                 <div class="col-md-4">
                    <h3>${book.name}</h3>
                    <p>${book.author}
                        <br>${book.publisher} | ${book.releaseDate}
                    <p align=left>${fn:substring(book.description, 0, 100)}...
                    <p>${book.unitPrice}원
                </div>
            </c:forEach>

booklist에 저장되어 있는 데이터를 돌림

 

 

 

전체 코드는 github

https://github.com/yeonji123/springstudy

 

GitHub - yeonji123/springstudy

Contribute to yeonji123/springstudy development by creating an account on GitHub.

github.com

 

 

 

 

 

 

5장

컨트롤러 구현 : '도서 쇼핑몰'에서 도서 목록 출력하기

 

요청을 전달받는 창구 역할

 

 

컨트롤러 정의

 

다음 포스팅

 

 

 

 

반응형