WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ... >
	<servlet>
		<servlet-name>Servlet that filter forbidden</servlet-name>
		<servlet-class>my.package.ForbiddenServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Servlet that filter forbidden</servlet-name>
		<url-pattern>*.html</url-pattern>
	</servlet-mapping>
</web-app>

my.package.ForbiddenServlet.java

public class ForbiddenServlet extends HttpServlet {
	public ForbiddenServlet() {
	
	}
	
	public void service(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
//		super.service(req, res);
		res.sendError(HttpServletResponse.SC_FORBIDDEN);
	}
}

1. 더이상 배우려 하지 않는 개발자 : Expert Beginner 의 등장

https://goo.gl/BpyAHm

- (원문 주소) https://medium.com/@jwyeom63/%EB%8D%94-%EC%9D%B4%EC%83%81-%EB%B0%B0%EC%9A%B0%EB%A0%A4-%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94-%EA%B0%9C%EB%B0%9C%EC%9E%90-expert-beginner%EC%9D%98-%EB%93%B1%EC%9E%A5-dd40c40aeedf


2. 소프트웨어 집단의 부패 : Expert Beginner 의 유산

https://goo.gl/p5mNuh

- (원문 주소) https://medium.com/@jwyeom63/%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4-%EC%A7%91%EB%8B%A8%EC%9D%98-%EB%B6%80%ED%8C%A8-expert-beginner%EC%9D%98-%EC%9C%A0%EC%82%B0-9d226b6ebde2


"Expert Beginner 는 이미 Expert 레벨에 도달하였으며, 더 이상 올라갈 곳이 없다고 생각하는 Beginner"


Advanced Beginner 를 거친 후 본인의 부족한 점을 채워 Competent 로 올라가야 하는데,

본인을 전문가로 생각하면서 Expert Beginner 에 머물러 정체될 수 있다.


나아가, Expert Beginner 들이 모였을 때 다른 재능있는 구성원들이 있음에도 불구하고 하나의 집단을 퇴행시키고 내부적으로 부패하게 할 수 있다.


"보편적으로는 팀원 누구든 (제일 시니어이거나, 최고 경력자라고 할지라도) '모르겠다' 라는 답변을 할 수 있는 문화를 만드는 것이 Expert Beginner 들로 인한 집단의 부패를 방지하기 위한 중요한 방책이다."


Expert Beginner 는 절대로 "모르겠다" 는 답변을 하지 않는다.

이는 곧 '기술을 배우고 있는 사람'과 '자신이 이미 알 건 다 안다고 생각하는 사람' 사이의 중요한 차이이다.

'Programming' 카테고리의 다른 글

좋은 프로그램의 척도  (0) 2018.01.31
javascript / normalizeForIE  (0) 2017.12.27
Linux 버전 확인 명령어  (0) 2016.10.14
기술자 등급분류 기준  (0) 2016.02.11
C# 과 C++에 관한 고찰...  (0) 2014.02.14

값 비교를 위해 사용 시

call by value 형태인 equals 사용 필요

== 연산자 사용 시 보유한 값이 동일하더라도 같지 않은 결과가 도출될 수 있음


equals : 값 비교

== : 객체 비교

Error Loading Project: Cannot load module module_name_prev


원인 :

- 인텔리제이를 사용하지 않는 이전 버전의 프로젝트를 확인한 후 다시 원래 버전의 프로젝트를 확인하려고 할 때

- 기존의 모듈(.iml) 경로가 변경되었을 때


해결법 : 

- .idea/modules.xml 파일에서 경로 수정




java -jar 옵션 사용 시 -cp 옵션은 무시됨

(이거 때문에 수많은 구글링을 ㅠㅠ)




첫번째 사용법.


java -cp external_library.jar:runnable.jar package.subpackage.Main


이렇게 사용하면 일단 실행은 가능.

하지만 매번 실행 클래스를 지정해주어야 하는 번거로움이 있음.




두번째 사용법.


특정 경로에 대해 필요한 jar 를 동적으로 로딩

참조 : http://stove99.tistory.com/64


나는 위 URL 의 RuntimeJarLoader.loadJarIndDir 내부에서

특정 문구가 포함된 jar 만 로딩하도록 변경하여 적용하였다.






덧.

첫번째 사용법에 대해 뻘짓하며 열심히 구글링 했는데..

수없이 열어놓은 브라우저 탭을 정리하면서 깨달았다.


https://minchangdev.wordpress.com/2014/04/16/java-jar-%EC%8B%A4%ED%96%89%EC%8B%9C-%EC%99%B8%EB%B6%80-jar-%ED%8C%8C%EC%9D%BC%EC%97%90-%EB%8C%80%ED%95%9C-classpath-%EA%B0%80-%EB%8F%99%EC%9E%91%ED%95%98%EC%A7%80-%EC%95%8A%EB%8A%94%EB%8B%A4/


이 블로그 글이 첫번째 사용법이랑 동일한 얘기군; ㅠㅠ






+ 추가

classpath 옵션은 줄 수 없지만, 아래와 같은 형태로 진행 가능


java -Djava.library.path=/external/library/directory1 -jar runnable.jar


