Apr 12, 2018 - eclipse_server_plugins

이클립스 SERVER 플러그인

이클립스 WTP에 server 플러그인에서 아래 이미지 처럼 serve modules without publshing 설정을 체크 했을때 디플로이가 어떻게 되는지 찾아 보았다.

serve modules without publshing

먼저 이클립스의 workspace 에서 server.xml에 아래 처럼 지정이 된다. 위치는 아래이다.


{workspace}\Servers\Tomcat v8.5 Server at localhost-config/server.xml

  <Context docBase="test" path="/test" reloadable="true" source="org.eclipse.jst.jee.server:test"/>

위에 설정 처럼 지정이 되는데 이것은 serve modules without publshing 설정을 추가 해도 바뀌지 않는다. 설정을 추가 하면 아래의 경로에 아래 설정이 true로 바뀌고 있었다


{workspace}\.metadata\.plugins\org.eclipse.wst.server.core/servers.xml

serveModulesWithoutPublish="true"  

그럼 해당 톰캣의 CATALINA_BASE는 어디에 설정되어 있냐면 아래의 xml에 설정이 되어 있다.


{workspace}\.metadata\.plugins\org.eclipse.wst.server.core/tmp-data.xml

설정된 폴더에 들어가면 톰캣 폴더리스트들이 보이는데

conf폴더에 server.xml을 보면 아래 처럼 설정이 된다.


<Context docBase="{workspace}\.metadata\.plugins\org.eclipse.wst.server.core\tmp1\wtpwebapps\ROOT" path="" reloadable="false" />
				<Context docBase="{workspace}\test\src\main\webapp"
					path="/test" reloadable="true" source="org.eclipse.jst.jee.server:test">
					<Resources>
						<PreResources base="{workspace}\test\target\classes"
							classLoaderOnly="false" className="org.apache.catalina.webresources.DirResourceSet"
							internalPath="/" webAppMount="/WEB-INF/classes" />
					
						<JarResources
							base="{maven_repo}\.m2\repository\asm\asm\1.5.3\asm-1.5.3.jar"
							classLoaderOnly="true" className="org.apache.catalina.webresources.JarResourceSet"
							internalPath="/" webAppMount="/WEB-INF/classes" />
					
						<PreResources
							base="{workspace}\test\target\m2e-wtp\web-resources"
							classLoaderOnly="false" className="org.apache.catalina.webresources.DirResourceSet"
							internalPath="/" webAppMount="/" />
					</Resources>
				</Context>

참조


Apr 6, 2018 - codespitz73_part5_2

코드스피츠73 part5

BLOCK, NONBLOCK

BLOCKING EVASION -> NONBLOCKING

서브루틴이 즉시플로우 제어권을 내놓는것


const a=123;

looper(12, console.log);

backRun(v=>v[0] + v[1], console.log, 3, 5);

console.log(a); //어쨌든콘솔은123부터출력

SYNC, ASYNC

병행성 프로그래밍에 익숙해져야 된다.

SYNC

서브루틴이 즉시값을 반환함


const double = v=>v*2;

console.log(double(2)); //4


block 즉시 플로우 제어권을 반환하지 않음


const sum = n=>{
	let sum = 0;
	for(let i = 1; i <= n; i++) 
		sum += i;
		return sum;
};

sum(100);

non block즉시플로우제어권을반환함

const sum = n=>{
	const result = {isComplete:false};
	requestAnimationFrame(_=>{
		let sum = 0;
		for(let i = 1; i <= n; i++) 
			sum += i;
			result.isComplete = true;
			result.value = sum;
	});
	return result;
};

const result = sum(100);

while(!result.isComplete); // 무한루프기 때문에 에러남
console.log(result.value); 

ASYNC

서브루틴이 콜백을 통해 값을 반환함


const double = (v, f)=> f(v*2); 

double(2, console.log); //4

block 즉시 플로우 제어권을 반환하지 않음


const sum = (n, f)=>{
	let sum = 0;
	for(let i = 1; i <= n; i++) 
		sum += i;
	return f(sum);
};

sum(10, console.log);
console.log(123); //55 → 123

non block즉시플로우제어권을반환함


