336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

spring에서 interceptor를 이용해서..

세션 체크를 하고 세션이 끊기면 로그인 화면으로..

리다이렉트 시키려고 했다..

그런데 하다보니.. ajax 요청일땐..

리다이렉트가 되지 않고, ajax가 원하는걸 받지 못하니까

error가 발생하는것이다..

 

(추후에.. interceptor 관련해서는 좀 더 정리해서 포스팅 해보도록 하겠습니다!)

 

그래서 이를 해결하기위해서는..

내가 요청받은 놈이 ajax인지 아닌지를 확인해야 겠다는 생각이 들었다.

 

알아본 걸로는 2가지 정도가 있다.

 

첫번째 방법으로는,

ajax 요청은 헤더에

x-requested-with 라는 키로 XMLHttpRequest 값을 가지고 있다고 합니다.

그렇기에 자바단에서 HttpServletRequest reuqest 에서 다음과 같이 헤더를 확인해보면,

 

 

ajax 요청인지 아닌지 알수 있습니다.

간략하게 설명드리면 request 헤더에서 x-requested-with 라는 키를 가지는 놈의 값이

XMLHttpRequest 이냐 인지를 물어 맞으면 ajax 아니면 ajax 요청이 아니라고 보시면 될 것 같습니다.

 

 

두번째 방법으로는,

마찬가지로 ajax요청의 헤더를 이용하는 것인데,

위에 있는 ajax요청이 헤더에 갖고 있는 x-requested-with 이 녀석을 모른다면,

임의로 ajax요청시에 헤더에 키, 값을 넣어서 요청을 보내는 것입니다.

ajax 요청하는 jquery를 보면 다음과 같습니다.

 

 

그 중에서 beforeSend라는 함수가 있습니다.

이녀석은 이제 요청 보내기 직전에 사용 되는 함수 인데,

위에 처럼 setReuqestHeader 함수를 통해 AJAX 라는 키에 true라는 값을 주었습니다.

그 다음 자바단에서 위에서 헤더를 확인것과 같이,

 

 

이렇게 ajax요청이신지 확인하실 수 있습니다.

두번째 방법은 내가 원하는 대로 키, 값을 주어 내가 알기 쉽게 할 수 있다는 장점이 있는 것 같습니다.

 

쨋든!!

이와 같이 둘 중에 한가지 방법으로 ajax요청인지 아닌지 사용하셔서 도움이 되셨으면 좋겠습니다!ㅎ

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

야심차게...

세션 타임아웃 설정하려다.. 에러가 발생했다..

아무생각 없이 빨리 하고 싶어서..

web.xml 맨밑에 넣었다.. 그리고 돌려봤더니.. 에러가 발생했다!!!!

 

사실.. 이 에러를 검색해서 오면..

나중에 좀 민망할수도 있다..

해결하고 나서.. 저도 그랬으니까..

 

내용을 대충 보면 session-config 1개로 제한되어 있다고 한다..

.. 사실 영어울렁증 때문에.. 처음에 저건 제대로 보지도 않고..

콘솔창 보면서 이것저것 찾아 봤었다..

 

하지만.. 그럴필요가 없다..

 

session-config를 두 번 설정한 것이다..

web.xml에 자세히 살펴보면.. 이미 설정되어 있는 session-timeout이 있을 것이다..

언능 찾아보고 다른 사람 모르게.. 하나 더 한건 지우세요..

 

지우고 다시 서버 돌리시면 잘 돌아가시는 것을 확인하실 수 있으실겁니다!ㅎ

 

 

 

저와 똑같은 경우가 없으시길... 바랍니다...

 

'ERROR' 카테고리의 다른 글

JSON.parse 에러  (0) 2018.11.19
linux Tomcat catalina log 한글(글자) 깨짐  (0) 2017.08.23
javax.naming.NameNotFoundException  (0) 2017.08.23
@TargetApi ?  (0) 2014.11.05
Invalid file name: must contain only [a-z0-9_.]  (0) 2014.10.21
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

리눅스에 서버를 세팅하고,

로그를 확인할때... 한글이 깨질때... 당황할때가 있다!

그럼 하나만 보면 되는게 아니라... 캐릭터 셋 설정한데를 다 찾아봐야한다...

그래서 한글이 깨지면.. 쉽게 해결이 안될때가 있다..ㅠ,ㅠ

 

 

프로젝트라던지 server.xml이라던지 머 웬만한 내가 아는데 다했는데..

로그볼때 깨진다면!!! 로그를 뿌려주는 catalina 에서 인코딩 설정을 해보자!!

 

 

저 같은 경우에 이와 같이 글자가 깨졌었습니다...

