728x90
300x250

[Sun Sys - Java] 태스트도구 JUnit 5 - Eclipse(STS 4.4)에서 사용하는 방법


프로그래밍을 하면서 태스트 작업을 하기 마련인데 자바에서 태스트 환경도구를 사용하는 방법에 대해서 소개하려고 한다.

수업 등에서는 다뤄볼 일이 적은 부분일 수도 있다. 쉬우면서 어려운 부분이 태스트 도구라고 본다.


IDE: Spring-tool-suite-4-4.7.2.RELEASE (2020-09-08 기준 - 최신)

JAR: 

1. org.junit.jupiter.api_5.6.0.v20200203-2009.jar

2. org.junit.jupiter.engine_5.6.0.v20200203-2009.jar

3. org.junit.jupiter.migrationsupport_5.6.0.v20200203-2009.jar

4. org.junit.jupiter.params_5.6.0.v20200203-2009.jar

5. org.junit.platform.commons_1.6.0.v20200203-2009.jar

6. org.junit.platform.engine_1.6.0.v20200203-2009.jar

7. org.junit.platform.lanucher_1.6.0.v20200203-2009.jar

8. org.junit.platform.runner_1.6.0.v20200203-2009.jar

9. org.junit.platform.suite.api_1.6.0.v20200203-2009.jar

10. org.junit.vintage.engine_5.6.0.v20200203-2009.jar

11. org.opentest4j_1.2.0.v20190826-0900.jar

12. org.apiguardian_1.1.0.v20190826-0900.jar

13. org.junit_4.13.0.v20200204-1500.jar

14. org.hamcrest_1.2.0.v20180420-1519.jar


(EPL 라이선스 적용: 오픈소스)


* 공식 사용 메뉴얼: 사이트
https://junit.org/junit5/docs/current/user-guide/

* Assert 관련 API
http://junit.sourceforge.net/javadoc/org/junit/Assert.html




1. 사용 방법 - 영상


아주 간결하게 필요한 부분 위주로 소개하였으니 부담없이 시청해도 된다.



영상 1. Eclipse에서 프로젝트 생성하기 및 JUnit 셋팅하기



영상 2. JUnit 5 - 태스트 케이스 작성 및 동작 시키기




2. 사용 방법(2) - 프로젝트 생성하기


프로젝트를 생성하는 방법을 시작으로 소개하겠다.



그림 1. 프로젝트 생성하기


프로젝트 익스플로러(Project)에서 마우스 오른쪽 버튼을 클릭한다.

New-> Project를 클릭한다.



그림 2. 프로젝트 생성하기


Java Project를 클릭한다.

Next를 클릭한다.



그림 3. 프로젝트 생성하기


Project-name을 입력한 후 Finish를 누른다.



3. Properties - Junit 5 Class Path 등록하기 (Build Path 설정)


제일 중요한 작업이 아닐까 싶다.

이 셋팅을 안 해버리면, 사용할 수 없다. 물론 수동으로 등록하는 방법도 있겠으나 비효율적이다.



그림 4. 프로젝트 클릭 후 마우스 오른쪽 버튼 메뉴 모습


프로젝트를 클릭한다.

마우스 오른쪽 버튼을 클릭한 후, "Properties"를 클릭한다.



그림 5. 프로젝트 속성 - Java Build Path -> ClassPath 클릭 후 과정


Java Build Path를 클릭한다.

Libraries를 클릭한다.

ClassPath를 클릭한다.

Add Library를 클릭한다.



그림 6. Junit5 - 추가하기(1)


JUnit을 선택한다.

Next를 클릭한다.




그림 7. Junit5 - 추가하기(2)


Junit5를 선택한다.

Finish를 누른다.



그림 8. Junit5 - 추가 완료한 모습


다음처럼 등록되면 성공적으로 작업을 완료한 것이다.



4. Class 만들기


실제 태스트를 진행할 예를 하나 만들겠다.



그림 9. Class 만들기(1)


src 폴더를 클릭한 후 마우스 오른쪽 버튼으로 클릭한다.

New->Class를 클릭한다.



그림 10. Class 만들기(2)


Package는 적당히 입력해준다. (예: com.example)

Name을 Calculate라고 입력한다.

Finish를 누른다.



그림 11. Class 만들기(2)


코드를 작성해준다.


public int plus(int a, int b){

     return a + b;

}



5. Junit Test Case - 작성하기 


작성한 클래스를 태스트 케이스를 작성하여 태스트하도록 하겠다.


그림 12. Test Case 생성하기(1)


com.example 패키지를 마우스 오른쪽으로 클릭한다.

New->Other를 클릭한다.




그림 13. Test Case 생성하기(2)


Junit Test Case를 클릭한다.

Next를 누른다.