const sum = (n, f)=>{
	requestAnimationFrame(_=>{
		let sum = 0;
		for(let i = 1; i <= n; i++) 
			sum += i;
			f(sum);
	});
};

sum(10, console.log);
console.log(123);//123 → 55

루프를 짤때 블럭가드를 항상 설치한다.


for(let i = 0; i <= arr.length, limit = 50000; limit-- >0 && i<j; i++){

}

if(limit < 0){

}

callback 함수는 리턴 받는 함수를 캡슐화 하기 위해서

SIMILAR ASYNC-BLOCK 미루기 패턴

const sum = (n, f)=>{
	requestAnimationFrame(_=>{
		let sum = 0;
		for(let i = 1; i <= n; i++) 
			sum += i;
			f(sum);
	});
};

sum(100000000, console.log);
console.log(123);// 여기서 sync가 발생


const backRun = (f, end, ...arg)=>{
	const blob = new Blob([`
		onmessage =e=>postMessage((${f})(e.data));
	`], {type:'text/javascript'});
	const url = URL.createObjectURL(blob);
	const worker = new Worker(url);
	worker.onmessage =e=>end(e.data);
	worker.onerror =e=>end(null);
	worker.postMessage(arg);
};

// 사용하는 코드 

const f = v=>{
	for(let i = 1, sum = 0; i <= v[0]; i++){
		sum += i;
	}
	return sum;
};

let i=1000;
// 쓰레드가 엄청 생김 쓰레드 고갈 10k 문제
while(i--) backRun(f, console.log, 100000);

참조


Apr 4, 2018 - codespitz73_part5_1

코드스피츠73 part5

BLOCK, NONBLOCK

FLOW IS BLOCKING

프로그램이 실행되면 도중에 멈춰지지 않고 끝까지 실행됨


for(const i of (function*(){
    let i = 0;
	while(true) yield i++;
	})()) console.log(i);


//script timeout
//플랫폼 안정성을 위해 강제 종료 시킴
//스크립트가 5초 정도를 허용시킴

BLOCKING FUNCTION

점유하는 시간 만큼 블록을 일으키는 함수


const f = v->{
	let i=0;
	while(i++ < v);
	return i;
};

f(10);
f(10000000000000);

  • 배열순회, 정렬-배열크기에따라
  • DOM순회-DOM의하위구조에따라
  • 이미지프로세싱-이미지크기에따라
BLOCKING EVASION

독점적인 cpu 점유로 인해 모든 동작이 정지됨

타임아웃체크에 의해 프로그램이 강제 중단됨

블록킹의 조합을 예측할 수 없음


const f = v->other(some(v), v * 2);
f(10);

칸텍스트 스위칭 - 시분황 운영체제의 동시 실행

하나의 프로세스에 여러 쓰레드를 사용해서 동시 실행한다.

time slicing


const looper =(n, f)=>{
	for(let i = 0; i < n; i++) 
		f(i);
};

looper(10, console.log);
looper(10000, console.log);


time slicing manual


const looper =(n, f, slice = 3)=>{
	let limit = 0, i = 0;
		const runner=_=>{
			while(i < n){
				if(limit++ < slice) f(i++);
				else{
					limit = 0;
					requestAnimationFrame(runner);
					break;
					}
			}
		};
		requestAnimationFrame(runner);
};

looper(12, console.log);

시간 기준으로 자동화 시킴

time slicing auto


const looper =(n, f, ms = 5000, i = 0)=>{
	let old = performance.now(), curr; 
	const runner=_=>{
		while(i < n){
			curr = performance.now();
			if(curr -old < ms) 
				f(i++);
			else{
				old = curr;
				requestAnimationFrame(runner);
				break;
			}
		}
	};
	requestAnimationFrame(runner);
};


worker thread pattern

web worker


const backRun = (f, end, ...arg)=>{
	const blob = new Blob([`
		onmessage =e=>postMessage((${f})(e.data));
	`], {type:'text/javascript'});
	const url = URL.createObjectURL(blob);
	const worker = new Worker(url);
	worker.onmessage =e=>end(e.data);
	worker.onerror =e=>end(null);
	worker.postMessage(arg);
};

backRun(v=>v[0] + v[1], console.log, 3, 5);

1시간 6분 까지 들음

진짜 명강의 ㅜㅜ

참조