putty 에서도 UTF-8로 설정하고, 나머지도 거의 다 해줬다고 생각했는데, 알아보니 카타리나쪽이 빠졌었더라고요!!

 

catalina.sh 파일을 열어서,

 

 

상단에,

 

JAVA_OPTS="$JAVA_OPTS -Dfile.encoding=UTF-8 -Dfile.client.encoding=UTF-8 -Dclient.encoding.override=UTF-8"

 

※ 참고로.. 변수명과 값 사이에 띄어쓰기는.. 절대 안됩니다... 저 이것때문에... 하루 넘게 날린것 같아요...

     JAVA_OPTS ='블라블라', JAVA_OPTS = '블라블라', JAVA_OPTS= '블라블라'

   절대 조심하세여.. 얘네들 안됩니다... 딱붙여야대요!!!!!!

 

이 내용을 작성해주고 서버를 내렸다 올라리면 다음과 같이 깨지지 않고 잘 보이는것을 확인 할 수 있었습니다!!

 

(그나저나... 필자는.. 아직 초보 개발자에.. shell에 대한 경험의 없기에.. catalina.sh 의.. 자세한 shell 구문의 내용은.. 모릅니다..ㅠ,ㅠ 훗날엔.. 더 자세히 포스팅 하는 날이 오기를.. 바라며.. 포스팅을 마칩니다.. 오늘도 좋은 하루 되세요!ㅎ)

 

 

'ERROR' 카테고리의 다른 글

JSON.parse 에러  (0) 2018.11.19
<session-config> element is limited to 1 occurrence  (0) 2017.08.29
javax.naming.NameNotFoundException  (0) 2017.08.23
@TargetApi ?  (0) 2014.11.05
Invalid file name: must contain only [a-z0-9_.]  (0) 2014.10.21
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

 

서버 잘 띄우고 DB 커넥션을 하려고 하면 똭!! 에러가 뜹니다.. 이런..ㅠ,ㅠ

리눅스 서버에 띄워서... 로그로 찍은거라... 화면이 어둡습니다!

 

머... 이 내용에 대해서 간략하게 머가 문제냐를 보면 cneMsg라는 이름을 가진 녀석을 못찾는답니다...

(저같은 경우에는 톰캣에 JNDI 설정을 해놓았습니다...)

lookup이라는 놈이 JNDI 설정해놓은 이름을 찾는 건데 cneMsg라는 녀석을 아무리 찾아도 없다는 겁니다!!

그래서 에러가 발생한겁니다!!!

 

그래서 결론은!!

데이타소스를 설정한 부분 즉, DB를 설정한 부분을 찾아가시면,

네이밍 부분이 잘못되셨다는 것을 아실수가 있으실 겁니다!!

네이밍만 잘 맞춰주시면, 잘 돌아가는 것을 확인 하실 수 있을겁니다!!ㅎ

(어떻게 보면 간단한 문제인데, 아직 개발 초보자로썬 영어로 막막 엄청 길게 에러가 뜨다보니 겁 먹을수 있는것 같습니다.ㅠ)

'ERROR' 카테고리의 다른 글

JSON.parse 에러  (0) 2018.11.19
<session-config> element is limited to 1 occurrence  (0) 2017.08.29
linux Tomcat catalina log 한글(글자) 깨짐  (0) 2017.08.23
@TargetApi ?  (0) 2014.11.05
Invalid file name: must contain only [a-z0-9_.]  (0) 2014.10.21
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

오라클에서 문자타입을 사용 하다 보면 CHAR, VARCHAR, VARCHAR2를 보실수 있습니다.

처음에는 아무생각 없이 쓰다가 어느순간 문제가 발생 해 검색을 하는 경우가 생길 거라 생각이 듭니다.

그 순간 이 포스팅을 보시고, 도움이 되셨으면 좋겠습니다.

(완전 완벽히 자세히 알려드리지는 못할 수 있지만 사용하는데 최대한 지장이 없도록 열심히 작성하였습니다!)

 

우선 간단하게 비교표를 보면,

 

CHAR는 고정형이고, VARCHAR는 가변형이라고 적혀있습니다.

고정형은 말그대로 고정적일때 사용해야 하고, 가변형은 변화가 있는 컬럼에 대해 사용해야 한다는 것입니다.

이 말이 처음에는 먼가 하실 수 있습니다.

(저도.. 그랬습니다.. 심지어 처음 배웠을때는 아 그런가보다 하고 넘겼던 것 같습니다..)

그래서 이해를 돕기 위해 예제를 한번 만들어봤습니다.

 

CREATE TABLE TEST_CHARACTER(
 T_CHAR CHAR(4),
 T_VARCHAR VARCHAR(4),
 T_VARCHAR2 VARCHAR2(4) 
);

 

