반응형
반응형

📝마운트

우리가 사용하는 윈도우에서 CD-ROM 같은 하드웨어는 시스템이 부팅되면서 거의 대부분 자동으로 인식 됩니다 그리고 부팅 후에는 바로 사용할 수 있습니다

새로 설치한 하드웨어 장비의 경우는 PnP라는 기능에 의해 대부분 자동으로 인식 되어 사용자가 직접 마운트 작업을 하는 경우가 거의 없습니다

그러나 윈도우 시스템에서도 마운트 작업은 항상 이루어 지고 있습니다 그래서 우리가 직접 하지 않아도 사용이 가능한 것입니다.

 

리눅스에서도 PnP기능을 사용합니다만 HDD 추가 작업이나 DVD, CD-ROM 경우 수동으로 마운트 작업을 이용해야 하는 경우가 종종 있습니다 그리고 DVD, CD-ROM 등의 경우는 사용 후 반드시 마운트 해제를 해야 합니다

리눅스에서 사용할 특정장치를 시스템에 인식시키는 작업(마운트)에는 각 장치를 특정 디렉토리(마운트포인트)

를 연결하는 마운트 작업이 필요하고 연결된 후로부터 그 장치의 사용이 가능합니다.

예를 들자면 하드 디스크 장치면이 /dev/hda 라면 이 장치명을 지정된 마운트 포인트와 연결하는 작업이 마운트입니다.

 

즉, 마운트란 하드웨어 장치를 리눅스에 인식시키고 특정 장치(device)를 하나의 디렉토리처럼 사용하기 위해 수행하는 작업입니다.

 

📝PnP

사용자가 컴퓨터에 새로운 장치를 연결/제거 하였을 때 컴퓨터를 재부팅 하면서 PnP(플러그 앤 플레이) 바이오스가 자동으로 새로운 장치를 감지하여 필요한 환경 값을 설정해 주는 기능입니다 때문에 사용자가 장치를 변경하는데 보다 손쉽게 컴퓨터를 작동하게 해줍니다.

 

📝NAS (Network Attached Stroage) = [파일서버와 유사]

네트워크를 통해 여러 기기에서 데이터에 접근할 수 있도록 하는 저장장치를 가리킵니다 

NAS 시스템은 보통 특정 네트워크에 연결된 여러 컴퓨터나 기기에서 중앙 데이터 저장 및 공유를 가능하게 합니다.

파일, 동영상, 음악 등의 다양한 형식의 데이터를 저장하고, 필요에 따라 여러 사용자가 동시에 접근할 수 있도록 합니다

 하드디스크 따위만 있는 걸 네트워크에 연결 시켜서 접근할 수 있게 한 것

 

📝스케일업

서버의 스펙을 올려 처리 능력을 향상시키는 방안입니다

 

📝스케일아웃

서버의 대수를 늘려 처리 능력을 향상시키는 방안입니다 → 병렬 처리 [로드밸런싱]

 

📝네트워크드라이브

네트워크 상에 있는 저장 장치를 PC에 있는 드라이브처럼 사용하는 것을 의미

 

 

 

반응형
반응형

이 문제의 원인은 tomcat에서 호출한 경로를 제대로 인식하지 못해서 발생한다고 합니다.

 

Servers 탭 톰캣 더블클릭해서 열어주시고 Modules를 눌러주세요 그리고 Path를 /로 바꿔주세요

 

Project - Properties - Web Project Setting 에서 / 로 잡아주세요

반응형
반응형

 

📝Navigator

디렉토리 구조를 쉽게 볼 수 있습니다.

 

📝Project Explorer

오류를 쉽게 볼 수 있습니다. 둘다 띄어놓고 하시면 편합니다.

 

📝bin

바이트코드(JVM이 읽을 수 있는 언어)로 저장되어 있음

 

📝src

자바 소스코드가 들어가 있다

반응형
반응형

Project - Properties - Web Deploymeny Assembly 에서 경로를 볼 수 있습니다.

 

여기서 하나를 보자면 Source에는 /src/main/webapp 이렇게 적혀있고 Deploy path는 /로 되어있습니다. 그러면 /만 써주면 저 경로를 단축해서 보여주는 겁니다.

주의할 점이 있는데요 src/main ...과 target/ ...과 deploy Path는 동일하지만 그 안에 들어가 있는 폴더들 이름과 종류가 다르기 때문에 찾아갈 수 있습니다. 하지만 동일한 구조면 이상한 걸 참조하게 되겠죠

반응형
반응형

Maven repositoy 경로를 설정하기 위한 settings.xml 입니다.

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
	
    <localRepository>F:\project\search_project\aa\maven\repository</localRepository>
	<interactiveMode>true</interactiveMode>
	<offline>true</offline>
