1. jstl 상의 오타

dto와 db상의 컬럼명 다름

c태그의 컬럼명 오타 등 

 

2.  jdbctypefornull에 null을 넣어준 경우 

select 쿼리문 날려서 list로 받아오면 String 형태로 null이 옴.

이 경우 list.size()로 사이즈 확인해보고 0이 아닐 경우 null이 아님.

필자는 jstl empty list 써서 list안에 있는 프로퍼티를 가리키며 numberformat 에러가 떴고,

list size가 3이었음. 즉 null 3개가 들어있음.

 

controller 단에서 null일 경우 result값에 listnull 을 넣어주고 jstl 상에서 listnull일 경우와 아닌 경우로 로직처리함.

File 클래스 정리

https://hyeonstorage.tistory.com/233

 

[JAVA] File 클래스 정리 (파일정보, 파일목록, 하드디스크 정보 출력)

File 클래스 정리 java.io 패키지는 기존의 파일이나 폴더에 대한 제어를 하는 데 사용하는 File 클래스를 제공한다. 이 클래스를 이용해서 파일과 폴더에 대한 다양한 기능을 제공한다. 파일을 나타내는 객체를..

hyeonstorage.tistory.com

 

File명 또는 디렉토리 변경

https://pandorica.tistory.com/38

 

java, 파일 rename, move 하는법

JAVA로 파일명을 변경하거나, 파일을 다른디렉토리로 이동하는 방법입니다. 첫번째 방법입니다. File file = new File( "c:/text.txt" ); File fileToMove = new File( "c:/TEMP/text2.txt" ); boolean isMoved =..

pandorica.tistory.com

MultipartFile.transferTo 

https://okky.kr/article/512140

 

OKKY | MultipartFile.transferTo 에 대해서 잘아시는분 계신가요?

웹에서 폼형태로 파일데이터를 컨트롤러에서 받을 경우 이 데이터는 어디에 저장 되어있나요? 임시파일형태로 저장되어 있나요? transferTo 메서드에서  isInMemory() 일 경우에는 FileOutputStream.write 하고 아닐경우는 FileUtils . moveFile()을 하던데.. transferTo을 이용하

okky.kr

 

 

파일업로드 샘플 1

https://passionha.tistory.com/214

 

파일업로드 처리(MultipartResolver, MultipartFile)

인코딩 타입이 Multipart인 경우 파라미터나 업로드한 파일을 구하려면 전송 데이터를 알맞게 처리해 주어야 한다. 스프링은 Multipart 지원 기능을 제공하고 있기 때문에, 이 기능을 이용하면 추가적인 처리없이..

passionha.tistory.com

 

파일업로드 샘플 2

https://loco-motive.tistory.com/72

 

스프링프레임워크 간단한 파일업로드 샘플

스프링프레임워크 간단한 파일업로드 샘플 1. 환경설정 pom.xml commons-fileupload commons-fileupload 1.2.1

loco-motive.tistory.com

 

파일업로드 샘플 3

https://jdkblog.tistory.com/132

 

Spring FileUpload 하기

안녕하세요. 퍼온글 : https://mkil.tistory.com/273 pom.xml 1 2 3 4 5 commons-fileuploadcommons-fileupload1.3.2

jdkblog.tistory.com

파일업로드 샘플 4

https://advenoh.tistory.com/26

 

스프링 파일 업로드 처리

1. 들어가며 이번 포스팅에서는 스프링에서 파일 업로드를 어떻게 구현할 수 있는지에 대해서 알아보도록 하겠습니다. 스프링에서는 단일 파일 업로드뿐만이 아니라 아래와 같은 여러 방법으로 파일 업로드 기능을..

advenoh.tistory.com

파일업로드 샘플 5

https://parkwonhui.github.io/spring/2019/03/20/java-spring-fileupload.html

 

file upload

web, server, java, spring 등.. 공부한 것을 기록하는 장소 입니다. 공부하면서 정리하였기 때문에 틀린 내용이 있을 수 있습니다. 이야기 해주시면 수정하겠습니다. HOME /About /algorithmus /db /front /git /java /ml /search /server /spring 파일업로드 방식 form 태그 사용 방식 : 브라우저 제한이 없어야 하는 경우 사용. 일반적으로 페이지 이동과 동시에 첨부파일을 업로드하는 방