INSERT INTO TEST_CHARACTER VALUES('A', 'A', 'A'); 

 

테스트 테이블을 만들고, 각각 CHAR, VARCHAR, VARCHAR2 문자형을 가지는 컬럼에 똑같은 문자 A를 넣습니다.

 

 

이 상태에서 고정형과 가변형의 차이를 볼 수 있게 셀렉트를 해보겠습니다.

 

SELECT  DECODE(T_CHAR, 'A   ', 'TRUE', 'FALSE')         T_CHAR,
           DECODE(T_VARCHAR, 'A   ', 'TRUE', 'FALSE')    T_VARCHAR,
           DECODE(T_VARCHAR2, 'A   ', 'TRUE', 'FALSE')  T_VARCHAR2
FROM   TEST_CHARACTER;

 

※ 참고로 DECODE 함수는 IF문 같은 함수입니다. DECODE(컬럼, '비교값', '같으면 요기', '다르면 요기') 

위와 같이 셀렉트를 하면 아래와 같은 결과가 나옵니다.

 

 

간략하게 설명을 드리면,

비교값의 문자는 'A∨∨∨' (A공백백공백) 입니다.

공백이 포함되자 CHAR 같은 경우에는 TRUE가 나왔고, VARCHAR나 VARCHAR2는 FALSE가 나왔습니다.

VARCHAR나 VARCHAR2 같은 경우에는 우선 같다고 보고 CHAR와 VARCHAR를 비교해서 설명해드리겠습니다.

 

CHAR 같은경우에는 4byte로 공간을 잡았는데, 문자가 4byte가 다 안채워지면 나머지가 공백으로 채워지도록 되어 있습니다.

그렇기 때문에 나는 분명히 A 라는 문자를 넣었는데, 자동적으로 'A∨∨∨' 가 되어 공백을 집어넣어야 TRUE 가 되는 것을 볼 수 있습니다.

이런 의미로 고정형이라는 말이 쓰이는 것입니다. 왜냐면 공백이 채워지지 않게 하기위에선 할당한 공간을 꽉채워야 하기 때문입니다.

예를들어 형식을 정한 날짜라던지 주민등록번호 처럼 절대 글자수가 변화가 되지 않는 경우에 사용하면 적당하다고 볼 수 있습니다.

(하지만 일반적으로는 VARCHAR로 공백을 생각치 않고 쓰는 경우가 많은것 같습니다.)

 

반면 VARCHAR는 4byte를 할당하고 'A'라는 1byte의 문자를 입력하면 CHAR와는 다르게 공백이 채워지는것이 아니라 입력한 부분만 쓰입니다.

이런 의미로 가변형이라는 말이 쓰이는 것입니다. 왜냐면 할당한 영역은 4byte 지만 나는 꼭 4byte를 쓰지 않고 매번 다를 수도 있기 때문입니다.

예를들어 아이디라는 컬럼이 있으면 그 컬럼은 매번 다른 수의 글자가 입력이 될 것입니다. 그럼에도 공백이 채워지지 않기에,

걱정없이 컬럼을 사용 할 수가 있으니 글자수의 변화가 있는 경우에 사용하면 적당하다고 볼 수 있습니다.

아 그리고, 반대로 'A'문자를 비교했을때를 궁금해하실 수 있으니 보고 가겠습니다.

 

SELECT  DECODE(T_CHAR, 'A', 'TRUE', 'FALSE')         T_CHAR,
           DECODE(T_VARCHAR, 'A', 'TRUE', 'FALSE')    T_VARCHAR,
           DECODE(T_VARCHAR2, 'A', 'TRUE', 'FALSE')  T_VARCHAR2
FROM  TEST_CHARACTER; 

 

위와 같이 셀렉트를 하면 아래와 같은 결과가 나옵니다.

 

 

결과는, 반대로 CHAR만 FALSE가 나오는 것을 볼 수 있습니다.

그러니까, CHAR형태로 컬럼을 만들고 할당 영역을 꽉채우는 데이터가 아니라면, 내가 넣었을땐 'A'라는 문자를 입력했더라도, 조건으로 아무리 비교해봐야 내가 원하는 결과가 나올 수가 없다는 것입니다.

 

다음으로 위에 적혀있는 BYTE수는 데이터 길이 제한의미합니다. (CHAR : 2000byte / VARCHAR, VARCHAR2 : 4000byte)

그리고 VARCHAR와 VARCHAR2 같은경우에는 현재는 차이가 없으나, 오라클쪽에서 추후에 VARCHAR 같은경우에는 다른 형태로 쓰일 수 있다고 합니다.