그림 14. Test Case 생성하기(3)


Class under test의 Browse를 클릭한다.



그림 15. Test Case 생성하기(2)


앞서 만든 "Calculate"를 검색한다.

Calculate를 선택한다.

OK를 누른다.



그림 16. Test Case 생성하기(3)


Package명을 입력한다.

Name을 입력한다.

Next를 누른다.



그림 17. Test Case 생성하기(4)


plus 함수를 선택한다.

Finish를 누른다.



6. Junit Test Case - 태스트 작업 실행하기 


태스트 명세를 완료하였다면, 태스트를 수행하도록 하겠다.



그림 18. Test Case 실행하기(1)


하나 예로 코드를 입력해준다.


@Test

void testPlus(){

      assertEquals(3, new Caculate().plus(2, 3));

}


이 코드는 직감적으로 plus 함수의 결과가 3이 되어야 참인데, 5라는 것을 코드만 보고도 알 수 있다.

외형 코드 말고 세부적인 코드에서 사람이 생각하는 결과를 원하는 게 아니라, 컴퓨터가 3으로 출력하는지 확인하는 것이다.



그림 19. Test Case 실행하기(2)


CalculateTest.java를 마우스 오른쪽 버튼으로 클릭한다.

Run As->JUnit Test를 클릭한다.



그림 20. Test Case 결과 (3)


결과값이 실패했다고 빨강색 진행바와 함수가 올라오는 것을 확인할 수 있다.

코드를 변경해서 시도해보자.


@Test

void testPlus(){

      assertEquals(5, new Caculate().plus(2, 3));

}


직감적으로 5가 되면 맞는 것이다.

진짜 5가 맞는지 확인해보자.


CalculateTest.java를 마우스 오른쪽 버튼으로 클릭한다.

Run as-> JUnit Test를 클릭한다.



그림 21. Test Case 결과 (4)


녹색 불이 들어오면서 이상이 없는 것을 살펴볼 수 있었다.



* JUnit Assert 주요 메서드와 사용 예시


 assert 메서드

설명 

 assertArrayEquals(a, b);

배열 a, b의 일치 여부

assertEquals(a, b);

객체 A와 B가 일치함을 확인.

assertSame(a, b);

 객체 A와 B가 같은 객체임을 확인한다.
assertEquals 메서드는 두 객체의 값이 같은지 검사를 한다.

assertSame메서드는 두 객체가 동일한가

즉, 하나의 객체여부를 확인한다. (== 연산자 역할)

assertTrue(a);

 조건 A가 참인가를 확인한다.

 assertNotNull(a);

객체 A가 null이 아님을 확인한다.

assertFalse(a);

조건 A가 거짓인지를 확인한다.



String empname[] = {"hwani","kimchi"};

String studentname[] = {"hama","sumi"};

assertArrayEquals(empname, studentname);


List someList = someClass.getSomeList();

assertNotNull("조회결과 null", someList);


assertTrue(someList.size() > 0);


int score = 5;

assertFalse( score < 0 ) ;


assertEquals(3, someList.size()); 



반응형
728x90
300x250

[JSP] 9. MVC 디자인 패턴 - 초간단 이해, FrontController 패턴(1)


이전의 글을 보면, 순수하게 "JSP/서블릿"으로 처리하는 방법에 대해서 소개하고 있는데, 실질적으로 개발에서 자주 사용할 수 있는 패턴에 대해서 소개해보려고 한다.


기존 개발에 대해서 다시 한번 생각해보도록 하자.



그림 1. 기존 개발방법론의 문제점 - 요약


기존 개발방법론을 살펴보면, 크게 JSP, Servlet 처리에 대해서 하나의 코드 안에 "개발 코드(액션 코드 또는 동적 코드)", "사용자 인터페이스(UI)" 등이 혼잡되어 구현되는 문제가 있을 수 있다.


Servlet을 사용해보면 알겠지만, 자바 코드 내에서 홈페이지 코드라고 불리는 html, css 등을 넣어준다는 게 보통 쉬운 일이 아니다.

물론 저레벨의 C언어 등으로 개발해보면, 언어 특성 때문에 어쩔 수 없이 MVC 개발이 어려운 경우가 있을 수도 있다.


이야기하고자 하는 것은 MVC패턴으로 개발을 하게 되는 배경은 "소프트웨어공학"에서 유지보수 차원의 문제부터 역할 전문화 등의 각종 공학적인 문제 때문에 패턴이라는 게 생겼을 것으로 보인다.


[첨부(Attachments)]

200920_Diagram1.pptx




1. 디자인 패턴이란?


디자인 패턴은 프로그램을 개발할 때 사용하는 일정한 뼈대(프레임) 또는 틀이라고 생각하면 된다.