parkwonhui.github.io

 

'Spring' 카테고리의 다른 글

인코딩 문제 해결  (0) 2019.11.11
oracle-Spring 시간 계산은 서버에서 처리  (0) 2019.10.29
Numberformatexception 오류 해결  (0) 2019.10.21
web.xml,root-context.xml,servlet-context.xml  (0) 2019.06.11

1.톰캣 설치

https://all-record.tistory.com/182

 

[Ubuntu] 우분투 서버(16.04)에 톰캣 설치

우분투 서버에 톰캣 설치하기 웹 서버를 구축하기 위해서는 톰캣(WAS)이 필요하다. 여기에서는 tomcat8을 설치한다. 다음의 명령어를 입력하여 우분투에 tomcat8을 설치한다. # 톰캣8 설치 sudo apt-get install..

all-record.tistory.com

 

 

2.mysql설치

https://dejavuqa.tistory.com/317

 

mysql 설치 와 기본 설정 (on Ubuntu)

Ubuntu에 mysql을 설치해 보겠습니다. 언제나 그렇듯이 Ubuntu 버전부터 살펴보겠습니다. $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 18.04.2 LTS Release: 18...

dejavuqa.tistory.com

 

 

3.ip확인하기

https://goproprada.tistory.com/283

 

우분투 서버 16.04 - 네트워크 인터페이스(IP 주소 등) 설정하는 방법

우분투 서버 16.04 - 네트워크 인터페이스(IP 주소 등) 설정하는 방법 우분투 서버 16.04에서 네트워크 인터페이스를 설정하는 방법을 알아 보겠습니다. 컴퓨터가 네트워크 환경에서 동작하려면 우선 컴퓨터에 네..

goproprada.tistory.com

 

4.root 계정 접속

https://kgu3405.tistory.com/entry/Linux-root-%EA%B3%84%EC%A0%95-%EC%9B%90%EA%B2%A9-%EC%A0%91%EC%86%8D-%EC%A0%9C%ED%95%9C

 

[Linux] root 계정 원격 접속 제한(telnet, ssh)

1. 취약점 - 원격으로 root 계정 직접 접속이 가능하면 해커에게 아무 방어선 없이 일차로 뚫릴 수 있는 여지를 준다. - 타계정으로 로그인하고, 계정 전환(su)을 통해 root 로 로그인 하도록 설정하여 방어선을..

kgu3405.tistory.com

https://hackcatml.tistory.com/6

 

Ubuntu 18.04.2 LTS에서 Root 로그인 설정

우분투는 기본적으로 GUI에서 root로그인이 허용되지 않습니다. 서버로 운영하는 것도 아니고, 데스크톱으로 사용하는데 명령어 입력할 때마다 sudo 입력하는 것이 굉장히 불편하네요. 몇 가지 설정을 고칠 필요가..

hackcatml.tistory.com

 

 

5.리눅스 포트 여는법

https://bottlecok.tistory.com/16

 

[Linux] 포트 열기 / 조회 / 삭제하기

[Linux] 포트 열기 / 조회 / 삭제하기 Linux에서 포트가 열려있는 닫혀있는지 확인하기 위해 조회를 하고 방화벽으로 인해 막혀있는 경우 포트 여는 방법을 소개한다. [포트 확인하기] netstat -nap 열려있는 모..

bottlecok.tistory.com

http://www.veng.co.kr/?mod=document&uid=11&page_id=732

 

리눅스(Linux) 포트 열기, 방화벽 설정해제 등

리눅스(Linux) 포트(port) 열기, 방화벽(firewall) 설정/해제 등 안내 -------------------------------------- 리눅스 port를 열기 위해서는 iptables를 통해서, 포트를 열고 막고를 할 수 있습니다. 아래의 예제 부분만 따라 하시면 해당 port에 대해 모두 열 수 있습니다. Inbound (외부에서 서버로 들어오는) , Outbound( 서버에서 외부로 나가는 ) 모두 port를 열기 위해서는 아래의

www.veng.co.kr

 

 

6.리눅스 mysql

http://blog.naver.com/PostView.nhn?blogId=hailey_jo&logNo=221371629870&parentCategoryNo=&categoryNo=8&viewDate=&isShowPopularPosts=true&from=search

 

