728x90

개요.

스프링에 대한 이해가 현저이 떨어질때, 혹은 자바에 대한 기본이해가 많지 않아 발생시킨 버그다(...)


상황.

리스트의 날짜 검색부분에서 검색버튼을 클릭하면 결과는 목록에 표시가 되는데, 내가 검색했던 날짜값이 없어진다.


원인.

뷰에서 컨트롤러안으로 리퀘스트를 받아오는 VO가 있었다. (이 VO를 A_VO라 하겠다.)

이 A_VO는 검색한 결과값을 가지고 다니다가 목록에 표시할 작업이 완료되면 그 값을 다시 A_VO에 담아 뷰페이지에 리스폰스를 하는 역활이다.

이 컨트롤러에 새로운 기능을 추가해야 해서 리턴값이 A_VO형태인 새로운 메소드를 만들었다.

그리고 나는 A_VO에 그 새로운 메소드의 결과값을 덮어씌워버렸다.(...)

이게 말로는 설명이 조금 애매하고... 예를 들어서 소스를 코딩하자면,

 
 @RequestMapping("/dir1/mappingTxt.do")
 public mappingTxt(HttpServletRequest request, @ModelAttribute("searchVO") A_VO a_VO,ModelMap model) throws Exception {
    //exMethod의 리턴형이 A_VO형이어서 그냥 파라메터로 들어온 a_VO에 넣어버렸다..
    a_VO = exService.exMethod();

    //그리고 그것을 다시 모델에 담아 뷰페이지로 보냈다.(...)
    model.addAttribute("searchVO", a_VO);

    return "dir/mappingTxt";
 }

이런식으로 작업을 해버린것이다.


해결.

이는 아래의 방법으로 버그를 처리했다.

 
 @RequestMapping("/dir1/mappingTxt.do")
 public mappingTxt(HttpServletRequest request, @ModelAttribute("searchVO") A_VO a_VO,ModelMap model) throws Exception {
    //새로이 A_VO형 객체 a_VO2에 exMethod메소드의 결과를 담았다.
    A_VO a_VO2 = exService.exMethod();

    //그리고 a_VO2의 get메소드로 결과데이터를 가져와서 파라메터 a_VO객체의 set메소드로 데이터를 넣어주었다.
    a_VO.setParameter(a_VO2.getParameter());

    model.addAttribute("searchVO", a_VO);
    return "dir/mappingTxt";
 }





728x90
728x90

4.권한변경, 소유권 변경 - chmod, chown


리눅스를 사용하면서 root권한으로 작업을 해야할 때가 있는데, 그 횟수가 너무 많으면 그냥 사용자를 root로 변경해서 사용하곤 한다.

중요한건 그 이후다.

사용자를 root로 바꾸었다는 점을 잊어버리고 root권한으로 폴더나 파일을 생성해버리는 것이다.

이후 다른 사용자로 그 폴더나 파일작업을 하려고 하면 퍼미션 에러가 난다.

이때! 권한과 소유자를 바꾸는 명령어가 필요하다. (는 방금 나의 상황이었다..ㅋㅋ)


4-1. 권한변경

권한변경 명령어에 대해 알아보기 전에 터미널에서 권한을 확인하는 법을 먼저 알아보자.

현재 위치에서 'ls'라는 명령어를 치면 현재 위치에 있는 디렉토리 및 파일의 이름목록만 도르륵 나열된다.

이때 'ls -l'이라는 명령어를 입력하면 현재 디렉토리안에 있는 폴더와 파일들의 권한, 소유자, 소유자그룹 등등을 볼 수 있다.


ls -l이라는 명령어를 입력하면

drwxr-xr-x 2 yj yj 4096  4월  5 23:12 dir1

화면에 이런식으로 내용이 나오는데, 여기서 맨앞의 'drwxr-xr-x'부분이 권한을 표시하는 부분이다.

다소 암호문같이 생겨서 '저게 뭔가...' 싶을테지만 권한값을 읽는 방법이 따로있다.

1,3,3,3자리씩 끊어 읽으면 되는데 순서대로 [디렉토리][소유자권한][그룹권한][전체권한]을 의미한다.

(ex.d rwx r-x r-x)