디자인 패턴만 전문적으로 다루고 있는 참고서적이나 참고 사이트가 있는데 찾아보면 도움이 될 것이라고 본다.

(다소 처음에는 이해가 안 될 수도 있음. 개발을 조금 해봐야 필요성을 인지하게 된다.)





2. Model View Controller (MVC) 디자인 패턴


php나 asp 개발을 해보면, 디자인패턴이 초기에 바로 적용되진 않는다. 

물론 최근에는 aspx(asp.net)의 경우에는 model 1, model 2 느낌의 개발이 적용되어 있다고 본다.

이유는 간단한게 C#의 직접적인 경쟁자는 Java 프로그래밍 언어라는 점이다.


Java 진영의 JSP 개발을 하게 되면, MVC 패턴의 적용을 먼저 시작하고 들어가게 된다.


그림 2. MVC Model 1, MVC Model 2 구조


도식화된 그림으로 이해하고 있어도 무방하다. 그림 1에서 언급했던 이야기는 그림 2로서 정리해볼 수가 있다.


[첨부(Attachments)]

200920_Diagram2.pptx


현재에도 Model 1이 사용되는 이유로는 장점이 있다.

초기 개발 속도에 있어서는 빠를 수가 있다.

무슨 이야기냐면, 컨트롤러와 뷰 영역을 신경쓰지 않고 개발하기 때문에 어렵게 공부하고 개발할 필요가 없는 것이다.

JSP 코드나 Servlet 코드 내에 통합적으로 코드를 집어넣으면 되는데, 굳이 컨트롤러를 복잡하게 매번 신경쓰고 개발하지 않아도 되는
프로젝트가 있을 수 있다.

Model2는 설계가 어려운 반면, 유지보수로 갔을 때는 역할 구분이 쉽다는 장점을 가지고 있다.


이전의 방법과 현재의 방법에서 적절한 방법을 찾아서 적용하는 것도 중요하다고 본다.


* 모델은 서비스와 데이터베이스 처리를 담당하는 역할을 하며, 각 로직처리, DB 질의 처리 기능을 수행한다.

* 는 JSP, CSS, HTML를 사용하여 구현함. 

* 컨트롤러는 뷰와 모델을 중개하는 역할을 수행하며, 클라이언트가 전달한 파라마터를 추출하여 모델로 전달하고, 처리결과를 보여주는 기능을 한다.



3. Eclipse의 Dynamic Web Project로 구현해보기


Apache Maven을 활용하면, 속도감이 있게 구현할 수 있겠으나 원초적인 방법으로 구현해보려고 한다.



그림 3. Dynamic Web Project - 생생하기


New 메뉴에서 Project -> Others를 누르면 위의 화면이 뜬다.

Web 폴더에서 Dynamic Web Project를 선택한 후 Next를 누른다.




그림 4. Dynamic Web Project - 생생하기


프로젝트 명을 입력하고 Next를 누른다.

Finish를 눌러도 무방하나 web.xml 파일을 자동으로 생성하려고 한다.



그림 5. Dynamic Web Project - 생생하기


Next를 누른다.



그림 6. Dynamic Web Project - 생생하기


Generate web.xml deployment descriptor에 체크를 한 후 Finish를 누르면 web.xml이 포함된 신규 프로젝트가 생성되는 것을 확인할 수 있다.



그림 7. Dynamic Web Project - 생생하기


성공적으로 신규 프로젝트가 생성되었다.



4. web.xml 설정하기


Front Controller 패턴을 적용하기 위해서 Web.xml 파일을 살짝 수정해주어야 한다.



그림 8. web.xml 수정하기


<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

  <display-name>edu-jsp-MVC</display-name>

  <welcome-file-list>

    <welcome-file>index.html</welcome-file>

    <welcome-file>index.htm</welcome-file>

    <welcome-file>index.jsp</welcome-file>

    <welcome-file>default.html</welcome-file>

    <welcome-file>default.htm</welcome-file>

    <welcome-file>default.jsp</welcome-file>

  </welcome-file-list>

  

<!-- Front Controller 패턴 -->

<servlet>

<servlet-name>front</servlet-name>

<servlet-class>com.eduJsp.controller.FrontController</servlet-class>

<init-param>

<param-name>charset</param-name>

<param-value>UTF-8</param-value>

</init-param>

</servlet>

<servlet-mapping>

<servlet-name>front</servlet-name>

<url-pattern>*.do</url-pattern>

</servlet-mapping>

  

</web-app>


[소스 코드]


[첨부(Attachments)]

web.zip




5. FrontController 생성하기(서블릿) - Controller


FrontController 패턴의 초기 컨트롤러를 생성하겠다.


그림 9. Servlet 만들기 - FrontController 생성