리눅스 MySQL 시작, 정지, 재시작, 상태확인

→ service mysql 대신 /etc/init.d/mysql, → service mysqld 대신 /etc/init.d/mysqld를 써도 됨

blog.naver.com

 

'Server' 카테고리의 다른 글

브라우저는 어떻게 돌아가는가?  (0) 2019.12.02

1. visual studio code 다운 받기

2. git 다운 받기

https://git-scm.com/download/win

 

Git - Downloading Package

Downloading Git Now What? Now that you have downloaded Git, it's time to start using it.

git-scm.com

https://archmond.net/?p=9587

 

3. git연동하는 방법 

https://gomcine.tistory.com/entry/VS-Code%EC%97%90-Git-%EC%84%B8%ED%8C%85%ED%95%98%EA%B8%B0-Windows

 

PC 모니터 크기에 맞춘 웹 페이지를 다른 디바이스에 적용할 수 있는 방법은?

 

디바이스별 해상도

 

모니터

  1. 19인치 화면(표준 비율): 1280 x 1024 픽셀
  2. 20인치 화면(표준 비율): 1600 x 1200 픽셀
  3. 22인치 화면(와이드스크린): 1680 x 1050 픽셀

휴대폰

  1. 아이폰X : 1125x2436픽셀
  2. 갤럭시S10+ : 1440x3040픽셀
  3. V50 : 1440x3120픽셀

 

태블릿PC

  1. iPad Mini: 768x1024픽셀
  2. iPad Pro(10.5inch):1668 x 2224픽셀

만약 웹에서 구현하는 픽셀의 크기를 1440x3040을 기준으로 만들게 된다면 갤럭시나 V50에서는 보기 편하겠지만 

보다 모니터나 iPad Pro에서는 작게보여 옆에 여백이 많이 남을 것이고,

보다 작은 iPad Mini에서는 내용이 잘려서 보일 것입니다.

 

해결 방법은 view port라는 메타태그로 화면에 맞게 페이지를 축소 할 수 있습니다.

 

하지만 viewport로 디바이스에 크기에 맞게 페이지가 나오더라도

아래와 같이 방대한 양의 컨텐츠가 있으면 가독성이 안좋습니다.

이런경우 css3과 미디어 쿼리를 사용하면 화면의 크기에 맞는 레이아웃을 지정해 줄 수 있습니다.

 

@media (max-width: 400px){

     width: 500px;

}  최대 너비가 400px일 때 스타일 적용

 

이런식으로 말이죠!

 

방식을 이용해 반응형 레이아웃에 필요한 css파일을 따로 만들어 링크를 걸어 두면 반응형 웹페이지를 쉽고 빠르게 만들  수 있습니다. 

 

아래는 감사하게도 오픈해주신 반응형 웹 오픈소스입니다. 공개해주신 블로거님께 감사인사를 올립니다. 

 

https://m.blog.naver.com/PostView.nhn?blogId=cyclo80916&logNo=220780530391&proxyReferer=https%3A%2F%2Fwww.google.com%2F

 

40가지 반응형 웹사이트 오픈소스

파일첨부합니다. https://html5up.net/ 도움이 되셨다면 댓글하나 부탁드려요.

blog.naver.com

 

1) web.xml

설정을 위한 설정파일이다. 배포 기술자로써 영어로는 DD(Deployment Descriptor) 이다.

이 파일은 WAS(Web Application Server)가 최초 구동될 때 즉 톰켓이 최초 구동될 때 web.xml을 읽고 그에 해당하는 설정을 구성한다. 즉 각종 설정을 위한 설정파일이라고 할 수 있다.

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
      <context-param>  - 루트 컨텍스트로 모든 서블릿과 필터들이 공유함. root-context.xml을 정의
            <param-name>contextConfigLocation</param-name>
            <param-value>/WEB-INF/spring/root-context.xml</param-value>
      </context-param>
      
      
      <!-- Creates the Spring Container shared by all Servlets and Filters -->
      <listener> - 리스너로써 루트 컨텍스트에 정의 되어있는 것들을 모든 서블릿과 필터가 공유할 수 있게 해준다고 함.
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
      
      
      <!-- Processes application requests -->
      <servlet> - 서블릿 설정
            <servlet-name>appServlet</servlet-name>
            <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> - DispatcherServlet으로 앞단에서 요청정보를 핸들링 해줌.
            <init-param>
                  <param-name>contextConfigLocation</param-name> 
                  <param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value> -servlet-context.xml을 가르키고 있음.
            </init-param>
            <load-on-startup>1</load-on-startup>
      </servlet>
            
            
            
      <servlet-mapping> - appServlet에 대한 url-pattern을 정의
            <servlet-name>appServlet</servlet-name>
            <url-pattern>/</url-pattern>
      </servlet-mapping>
