프로젝트 막판에 Hyperledger fabric과 웹 서버의 연동을 위해 fabric-jdk-java 를 사용하는데 이 때부터 로그가 이상하게 찍히기 시작하였다.



이런식으로 로그가 뜨다가 말았는데, 왼쪽에 보면 이미 실행되었다는 것을 알 수 있고, 위에서는 로그와 관련하여 warning이 발생하였다.


내용이 무엇인가 로그와 관련해서 무엇인가 찾을 수 없다는 것 같다고 해서, Hyperldger 쪽에서 뭔가 로그와 관련된게 같이 붙은것 같다 생각하였다.





요놈이 의심이 가서 gradle에서 compile을 할 떄 다음과 같이 이부분을 제외 시켜보았다.









일단 잘 제외된 것 같고 이를 실행시켜보자






으아아아아 잘된다 ㅠㅠ


이와 같이 잘되던 로그쪽에서 프로젝트에 무엇인가 붙인 후 제대로 작동하지 않는다면 다음과 같은 작업을 해보자 

- 자바 스크립트는 head 태그 혹은 body 태그 안에서 선언하고 사용가능하다.


- 스크립트가 많아지게 될 때 body 끝 부분에 넣는다면 앞에 있는 html코드가 먼저 생성된 후에 스크립트가 컴파일 되고, head쪽에 스크립트를 두게 되면 html코드가 생성되기 전에 컴파일 되기 때문에 속도가 차이가 날수도 있다.


- 자바 스크립트 파일(.js)을 따로 만들어 두고 이용할 수 있다. 


- 외부로 놓게 되면 이점이 있는데

1) html코드와 js코드를 분리할 수 있다는 점

2) 코드가 보기 편해지고, 유지보수가 쉬워진다

3) 캐쉬된 스크립트 파일은 페이지 로드의 속도를 올려준다.


- 외부 스크립트 파일을 이용할 때 full url를 참조하여 사용할 수도 있다.


- 자바스크립트의 출력은 크게 4가지이다.

1)innerHtml - html을 변화시킨다.

2)document.write() - 페이지에 출력시킨다. 단 기존에 출력됬던 결과들은 사라진다.

3)window.alert() - 알림창

4)console.log() - 콘솔창


- 자바스크립트는 카멜케이스로 작성한다.


- 데이터 타입의 종류

1) string

2) number

3) boolean

4) undefined  *(null과 undefined는 같은 의미이지만, 타입이 다르다)

5) object

6) array


- 객체안에 있는 function()을 실행시킬 때 ()를 빼고 선언하게 되면 함수가 실행되는 것이 아닌 함수 안에 내용이 보여지게 된다.


- 자바스크립트는 html안에서, 이벤트에 동작한다.

- 이벤트의 종류

1)onchange : html element가 변경되었을 때

2)onclick : 유저가 element를 클릭하였을 때

3)onmouseover : 유저가 element위에서 마우스를 움직일 떄

4)onmouseout :  유저가 element 위에서 마우스를 뗄때

5)onkeydown : 유저가 키보드 키를 눌렀을 때

6)onload : 브라우저가 페이지 로딩을 끝냈을 때


- 스트링 메소드 : https://www.w3schools.com/js/js_string_methods.asp


- 자바스크립트 Array 안에는 다양한 타입의 변수들을 가질 수 있다.


- Array는 반드시 숫자 인덱스를 사용해야 한다.


- slice()는 기존 코드에서 변경하는 것이 아닌 새로운 배열을 생성한다.


- new Data()에 가능한 인자는 6가지이며 각 각 년,월,일,시,분,초 이며, 예외적으로 인자가 하나 일때는 년도가 아닌 초를 나타낸다.


- for( x in array) 


- 정규표현식 /pattern/modifiers


- modifiers 종류

1) i : 대소문자를 구분하지 않는다.

2) g: 검색된 모든 결과를 리턴


-pattern의 종류

-  brakets 종류

1) [abc] : brakets 사이의 character를 찾는다.

2) [0-9] : brakets 사이의 숫자를 찾는다.

3) (x|y) : Find any of the alternatives separated with | 

- metacharacter 종류

1) \d : 숫자를 찾는다

2) \s : 스페이스바 찾는다.

3) \b : 단어의 시작이 주어진 것과 같은 것을 찾는다.

4) \uxxxx : 헥사 넘버로 표현된 유니코드를 찾는다.

- quantifier 종류

1) n+ : 최소 한개의 n이 연속된 string을 찾는다

2) n* : n의 구성원들을 찾는다. ex) n=123때 123333,12

3) n? : n의 구성원들을 찾는다. 단 n의 맨뒤에 문자가 연속되지 않는다. ex) n=123때 123,12


- try{ .. .} catch(err){ ... }


- hoisting = 자바스크립트는 디폴트 행동으로 생성과 동시에 초기화되지 않은 모든 변수 선언을 코드의 범위 위쪽으로 움직여 놓는다.

(* let과 const로 선언된 것은 이에 영향을 받지 않는다.)


- 자바스크립트 ECMAScript 5 부터 "use strict" 를 사용한다.

(* use strict는 예를 들어 선언되지 않는 변수를 사용하는 것으로부터 보호하여 안전한 코드를 쓸 수 있도록 도와준다..)


- this 키워드 범위는 객체 내부에 메소드 외에는 전부 글로벌인것 같다(?)


- let과 const 의 등장


- let은 {} 괄호안에서만 사용이 가능하고, 괄호를 벗어나면 사용할 수 없다. 괄호 안에 괄호 {  {}  } 에서 변수를 변경하여도 그 변경된 괄호안에서만 유효하다.


- const는 let과 같이 동작하지만 재정의 할 수 없다는 것이 특징이다.