그렇기 때문에 오라클에서는 VARCHAR보다는 VARCHAR2를 쓰는것을 권장한다고 합니다.

(이 내용은 Oracle10g 어느 문서에 적혀있다고 합니다...)

 

 

그래서 최종결론은!!!

 

§ CHAR는 문자의 길이가 고정적일때 사용하고!!!

§ VARCHAR는 문자의 길이가 변화가 있을때 사용하고!!!

§ 오라클에서는 VARCHAR보다 VARCHAR2를 쓰는 것을 권장한다!!!

 

 

※ 아 참고로... 오라클 기준에 설명 드렸습니다.. 다른 DB도 어느정도 일치하나.. 그렇다고 또 완전히 디테일하게 맞지는 않으니.. 참고하시기 바랍니다..ㅎ

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

오늘 엑셀 작업을 하다가 황당한 일이 생겼다...

먼가 나도 모르게.. 자간이 엄청나가 넓어진 것이다...

근데... 한글은 괜찮은데 영어만 이상했다...

 

먼가 설정이 바뀐건 알겠는데...

멀 눌렀는지도 모르고...

어느 메뉴인지도 몰라서...

소용없는 건 알면서... 되돌리기도 해보고, 껐다가 다시켜보고... 그랬다...

그다음에 정신을 차리고 검색해서 찾아냈다...

 

해결방법은...

(Alt) + (=) 를 누르면... 영어 자간이 원래대로 돌아오는 것을 확인 할 수 있다!!!!!!!

 

엑셀로 간략하게...

눌렀을때와 안눌렀을때의 차이를 보여주면 다음과 같다.

 

 

한글은 차이가 없는데, 영어는 위와같이 저렇게 차이가 난다...

아 그리고 추가적으로... 띄어쓰기나.. 특수문자.. 한글빼고는 다 자간이 넓어지는 것을 확인하였다...

(한글도 자간 차이가 있는거일수도 있지만.. 내 눈에는.. 잘 모르겠다..)

 

(그리고... 자간관련 단축키 인것 같긴 한데... 정확히 먼지는... 안찾아보고... 해결만 상태로 작업을 이어갔습니다...)

 

이 글 보고 다들 당황하시지 마시고 해결하시길 바랍니다!ㅎ

 

 

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

오라클의 EXISTS와 IN함수는 의미는 거의 비슷하지만 조금의 차이를 가진다.

(NOT은 각 함수의 반대의 의미를 가진다)

 

간단하게 보면, 둘다 존재하느냐 포함하느냐 머 비슷하다.

하지만 사용 방식의 차이와 NULL 값을 포함하냐 마느냐 차이가 있다.

그리고 EXISTS는 서브쿼리만을 사용이 가능하고, IN은 서브쿼리뿐만 아니라 단순 값도 사용이 가능하다.

이런 설명보단 예시로 보는게 가장 이해하기 좋은 것 같으니 예시를 봐보자.

 

(가로로 배치했었는데... 반응형때문에.. 뭉개져서.. 보시기 불편하겠지만.. 세로로 했습니다.ㅠ,ㅠ)

 

     

    <TEST_IN_AND_EXISTS >              

 

 

    <TEST_IN_AND_EXISTS2>

 

우선 두 테이블에 위와 같이 데이터를 넣어놨다.

저같은경우에는 IN만 알고 있었는데, EXISTS라는 것을 알게되 비교 포스팅을 하게 되었습니다.

처음에는.. EXISTS가 잘 이해 안됬었는데.. 현재도 완전 디테일하게는 이해를 못했지만.. 이렇게 생각하자라고 결론을 냈습니다.

먼저 EXISTS 쿼리 부터 보면,

 

SELECT A.B_COLUMN, A.A_COLUMN
FROM TEST_IN_AND_EXISTS A
WHERE EXISTS (SELECT B.A_COLUMN FROM TEST_IN_AND_EXISTS2 B WHERE B.A_COLUMN = A.B_COLUMN);

 

제가 이해가 잘 안된부분은 서브쿼리였는데..

(사실.. 저 서브쿼리가 멀 나타내주는지를 정확히는 이해를 못한 상태입니다..)

단순하게 생각하면 두테이블을 비교하는데 조건을 A 테이블의 B_COLUMN과 B 테이블의 A_COLUMN을 기준이라고 보면 된다..

(TEST_IN_AND_EXISTS의 Alias를 A 2를 B로 했기에 A 테이블과 B 테이블로 부르겠습니다..)

좀 더 쉽게 말하면 B 테이블의 A_COLUMN의 값이 A 테이블의 B_COLUMN에 존재하는 데이터를 불러와줘 라고 보면 된다..