</web-app>

2) servlet-context.xml

주석을 보면  <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 이라고 나와있다.

해석해보면 DispatcherServlet Context : 이 서블릿의 요청처리 인프라를 정의한다. 이다. Dispatcher 서블릿과 관련된 설정을 하는것 같다.

정답은 아니지만 주로 View 지원 bean을 설정한다고 한다. ex) Controller

그래서 그런지 어노테이션, 리소스 디렉토리, ViewResolver에 관한 설정들이 있다.



<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:beans="http://www.springframework.org/schema/beans"
      xmlns:context="http://www.springframework.org/schema/context"
      xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
      <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
      
      <!-- Enables the Spring MVC @Controller programming model -->
      <annotation-driven /> - 어노테이션을 사용한다고 선언
      <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
      <resources mapping="/resources/**" location="/resources/" /> - HTML 리소스 디렉토리 정의
      <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
      <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> - ViewResolver로 jsp와 name 을 매핑
            <beans:property name="prefix" value="/WEB-INF/views/" />
            <beans:property name="suffix" value=".jsp" />
      </beans:bean>
      
      <context:component-scan base-package="com.hee.heechart" /> - 베이스 패키지 하위 모든 어노테이션을 스캔해서 빈으로 등록하겠다는 것.
     
</beans:beans>

3) root-context.xml 

처음에 프로젝트 생성시에는 아무 내용도 없다. 이곳은 공통빈을 설정하는 곳으로 주로 View 지원을 제외한 bean을 설정한다고 한다. 

ex) Service / Repository(DAO) / DB/ log 등등

mybatis를 root-context에 만들어 보도록 하자.

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.3.xsd
		http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd">
	
	<!-- Root Context: defines shared resources visible to all other web components -->
	
    <!--먼저 오라클 드라이버 연결 spring에서는 객체를 bean으로 생성한다. xml에서 bean으로 생성하는 방법이있고, annotation으로 생성하는 방법이 있고, config로 생성하는 방법이 있다.-->
    <bean name="driver"
    
    
</beans>




출처: https://debugdaldal.tistory.com/127 [달달한 디버깅]

 

[SPRING] web.xml , root-context.xml , servlet-context.xml 에 관하여...

1) web.xml 설정을 위한 설정파일이다. 배포 기술자로써 영어로는 DD(Deployment Descriptor) 이다. 이 파일은 WAS(Web Application Server)가 최초 구동될 때 즉 톰켓이 최초 구동될 때 web.xml을 읽고 그에 해당..

debugdaldal.tistory.com

 

'Spring' 카테고리의 다른 글

인코딩 문제 해결  (0) 2019.11.11
oracle-Spring 시간 계산은 서버에서 처리  (0) 2019.10.29
Numberformatexception 오류 해결  (0) 2019.10.21
File upload + MultipartFile 과 File 정리  (0) 2019.09.24

MVC 패턴의 Model1

모델 1은 뷰와 로직을 모두 JSP 페이지 하나에서 처리하는 구조이다.

이전 포스팅에서 MVC 패턴은 모델, 뷰, 컨트롤러 어플리케이션의 의존성을 줄이고 각각의 역할을 구분 지어 놓은 디자인 패턴이라고 했다. 하지만 이 모든걸 JSP 페이지 하나에 넣어버리면 다시 의존성을 가지게 되는 구조가된다.

 

아래는 Model1로 구현한 게시판 리스트를 불러오는 코드다.

코드를 보면 DB접속, DB 데이터 불러오기, DB데이터를 포함한 화면을 나타낸다.