OS 의 라이브러리 경로 (ex. LD_LIBRARY_PATH) 변경이 필요할 경우에는,

테스트용 script 파일을 만든 뒤 파일 내부에서 아래와 같은 형태로 진행 가능


export LD_LIBRARY_PATH=/external/library/directory1

java -Djava.library.path=/external/library/directory2 -jar runnable.jar


* 위와 같이 설정할 경우 java 코드를 통해 출력해보면 아래와 같다.


Library path (OS) : /external/library/directory1

library Path (Java) : /external/library/directory2

관련 링크 : https://zeroturnaround.com/software/jrebel/quickstart/intellij/enable-automatic-compilation-in-intellij-idea/


1. 인텔리제이 환경설정 - 컴파일러 옵션에서

"Make project automatically" (혹은 "Build project automatically")

기능을 켜고,


2. Ctrl + Shift + A (mac 에서는 Cmd + Shift + A) 누르고 검색창에서 Registry 를 검색해서 연다.


3. "compiler.automake.allow.when.app.running" 기능을 켠다.



* 컴파일러 옵션을 켜도 레지스트리 옵션을 키지 않으면 적용되지 않는다.

* 단순 코드 테스트를 위한 application 프로젝트 수행 시 적용하는 부분으로, 웹 프로젝트의 디플로이 및 업데이트와는 다른 부분이다.


// 메모리 초기화

System.gc();


long useMemory = Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory();

logger.info(String.format("MEMORY USED : %d MB", useMemory/1024/1024));


#. 사용성

#. 성능

#. 확장성

#. 기획 변경에 대한 대응력


성공적인 프로그래밍 ?

: 효율적이고 생산적으로 이 척도를 충족시키는 것




'Programming' 카테고리의 다른 글

About "Expert Beginner"  (0) 2018.10.04
javascript / normalizeForIE  (0) 2017.12.27
Linux 버전 확인 명령어  (0) 2016.10.14
기술자 등급분류 기준  (0) 2016.02.11
C# 과 C++에 관한 고찰...  (0) 2014.02.14

참고 : http://d2.naver.com/helloworld/76650



String.prototype.normalizeEx = function () {
	if(typeof this.normalize == 'function') {
		return this.normalize('NFC');
	} else {
		return this.normalizeNFCForIE();
	}
}

String.prototype.normalizeNFCForIE = function() {
	
	var result = '';
	
	var i, c;
	var cho = -1, jung = -1, jong = -1;
	
	for (i = 0 ; i < this.length ; ++i) {
		
		c = this.charCodeAt(i);
		
		if (0x1100 <= c && c < 0x1161) {
			
			// 새 초성이 나오면 기존 초, 중, 종을 조합
			if(cho >= 0) {
				result += combineKorean(cho, jung, jong);
				cho = jung = jong = -1;
			}
			
			cho = c - 0x1100;
			
		} else if (0x1161 <= c && c < 0x11A8) {
			jung = c - 0x1161;
			
		} else if (0x11A8 <= c && c <= 0x11FF) {
			jong = c - 0x11A8;
			
		} else {
			
			// 한글이 아니면 기존 초, 중, 종을 조합
			if(cho >= 0 || jung >= 0 || jong >= 0) {
				result += combineKorean(cho, jung, jong);
				cho = jung = jong = -1;
			}
			
			result += String.fromCharCode(c);
		}
	}
	
	// 루프가 끝난 후 아직 한글이 남아있으면 초, 중, 종을 조합
	if(cho >= 0 || jung >= 0 || jong >= 0) {
		result += combineKorean(cho, jung, jong);
	}
	
	return result.isNullOrEmpty()? this : result;
}

combineKorean = function (cho, jung, jong) {
	
	var jongsung = (jong == 0 ? 0 : jong + 1);
	
	var code = 0xAC00 + ((cho * 21) + jung) * 28 + jongsung;
	
	return String.fromCharCode(code);
}

String.prototype.isNullOrEmpty = function() {
    return (this.constructor !== String || this.trimAll() === '');
};


'Programming' 카테고리의 다른 글

About "Expert Beginner"  (0) 2018.10.04
좋은 프로그램의 척도  (0) 2018.01.31
Linux 버전 확인 명령어  (0) 2016.10.14
기술자 등급분류 기준  (0) 2016.02.11
C# 과 C++에 관한 고찰...  (0) 2014.02.14

인터넷 찾아보니까 권한 문제라는 얘기가 많았는데

권한은 Everyone 읽기 및 실행권한이 있음에도 불구하고 계속 에러가 났다.


이거저거 건들다보니 찾았는데


IIS 서비스에 등록할 때 아무 설정 없이 등록하느라

.NET framework 가 디폴트 값(v2.0) 으로 세팅되서 발생한 문제였다.


제어판-관리도구-IIS 관리자 메뉴에서 [응용 프로그램 풀] 로 들어간 후 보이는 목록에서

해당 응용프로그램 우클릭-.NET Framework 버전을 v4.0 으로 수정하니 정상적으로 진행이 가능했다.


- 내가 나중에 또 찾을까봐 써놓는 기록.

+ Recent posts