본문 바로가기
자바웹프로그래밍/전자정부프레임워크

전자정부프레임워크를 이용 쇼핑몰 만들기 #3

by 디찌s 2020. 4. 25.
728x90
반응형

*도움이 되셨다면 광고 한번 클릭 부탁드립니다! 제게 큰 힘이됩니다!

 

 

VO란?

-       데이터 그 자체로 의미 있는 것을 담고 있는 객체이다.

-       DTO와 동일한 개념이나 차이점은 Read–Only 속성 객체이다.

-       간단한 독립체( Entity ) 의미하는 작은 객체를 의미한다

-       관계데이터베이스의 레코드에 대응되는 자바클래스이다.

 

 

라고 적혀있는데 그냥 쉽게 생각하자면 

 

데이터 상자라고 생각하면된다. 필요할때마다 상자안에 변수이름과 데이터를 매핑해서

 

들고다니면서 필요한 데이터만 사용? 하도록 하는 객체라고 생각한다.

 

 

1. VO 생성

 

우린 정부프레임워크 올인원패키지를 이용함으로 최대한 이 패키지에 있는 내용들로  게시판을 만들것이다. 

 

이글을 정성스럽게 따라왔으면 올인원패키지 DB를 구축해놨을것이다

 

 

 

 

 

 

위 그림을 보듯이

 

DB 테이블 COMTNBBSMASTER를 보자 COMTNBBSMASTER 테이블은 게시판 종류를 만드는 테이블로써 

 

BBS_ID BBS_NM 등 게시판에 대한 종류(BBS_ID) 게시판 이름(BBS_NM) ,REPLY_POSBL_AT(답글 가능여부) 등등에

 

칼럼들이 있다 자세한 내용은 직접 정부프레임워크 사이트에 들어가서 ddl을 확인해보길 바란다.

 

필자는 게시판 작업을 하면서 필요한 부분만 쓰면서 추가하며 진행할것이다.

 

COMTNBBSMASTER에 row를 추가할것이다.

 

 

 

 

 

 

 

BBS_ID = 게시판종류번호

BBS_NM =게시판이름

BBS_TY_CODE  = 게시판 고유코드

FILE_ATCH_POSBL_AT = 파일첨부가 가능여부

 

등등 필자와 같이 DB셋팅을 하자.

 

 

 

 


이제 다시 BoardVO를 생성하자 위 그림과 같이 service아래에 BoardVO 클래스 를 생성한후 아래와 같이 내용을 적자

BoardVO.java

public class BoardVO implements Serializable {
	/**
	 * 게시판 아이디
	 */
	private String bbsId = "";
	/**
	 * 게시물 내용
	 */
	private String nttCn = "";
	/**
	 * 게시물 아이디
	 */
	private long nttId = 0L;
	/**
	 * 게시물 제목
	 */
	private String nttSj = "";
	
	/**
	 * 최초등록자 아이디
	 */
	private String frstRegisterId = "";
	/**
	 * 최초등록시점
	 */
	private String frstRegisterPnttm = "";
	public String getBbsId() {
		return bbsId;
	}
	public void setBbsId(String bbsId) {
		this.bbsId = bbsId;
	}
	public String getNttCn() {
		return nttCn;
	}
	public void setNttCn(String nttCn) {
		this.nttCn = nttCn;
	}
	public long getNttId() {
		return nttId;
	}
	public void setNttId(long nttId) {
		this.nttId = nttId;
	}
	public String getNttSj() {
		return nttSj;
	}
	public void setNttSj(String nttSj) {
		this.nttSj = nttSj;
	}
	public String getFrstRegisterId() {
		return frstRegisterId;
	}
	public void setFrstRegisterId(String frstRegisterId) {
		this.frstRegisterId = frstRegisterId;
	}
	public String getFrstRegisterPnttm() {
		return frstRegisterPnttm;
	}
	public void setFrstRegisterPnttm(String frstRegisterPnttm) {
		this.frstRegisterPnttm = frstRegisterPnttm;
	}
	
	
}

 

 