<%@page import="java.sql.*"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
<script>
function updatewin(eid,fname,lname,email,pnum,jid){

     $(this).click(function(){
        $("td#"+eid).html("<input type=\"text\">");
        $("td#"+fname).html("<input type=\"text\">");
        $("td#"+lname).html("<input type=\"text\">");
        $("td#"+email).html("<input type=\"text\">");
        $("td#"+pnum).html("<input type=\"text\">");
        $("td#"+jid).html("<input type=\"text\">");
        $("button#"+jid).attr("href","update.jsp");
      
   });
}


function openwin(id){
	var url="detail.jsp?id="+id;
	window.open(url,"상세정보",width=800,height=800,left=100,top=50)
	
}
function deletewin(id){
	var url="delete.jsp?id="+id;
	window.open(url,"상세정보",width=800,height=800,left=100,top=50)
	
}


</script>

<title>List</title>
<style>
  table {
    width: 100%;
    border: 1px solid #444444;
  }
  th, td {
    border: 1px solid #444444;
  }
  </style>

</head>





<body>
<h1>직원 리스트</h1>
<table>
<tr height="40" width="100%">
<th width="16%">직원번호</th>
<th width="16%">이름</th>
<th width="16%">성</th>
<th width="16%">이메일(패스워드)</th>
<th width="16%">전화번호</th>
<th width="16%">업무</th>
<th width="16%">상세보기</th>
<th width="16%">삭제</th>
<th width="16%">수정</th>
</tr>
</table>





<table>
<%
Connection conn=null;
PreparedStatement pstmt= null;
ResultSet rs=null;
request.setCharacterEncoding("utf-8");
String id=request.getParameter("id");

//out.println("id: "+id);
//out.println("pw: "+pw)


try{
	Class.forName("oracle.jdbc.driver.OracleDriver");
	String jdbcurl="jdbc:oracle:thin:@127.0.0.1:1521:XE";
	conn=DriverManager.getConnection(jdbcurl, "user", "pw");		
	String sql="select * from EMPLOYEES ";
	pstmt=conn.prepareStatement(sql);
	rs=pstmt.executeQuery(sql);


	while(rs.next()){
%> 

<tr height="80" width="100%">
<td width="16%" id="<%=rs.getString("EMPLOYEE_ID") %>"> <%=rs.getString("EMPLOYEE_ID") %></td>
<td width="16%" id="<%=rs.getString("FIRST_NAME") %>">  <%=rs.getString("FIRST_NAME") %> </td>
<td width="16%" id="<%=rs.getString("LAST_NAME") %>">   <%=rs.getString("LAST_NAME") %> </td>
<td width="16%" id="<%=rs.getString("EMAIL") %>">       <%=rs.getString("EMAIL") %></td>
<td width="16%" id="<%=rs.getString("PHONE_NUMBER") %>"><%=rs.getString("PHONE_NUMBER") %></td>
<td width="16%" id="<%=rs.getString("JOB_ID") %>">      <%=rs.getString("JOB_ID") %></td>
<td width="16%"><button  onclick="openwin(<%=rs.getString("EMPLOYEE_ID") %>)" id="<%=rs.getString("EMPLOYEE_ID")%>" value="상세보기">상세보기</button></td>
<td width="16%"><button onclick="deletewin(<%=rs.getString("EMPLOYEE_ID") %>)" value="삭제">삭제</button></td>
<td width="16%"><button onclick="updatewin( <%=rs.getString("EMPLOYEE_ID") %> , '<%=rs.getString("FIRST_NAME") %>' , '<%=rs.getString("LAST_NAME") %>', '<%=rs.getString("EMAIL") %>', '<%=rs.getString("PHON_NUMBER") %>', '<%=rs.getString("JOB_ID") %>')" id="<%=rs.getString("JOB_ID")%>" value="수정">수정</button></td>
</tr>

<%
	}
}catch(Exception e) {
	out.println("DB연동 안됨");
	}
finally{
	if(conn!=null){
		try{
		conn.close();
		}
		catch (SQLException sqle){
			System.out.println(sqle.getMessage());
		}
	}
	if(pstmt!=null){
			try{
			pstmt.close();
			}
			catch (SQLException sqle){
				System.out.println(sqle.getMessage());
			}
		}
			if(rs!=null){
				try{
				rs.close();
				}
				catch (SQLException sqle){
					System.out.println(sqle.getMessage());
				}
	}
}
	 %>
</table>
</body>
</html>

 

 

MVC 패턴의 Model2