Java Resources를 오른쪽 버튼으로 클릭한다.

New-> Servlet을 클릭한다.



그림 10. Servlet 만들기 - FrontController 생성


Java Package 명은 com.eduJsp.controller로 입력한다.

Class Name 명은 FrontController로 입력한다.

Next를 누른다.



그림 11. Servlet 만들기 - FrontController 생성


Next를 누른다.



그림 12. Servlet 만들기 - FrontController 생성


init, service만 체크해준다.

Finish를 누른다.




그림 13. Servlet-API 복사, 붙여넣기 하기


servlet-api 파일을 apahce-tomcat 설치 경로에서 lib 폴더에서 찾아보면 파일이 있다.

프로젝트의 WEB-INF/lib 폴더에 "복사, 붙여넣기"를 해준다.





6. Controller 인터페이스 생성하기 - Controller


Controller에 대한 인터페이스에 관한 것이다.

공통적으로 사용할 인터페이스이니 지정을 한번 해주면 된다.



그림 14. Interface 만들기


"com.eduJsp...." 폴더에서 오른쪽 버튼을 클릭한다.

New->Interface를 클릭한다.



그림 15. Interface 만들기


"Name(파일명)"을 Controller로 입력한다.

Finish를 누른다.



그림 16. Interface 만들기


package com.eduJsp.controller;