</settings>

 

1. 메이븐 repository의 경로를 바꿔줍니다.

 

2. 이클립스에서 preference - maven - usersetting - setting.xml경로 해주시면됩니다.

반응형
반응형

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

이것을 미리 적고 jsp 확장자로 변경하면 안 깨집니다.

반응형
반응형

war파일tomcat/webapps 경로에 가져다 두면 알아서 deploy(배포)된다.

webapps 경로에 있는 war파일을 옮기면 deploy된 게 undeploy된다.

반응형
반응형

📝Tiles

웹 페이지의 상단, 하단, 사이드바, ajax, 공통css 등과 같이 반복적으로 사용되는 부분에 정보를 모듈화해서 관리해줍니다.

즉 모듈관리 프로그램입니다.

 

JSP의 include같은 걸로 쓸수도 있지만 Tiles가 훨씬 우수합니다.
JSP Include 방식의 문제점은 매 JSP 페이지마다 모두 동일한 페이지들을 include 한다고 표시를 해야합니다.

만약 include 하는 페이지의 이름이 바뀌기라도 한다면 그에 해당하는 모든 페이지를 다 수정해야만 합니다.

 

 

<!-- spring 버전은 3.0.8 이상 필요 및 자바버전도 유의-->
<properties>
    <java-version>11</java-version>
    <org.springframework-version>5.2.7.RELEASE</org.springframework-version>
    <org.aspectj-version>1.6.10</org.aspectj-version>
    <org.slf4j-version>1.6.6</org.slf4j-version>
</properties>

<!-- Tiles -->
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-extras</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-servlet</artifactId>
    <version>3.0.8</version>
</dependency>
<dependency>
    <groupId>org.apache.tiles</groupId>
    <artifactId>tiles-jsp</artifactId>
    <version>3.0.8</version>
</dependency>

pom.xml

 

<!-- 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">
    <beans:property name="prefix" value="/WEB-INF/views/" />
    <beans:property name="suffix" value=".jsp" />
    <beans:property name="order" value="2" />
</beans:bean>
<!-- load 순서 2번째 -->

<beans:bean
    class="org.springframework.web.servlet.view.UrlBasedViewResolver">
    <beans:property name="viewClass"
        value="org.springframework.web.servlet.view.tiles3.TilesView" />
    <beans:property name="order" value="1" />
</beans:bean>
<!-- load 순서 1번째 (tiles 설정파일) -->

<beans:bean
    class="org.springframework.web.servlet.view.tiles3.TilesConfigurer">
    <beans:property name="definitions"
        value="/WEB-INF/tiles.xml" />
</beans:bean>

<!-- load 순서 1번째에 쓰이는 tiles 설정파일 -->