View는 jsp로만 만들고, Controller와 model는 class를 만들어 각각 객체로 구현한다.  

View에서 요청이 들어오면 응답하는 controller를 지정해 주고, 그 컨트롤러가 Model에서 데이터를 가져와 jsp파일로 넘겨주게 된다. 그리고 view에 보여지게 된다.

Model 1의 jsp파일에 한방에 다 넣었던 코드를 나누기 위해서 Servlet이라는 것이 등장한다. 

 

html 파일을 자바 머신에서는 읽을 수 없기 때문에 그 중간에 다리 역할 하는 것이 필요한데 그 역할을 하는것이 Servlet이다.

MVC모델이 나오게 된 배경

소프트웨어 구조를 더 쉽게 유지하고 수정하기 위해서 나온 모델이다. 쉽게 말해 HTML 파일 하나에 DB접속과 데이터 반환을 한번에 구현 한것과 html따로 DB접속과 데이터 반환을 하는 기능을 분리 시켰다고 생각하면 된다. 

 

MVC

  • Model View Controller의 약자로 애플리케이션을 세가지의 역할로 구분한 개발 방법론.
  • 의 그림처럼 사용자가 Controller를 조작하면 Controller Model을 통해서 데이터를 가져옴.
  • 그 정보를 바탕으로 시각적인 표현을 담당하는 View를 제어해서 사용자에게 전달하게된다.

 

 

 

MVC 디자인 패턴을 웹에 적용해보면

  1. 사용자가 웹사이트에 접속한다.
  2. CONTROLLER는 사용자가 요청한 웹페이지를 서비스하기 위해서 모델을 호출한다.
  3. 모델을 데이터베이스나 파일과 같은 데이터 소스를 제어한 후에 그 결과를 리턴한다.
  4. CONTROLLERMODEL이 리턴한 결과를 VIEW에 반영한다.
  5. 데이터가 반영된 VIEW는 사용자에게 보여진다.

 

Controller, Model, View의 역할 정리

 

Controller

사용자가 접근 한 URL로 요청사항을 파악한 후에 그에 맞는 데이터를 Model에 의뢰하고, 데이터를 View에 반영해서 사용자에게 알려준다.

 

Model

일반적으로 CI의 모델은 데이터베이스 테이블에 대응된다. 이를테면 Topic이라는 테이블은 topic_model이라는 Model을 만든다. 그런데 이 관계가 강제적이지 않기 때문에 규칙을 일관성 있게 정의하는 것이 필요하다.

 

View

View는 클라이언트 측 기술인 html/css/javascript들을 모아둔 컨테이너이다.

 

 

 

 

MVC 패턴의 특징

1. 로직, 데이터 , 페이지 등 어플리케이션을 분리하여 어플리케이션 간 의존성이 낮아진다.

2. 특정 어플리케이션만 집중 할 수 있도록 업무를 분할 할 수 있다.

3. 의존성이 높아지게 되면 로직 하나 바꾸기 위해 데이터, 화면 코드까지 수정해야하는 상황이 발생함.

4.Model과 View의 완벽한 분리가 어렵다.(Model과 View를 완벽하게 분리했다고 했는데 어렵다니? 다음 포스팅에..)

5. 유지보수가 용이하다.

6. 기능 설계를 하기 위해 많은 객체들이 필요하기 때문에 복잡할 수 있다.

7.설계시간이 오래 걸리고 숙련된 개발자가 필요하다.

 

출처:https://server-engineer.tistory.com/167

 

 

 

출처: 생활코딩-https://opentutorials.org/course/697/3828 

 

MVC 디자인 패턴 - 생활코딩

수업 소개 이미 CodeIgniter의 기본적인 골격인 Controller, Model, View를 살펴봤다. 이것들을 모아서 MVC라고 하는데 이번 시간에는 MVC에 대한 일반적인 정의를 간단히 알아보고, CodeIgniter에서는 MVC 패턴을 어떻게 구현하고 있는가를 알아보자. 복습의 성격도 있는 수업이다.  디자인 패턴 디자인 패턴은 건축으로치면 공법에 해당하는 것으로 소프트웨어의 개발 방법을 공식화 한 것이다. 소수의 뛰어난 엔지니어가 해결한 문

opentutorials.org

 

+ Recent posts