▼ 환경

eGovFrame 3.1 (전자정부프레임워크버전)

spring 3.2.9 release

egov 3.0.0 version

mod-socket-io 1.0.2 < -- 이건 머하는놈인질 모르겟음

◎ XML 설정

▼ 내용

먼저 전자정부에는 context-transaction.xml 이란 xml 파일이 있을꺼다 여기에 tx:advice 와 aop를 설정해주면 된다 .



context-transaction.xml

<?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:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.2.xsd"> <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="dataSource"/> </bean> <tx:advice id="txAdvice" transaction-manager="txManager"> <tx:attributes> <tx:method name="*" rollback-for="Exception"/> </tx:attributes> </tx:advice> <aop:config> <aop:pointcut id="requiredTx" expression="execution(* org.egovframework.karico..impl.*Impl.*(..))"/> <aop:advisor advice-ref="txAdvice" pointcut-ref="requiredTx" /> </aop:config> </beans>

◎ JAVA에 작성하기

▼ 내용

XML을 설정하였으면 트랜잭션을 걸 메소드에 아래와 같이 작성하면된다.

본인은 컨트롤러에 작성하였다 컨트롤러 안에는 INSERT문을 실행하는 SERVICE들이 한 4~5개 된다. 만약 아래의 commit 나 rollback 를 안써놓으면 그냥 트랜잭션이 잡혀있는상태로 된다.

톰캣을끄면 그트랜잭션은 사라지고 rollback 되는거같더라.

어쩃든 이렇게 작성해놓으면 commit이나 rollback 둘중 하나가 되기 전까지 디비에 써지진 않는다.

RESTfullReportController.java

@Controller public class RESTfullReportController { @Resource(name = "txManager") protected DataSourceTransactionManager txManager; @RequestMapping("/api/saveInitialCheckReport") public ModelAndView saveInitialCheckReport (HttpServletRequest request, HttpServletResponse response) throws Exception { DefaultTransactionDefinition def = new DefaultTransactionDefinition(); def.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED); TransactionStatus txStatus = txManager.getTransaction(def); try { ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~ 각종 INSERT UPDATE 등 DB 문 ~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ txManager.commit(txStatus); //정상일경우 COMMIT; model.put("result", 0); } catch (Exception e) { e.printStackTrace(); txManager.rollback(txStatus); //에러날경우 CATCH로 빠져서 ROLLBACK; model.put("result", -1); } }


◎ 위에처럼만 하면 끝 생각보다 쉽다..



Spring - 프로젝트 한글깨짐 설정


◎ 이클립스 UTF-8 설정

STS(스프링) 에서 한글이 깨지는 이유는 기본 인코딩이 MS949로 되어 있어서 한글이 깨진다.

인코딩을 모두 UTF-8로 변경을 해주어야 한글이 깨지지 않는다.

먼저 Window - Preferences 로 들어가준다.


CSS, HTML, JSP 항목에서 Encoding 항목을 ISO 10646/Unicode(UTF-8)로 변경해 준다.


General -> Workspace의 Text file encoiding 을 UTF-8로 바꿔준다.


◎ 이클립스 웹브라우저 설정

▼ General -> Web Brower에서 New를 누른후 Chrome을 설정한다.


◎ XML UTF-8 설정

▼프로젝트내 web.xml 안에 아래 내용 추가

<web-app> 태그 안에 Servlet-mapping 태그 밑에 추가하면된다

<!-- 한글깨짐 방지 --> <!-- filter와 filter-mapping을 만들어 준다. --> <filter> <!-- filter안에는 filter-name, filter-class, init-param을 추가해 준다. filter-name은 원하는대로 지정해도됨 --> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <!-- encoidng값을 UTF-8로 만들어 준다. --> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

◎ JSP UTF-8 설정

▼ 맨위 <%@ UTF-8 설정과 META 태그의 UTF-8 설정을 해주면된다.

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> <%@ page session="false" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Home</title> </head> <body> <h1> Hello world! </h1> <P> The time on the server is ${serverTime}. </P> </body> </html>


  1. jhjeon 2021.06.08 15:18

    초보 개발자입니다. 덕분에 문제를 잘 해결했습니다 감사합니다.

  2. HEMON 2021.06.20 14:47 신고