말로만 하지말고 결과를 보면,

 

 

위와 같은 결과를 볼 수 있는데,

예시를 다시 말로 풀어보면, B테이블의 A_COLUMN의 값은 1,2,3,4,5,6,7 이 있다. 이 값이 존재하는 A테이블의 B_COLUMN의 값중에 존재하는 값들만 보여줘라는 쿼리구문이다. 그래서 A테이블의 B_COLUMN이 1,2,3인 것은 보여주고 9와 null 값은 포함하지 않기에 보여주지 않는 것이다.

이상태에서 IN 쿼리를 비교해 보면,

 

SELECT A.B_COLUMN, A.A_COLUMN
FROM TEST_IN_AND_EXISTS A
WHERE A.B_COLUMN IN (SELECT B.A_COLUMN FROM TEST_IN_AND_EXISTS2 B); 

 

같은 의미를 지닐수 있도록 IN함수로 쿼리를 표현해봤습니다.

EXISTS와 달리 IN함수 같은경우에는 비교할 컬럼을 앞에 넣어 줍니다.

(그래서 처음에 EXISTS는 머랑 비교 하는거지 라는 것에 고민을 많이 햇었습니다...)

위 쿼리를 말로 해보면 A테이블의 A.B_COLUMN 값 중에 B테이블의 B.A_COLUMN들이 포함한 데이터를 불러와줘 이다..

결과를 보면,

 

 

EXISTS와 별차이가 없는 것을 볼 수 있다.

근데 왜 EXISTS와 IN을 비교해놨어라고 할 수 있지만, NOT이 포함한 함수에서 위에서도 잠깐 언급한 차이를 볼 수 있다.

NOT EXISTS 쿼리로 보면,

 

SELECT A.B_COLUMN, A.A_COLUMN
FROM TEST_IN_AND_EXISTS A
WHERE NOT EXISTS (SELECT B.A_COLUMN FROM TEST_IN_AND_EXISTS2 B WHERE B.A_COLUMN = A.B_COLUMN); 

 

EXISTS쿼리 의미에서 NOT 이 붙음으로써 딱 반대되는 의미이다.

그렇기에 바로 결과를 보면,

 

 

말그대로 딱 정반대의 A테이블의 나머지 3개의 데이터를 가진 결과가 나온다. NULL값을 포함한..

그다음 NOT IN 쿼리를 보면,

 

SELECT A.B_COLUMN, A.A_COLUMN
FROM TEST_IN_AND_EXISTS A
WHERE A.B_COLUMN NOT IN (SELECT B.A_COLUMN FROM TEST_IN_AND_EXISTS2 B);

 

IN쿼리 의미에서 NOT 이 붙음으로써 딱 반대되는 의미이다.

그렇기에 바로 결과를 보면,

 

 

이 건 말그대로 정반대 같지만, NULL 값이 포함되어있지 않는다.!!!

그래서 NOT이 포함한 함수를 쓸대는 이 점을 잘 고려해서 사용해야 한다!!

이 점을 생각하지 못하고 NOT IN을 쓰고 NOT EXISTS를 사용했다가는 큰 혼란이 올 수 있으니, 이번에 꼭 알아가도록 합시다!ㅎ

 

아 추가적으로,

위에서 IN 함수 같은경우에는 서브쿼리가 아닌 단순 값으로도 가능하다 했었는데, 잠깐만 보고 가자.

쿼리로 보면,

 

SELECT A.B_COLUMN, A.A_COLUMN
FROM TEST_IN_AND_EXISTS A
WHERE A.B_COLUMN IN ('1', '2');

 

SELECT A.B_COLUMN, A.A_COLUMN
FROM TEST_IN_AND_EXISTS A
WHERE A.B_COLUMN NOT IN ('1', '2');

 

위와 같이 서브쿼리 대신 단순 값으로 사용 할 수 있고,

결과를 보면,

 

          

              <IN 함수>      

 

                            

          <NOT IN 함수>

 

IN 함수에서는 1,2 값을 포함한 결과값을 볼 수 있고, NOT IN 함수에서는 NULL값을 포함하지 않고 1,2 값을 포함하지 않은 결과 값을 볼 수 있게 된다.

 

저 같은 경우에는 IN, NOT IN 만을 썼었는데,

EXISTS와 NOT EXISTS을 알게 되면서 다른 분들도 같이 알면 좋겠다는 생각이 들어 포스팅을 하게되었습니다.

 

이 글을 보시는 분들 중에 두가지 중에 한가지만 알거나 하나도 모르거나 먼가 빠트린 점이 있으셨던 분들에게 도움이 되셨기를 바랍니다!ㅎ

 