servlet-context.xml

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

  <definition name="*/*" template="/WEB-INF/views/include/layout.jsp">
    <put-attribute name="title" value="{2} - OCR" />
    <put-attribute name="header" value="/WEB-INF/views/include/top.jsp" />
    <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" />
    <put-attribute name="static" value="/WEB-INF/views/include/static.jsp" />
    <put-attribute name="aside" value="/WEB-INF/views/include/side.jsp" />
  </definition>
  <!-- definition name은 Controller의 */*형태의 return값을 받으면 해당 definition으로 분기시키겠다는 의미입니다.-->
  <!-- 예를 들어 Controller에서 페이지 리턴하려면 login/login_page 이런 형식으로 return할 때 {1} 에는 login이 들어가고 {2}에는 login_page가 들어가게 됩니다.
  <!-- 그리고 분기 페이지(template)는 layout.jsp 이라는 것입니다.--> 
  <!-- layout.jsp에서 각각 모듈로 된 걸 injection 하게 됩니다.-->
  <!-- put-attribute 은 layout에 넣을 요소 -->
  <!-- 위와 같은 방법으로 body는 동적으로 바뀌게 된다. -->
 
</tiles-definitions>

tiles.xml

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="tiles" uri="http://tiles.apache.org/tags-tiles"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport"
	content="width=device-width, initial-scale=1, shrink-to-fit=no" />
<meta name="description" content="" />
<meta name="author" content="" />

<!-- tiles.xml에서 선언한 name으로 각 모듈을 호출합니다. -->
<title><tiles:insertAttribute name="title" /></title>


<tiles:insertAttribute name="static" />
</head>

<body>

	<!-- header -->
	<tiles:insertAttribute name="header" />

	<div class="row">

		<!-- side -->
		<div class="col-1" id="layoutSide">
			<div id="layoutSidenav">
				<tiles:insertAttribute name="aside" />
			</div>
		</div>

		<!-- body -->
		<div class="col-9 mt-5" style="position: relative; left: 100px;">
			<tiles:insertAttribute name="body" />

		</div>
	</div>
	
</body>
</html>

layout.jsp (전체 구조)

 

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


<link href="<%=request.getContextPath()%>/resources/css/side_style.css"
	rel="stylesheet"><tiles:insertAttribute name="aside" />

<div class="sidebody">

	<div class="sidenavigation">
		<ul>
			<li class="sidelist active"><a href="test"> <span
					class="icon ps-4"><ion-icon name="albums-outline"></ion-icon></span>
					<span class="title ms-3">대시보드</span>
			</a></li>

			<li class="sidelist"><a href="listOcr"> <span
					class="icon ps-4"><ion-icon name="person-outline"></ion-icon></span>
					<span class="title ms-3">주민등록증</span>
			</a></li>

			<li class="sidelist"><a href="#"> <span class="icon ps-4"><ion-icon
							name="car-outline"></ion-icon></span> <span class="title ms-3">운전면허증</span>
			</a></li>

			<li class="sidelist"><a href="#"> <span class="icon ps-4"><ion-icon
							name="language-outline"></ion-icon></span> <span class="title ms-3">외국인등록증</span>
			</a></li>

			<li class="sidelist"><a href="#"> <span class="icon ps-4"><ion-icon
							name="airplane-outline"></ion-icon></span> <span class="title ms-3">여권</span>
			</a></li>
		</ul>
	</div>
</div>


<script type="module"
	src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>
<script nomodule
	src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.js"></script>
<script src="<%=request.getContextPath()%>/resources/js/script.js"></script>

side.jsp (사이드바)

 

<style>
@import
	url('https://fonts.googleapis.com/css2?family=Gowun+Dodum&display=swap')
	;
</style>


<!-- CSS -->
<link
	href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css"
	rel="stylesheet"
	integrity="sha384-1BmE4kWBq78iYhFldvKuhfTAU6auU8tT94WrHftjDbrCEXSU1oBoqyl2QvZ6jIW3"
	crossorigin="anonymous">
<link href="<%=request.getContextPath()%>/resources/css/styles.css"
	rel="stylesheet">
<link href="<%=request.getContextPath()%>/resources/css/custom.css"
	rel="stylesheet">
<link href="<%=request.getContextPath()%>/resources/css/common.css"
	rel="stylesheet">
<link href="<%=request.getContextPath()%>/resources/css/bootstrap.css"
	rel="stylesheet" />
<link
	href="<%=request.getContextPath()%>/resources/css/search_result.css"
	rel="stylesheet" />
<link rel="icon" type="image/x-icon"
	href="<%=request.getContextPath()%>/resources/assets/img/favicon.png" />
	

<!-- JS -->
<script
	src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>

<script
	src="https://cdnjs.cloudflare.com/ajax/libs/Chart.js/3.7.1/chart.min.js"></script>
<script
	src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script>
<script src="https://canvasjs.com/assets/script/canvasjs.min.js"></script>

static.jsp (정적 소스)

 

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

<style>
background: linear-gradient(137deg, #fff6b7, #f77c99, #6578f2, #c2ffd8); background-size: 800% 800%; -webkit-animation: AnimationName 16s ease infinite; -moz-animation: AnimationName 16s ease infinite; -o-animation: AnimationName 16s ease infinite; animation: AnimationName 16s ease infinite; @-webkit-keyframes AnimationName { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} } @-moz-keyframes AnimationName { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} } @-o-keyframes AnimationName { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} } @keyframes AnimationName { 0%{background-position:0% 50%} 50%{background-position:100% 50%} 100%{background-position:0% 50%} }
</style>

<nav
   class="topnav navbar navbar-expand shadow justify-content-between justify-content-sm-start navbar-light m-0 p-0"
   id="sidenavAccordion" style="height:70px">
   <!-- Sidenav Toggle Button
   <button class="btn btn-icon btn-transparent-dark" id="sidebarToggle">
      <i data-feather="menu"></i>
   </button> -->
   <!-- Navbar Brand-->
   <!-- * * Tip * * You can use text or an image for your navbar brand.-->
   <!-- * * * * * * When using an image, we recommend the SVG format.-->
   <!-- * * * * * * Dimensions: Maximum height: 32px, maximum width: 240px-->
   <a href="test" class="ms-5 me-2"> <img
      src="<%=request.getContextPath()%>/resources/image/logo.png"
      ; style="width: 113px;">
   </a>
   
   <a href="doLogout" style="right: 0; color: #FFFFFF;" onclick="if(confirm('로그아웃 하시겠습니까?') == false)return false;"> 로그아웃 </a>
</nav>

top.jsp (상단)

 

 

footer.jsp는 저는 안 써가지고 따로 만들진 않았습니다.

 

 

 

 

 

- 참고용(여러가지의  - tiles 활용 방식)

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE tiles-definitions PUBLIC
       "-//Apache Software Foundation//DTD Tiles Configuration 3.0//EN"
       "http://tiles.apache.org/dtds/tiles-config_3_0.dtd">
<tiles-definitions>

  <definition name="*/*" template="/WEB-INF/views/include/layout.jsp">
    <put-attribute name="title" value="{2} - Search" />
    <put-attribute name="header" value="/WEB-INF/views/include/top.jsp" />
    <put-attribute name="body" value="/WEB-INF/views/{1}/{2}.jsp" />
    <put-attribute name="static" value="/WEB-INF/views/include/static.jsp" />
    <put-attribute name="aside" value="/WEB-INF/views/include/side.jsp" />
    <put-attribute name="footer" value="/WEB-INF/views/include/footer.jsp" />
  </definition>
  
  <definition name="*/*/*" template="/WEB-INF/views/include/none_layout.jsp">
    <put-attribute name="title" value="{3} - Search" />
    <put-attribute name="body" value="/WEB-INF/views/{1}/{2}/{3}.jsp" />
    <put-attribute name="static" value="/WEB-INF/views/include/static.jsp" />
    <put-attribute name="footer" value="/WEB-INF/views/include/footer.jsp" />
  </definition>
  
  <definition name="login" template="/WEB-INF/views/include/login_layout.jsp">
    <put-attribute name="title" value="login - Search" />
    <put-attribute name="body" value="/WEB-INF/views/login/login.jsp" />
    <put-attribute name="static" value="/WEB-INF/views/include/static.jsp" />
    <put-attribute name="footer" value="/WEB-INF/views/include/footer.jsp" />
  </definition>