    스프링 구축 후에 한글이 안돼서 한참 헤메고있었는데 덕분에 해결했습니다! 감사합니다!

◎ 라운드로빈 자바예제 파일

▼ 쓰레드를 만들고 작업시간 분할시간을 정해서 출력해서 보여주게끔 간단하게 잔 예제이다.

package javaSchedule; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class Round_Robin { // WT (Wait Time) : 기다린 시간 // TT (Total Time ) : 총 걸린 시간 public static void main(String args[]) throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Time Quantum 시분할시간을 정하세요(숫자입력): "); int q = Integer.parseInt(br.readLine()); System.out.println("작업할 프로세스의 수를 정하세요 (숫자입력): "); int n = Integer.parseInt(br.readLine()); int proc[][] = new int[n + 1][4];//proc[][0] AT array, [][1] - RT , [][2] - WT , [][3] - TT for(int i = 1; i <= n; i++) { System.out.println(i + " 번쨰 프로세스의 작업시간은? (Burst Time) (숫자입력): "); proc[i][1] = Integer.parseInt(br.readLine()); } System.out.println(); //total_time 계산 및 time_chart 배열 초기화 int total_time = 0; for(int i = 1; i <= n; i++) { total_time += proc[i][1]; } int time_chart[] = new int[total_time]; int sel_proc = 1; int current_q = 0; for(int i = 0; i < total_time; i++) { //선택한 프로세스를 time_chart의 현재 시간에 할당 time_chart[i] = sel_proc; //1 단위 시간당 CPU가 할당되었으므로 선택한 프로세스의 남은 시간을 1 씩 감소시킵니다. proc[sel_proc][1]--; //WT 와 TT 산출 for문 for(int j = 1; j <= n; j++) { if(proc[j][1] != 0) { proc[j][3]++;//만약 프로세스 실행이 완료되지 않은 경우 TT는 1씩 증가함 if(j != sel_proc)//프로세스가 현재 CPU에 할당되지 않은 경우 WT는 1씩 증가함 proc[j][2]++; } else if(j == sel_proc)//이는 프로세스에 CPU가 할당되어 실행이 완료된 특수한 경우 proc[j][3]++; } //Time_Chart 출력 if(i != 0) { if(sel_proc != time_chart[i - 1]) //CPU가 다른 프로세스에 할당된 경우 현재 시간 값과 새 프로세스의 이름을 프린트 { System.out.print("--" + i + "--P" + sel_proc); } } else//현재 시간이 0인 경우, 즉 인쇄가 막 시작되면 첫 번째 선택된 프로세스의 이름을 프린트 System.out.print(i + "--P" + sel_proc); if(i == total_time - 1)//모든 프로세스 이름이 인쇄되었으므로 실행이 끝나는 시간을 프린트 System.out.print("--" + (i + 1)); //다음 번 반복을 위해 sel_proc 값 업데이트 current_q++; if(current_q == q || proc[sel_proc][1] == 0)//시간이 만료되었거나 현재 프로세스가 실행이 완료된경우 { current_q = 0; //sel_proc에 대해 다음 유효한 값을 선택 for(int j = 1; j <= n; j++) { sel_proc++; if(sel_proc == (n + 1)) sel_proc = 1; if(proc[sel_proc][1] != 0) break; } } } System.out.println(); System.out.println(); //각 프로세스의 WT 및 TT 인쇄 System.out.println("P\t WT \t TT "); for(int i = 1; i <= n; i++) { System.out.printf("%d\t%3dms\t%3dms",i,proc[i][2],proc[i][3]); System.out.println(); } System.out.println(); //WT & TT 평균시간 인쇄 float WT = 0,TT = 0; for(int i = 1; i <= n; i++) { WT += proc[i][2]; TT += proc[i][3]; } WT /= n; TT /= n; System.out.println("The Average WT is: " + WT + "ms"); System.out.println("The Average TT is: " + TT + "ms"); } }


'프로그래밍 > Java' 카테고리의 다른 글

Java - 라운드 로빈 (Round Robin) 예제  (0) 2019.05.29





◎ => (애로우 함수)

▼ 내용

ECMA6 들어서면서 => 애로우 함수를 사용할수 있따.

const handleListening = () =>{ console.log('ㅎㅇ'); } // 위에 는 const handleListening = function () { console.log('ㅎㅇ'); } //이거랑 같다

◎ import , export

▼ 내용

import 문은 외부 모듈이나 다른 스크립트 등으로부터 export 된 기능을 가져오는데 사용됩니다.

(함수,변수 모듈화 class화?)

자바스크립트는 호이스팅이 되는 관계로 변수나 함수가 전역에서 사용할 수 있었기 때문에 이름으로 충돌을 일으키는 경우가 많아서 이용하기 어려웠다. (CommonJS로 사용할 수는 있었음)

ES6부터는 모듈 시스템을 사용할 수 있게 만들었다.

하지만 브라우저에서 지원이 되지 않고있기때문에 webpack같은 모듈 번들러를 사용해야만 모듈시스템(import, export)을 사용할 수 있다.

문법.. import name from "module-name"; import * as name from "module-name"; import { member } from "module-name"; import { member as alias } from "module-name"; import { member1 , member2 } from "module-name"; import { member1 , member2 as alias2 , [...] } from "module-name"; import defaultMember, { member [ , [...] ] } from "module-name"; import defaultMember, * as alias from "module-name"; import defaultMember from "module-name"; import "module-name";

export const pi = Math.PI; export function square(x) { return x * x; } export class Person { constructor(name) { this.name = name; } }

export 키워드로 변수, 함수, 클래스를 외부의 스크립트로 모듈화 시킬 수 있다.

외부로 보내고 싶은 것들에 일일이 키워드를 붙여도 되고 아래처럼 한번에 export해도된다.

const pi = Math.PI; function square(x) { return x * x; } class Person { constructor(name) { this.name = name; } } export { pi, square, Person };
import {userRouter} from "./router"; //export const userRouter = express.Router(); import app from "./app"; //export default app;

또한 export default app; 이렇게 할경우엔 바로 import app 할수 있지만

(export default 파일명 한다는건 안에있는 모든걸 export 해준다는것)

export const userRouter 이렇게 할경우엔 가져올때 {} 를 붙혀서 써줘야한다.

// main.js import { pi, square, Person } from './lib'; console.log(pi); // 3.141592653589793 console.log(square(10)); // 100 console.log(new Person('Lee')); // Person { name: 'Lee' }

반대로 가져오는 방법은 위와 같이 "import" 키워드를 사용하고 from 으로 해당 모듈의 js파일을 가리키면 된다.

import * as lib from './lib'; console.log(lib.pi); // 3.141592653589793 console.log(lib.square(10)); // 100 console.log(new lib.Person('Lee')); // Person { name: 'Lee' }

위와 같이 "as"를 사용해서 일일이 모듈을 불러오지 않고 한번에 사용할 수 있다.


◎ 구조 분해 할당 ( destructuring assignment )

▼ 내용

객체 또는 배열을 소인수분해 하듯이 분해하여 할당할수 있다.

const searchingBy = req.query.term //기존방식 const { query: {term : searchingBy} //req.query.term 의값을 searchingBy 할당 } = req;

솔직히 이걸 작성하면서 대략적인 느낌만 이해가간다.. 하지만 왜 구지 보기힘들게 이렇게쓰나 싶다.. 나중에 이해더가면 추후작성하기로하고 mdn 주소를 남긴다.

https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Operators/Destructuring_assignment

새로운 변수 이름에 할당

객체 구조분해를 사용하여 새로운 변수 이름에 값을 할당할 수 있습니다.

var o = {p: 42, q: true}; var {p: foo, q: bar} = o; console.log(foo); // 42 console.log(bar); // true






◎ <li> 태그

▶ UL OL DL 의 각 리스트들을 li 로 표시한다


◎ <ul> 태그

▶ 비순서형 목록 Unordered List

▶ <li> 요소 마다 블릿이 제공됨 ( 블릿 : 특수문자)

▶ 연속으로 나열된 콘텐츠를 표현

▶ 순서가 정해져있지않아 홈페이지 대메뉴 또는 소메뉴 등이 적합하다.

▼ CSS 특징

왼쪽과 오른쪽 여백이 있다.

<ul> 과 <li> 사이에는 그어떤 문자도 태그도 올수가 없다. 와도 표현이 안된다 (ul 과 li 는 1set)

<li> 와 </li> 사이에만 사용할수 있고 li 와 li 사이에는 사용할수 없다.

<li>와 </li> 사이엔 다른 <ul> 이 올수도 있다.

ex)

<ul> <li> <ul> <li>자유게시판1</li> <li>자유게시판2</li> <li>자유게시판3</li> </ul> </li> <li>길드홍보게시판</li> <li>스크린샷</li> <li>팬아트</li> </ul>

<ul> <li>자유게시판</li> <li>길드홍보게시판</li> <li>스크린샷</li> <li>팬아트</li> </ul>




◎ <ol> 태그

▶ 순서형 목록 Ordered List

▶ <li> 요소 마다 숫자 블릿이 제공됨

▶ 순위 또는 연속된 숫자의 리스트를 표현

▼ CSS 특징

왼쪽과 오른쪽 여백이 있다.

ol태그도 ul태그와 마찬가지로 ol과 li 사이에 다른태그는 올수없다.

또한 li태그 안에 또 ol과 ul 등의 리스트를 표현할수있다.

<ol> <li>대마도여행</li> <li>정글의법칙</li> <li>슈퍼스타k</li> <li>열혈강호</li> </ol>



<ol> <li>대마도여행</li> <ol> <li>1일차 비행기타기</li> <li>2일차 배타기</li> </ol> <li>정글의법칙</li> <li>슈퍼스타k</li> <li>열혈강호</li> </ol>



◎ 정의형 목록 태그

▶ <dl> 정의형 목록 지정 ( Defines a description List.)

▶ <dt> 용어 정의 (Defines Terms/names)

▶ <dd> 지정 정의 설명 (Describes each Term)

낱말 등 특정 단어를 정의할때 사용하는 요소 (국어사전 등)

제목 + 내용 형태로 범용적으로 사용하곤 한다.

▼ CSS 특징

dt는 있는그대로 나타나고 dd는 들여쓰기로 나타난다.

반드시 순서대로 표시 dl > dt > dd 무조건 3가지가 다 나타나야한다.

각 서로다른 태그 사이에는 ul ol 과 마찬가지로 다른태그를 넣을수는 없다.

<dl> <dt></dt> <dd>=월드 와이드 (Web)</dd> <dd>[명사]Web</dd> <dt></dt> <dd>=월드 와이드 (Web)</dd> <dd>[명사]Web</dd> </dl> //dt 두번 사용도 가능




+ Recent posts