(아! 그리고 혹시나 제가 잘못 이해 하고 있는 점이 있으면.. 조언 부탁드리겠습니다!)

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

 

드디어... 기다리고 고대하던!! 그것이... 뜨고야 말았다!!!

그것은 바로... FM 출시날짜가 FM 트위터에 떴다!!!!!!!!!!!!

(찾아보니, 스포츠인터렉티브 공홈에도 떠있더라...)

11월 10일!!! 출시 예정!!! (아마 영국시간으로 일거다..)

굿굿굿!!

 

 

그리고, 10월 9일 이전에 사전예약자 중에 FM17 보유자는 FM18 25프로 할인해준다고 한다!!!

전에 2017 살때는 싸게 사려고 엄청 힘들게 했던것 같은데,

이번에는 17이 있으니.. 스팀에서 25프로 할인받고 예약구매 하면 될것같다!! (하하하...)

 

 

추가적으로... 출시일자가 뜬 기념으로 이벤트 하는건지 스팀에서 2일동안 80프로라는 어마어마한 할인 이벤트를 진행중이다..

이벤트가 끝나기전에 이 글을 보시고, 아직 구매 안하셨다면 사시면 엄청 이득이실듯 하다...

하지만.. 대부분.. 이 할인은 끝나고 보시지 않을가 싶다..ㅠ,ㅠ

 

점점 예전보다 게임량은 줄지만.. 그래도 항상 신작은 설레는 것 같다..ㅎ

 

 

 

 

 

나중에 스팀을 다시 확인하니.. 한국 발매일자 11월 11일로 나와있고!!

2017보유한 사람을 대상으로 10월9일까지 25프로 할인된 가격 40,500원에 구입이 예약구매가 가능한 것을 확인 할 수 있다!!

장바구니에 추가를 눌러봤는데, 결재가 되는 것 같다.. 결재는.. 지금은 참고.. 좀만 있다가 해보도록 하겠습니다...ㅎ

 

FM을 처음했을때.. FM 2005를 CD를 중고로 사서.. 했었는데..

시디케이스에 적혀있었다. 중독의 다른 이름이라고 써있었었는데.. 잊혀지지가 않는다.ㅋ,ㅋ

생각난김에..

 

시디 찾아서.. 사진을 찍어봤는데..ㅋ,ㅋ

추억 돋네요..ㅎ

 

 

 

 

 

출처 : https://twitter.com/FootballManager (FM 트위터)
        http://store.steampowered.com/ (스팀 스토어)

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

( ※ 모든 사진은 클릭시 확대해서 보입니다 )

 

자바스크립트 디버거에 대해 알아보자.

 

이미 알고 계신분도 많지만, 모르고 있으신 분들도 많다고 생각한다..

저랑 비슷한 경력이나 배우고 있거나 이제 일을 막 시작했거나 하는경우에는 말이다..(참고로 전.. 현재 1년쯤..)

 

디버거라는 녀석은 정말정말 많은 도움이 된다.

오류를 찾아 수정할때라던지, 다른 사람의 소스를 분석할때라던지 정말정말 도움이 된다고 생각한다. (다른분들은 모르겠지만 개인적으로는..)

그래서 알아두고 있으면 정말 코딩하는데 도움이 될 것이라 저는 생각합니다!!ㅎ

 

지난번에 중복제거에서 잠깐 언급을 했었는데,

그 소스를 가지고 크롬에서 간략하게 보도록 하겠습니다.

 

 

위와 같이 어떠한 로직에 이클립스에서 디버거를 할때 breakpoints 를 찍듯이 지점에 debugger; 라고 적습니다. 그리고 저장을 하고 브라우저에서 어떻게 되는지 확인을 해보겠습니다.

 

 

 

위와 같이 화면을 띄우고 F12를 눌러 개발자모드를 엽니다!

그리고 debugger가 적혀있는 로직을 태우면 다음과 같이 debugger모드가 실행됩니다.

 

 

위와 같이 debugger 모드가 실행되는 것을 볼 수 있고, 우리는 이 것을 제어 할 수 있습니다.

 

많이 쓰는 3가지 정도 기능을 알아보면

첫번째, 단축키로는 F8 이고, 다음과 같은 버튼이다. 왼쪽 화면과 오른쪽 화면에서 모두 찾아 볼 수 있다. 이 버튼은 쉽게 말해서 다음 debugger라던지 breakpoints를 찾아간다고 보면 된다. 한번에 슈융 하고 넘어간다. 만약에 다음 debugger랑 beakpoints가 없으면 디버거가 종료 된다고 보면 된다.

 

 