첫글자가 d일경우 '디렉토리'라는 의미이고(일반 파일은  -으로 표시된다.)

그 뒤로

r : 읽기권한 (4)

w : 쓰기권한(2)

x : 실행권한(1)

을 의미한다.


rwx는 읽기, 쓰기, 실행권한이 모두 있다는것을 나타내며 각 권한의 숫자를 더해서 7로 읽는다.

r-x는 읽기, 실행권한만 있다는것을 나타내며 읽기권한과 실행권한의 숫자를 더해 5로 읽는다.

이를 토대로 위의 예제인 dir1의 권한을 살펴보면  소유자권한(7), 그룹권한(5), 전체권한(5)이므로 권한을 755로읽는다.


그럼 이제 권한이 어떻게 부여되어있는지 확인을 하였으니 권한변경 방법을 알아보자.

먼저 권한변경 명령어를 알아보자.

chmod [권한값] [파일명]

위의 dir1의 권한이 755였는데 이 권한을 만약 777로 바꾸고 싶다면!?

간단히 'chmod 777 dir1'이라고 명령어를 입력하면 된다.

권한바꾸기 명령어 끝!ㅋㅋ


4-1. 소유자 변경

소유자 변경도 간단하다.

chown [옵션] [소유권자:그룹식별자] [파일명]

위의 명령어만 입력하면 끝이다.

위의 예제가 dir의 소유자가 yj인데 만약 aaa소유로 바꾸고 싶다면!?

'chown aaa:aaa dir1'을 입력하면 끝이다.


그런데 말입니다. 만약 dir1안에 말입니다.

하위 디렉토리가 있지 말입니다.

이런상황에서 그냥 'chown aaa:aaa dir1'라고 입력하면 dir1안의 하위 디렉토리의 소유자까지 모두 바뀌지 않는다.(dir1만 변경된다.)

이럴때 쓰는 옵션이 -R옵션이다.

'chown -R aaa:aaa dir1'이라고 입력하면 dir1안의 하위 디렉토리까지 모두 소유권이 변경된다.



728x90
728x90

3. 이름 변경 및 이동 - mv


mv [옵션] 원본이름 바꿀이름

만약 test.txt라는 파일을 test1.txt로 이름을 바꾸려면 'mv test.txt test1.txt'라고 입력하면된다.

이름변경 옵션은... 많이 안써봐서 잘 모르겠다.

추후 쓰면서 검색하게 되면 추가하게될것 같다.



mv [옵션] 대상 위치

상황을 몇개 가정해 보자.

1 .현재 dir_sub위치에 있고, text.txt파일을 dir디렉토리로 옮기려고 한다면

 mv ./test.txt ../

위의 명령어를 입력하여 이동할 수 있다.


2. 현재 dir위치에 있고, dir_sub디렉토리를 dir2디렉토리로 옮기려고 한다면