- const object, array는 변경이 가능하다. 하지만 재정의는 불가능하다


JS Best Practice


- 글로벌 변수를 조심하라. => 글로벌 변수와 함수는 다른 스크립트에 의해서 오버라이트 될수도 있다.

- 모든 함수 또는 스크립트에서 선언은 위에 놓는다.

- 숫자,문자,불리언을 객체로 생성하지 마라 => 나중에 타입으로 인해서 잘못된 결과가 나올 수도 있다.


JS Mistakes


1) regular comparison 과 strict comparison을 구별하라.


var x = 10; var y="10";

if( x==y) //true

if( x===y) //false


switch에서는 strict comparison을 사용한다.


2) Float에 대한 잘못된 이해


float는 64비트에 저장되게 되는데, 이는 정확한 부동 소숫점 값을 가지는데 어려움을 갖는다.


var x = 0.1.y=0.2;

x+y //0.3000000000004


이 문제를 해결하고 싶다면


var z = (x * 10 + y * 10) / 10;       // z will be 0.3 


3) Object와 Arrays의 차이를 이해하라


4)Undefined는 Null이 아니다.

자바스크립트 객체와 변수, 프로퍼티, 메소드는 undefined 될 수 있다.

게다가, 빈 자바스크립트 객체는 value로 null을 가질수도 있다.

따라서


if(typeof myObj === "undefined") //true

if(typeof myObj === "null") //false





다음 순서 : https://www.w3schools.com/js/js_mistakes.asp

1. 람다 없이 기본 소팅


소팅은 Collections의 소팅을 이용하며, 사용 시 익명함수를 마들어 사용한다.




2. 람다를 이용한 소팅


다음 예제는 람다를 이용하여 익명함수를 작성하는 것이다.


(추가적으로 1의 예제에서 Collections의 sort api를 사용했지만 2번에서는 List의 sort api를 사용하였다.)


3. 타입 정의 없이 사용하기


 2번예제에서 익명함수를 구현할 때 구체적인 타입을 명시해주는 부분이 있는데, 이 부분을 타입 명시 없이도 사용가능하다



4. Static 메소드를 참조하여 사용하기


 람다에서 static 메소드를 참조하는 법을 배워보자. sort함수를 static으로 작성하고 이를 참조하여 작성하면 아래와 같다.



5. 리버스 소팅


 JDK 8에서부터 역소팅을 지원한다. 

  



6. Multiple comparators


JDK8에서부터 체이닝 형식으로 다중 비교를 할 수 있도록 제공합니다.




[출처 : https://www.baeldung.com]



'Programming > JAVA' 카테고리의 다른 글

final, finally, finalize  (0) 2018.11.20
Comparison with Lambda  (0) 2018.10.29
자바 8 - Map  (0) 2018.10.19
캡슐화, 추상화, 인터페이스  (0) 2018.10.10
자바8 - List  (0) 2018.10.02
자바8 - 제네릭  (2) 2018.09.03

애플릿(Applet)


: 요청을 어플리케이션을 생성하여 그 속에서 처리하여 내린다.(멀티 프로세스 방식) -> 웹 클라이언트(브라우저)에서 돌아가는 작은 프로그램



프로세스 생성 비용



서블릿 (Servlet) 


: 요청을 서블릿 컨테이너에게 넘기고, 서블릿 컨테이너는 스레드를 이용하여 각각을 처리한다. -> 서버 측에서 돌아가는 작은 프로그램


최초의 요청에 대해서 어플리케이션 실행 후 그 뒤에는 하나로 유지(멀티 스레드 기반)


[출처 : 

http://myblog.opendocs.co.kr/archives/427

http://www.libqa.com/wiki/133]


서블릿 컨테이너와 스프링 컨테이너 -> https://minwan1.github.io/2017/10/08/2017-10-08-Spring-Container,Servlet-Container/

'Programming > JSP' 카테고리의 다른 글

애플릿 서블릿  (0) 2018.10.26
쿠키 정리 파일  (0) 2018.10.17
web.xml 설정을 통한 파라미터 인코딩  (0) 2018.01.23
[JSP] 학점 변환기  (0) 2017.09.29
톰캣 설치 후 오류 - No ouput folder  (1) 2017.09.10

https://jojoldu.tistory.com/129?category=635883 님의 Validation을 통한 유효성을 체크하는 글을 따라해보다 뭔가 느낌이 뽝 와서 적어봅니다.


일단 최조 Valid(여기서는 MemberRequestDto에 validation을 작성.)를 통해 걸러지게(?) 되면 



다음과 같은 에러를 보게 된다.


Valid를 통해서 에러를 내리는 법도 있지만, 중복 검사와 같이 어떤 작업을 거치고 에러를 내리는 것은 불가능하기 때문에 Exception을 만들고 내려야한다. 그러기 위해서는 새로운 Exception을 만들어보자.


내가 원하는 그림은 위와 같이 이메일을 중복 검사하여 중복이 되면 해당 에러를 valid에서 내린 에러와 같이 내리되 필요한 default message와 field 부분만 따로 Error클래스로 만들어 내리는 것이다.

 

코드를 보면 클래스위에 어노테이션에 해당 예외 클래스는 어떤 상태를 내릴 것인지 결정을 하고, RuntimeException을 상속받아 원하는 부분을 작성하기 시작하면 된다. 



Exception을 만들었다면 기존의 에러를 내릴 때 사용하는 클래스에 새로 만든 Exception의 에러를 추가해준 후 내려야 한다. 빈을 등록해보자


 

이렇게 기존에 getErrorAttributes에 현재 내리는 Exception종류가 ValidCustomException일 때 속성을 추가해주고 필요할 때 예외를 던지면 된다.







+ Recent posts