import java.io.IOException;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public interface Controller {


public void execute(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException;

}


* 파일명: Controller.java


[첨부(Attachments)]

Controller.zip




7. AddressInsertController와 AddressListController - Controller


이번에 수행할 작업은 앞서 6에서 생성한 Controller 인터페이스를 바탕으로 List, Insert 컨트롤러를 만들어보도록 하겠다.



그림 17. Controller 구현부 - 만들기


com.eduJsp 오른쪽 버튼 -> New -> Class를 누른다.




그림 18. Controller 구현부 - 만들기


두 개를 만들어야 함. (그림 17, 그림 18과정 - 반복)
- ClassName(클래스명): AddressInsertController

- ClassName(클래스명): AddressListController


클래스를 두개 만들어준다.

참고로 클래스를 생성할 때 Interfaces를 Add하여 Finish를 누르면 메서드(Method)가 자동으로 생성된다.



8. FrontController.java 코드 작성하기(서블릿) - Controller


앞서 작성한 컨트롤러(인터페이스)를 바탕으로 FrontController를 작성해보겠다.



그림 19. FrontController.java 코드 작성


package com.eduJsp.controller;


import java.io.IOException;

import java.util.HashMap;


import javax.servlet.ServletConfig;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class FrontController extends HttpServlet {

private static final long serialVersionUID = 1L;

    

private String charset = null;

private HashMap<String, Controller> list = null;

    public FrontController() {

        super();

    }


    @Override

public void init(ServletConfig sc) throws ServletException {

    charset = sc.getInitParameter("charset");

    list = new HashMap<String, Controller>();

   

    list.put("/board/insert.do", new AddressInsertController());

    list.put("/board/list.do", new AddressListController());

   

}


    @Override

protected void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {


    req.setCharacterEncoding(charset);

    String url = req.getRequestURI();

    String contextPath = req.getContextPath();

    String path = url.substring(contextPath.length());

   

    Controller subController = list.get(path);

    subController.execute(req, res);

   

}


}



* 파일명: FrontController.java


[첨부(Attachments)]

FrontController.zip




9. HttpUtil 코드 작성하기(서블릿) - Controller


RequestDispatcher가 해당 주제에서는 핵심이라고 보면 되겠다.

앞서 작성한 AddressListController나 AddressInsertController 등에서 jsp파일 경로 등을 요청했을 때, 작업을 처리해주는 역할을 수행한다.



그림 20. HttpUtil 코드 작성


com.eduJsp 폴더를 오른쪽 버튼한다.

New->Servlet을 클릭한다.




그림 21. HttpUtil 코드 작성


Class Name은 HttpUtil로 지정한다.

Next를 누른다.



그림 22. HttpUtil 코드 작성


Next를 누른다.




그림 23. HttpUtil 코드 작성


service만 체크하고 Finish를 누른다.

함수 원형을 생성하기 귀찮아서 하나만 선택하였다.

참고로 다음 작업에서는 함수 원형을 살짝 수정할 것이다.




그림 24. HttpUtil 코드 작성



package com.eduJsp.controller;


import java.io.IOException;


import javax.servlet.RequestDispatcher;

import javax.servlet.ServletException;

import javax.servlet.http.HttpServlet;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class HttpUtil extends HttpServlet {

private static final long serialVersionUID = 1L;

       

public static void forward(HttpServletRequest req, HttpServletResponse res, 

String path) throws ServletException, IOException {

try {

RequestDispatcher dispatcher = req.getRequestDispatcher(path);

dispatcher.forward(req, res);

}catch(Exception ex) {

System.out.println("forward 오류:" + ex);

}


}


}



* 파일명: HttpUtil.java


[첨부(Attachments)]

HttpUtil.zip




10. addressList.jsp, addressInsert.jsp 파일 생성하기 - View (뷰 영역 만들기)


이번 작업에서는 뷰 영역을 만들어주겠다.



그림 25. 뷰 생성하기


WebContent 폴더에서 오른쪽 버튼을 클릭한다.

New->JSP File을 클릭한다.




그림 26. 뷰 생성하기


File name은 addressList로 입력한 후 Finish를 누른다.



그림 27. 뷰 생성하기


File name은 addressInsert로 입력한 후 Finish를 누른다.


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>목록 - MVC 페이지</title>

</head>

<body>

<h3>목록 - MVC 페이지</h3>

</body>

</html>


* 파일명: addressList.jsp


[첨부(Attachments)]

addressList.zip


<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>삽입 - MVC 페이지</title>

</head>

<body>

<h3>삽입 - MVC 페이지</h3>

</body>

</html>


* 파일명: addressInsert.jsp


[첨부(Attachments)]

addressInsert.zip



11. AddressInsertController.java, AddressListController.java


AddressInsertController.java, AddressListController.java 파일에 관한 것이다.


package com.eduJsp.controller;


import java.io.IOException;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class AddressInsertController implements Controller {


@Override

public void execute(HttpServletRequest req, HttpServletResponse res) throws

ServletException, IOException{


HttpUtil.forward(req, res, "/WEB-INF/view/addressInsert.jsp");

}


}


* 파일명: AddressInsertController.java


package com.eduJsp.controller;


import java.io.IOException;


import javax.servlet.ServletException;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;


public class AddressListController implements Controller {


@Override

public void execute(HttpServletRequest req, HttpServletResponse res) throws

ServletException, IOException {

HttpUtil.forward(req, res, "/WEB-INF/view/addressList.jsp");

}


}


* 파일명: AddressListController.java



12. 결과


서버에 올려서 확인해보면, 아래와 같은 결과를 출력해볼 수 있다.



그림 28. 출력하기 - 결과(1)



그림 29. 출력하기 - 결과(2)



13. UML 설계(Controller 설계)


"bottom->top" 방식으로 UML 결과를 보여주도록 하겠다.



그림 30. UML 설계도 - edu-jspMVC 프로젝트


예를 들면, 이러한 설계도를 바탕으로 코드를 작성하기에 앞서 한번 더 생각해볼 수 있다.

물론 코드 학습에 있어서는 직접 짜봐야 감이 오는 건 분명하다.


* UML 작성 프로그램: Modelio Open Source 4.0



14. 질의처리 및 로직에 관한 영역 - Model 영역(선택)


모델은 서비스와 데이터베이스 처리를 담당하는 역할을 하며, 각 로직처리, DB 질의 처리 기능을 수행한다.

패키지를 기준으로 보면, com.edu-jspMVC.service에 해당된다고 보면 된다.


모델 영역은 데이터베이스를 사용하지 않거나 복잡한 로직을 구현할 일이 없다면, 선택으로 둬도 무방할 것 같다.


14-1. VO(Value Object) - Model 영역(선택)


정보를 저장할 목적으로 만든 VO(Value Object) 객체라고 정의할 수 있다.


* tableName(테이블명): addressbook


 키

 항목명

 속성 

 PK(기본키)

num

인덱스(ID)

 

name

nvarchar2(20)

 

address

nvarchar2(100)

 

birthdate

date


표 1. addressbook 테이블


package com.eduJsp.vo;


import java.sql.Date;


public class AddressVO {

private int num;

private String name;

private String address;

private Date birthdate;

public int getNum() {

return num;

}

public void setNum(int num) {

this.num = num;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getAddress() {

return address;

}

public void setAddress(String address) {

this.address = address;

}

public Date getBirthdate() {

return birthdate;

}

public void setBirthdate(Date birthdate) {

this.birthdate = birthdate;

}

}


* 파일명: AddressVO.java


[첨부(Attachments)]

AddressVO.zip




14-2. Service 설계 - Model 영역(선택)


클래스명은 "AddressService" 이런 형태로 파일을 구성하여 사용하면 된다.

인터페이스를 설계해도 무방하다.


package com.eduJsp.service;


import java.util.List;


import com.eduJsp.vo.AddressVO;


public interface IAddress {


public AddressVO getAddress(Integer num) ;

public List<AddressVO> allData();

public int insertAddress(AddressVO addressVO);

public int updateAddress(AddressVO addressVO);

public int deleteAddress(AddressVO addressVO);

}


* 파일명: IAddress.java


[첨부(Attachments)]

IAddress.zip


package com.eduJsp.service;


import java.util.List;

import com.eduJsp.vo.AddressVO;


public class AddressService implements IAddress{


@Override

public AddressVO getAddress(Integer num) {

return null;

}


@Override

public List<AddressVO> allData() {

// TODO Auto-generated method stub

return null;

}


@Override

public int insertAddress(AddressVO addressVO) {

// TODO Auto-generated method stub

return 0;

}


@Override

public int updateAddress(AddressVO addressVO) {

// TODO Auto-generated method stub

return 0;

}


@Override

public int deleteAddress(AddressVO addressVO) {

// TODO Auto-generated method stub

return 0;

}

}



* 파일명: AddressService.java


[첨부(Attachments)]

AddressService.zip




14-3. DAO(Data Access Object) - Model 영역(선택)


데이터베이스 처리에 관한 실질적인 코드를 구현하는 곳이다.

현재 프로그램들의 대부분은 DB를 사용하지만, 꼭 사용해야 하는 것은 아니다.


패키지를 기준으로 보면, "com.edu-jspMVC.dao"에 해당된다고 보면 된다.

예를 들면, 클래스명 "AddressDAO" 이런 형태로 파일을 구성하여 사용하면 된다.


여기 부분에 예를 들면, Resultset, Preparedstatement, Connection 등의 기능을 활용하여 SQL문장 등을 정의하는 것이다.


package com.eduJsp.dao;


import java.sql.Connection;

import java.sql.PreparedStatement;

import java.sql.ResultSet;


import com.eduJsp.vo.AddressVO;


public class AddressDAO {


    public AddressVO selectAddress(Integer num) {


    Connection conn = null;

    PreparedStatement pstmt = null;

    ResultSet rs = null;

   

    AddressVO node = new AddressVO();

   

    String sql = "select NUM, NAME, ADDRESS, BIRTHDATE " +

      " from addressbook" + 

      " where num=?";

    System.out.println(sql);

   

    // 달력 날짜 출력 버그 개선

   

    try {

    //conn = session.connect();

   

    pstmt = conn.prepareStatement(sql);

    pstmt.setInt(1, num);

   

    rs = pstmt.executeQuery();

   

    if ( rs.next() ) {

    node.setNum(rs.getInt(1));

    node.setName(rs.getNString(2));

    node.setAddress(rs.getNString(3));

    node.setBirthdate(rs.getDate(4));

    }

   

   

    }catch(Exception ex) {

    System.out.println("오류 발생: " + ex);

    }

    finally {

    // session.close(conn, pstmt, rs);

    }

   

        return node;


    }

}


* 파일명: AddressDAO.java


[첨부(Attachments)]

AddressDAO.zip




15. MVC 프로젝트 구성도


MVC 프로젝트를 구성한 모습이다.



그림 31. MVC Project 구성


그림 31처럼 이런 형태로 구성된다고 보면 되겠다.



16. 맺음글(Conclusion)


글을 다소 길게 쭉 작성했는데, MVC를 좀 더 정확하게 소개하고 싶어서 그런 점 이해하길 바란다.


MVC 패턴의 원리에 대해서 JSP/Servlet을 기반으로 소개하였다.

예를 들면, Spring Frameworks를 먼저 접하기보다는 순수한 부분에 대해서도 생각해봐야 한다고 본다.



* 참고자료(References)


반응형
728x90
300x250

[컴퓨터 - PC활용] Eclipse - UML, ERD 설계 도구 - Amateras Modeler


소프트웨어 공학 문서 등으로 알기 쉽게 만드는 방법 중 하나가 UML 작업이 아닐까 싶다.

UML 작성을 도와주는 프로그램을 소개하려고 한다.


시중에 있는 좋은 UML도구를 사용하려고 하면, 유료가 굉장히 많다.


UML 프로그램은 크게 "Class Diagram(클래스 다이어그램)", "Sequence Diagram(순서작성 다이어그램)", "ERD(Entity-Relationship Diagram)" 등의
소프트웨어공학 문서를 작성하는데 사용함.



1. Amateras Modeler 소개 및 설치 방법


http://amateras.osdn.jp/cgi-bin/fswiki_en/wiki.cgi


사이트에 접속한다.



그림 1. Project Amateras - 2020-09-20


사이트에 접속해보면, 다양한 제품들이 있다는 것을 확인할 수 있다.

조금 업데이트가 안 되서 오래된 기분이 든다.



그림 2. Help -> Install New Software에서 설치하기


Add Repository 창에서
Name : Amateras Modeler,
Location : https://takezoe.github.io/amateras-update-site 를 입력합니다.

OK 버튼을 누릅니다.


크게 어렵지 않은 과정으로 설치할 수 있다.

(License: Eclipse Public Licenses v2 - 오픈소스)



그림 3. Class Diagram(클래스 다이어그램 생성 기능) - Amateras UML



그림 4. Seq Diagram(시컨스 다이어그램 생성 기능) - Amateras UML




2. UML to Java Generator 3.0


UML to Java Generator라는 도구를 소개하겠다.



그림 5. Help -> Eclipse Marketplace



그림 6. Help -> Eclipse Marketplace(1)


관련된 프로젝트에 대해서 궁금하면, 아래의 사이트에 접속해서 확인할 수 있다.


https://marketplace.eclipse.org/content/uml-java-generator#group-details


읽어봐야 할 부분이 조금 있는 것으로 보인다.



그림 7. UML-Java Generator - Eclipse


Acceleo 개발 팀에 의해서 Eclipse UML Generators Project 파트가 생성되었다고 되어 있다.

Marketplace에서 추가로 "Acceleo 3.7"을 설치해보도록 하겠다.




그림 8. Help -> Eclipse Marketplace(2)


사용 난이도: 다소 어려움. 동작이 안 될 수도 있음. (삽질 시간이 길다)


* License: EPL v2


Acceleo 프로젝트가 어렵다면, UML Designer도 있으니 참고하면 도움이 될 거 같다.


http://www.umldesigner.org/



그림 9. UMLDesigner 사이트에서 배포하고 있는 UML 도구


압축을 해제하면 된다.

프로젝트가 업데이트되지 않은 듯하다.



그림 10. UMLDesigner 사이트에서 배포하고 있는 UML 도구


UMLDesigner를 실행하면 된다.



그림 11. UMLDesigner 9.0 - Eclipse


잠시 기다린다.

사용 원리는 Eclipse와 동일하다.



그림 12. UMLDesigner 9.0 - Eclipse


처음 실행하면 이러한 창이 뜬다.

File->New->Example을 클릭한다.



그림 13. UMLDesigner 9.0 - Eclipse


Travel Agency UML을 선택한 후 Next를 누른다.



그림 14. UMLDesigner 9.0 - Eclipse


Finish를 누른다.



그림 15. UMLDesigner 9.0 - Eclipse


representation.aird의 세부 항목 중 하나를 열어본 것이다.

UML 설계를 할 수 있는 도구라는 것을 살펴볼 수 있다.



그림 16. UMLDesigner 9.0 - Eclipse


프로젝트를 선택한 후 "프로젝트 추가 버튼"에서 UML Model을 클릭한다.



그림 17. UMLDesigner 9.0 - Eclipse


myUMLProject.uml으로 입력 후 Finish를 누른다.



그림 18. UMLDesigner 9.0 - Eclipse


myumlproject.uml에서 Model을 선택한 후 오른쪽 버튼을 누른다.

New Representation을 클릭한 후 NewModel Class Diagram을 클릭한다.




그림 19. UMLDesigner 9.0 - Eclipse


모의로 하나 그려보았다.

설명서를 보면, UML to Java 변환이 가능하다고 되어있으나 현재는 동작되지 않고 있다.



3. Modelio (Open source Modeling Project)


초기 용량은 300Mb 내외로 다소 크지만, 관심을 가져봐도 되는 프로젝트인듯하다.


주소: https://www.modelio.org/



그림 20. Modelio Project - 2020-09-20


Download를 클릭해본다.



그림 21. Modelio Project - 2020-09-20


다양한 운영체제를 지원하는 것을 확인할 수 있다.



그림 22. Modelio Project - 2020-09-20


설치는 크게 어렵지 않으며 Next를 누른다.



그림 23. Modelio Project - 2020-09-20


GNU v3 Licenses를 적용받는다.

I Agree를 누른다.



그림 24. Modelio Project - 2020-09-20


Next를 누른다.



그림 25. Modelio Project - 2020-09-20


Install을 누른다.



그림 26. Modelio Project - 2020-09-20


기다린다.



그림 27. Modelio Project - 2020-09-20


설치가 완료된 모습이다. Finish를 누른다.




3-1. Modelio 초기 실행 및 환경설정


Modelio 프로그램은 크게 기본에 충실하게 생겼다.



그림 28. Modelio 4 실행


File->Create a project를 클릭한다.



그림 29. Modelio 4 - 프로젝트 생성


project name을 입력한다.

Java project에 체크한 후 create the project를 누른다.



그림 30. Modelio 4 - 프로젝트 생성 


잠시 기다린다.



그림 31. Modelio 4 - 프로젝트 환경설정


Configuration -> Modules를 클릭한다.



그림 32. Modelio 4 - 프로젝트 환경설정(Module)


Modules 탭을 클릭한다.

Add를 누른다.

JavaDesigner를 선택한 후 Deploy in the project를 누른다.




그림 33. Modelio 4 - 프로젝트 환경설정(Library)


Libraries 탭을 클릭한다.

Add from update site를 클릭한다.




그림 34. Modelio 4 - 프로젝트 환경설정(Library)


JDK를 체크한 후 Add to project를 누른다.



그림 35. Modelio 4 - 프로젝트 환경설정(Library)


잠시 기다린다.



그림 36. Modelio 4 - 프로젝트 환경설정(Library)


JDK가 등록되었으면, Close를 클릭한다.



3-2. Modelio - 다이어그램 생성하기


Modelio를 이용하여 다이어그램을 생성하는 방법에 대해서 소개하겠다.



그림 37. Modelio 4 - Create Diagram 생성하기


Modelio의 하위 프로젝트 폴더에서 오른쪽 버튼을 클릭한다.

Create diagram을 누른다.



그림 38. Modelio 4 - Create Diagram 생성하기


Class Diagram을 선택한 후 OK를 누른다.



그림 39. Modelio 4 - Create Diagram 생성하기


클래스 다이어그램을 작성하면 된다.





3-3. Modelio - UML to Java generator


패키지, 클래스 항목에 "Java element" Value를 체크한다.



그림 40. Modelio 4 - UML to Java Generator


그리고 UML 아이콘을 눌러준다.


참고사항: Attribute의 value type에서 "HttpServlet" 등으로 변경하거나 null값으로 두면 자동생성이 되지 않는다.




그림 41. Modelio 4 - UML to Java Generator


소스코드가 생성된 것을 확인할 수 있다.


경로를 모르겠다면, configuration 메뉴에서 Modules을 클릭한다.

Informations 탭을 클릭하면, workspaces 경로를 확인할 수 있다.



그림 42. Modelio 4 - UML to Java Generator


생성된 소스코드의 모습이다.




4. 맺음글(Conclusion)


이외에도 StarUML 프로젝트(과거에는 무료였으나 현재는 유료)를 대체할 수 있는 강력한 UML 프로그램이 있는지 정리해보았다.

그나마 기대가 되는 프로젝트는 Modelio 프로그램이라고 본다.

아무쪼록 글을 줄여본다.


참고로 UML툴로 설계한 후에 프로그램 코드로도 일괄 변환작업을 할 수 있다.





* 참고 자료(Reference)


1. FrontPage - Project Amateras, http://amateras.osdn.jp/cgi-bin/fswiki_en/wiki.cgi, Accessed by 2020-09-20, Last Modified 2006

2. Uml to Java Generator | Eclipse Plugins, Bundles and Products - Eclipse Marketplace, https://marketplace.eclipse.org/content/uml-java-generator#group-details, Accessed by 2020-09-20, Last Modified 2020-09-18

3. Acceleo | Home, https://www.eclipse.org/acceleo/, Accessed by 2020-09-20, Last Modified 2020-09-20

4. Download, http://www.umldesigner.org/download/, Accessed by 2020-09-20, Last Modified 

5. 무료 StarUML 대체 프로그램 13개, https://littlecarbb.tistory.com/entry/%EB%AC%B4%EB%A3%8C-StarUML-%EB%8C%80%EC%B2%B4-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8-13%EA%B0%9C, Accessed by 2020-09-20, Last Modified 2019-06-26 15:44

-> 비고: UML 관련 프로그램에 대해서 정리가 잘 되어 있음.

반응형
728x90
300x250
[이야기(Story)] 소스코드 라인 계산 프로젝트 - CLOC

 

소스코드 라인 계산을 해주는 프로젝트입니다.

http://cloc.sourceforge.net/

 


1. 프로젝트 소개

 

그림 1) cloc 소스포지 웹 사이트

 

 

그림 2) 라이선스와 안정화된 버전에 대한 설명

 

참고로 CLOC 프로젝트는 GNU v2 라이선스를 적용받습니다.

https://sourceforge.net/projects/cloc/files/cloc/v1.64/

 


2. 첨부(Attachment)

 

cloc-1.64.zip

cloc-1.64.pl

cloc-1.64.tar.gz

README.txt

release-1_64.txt

 


3. 사용방법(Guide)

 

 

 

 


4. 참고자료(Reference)

 

1. CLOC -- Count Lines of Code, Accessed by 2019-10-08, Last Modified 2015, http://cloc.sourceforge.net/

2. cloc - Browse /cloc/v1.64 at SourceForge.net, Accessed by 2019-10-08, Last Modified 2015, https://sourceforge.net/projects/cloc/files/cloc/v1.64/

반응형

+ Recent posts