기본적인 게시판 형태인 BoardVO 이다 근데 왜 getter settet를 하는것일까? 

 

그것은 바로 자바의 특성 중 정보 은닉(Information Hiding)의 특성을 고려했기 때문이다.

 

클래스의 멤버 변수를 private형으로 구현을 하고 이 멤버 변수에 대한 read/write는

 

각각 getter/setter 메서드를 통해 처리하도록 구현을 한다. 

 

이제 다시 EgovUnitLEft.jsp 로 가보자

 

파라미터bbsId 에 bbsid내용 BBSID_000001을 보내자 

 

예를들어 각각의 게시판 공지사항,자유게시판,질문과답변등이 있다면 각각의 게시판들을 구분하려면

 

어떤 이름이 필요하다 그러므로 대부분 SI사업에서는 각각의 게시판을 구분지을때

 

bbsId 라는 값을 따로 설정하여 구분한다.

 

 

 EgovUnitLEft.jsp

<link href="<c:url value='/css/egovframework/com/cmm/main.css' />" rel="stylesheet" type="text/css">
<style type="text/css">

</style>
</head>
<body>
	<a href="/pet/bbs/Articlelist.do?bbsId=BBSID_000001" target="_content">자유 게시판</a>

</body>
</html>

 

이제 다시 컨트롤러를 확인하자

 

 

 

 

 

 

 

ArticleController.java

package pet.com.bbs.web;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;

import pet.com.bbs.service.BoardVO;

@Controller
@SuppressWarnings({ "rawtypes", "unchecked", "static-access" })
public class ArticleController {
	
	
	@RequestMapping("/pet/bbs/Articlelist.do")
	public String Articlelist(@ModelAttribute("searchVO") BoardVO boardVO, ModelMap model) throws Exception{
		System.out.println("--------ssssssss--------------");
		System.out.println("----------------------"+boardVO.getBbsId());
		
		
		
		return "pet/bbs/Articlelist";
	}
}

 

 

 

 

 

 

주의할점은 자동적으로 BoardVO를 추가할때 이미 올인원패키지 src/main/java/egovframework/com/bbs/service 에

 

BoardVO가 있기에 주의하여 우리가 만든경로 pet/com/bbs/service에 있는 BoardVO를 추가하길 바란다.

 

여기까지 입력을 다했다면 서버를 실행하고

 

자유게시판 링크를 클릭해보자

 

 

사용자 URL -> 웹서버 -> was서버 -> 컨트롤러 ->system.out.println(bbsId);

 

이라는 로직이 완성된다.

 

만약에 현재 spring을 하지않고 다른 언어로 웹프로그래밍을 한 사람들은 이런 궁금증이 생겼을것이다?

 

어어? 파라미터를 어디서 받고있는거지??

 

만약 이생각을 갖지 않고있다면 아직.. 웹공부를 더 해야할것이다.

 

웹 프로그래밍을하면 대부분 request같은 객체를 통해 getparameter를 받는경우가 많다 하지만 스프링은

 

다른 방법으로도 파라미터를 받는다!!

 

스프링은 커맨드 객체를 제공한다 ! 즉, 파라미터가 넘어오면

 

@ModelAttribute (@ModelAttribute는 스프링에서 JSP파일에 반환되는 Model 객체에 속성값을 주입하거나 바인딩할 때 사용되는 어노테이션) 에 붙어있는 BoardVO에 파라미터 변수가 있으면 자동으로 매핑을 해줘서

 

boardVO.getBbsId()를 하여 값을 가져온것이다.

 

 

 

 

 

 

 

 


2.Service

 

사용자URL -> controller(RequestMapping) -> service -> serviceimpl -> dao -> xml  -> dao -> serviceimpl -> service -> contorller -> 사용자 view

 

대부분 이런 로직을 통해서 스프링은 사용자에게 서비스를 제공한다

 

이제까지 controller를 만들어서 빈 Articlelist.jsp만 사용자에게 제공했으니 이제 안에 게시판 목록을 넣고 사용자에게 

 

jsp를 전달하면서 내용까지 함께 전달하자.

 

 