mv ./dir_sub/* /dir2

위의 명령어를 입력하면 된다.

현재디렉토리의 dir_sub디렉토리와 그 디렉토리 안의 모든파일을 dir2로 옮겨라 라는 명령어이다.



728x90
728x90

2. 파일삭제 - rm

rm [옵션] 파일명/폴더명 

파일 및 폴더를 삭제하는 명령어는 rm이다.

현재 폴더안에 test.txt라는 파일이 있을때 그 파일을 삭제하려면 단순히 'rm test.txt'라고 입력하면 된다.


그런데 명령어를 입력하면 한번에 바로 삭제가 되는것이 아니라 정말로 파일을 삭제할 것인지 물어볼것이다.

혹시 이 삭제확인단계를 생략해도 되는 경우라면 '-f'옵션을 주면 된다.

rm -f test.txt

위처럼 입력하면 text.txt를 삭제할꺼냐고 묻지도 따지지도 않고 바로 삭제한다.


만약 dir이라는 디렉토리를 삭제하려면 똑같이 'rm dir'이라고 하면 될까?

아니다. 

파일은 아무런 옵션없이 삭제가 가능하지만 디렉토리는 따로 옵션을 주어야 삭제가 가능하다.

디렉토리를 삭제할때 쓰는 옵션은 '-r'이다.

rm -r dir

위처럼 입력하면 디렉토리가 삭제될것이다.

(사실 디렉토리를 삭제하는 명령어가 rmdir이라고 있지만 보편적으로 rm -r을 많이쓴다고 한다.)


그런데 다만 위 명령어를 쓰면 안에 서브폴더나 파일이 있을때 그것들을 일일히 삭제할것이지 계속 물어본다...

해서 한번에 삭제를 하려면 옵션 -r과 -f를 합치면 된다.

rm -rf dir

dir안에 몇개의 폴더와 파일이 있든 위 명령어를 입력하면 한방에 삭제가 될것이다.



마치며...

'-f'옵션을 주면  정말 묻지도 따지지도 않고 '옛썰! 삭제 ㄱㄱ!!'하기 때문에 신중신중하게 쓰도록 하자.


728x90
728x90

나의 서브 노트북엔 우분투가 깔려있다.

터미널 쓰는게 뭔가 재미있기도 하고..(있어보이기도 하고..)해서 터미널에서 작업을 주로 하는 편인데

자주 쓰게 되는 명령어들을 정리하면 좋겠다고 생각했다.


1. 폴더생성 - mkdir

mkdir [옵션] 디렉토리명

현재 디렉토리에 디렉토리를 생성하는 명령어는 'mkdir'이다.

단순히 현재 디렉토리 안에 새로운 디렉토리를 만드려고 한다면 'mkdir 폴더명'을 입력하면 된다.


그렇다면 위의 이미지처럼 현재 디렉토리안에 'dir'이라는 디렉토리를 만들고 dir디렉토리안에 dir_sub디렉토리를 만드는 작업을 한번에 하려면 어떻게 하면될까?

단순히 'mkdir dir/dir_sub'라고 입력하게 되면 생성이 되지 않는다.

이럴때 옵션을 지정해 주어야 하는데 이 상황에서 쓰는 옵션은 '-p'이다.

mkdir -p dir/dir_sub

위처럼 명령어를 준다면 'dir_sub'디렉토리가 들어있는 dir디렉토리를 한번에 만들 수 있다.

'-p'명령어는 상위디렉토리(dir)를 포함하는 새로운디렉토리(dir_sub)를 생성할때 쓰이는 옵션이다.


이번에는 폴더에 퍼미션을 주면서 생성을 해보자.

퍼미션을 주는 옵션은 '-m'이다.

mkdir -m 777 dir

위의 명령어를 입력하면 퍼미션값이 777인 디렉토리가 생성된다.



728x90
728x90

이클립스 워크스페이스에서 오랫동안 닫아놓았던 프로젝트들을 오랜만에 다시 오픈했을때,

에러가 빠바방!!하고 뜨는 경우가 있다.


무슨에러지?하고 마우스를 대보면

무슨 라이브러리를 못찾는다던가 하는 엉뚱한 에러가 난다.

분명히 예전에 개발할때는 잘 되었던 프로젝트였는데..!!


이런경우 빌드를 다시하면 에러가 사라지는 경우가 많다.


정확히 나의 상황은

D드라이브에 이클립스 및 프로젝트를 저장해놓고 OS를 새로 설치한뒤 JAVA와 아파치등도 재설치했다.

이후 이클립스를 실행시켜 워크스페이스에 있는 프로젝트를 열었는데 에러가 뚜둥!!!


여러가지 효능을 보았던 방법등을 남겨둔다.

1. Project > Clean에 들어가서 새로 컴파일 할 프로젝트를 선택한뒤 OK버튼을 클릭한다.

2. 메이븐을 사용하는 경우 해당 프로젝트를 우클릭 한 뒤, Maven > Update Project...를 클릭한다.

3. 해당 프로젝트를 우클릭 한 뒤, 제일 하단에 있는 Properties를 클릭하여 설정창을 띄운다.

  중간의 Project Facets메뉴에서 Java의 Version을 맞춰준다.

4. 해당 프로젝트를 우클릭 한 뒤, 제일 하단에 있는 Properties를 클릭하여 설정창을 띄운다.

  중간의 Java Build Path메뉴에서 JRE System Library의 버전을 맞춰준다.



728x90

+ Recent posts