두번째, 단축키는 F10이고, 다음과 같은 버튼이다. 이 역시 많이 쓰이기 때문에 왼쪽화면과 오른쪽 화면에서 모두 찾아 볼 수 있다. 이 버튼은 쉽게 말해서 한줄씩 넘어간다고 보면 된다. 이클립스에서는 F5 단축키에 해당한다, 그래서 디버거를 사용하다보면 자주 이클립스랑 혼동을 한다...ㅠ

 

 

세번째는, 단축키는 F11이고, 다음과 같은 버튼이다. 이는 많이 사용이 안되다보니 오른쪽에만 배치되어 있는 것 같다. 이 버튼은 쉽게 말하면 function이 보이면 다 들어간다고 보면 된다. 한줄씩 넘기다가 어떠한 function을 만나면 그 function으로 넘어가게 된다.

 

 

 

다음으로 간략하게 어떻게 넘어가지는 보여드리겠습니다.

관리자도구를 열어 debugger를 입력한 곳에 debugger가 걸린 모습입니다.

 

 

 

 

첫번째는 가장 많이 사용되는 F10을 눌러보겠습니다.

그럼 다음과 같이 한줄이 넘어가는 것을 볼 수 있습니다.

 

 

두번째는 해당줄에 function이 있으면 찾아 들어가는 F11을 눌러보겠습니다.

그럼 다음과 같이 인클루드한 jquery js 파일로 찾아 가는것을 볼 수 있습니다.

 

 

 

그 다음 이 함수를 빠져나와 마지막으로 F8을 눌러보겠습니다.

 

 

위에 모습은 jqeury 함수를 빠져나온 다음 모습이고, F8을 누르기전에는 위에서도 간략하게 설명 했듯이 다음 debugger 구문이 있거나, breakpoints가 있어야 합니다. 그래서 저는 F8을 누르기 전에 57번 라인에 breakpoints를 지정 해놨습니다. ( breakpoints를 지정하는 것은 해당 라인 숫자를 클릭하면 간단하게 지정 할 수 있습니다.)

그 후에 F8을 누르면 다음 breakpoints로 이동 하는 것을 볼 수 있습니다.

 

 

이 과정에서 제가 생각하는 가장 좋은 장점은 콘솔창을 제어 할 수 있는 점이라고 생각합니다. 이클립스 같은 경우에는 variable 테이블이 있긴 하지만 콘솔창에서 직접 변수를 써서 확인하거나 코딩을 할 수가 없는데 이 곳에서는 그 것이 가능해 코딩을 하기에 정말 좋은 것 같습니다. 예를 들어 스크립트 구문을 짜고 이곳에서 확인하는 것이 아니라 이 곳에서 먼저 테스트를 해보고 구문을 넣을 수가 있어서 확인과정을 한번 줄 일 수 있습니다.

 

위와 같이 콘솔창에서 실행구문이 넘어간 후론 콘솔창에서 입력하여 확인 할 수가 있으며, 전혀 없는 변수인 a를 선언해서 확인할 수 있듯이 테스트도 해 볼 수 있습니다. 그리고, 그 해당 변수의 타입에 따라 딸려 있는 함수를 바로 확인 할 수 있어 사용하기에도 더욱 편리합니다.

더욱 와 닿는걸 하나 보여드리면,

 

 

엑셀 업로드 테스트를 하는 로직인데 ajax로 가서 원하는 데이터를 여러개 가져 오는 것입니다. returnData라는 변수에 담겨져 오는데, 여러가지 타입이 담겨져 옵니다. 처음으로 returnData라는 것을 입력하면, 그 안에 map 데이터로 data, sheetContent라는 이름을 가진 것이 있고, 그 안에는 또 returnData.data를 입력해서 확인하면 문자 배열이 하나 있고, 다른 returnData.sheetContent에는 여러개의 배열들이 있고 그중에 하나를 골라 returnData.sheetContent[0]을 입력하면 map으로 들어있는 데이터를 확인 할 수 있습니다. 그렇기에 좀 더 정보를 확인 할 수 있고, 코딩하기에도 좋다고 생각을 합니다.

 

결론은!! debugger를 사용해 좀 더 쉽고 빠르게 오류도 확인하고, 정보도 확인해서 잘 하는 개발자가 같이 됩시다!ㅎ

 

아 그리고 마지막으로, 다른 브라우저도 사용이 가능하다는것을 보여드리고 마무리 짓겠습니다.

 

< 익스프롤러, 개발자모드 F12 >

 

< 파이어폭스, 개발자모드 F12 >

 

<오페라, 개발자모드..를 못찾아서 우클릭해서 요소검색으로 했습니다..>

 

오늘도 좋은 하루 되세요  ^ ^ㅎ

 

336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.

( ※ 답만 필요하신분은 아래에서 빨간 박스를 참조하시기 바랍니다. )

 