</tiles-definitions>

 

 

반응형
반응형

📝xmlns

xmlns="http://www.springframework.org/schema/beans"

xmlns:aop="http://www.springframework.org/schema/aop"

 

spring에 xml에 보시면 이렇게 적혀 있는 것들이 있습니다 이거에 대해서 설명하도록 하겠습니다.

위에는 http:www.springframework.org에 들어가면 보이는 화면입니다.

 

여기에서 보시면 aop도 있고  beans도 있고 합니다. 즉 springframework가 이러한 기능들을 지원해주는 것입니다.

 

xmlns은 import라고 생각하면 된다. 스프링에서 지원해주는 클래스 같은 느낌으로 사진에서 보는 거 같이 들어가면 각자 폴더가 있고 각자에 해당하는 기능들이 있습니다.

대부분 쓰는건 bean같은게 있는데 그걸 쓰기 위해서는  xmlns="http://www.springframework.org/schema/beans" 이런식으로 선언이 필요합니다.

 

그리고 xmlns:aop 이렇게 선언한 이유import한 aop에 있는 필드부분이 bean에 있는 필드부분하고 겹치면 뭐가 aop에 관한 것인지 bean에 관한 것인지 잘 모르기 때문에 그렇게 한다 그래서 <aop:config> 이런식으로 사용됩니다.

 

즉 이렇게 하는 걸 namespace라고 하는데 각 요소간 충돌을 방지하기 위해서 입니다

 

* 여담으로 인터넷 안 되는 환경(폐쇄망)에서는 xsd를 못 읽을 수 있지만 한번이라도 실행시킨 프로젝트를 가져올 경우 jar안에 xsd가 다 내장되어있기 때문에 해당 경로를 잘 읽어서 가져온다 만약 못 가져오는 경우 root-context.xml(가장 먼저 읽는 부분)에서 클래스패스 경로 지정이 필요

 

📝 root-context.xml

View와 밀접하지 않은 정보를 기술하는 xml 파일입니다.

외부 jar파일등으로 사용하는 클래스는 bean 태그를 이용해 작성합니다.

root-context에 등록되는 빈들은 모든 컨텍스트에서 사용 가능합니다.

ex) DB는 View(JSP)와는 관련이 없으므로, DB에 접속하기 위한 설정은 root-context.xml 에 설정

 

 

📝 servlet-context.xml

servlet-context에 등록되는 빈들은 해당 컨테스트에서만 사용 가능합니다.

url과 관련된 controller나, @(어노테이션), ViewResolver, Interceptor, MultipartResolver 등의 설정을 해줍니다.

 

 

 

 

반응형