일단 Controller bean을 등록한것처럼 service도 bean을등록 해줘야한다.

context-common.xml 을열고

 

<context:component-scan base-package="egovframework">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
	
<context:component-scan base-package="pet">
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Service"/>
		<context:include-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
	
	

 

위와같이 context:component-scan을 복붙하여 base-package="pet" 처럼 설정을 해준다. 이번에는 include-filter를 service와 repository를 해주고 exclude에는 controller를 해주었다.

 

 

 

자 그럼 이제 위 경로처럼  service폴더안에 impl폴더와 interface인 ArticeService.java를 생성하고

 

아래와 같이 서비스 내용을 적어넣자

 

Articlelist 는 목록을 보여주는 메서드이며,Articleinsert 는 게시판 내용을 추가하는 메서드이다.

 

 

 

 

package pet.com.bbs.service;

import java.util.List;

public interface ArticleService {
	
	List<BoardVO> Articlelist(BoardVO boardvo);
	void Articleinsert(BoardVO boardvo);
	
	
}

 

그다음 작업은 인터페이스인 ArticleService를 구현해 줘야한다.

 

 

ArticleServiceimpL.java

package pet.com.bbs.service.impl;

import java.util.List;

import org.springframework.stereotype.Service;

import pet.com.bbs.service.ArticleService;
import pet.com.bbs.service.BoardVO;


@Service("ArticleService")
public class ArticleServiceimpL implements ArticleService{

	@Override
	public List<BoardVO> Articlelist(BoardVO boardvo) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void Articleinsert(BoardVO boardvo) {
		// TODO Auto-generated method stub
		
	}
	
}

 

인터페이스인 ArticleService를 implements로 받고 그 안에 있는 메서드를 구현하는것이다. 왜 이렇게 구현해야 하나라는

 

생각을 가지고있으면 직접 인터넷을 검색하여 설명을 찾기 바란다.

 

현재 쓰고 있는 시리즈는 빠르게 게시판을 만들수 있도록 필요한것들만 설명을 하고 넘어가고있으니~

 

 


이제는 db에 접근하기위한 DAO (DATA ACCESS OBEJCT) 를 생성할것이다

 

DAO란?

 

  • 실제로 DB에 접근하는 객체이다
  • Serivce와 DB를 연결하는 고리의 역할을 한다.
  • SQL을 사용하여 DB에 접근한 후적절한 CRUD API를 제공한다.

 

 

위와 같은 경로로 sql폴더를 생성한 CommonDAO.java를 생성하자

 

 

package pet.com.sql;

import org.springframework.stereotype.Repository;

import egovframework.com.cmm.service.impl.EgovComAbstractDAO;

@Repository("commonDAO")
public class CommonDAO extends EgovComAbstractDAO {
	
}

@Repository 어노테이션은 어떤 클래스가 그 역할을 충족시켰거나 레파지토리의 stereotype (또는 데이터 접근계층이나 DAO로 알려진)이라는 표시이다. 

 

쉽게말하면 그냥 commonDAO를 사용할때 저 이름을 붙여줘야 사용할수있다 등록?? 같은 개념이다. 그다음 우린

 

extends로 EgovComAbstractDAO를 상속받아 안에있는 selectlist(db 내용을 리스트로 받기) 등등에 api를 사용할것이다.

 

 


ArticleServiceimpL.java

import pet.com.bbs.service.ArticleService;
import pet.com.bbs.service.BoardVO;
import pet.com.sql.CommonDAO;


@Service("ArticleService")
public class ArticleServiceimpL implements ArticleService{
	
	@Resource(name = "commonDAO")
	private CommonDAO commondao;
	
	@Override
	public List<BoardVO> Articlelist(BoardVO boardvo) {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void Articleinsert(BoardVO boardvo) {
		// TODO Auto-generated method stub
		
	}

위와 같이 dao(data accecs object) 객체인 commonDAO를 Resource로 불러온뒤 변수를 선언해보자

 

이번글은 여기까지하고 다음글에서

 

CRUD를 본격적으로 해보자

728x90
반응형

댓글