javascript, jquery를 이용한 배열 중복제거를 알아보자!

 

중복제거에 대한 로직이 필요해서 처음엔 찾아보지 않고 혼자 생각을 해서 해보았다.

 

그리 어려운 로직은 아니였으나, 여러번 수정을 하긴했다...

 

우선 생각한 로직은, A라는 배열에 있는 값들을 B라는 빈 배열로 하나씩 옮길때마다 B 배열을 탐색해 그 값이 있는지 없는지 검사를 하고 있으면 넣지 않고, 없으면 넣는 간단한 로직이다.

 

화면으로 테스트를 보여주기 위해 간단하게 다음과 같이 만들어보았다.

 

 

왼쪽 맨 윗칸에 아무거나 입력을 하고 ▽ 버튼을 누르면 아래 멀티 셀렉트 박스로 들어가도록 했고, 중복제거 버튼을 누르면 중복을 제거하고 결과를 보여주도록 만들었다.

 

간단하게 다음과 같이 테스트를 해보자.

(※ 중복제거1은 검색전 내가 짠 로직이고, 중복제거2는 검색 한 로직이다..)

 

중복제거1 버튼을 누르면 다음과 같은 결과가 나타난다.

1과 2와 33이 2개씩 있었는데, 제거가 되고 하나씩들만 남아 중복 값들이 제거되는 것을 확인할 수 있다! 이제 어떻게 구현했는지 한번 봐보자!

 

 

머 우선 위에는 select 박스 사이즈 구해서 for문을 돌려 jquery로 select 박스 값을 인덱스로 찾아 preArray에 배열로 넣었다.

그 다음이 박스친 중복제거 로직이다.

afterArray는 처음에 빈 배열이기 때문에 처음에는 무엇이든 들어가도 중복이 되지 않는다, 그렇기 때문에 처음으로 afterArray에 들어가는 놈은 중복체크 없이 바로 넣고 continue 된다. 그 뒤론, preArray 값을 차례대로 옮길때마다 afterArray를 탐색해 똑같은 같이 있으면 chkDupl 이라는 변수를 true로 주고 탐색이 끝난후 chkDupl의 변수값이 true로 변하지 않고 false로 남아 있는다면 중복값이 없는것이기 때문에 그때 preArray의 값을 afterArray로 옮겨준다.

 처음에는 고민을 좀 했었는데, 하고 나니 생각보다 간단한 로직이었다.

(참고로 위 소스는 조금의 필터를 거친것이다... 처음에는 더 지저분했는데.. 보다보다 보니 조금은 깔끔해졌다.. 역시.. 머든.. 계속 보다보면 좋아지는것 같다..)

 

그 다음에 검색을 해봤는데, jquery의 each라는 놈을 써서 엄청 간략하게 하는 것을 찾았다.. 신기했다.. 역시 많이 알수록 좋은것 같다..

(jquery each함수는 for문과 마찬가지로 반복문의 일종이다.)

 

중복제거2 함수에 그걸 구현해봤다, 테스트 해보면 다음과 같은 결과를 볼수 있다!

 

 중복제거1을 사용한 것과 같은 결과를 나타내주며, each를 사용한 로직은 다음과 같다.

 

 

 중복제거 로직 위아래는 위에 소스와 똑같고, each함수를 살펴보자.

보면 preArray배열를 기준으로 반복문이 돈다. function 파라미터의 index는 preArray의 index가 되고 element는 preArray index의 value가 된다.

그 안에 inArray라는 함수가 있다, 이 녀석은 해당 배열에 내가 찾는 value가 있냐 없냐를 체크해주는 함수이다. 있을경우에는 index 값을 리턴해주고 없을경우에는 -1을 리턴해준다. 그걸 이용하면 위에 로직과 마찬가지로 preArray에서 afterArray로 옮길때마다 중복을 검사해 없을 경우에만 넣는 로직이다. 첫번째 로직과 똑같은 로직임에도 불구하고 좀 더 신기술로 간단하게 구현이 되는 것을 알 수 있다.

 저는 보자마자 신기했습니다.. 이제 하나하나 배우고 있는 입장에서..ㅋ,ㅋ

 그나저나 저는 오늘도 이렇게 또 하나를 배웠습니다..ㅎ,ㅎ

 

아! 그리고 debugger라는 녀석이 있습니다!!

제가 의도치 않게 의도적으로(?) 빨간줄 쳐놨는데, 이놈에 대해서도 조만간 알아봅시다, 제 생각엔 웹 개발하는 사람에겐 참 유용한 놈입니다!!ㅎ

 

https://0taeng.tistory.com/21

+ Recent posts