반응형

오늘 목표는 개발환경 설정 후 프로젝트 셋팅까지 진행하볼 예정이다.

1. 파이썬 설치

개발환경 설정? 머 없다. 파이썬으로 하기로 했으니까 파이썬 설치해주고 파이썬 IDE를 설치해주면 끝~ 먼저 파이썬을 설치해주자, 나는 파이썬 3.8버전을 사용하는데 이 글을 쓰는 시점에 확인해보니 벌써 3.9.2가 나왔더라 ㅎㅎ 머 이 프로젝트를 진행하는데 큰 차이는 없으니 그냥 받으면 된다.

비전공자들은 궁금할 수가 있다. 파이썬 설치? 그게 모야!!! 어 일단. 우리가 사용할 언어는 파이썬이다. 언어라는건 규칙이 존재하고 사용할 수 있는 단어들도 있을 것이다. 이런 언어를 내 컴퓨터에서 사용할 수 있도록 하려면 이 언어를 내 컴퓨터에 설치해줘야 한다.

우리가 영어를 배우려면, 매일 학원에 가서 영어공부하고, 안되면 유학가서 배워와야하지만 컴퓨터는 그냥 그 언어를 설치하기만 하면, 컴퓨터는 그 언어를 사용할 수 있다. 머 이정도 생각하면 된다.

https://www.python.org/downloads/

 

Download Python

The official home of the Python Programming Language

www.python.org

저 위 링크 들어가서 저 Download Python 3.9.2를 눌러주고 실행해서 설치해주자.

설치가 끝나면 시작버튼-검색-cmd 검색 후 엔터를 눌러 cmd창을 띄운 뒤 python이라고 입력해보자. 그 후 빨간 박스처럼 먼가 알아들었다는 것처럼 내용이 나오면 정상적으로 설치된 것이다.

2. PyCharm 설치

이번엔 PyCharm을 설치해야한다. 보통 파이참이라고 읽는다. 이건 멀까? IDE 라고 한다. Integrated Development Environment 라고하며 한국말로는 통합 개발 환경이다. 머 어렵게 들리는데, 어떤 컴퓨터 언어로 프로그램개발을 하기위해 코딩, 디버깅, 컴파일 등 여러 기능을 가진 프로그램이라고 알면 된다.

쉽게 말해서 우리가 요리를 하기위해서 머 칼도필요하고 오븐도 필요하고 가스도 나와야하고, 먹으려면 그릇도 있어야하고, 맛도 보려면 국자도 있어야하고 하듯이. 이런 요리라는 행위를 하는데 필요한 모든 기능이있는 곳이 주방이듯, 우리가 프로그램 개발하는데 필요한 모든기능이 있는 프로그램을 IDE라고 부르는 것이다.

보통 Java 에서는 이클립스, 인텔리제이를 많이 쓰고, C는 Visual Studio, 파이썬은 파이참을 많이 쓰는것 같다. 이처럼 언어별로 주력으로 쓰는 IDE들이 있으니 알아보고 쓰면 된다.

https://www.jetbrains.com/ko-kr/pycharm/

 

PyCharm: JetBrains가 만든 전문 개발자용 Python IDE

지능적인 코드 완성, 즉각적인 오류 검사, 빠른 수정 등 다양한 기능을 갖춘 Python 및 Django IDE입니다.

www.jetbrains.com

위 링크에 접속해서 가운데에 있는 다운로드버튼을 눌러 설치해주고 실행해주자.

프로젝트 생성

자 실행하면 위처럼 창이 나올꺼다. New Project를 눌러주자.

빨간 박스에 프로젝트 이름을 써주자, 저 프로젝트 이름은 그냥 진짜 말그대로 내 프로젝트의 이름이다. 저기 적는 글자가 프로그램 실행했을때 나오는 글자가 아니니.. 맘편하게 써도 된다.

그리고나서 다른 설정 손댈 꺼 없이 Create를 눌러주자.

그럼 virtual environment 생성이라고 한 몇십초 정도 기다린다. 머 사양에따라서 몇 분이 될 수도 있다. 가상 환경이라고 해서 파이썬은 프로젝트마다 하나의 환경을 갖는다.

그 환경마다, 설치한 라이브러리 버전이 다를 수도 있고, 설치된 환경이 제각각이다. 여러 가상환경을 준비해놓고, 원하는 환경이랑 마운트해서 실행도 가능하다. 머 이런 특성을 가지고 있다는 것만 알고 넘어가면 될 것 같다.

자 위 화면처럼 뜨면 프로젝트 생성 완료다. 간단하게 화면 구성을 보자. 1번에는 리소스 파일들이 있다. 쌩으로 새로 만든 프로젝트이기 때문에 머 복잡한게 많이 없다 ㅎㅎ 1번 박스를 보면 기본적인 코드가 적혀있는 main.py파일이 있고 venv 폴더가 있다. 이 venv폴더는 아까 위해서 말했던 가상환경 폴더이며, 앞으로 라이브러리를 설치하거나 하면 저 폴더에 설치된다고 알고 있음 된다. 머...라이브러리를 뜯어볼 것이 아니면은 저 폴더는 열어볼 일이 없다.

우린 그저 main.py만 보면 된다 . 그 main.py에 대한 코드는 2번 화면에 나와있다.

자 코드를 보면 간단하다. print_hi라는 함수가 정의되어 있고, 아래 if 문에서 __name__이 __main__이면 아까 정의했던 print_hi라는 함수를 작동시킨다. 그 함수의 인자로는 PyChamr이라는 문자열을 줬고, 다시 함수정의를 보면 그 받은 인자를 Hi와 함께 출력시키는 구조이다.

 

쉬프트+F10을 눌러서 한번 실행해보자. 하단에 보면 Hi, PyCharm을 확인 할 수 있다. 다음편에서는 자동매매 시뮬레이터 GUI화면을 만들어보자.

반응형
반응형

  자 여태까지 만들었던 프로젝트를 아마존에 배포할 시간이다.

https://extsdd.tistory.com/113

 

[Spring/eGov ] #8 이클립스에서 마리아DB 데이터 조회하기 / MyBatis / 컨트롤러 Controller / 서비스 / DAO /

https://extsdd.tistory.com/112 [Spring/eGov ] #7 스프링, 전자정부프레임워크 샘플 예제- 마이바티스(MyBatis)로 마리아 DB 연동하기 / https://extsdd.tistory.com/102 [Spring/eGov ] #6 웹 서비스 만들기 2..

extsdd.tistory.com

  여기까지 못따라온 사람은 위 글까지 마치고 오면 될 것 같다.

 

메이븐 프로젝트 / Maven

 

 

  자 지금까지 정자정부프레임워크(스프링)으로 간단한 서비스를 만들었고, 그걸 내 서버에서 돌려봤다. 서버에서 돌리기위해 이클립스상에서 Run을 누르면 JDK환경에서 실행할 수 있는 최소 실행파일만 생성되어 로컬 톰캣에 올라가는 것이지만. 이제 정식으로 내 서비스를 실제 서버에 올리려면 그 서버가 받아 들일 수 있게 만들어야한다.

 

  이게 바로 패키징 과정이라고 하며 Build라고도 부른다. 갤럭시폰을 만들기위해 삼성전자에서 액정 따로 사고, 메인보드사고, 저장장치사고 전선으로 대충 이어서 전원들어오고 작동시켜보면서 테스트는 해보자. 실제로 이런식으로 고객에게 팔지는 않는다. 그걸 다 다듬어서 플라스틱 외관에 담아 우리가 아는 핸드폰의 모양으로 만들어 고객에게 판다. 이거랑 똑같은거다. 소프트웨어도 실제로 완성을 하면 Build 과정을 통해 이걸 다른 JAVA환경에서 실행할 수 있게 만들어 줘야 하는 것이다.

 

 

 

 

 

  메이븐, 많이 들어봤을 것이다. 보통 라이브러리 관리할 메이븐 dependency를 이용해 간단하게 추가하니까 말이다. 맞다 보통 알고있다시피 메이븐이 간단하게 라이브러리 주소만 디펜던시로 걸어주면 알아서 그 라이브러리의 최신본을 따오는 기능을 수행한다. 하지만 더 중요한 기능이 있다.

 

  바로 이 프로젝트를 패키징하여 빌드하고 이 산출물을 통해 배포할 수 있는 배포 툴인건다. 메이븐 프로젝트라는 단어도 들어봤을 것이다. 혹시 그래들이라고도 들어봤나..!? 보통 메이븐과 그래들을 쌍쌍바처럼 같이 다니는걸 들어봤을텐데 이게 다 최종 산출물을 만들어주는 프레임워크의 이름인거다. 자. 결론만 말하자면 이 메이븐이라는 친구가 우리가 EC2서버에서 우리 프로젝트를 돌릴 수있도록 완성품을 만들어주는 역할이라고 생각하면 된다.

 

1. Maven Clean

 

 

 

  자 일단 처음부터 깔끔하게 시작하기 위해 Maven Clean과정을 통해 깔끔하게 없애주자. 본인 프로젝트 오른쪽마우스(1)를 누른뒤 Run As를 누르고(2) Maven clean을 눌러주자(3)

 

 

  여기서 오류나는 사람은 없을꺼고, 보통 다 빌드 성공이 뜰 것이다.

2. Maven Test

 

  자 이제 메이븐을 밀어줬으니 빌드 할 준비가 되었는지 확인하기 위해서 Maven Test를 진행해주자.

 

 

  위 설명대로 이번엔 Maven test를 눌러보자!

 

 

  짜잔~ 빌드 성공

TroubleShooting

 

 

 

  혹시나 저런식으로 JRE, JDK에 관련된 오류가 나타나면 아래 포스팅을 참조해 해결하고오자!

https://extsdd.tistory.com/122

 

[Spring/eGov] 메이븐 빌드 실패 / Failed to execute goal / Perhaps you are running on a JRE rather than a JDK

자 메이븐 빌드를 했는데 위처럼 JRE대신 JDK를 써보라는 오류가 발생했다. 원인은 간단하다. JRE로 빌드를 못한다는거다. JDK로 경로를 다시 잡아주면 된다. 1. Installed JREs 재설정 이클립스 상단 윈�

extsdd.tistory.com

  나도 저 오류가 나타났어 잠시 헤멨었다 ㅎㅎ

 

3. Maven Install

 

  자 다시 본론으로 와서, 이제 진짜 Maven 배포파일을 만들어보자!

 

 

  과정은 똑같고 빌드할 프로젝트를 눌러 Maven Install 버튼을 눌러주자..!

 

 

  그럼 글자들이 쭈루룩 지나가면서 4초만에 완성이 됐다! Build SUCESS!

4. 배포파일 확인

 

 

 

  빌드후 달라진 점이라면 target 폴더에 .war 파일이 생성됐다..! 이게 배포파일이고 이걸 톰캣 폴더에 갔다놓고 재부팅하면! 내가만든 서비스가 시작된다!

 

  저 배포파일의 위치를 잠깐 알아둬야하는데

 

 

  해당 .war 파일을 오른쪽마우스 클릭후 Properties를 눌러주자.

 

 

  저기 로케이션에 나온 경로를 복사해두던지 아님 어디 메모장 같은데 메모를 해놓는다.

5. FileZilla SFTP를 이용한 배포

 

  배포방법에는 수많은 종류가 있다. GIT으로 EC2 인스턴스에 소스를 받아서 Maven Wrapper로 그 자리에서 빌드하는 방법이 있고, 비슷하게 그래들로 하는 방법도 있고, 젠킨스 같은 툴을써서 배포를 더 쉽게하는 방법이 있지만, 나는 소스 수정이 많지 않아 가장 직관적인 방법은 FTP로 직접 배포파일을 쏘기로 했다. ㅎㅎ..

 

https://extsdd.tistory.com/121?category=853192

 

[아마존 AWS EC2] EC2 서버 FileZilla로 FTP 접속하기 / Root 계정 접속 / 파일질라 / SFTP

이제 우리가 만든 EC2 인스턴스에 FTP 접속을 시도해보자. FTP 접속 툴로는 대학교때무터 자주 썼던 파일질라로 정했다. 먼저 알아두자면 FTP란 FIle Transafer Protocol 로써 장비간 파일을 주고받는 프로

extsdd.tistory.com

  자 일단 선행되어야 할 것이 있다면, FIleZilla를 다운 및 설치 후, Root 계정으로 EC2 인스턴스에 붙는 과정을 진행해야한다. 위 포스팅을 보면 나와있으니 따라하고 오면 된다.

 

 

  자 시작해보자.

  1. 먼저 화면의 좌측이 내 실제 컴퓨터다. 저기 1번 박스에 위에서 아까 복붙해놓은 .war파일의 경로를 쳐서 찾아가던지, 디렉토리를 눌러서 찾아가던지 알아서 완성된 .war파일이 있는곳까지 가라.

 

  2. 우측화면은 EC2 인스턴스다. 본인들이 설치한 톰캣폴더의 webapps폴더까지 들어가라, 내 포스팅을 보고한 사람들은 아마 폴더를 server에 만들었을 것이다.

 

  3. 우리 컴퓨터에 있는 .war파일을 오른쪽마우스 눌러주자.

  4. 당연히 업로드 버튼을 눌러준다.

 

 

  오오... 퍼센트가 다 차서 전송이 완료되면 우측 EC2 인스턴스에서도 우리가 만든 .war파일을 볼 수 있다.

6. 톰캣 재부팅

 

  이제 톰캣 재부팅을 하면 저 .war파일을 서버가 돌리기 시작한다.

 

 

  우리 서버로 돌아가서 일단 SU 권한으로 접속후 본인들이 만들어놓은 아파치 톰캣폴더의 bin 폴더까지 이동해보자.

cd /server/apache-tomcat-8.5.55/bin

 

  나 같은 경우에는 위 주소에 톰캣을 설치해놨기 때문에 내 포스팅을 보고 온사람들은 위 명령어를 입력하면 톰캣의 bin까지 올 수 있다.

 

 

 

./shutdown.sh

 

  bin폴더까지 왔으면 위 명령어를 이용해 서버를 꺼주자.

 

 

 

./startup.sh

 

  다시 톰캣 시작명령어를 치고 톰캣이 부팅되면, 아까 넣어놨던 .war파일을 인식해 돌리게 된다.

 

7. 결과 확인

 

http://본인AWS아이피주소:8080/CP_service-1.0.0/reqUrl.do?reqParam=3

 

  위 경로를 찍어보자, 주소중 "본인AWS아이피주소" 이칸에 본인 EC2 IP주소를 넣으면 된다. 그리고 :8080은 톰캣 포트고 뒤에 CP_service-1.0.0 이란게 붙었는데 이건 우리가 만든 배포파일인 .war의 이름이기도 하다. 이거 안보이게 하는법은 나중에하도록하고 우리가 전에 만들었던 변수에따라 url을 리다이렉션 해주는 서비스가 정상적으로 작동하는지 확인하자!

 

 

  아마 위와같은 창이 뜨면 성공인거다!. 엥? 에러가발생했는데 왜 성공이야? 할 수 있지만, 이 에러는 우리가 EC2 서버에 설치한 마리아DB에 테이블이랑 데이터를 넣지 않아서 그런거다. 일단 저 화면이 나오는거 자체만으로 WAS는 문제 없이 돌고있다는 것이다. 왜냐하면 내가 만든 reqUrl.do라는 요청에 어떻게든 반응은 나타내고 있으니까! 오늘은 여기까지하고, 다음에 한번 마리아 DB에 값을 넣고, 테스트해보도록 하자.

 

#AWS #EC2 #스프링 #전자정부프레임워크 #메이븐 #프로젝트 #배포 #파일질라 #Maven #Filezilla #Build #install #빌드 #인스톨

 

반응형
  1. 찰도마도 2021.11.05 06:46

    많은 도움 되었습니다. 정말 감사합니다.

반응형

 

  자. 저번에 GIT 저장소에 내 메인 프로젝트 소스들을 Commit해놓고, 로컬환경에서 MariaDB와 MYBATIS를 연동하기 위해 이것저건 해놓느라고 로컬 소스변경이 많았다. 이제 방법은 알아냈고 그 포스팅을 하기위해서 초기 버전으로 돌려야하는데, 전에 로컬 저장소에 올려놨던 소스들을 불러와서 복원해보자!

 

 

  전에 설명했던 GIT의 구조 사진이다. PC -> 로컬 저장소(내 컴퓨터) -> 원격저장소(GITHUB) 순으로 소스들이 올라오는데 여기서 과거버전으로 복구하는건 로컬에서있는 소스를 내 PC로 가져오는 것이다.

 

 

 

  이 소스들이 지금 내 PC의 GIT 로컬 저장소 경로에 있다. 이걸 한번 이클립스로 복원해보자!

 

 

1. 이전 버전으로 복구

 

 

 

  자 복원하려는 프로젝트를 오른쪽마우스 클릭해주고 Team 메뉴에 들어가주자, 그리고 Synchronize workspace 버튼을 눌러주자

 

 

  동기화 관점으로 바꿀꺼냐고 묻는데 알겠다고 해주자!

 

 

  좌측 Synchronize 탭에서 프로젝트명을 오른쪽마우스 클릭해주고 Overwrite를 눌러주자.

 

 

  진짜냐는 질문에 알겠다고 해주자.

 

 

  그럼 Local 저장소에 있는 초기상태로 프로젝트가 복원되기 때문에 바뀐 내용이 없다고 나온다. 왜냐면 지금 프로젝트의 상태는 Local저장소와 완전히 동일하기 때문이다. 추가된 파일들도 없어졌고, 없어진 파일도 복구됐고 소스수정이 일어난 부분도 모두 Local저장소 기준으로 돌아온거다.

 

 

  1시방향에 있는 관점 선택창에서 다시 자바 관점으로 돌아가보자

 

 

 

  모든 소스들이 다시 로컬저장소 기준으로 돌아갔다. 만들고 없애고 개판친 파일들도 다 없어졌다. 아마 이상태에서 서버를 Run하면 오류가 생길것이다. 이미 Target폴더에 전껄로 생성된게 있어서. 이럴땐 프로젝트를 Clean해주고 진행하자.

2. 프로젝트 Clean (완전 새로 빌드)

 

  Project Clean 기능은 이미 만들어진 target 파일 등 이미 만들어진 잡파일들을 다 삭제해줌으로써 프로젝트 빌드시 예전자료 대충가져와서 만드는게 아닌, 진짜 내가 가진 파일들로 빌드 할 수 있게된다.

 

 

  자 Clean 하려는 프로젝트를 선택하고(1) 상단에 Project(2) 메뉴를 누른 뒤 Clean(3) 버튼을 눌러주자

 

 

  저기 Clean all Projects 가 체크되어 있기 때문에 모든 프로젝트가 정리된다. 머 풀고 밑에서 하나씩 골라줘도 되는데 플젝이 몇개없고 가벼운 플젝이니 그냥 Clean을 해준다.

 

 

  5시 방향 구석을 보면 Clean이 진행되는게 보인다. 저기에 뭐 뜨는게 다 없어지면 Clean이 완료된 것이다.

 

3. 서버 Run을 통해 이전 버전 확인.

 

  Project Clean이 완료되면 한번 서버를 Run 해보자. 아마 기대하는 과거 버전으로 실행이 될 것이다. 이걸로 저장소에 있는 버전으로 되돌리기 성공~

 

 

 

 

#GIT #깃 #GITHUB #깃허브 #이클립스 #로컬저장소 #버전 #복원하기 #되돌리기 #복구하기 #스프링 #프로젝트

 

반응형
반응형

 

https://extsdd.tistory.com/108

 

[GIT/GITHUB] #3 깃허브 - 이클립스 스프링 저장소 연동 / 원격 저장소

https://extsdd.tistory.com/107 [GIT/GITHUB] #2 깃허브 회원가입 / 로컬 저장소 - 원격 저장소 연동 / Git 시작하기 / 소스 전송 https://github.com/ Build software better, together GitHub is where people..

extsdd.tistory.com

 


  저번 시간에 내 깃허브랑 이클립스랑 연동도 해놨으니, 이번엔 내 이클립스 소스를 내 깃허브에 올려보자! 만약 연동이 안됐다면 위 링크된 포스팅을 참조해서 만들어놓자!

1. 프로젝트 로컬 저장소 Commit

 

 

 

  자 깃허브로 올릴 프로젝트를 오른쪽마우스 누르고 Team 메뉴로가 Share Project.. 버튼을 눌러주자!

 

 

  저장소 타입을 Git으로 설정하고 다음!

 

 

  저장소가 처음에 비어져있는데(1번 위에박스) 그거 누르면 아래에 내가 추가했던 git 저장소가 나온다 클릭해주고 Finish를 눌러주자!

 

 

 

  패키지 익스플로어를 보면 프로젝트명 옆에 GIT 명칭이 추가됐으면 성공한 것이다. 방금 로컬 저장소에 배포한 것임으로 내 로컬 저장소에가면 내 소스들이 통째로 만들어져있는걸 확인할 수 있다.

2. 프로젝트 원격 저장소 commit

 

 

전송중...

 

자 프로젝트를 오른쪽마우스 클릭해주고 Team메뉴에 마우스를 대보면 새로운 메뉴들이 생긴것을 볼 수 있다. 맨위에 Commit을 눌러주자

 

 

  어떤 파일들을 올릴꺼냐고 뜨는데 첫 Commit이니 전체파일을 올려줄꺼다. 저 1번 박스에있는 +가 겹친 아이콘을 눌러주자!

 

 

  그럼 파일들이 1번으로 넘어오게 된다. 2번을 보면 이 commit하는 소스들이 어떤 기능을 하기 위해 commit하는지 주석처럼 자유롭게 서술하는 부분이다. 나는 걍 첫 commit이니 할말 없어서 Test라고 적었다. 그리고 저기 날짜와 작성자를 같이 써놓으면 나중에 찾기 편하다.

 

  3번은 작성자와 배포자인데 누가 한건지 설명을 써주는 부분이다. 마지막으로 4번을 보면 그 옆에 Commit이 있고 Commit and Push가 있는데 차이점을 알아보자.

 

  - Commit : 로컬 저장소에 반영

  - Push : 원격 저장소에 반영

 

 즉 Commit and Push는 로컬에도 반영하고 그걸 원격에도 반영하겠다는 All in 1 버튼인거다. 우린 서버까지 올릴꺼기 때문에 4번 버튼을 눌러주자!

 

 

  기다리면 뭐 Push가 완료됐다는 메시지가 뜬다. 한번 원격서버를 보자.

 

 

  짜잔 내 프로젝트가 정상적으로 GITHUB에 올라왔고 아까 적었던 주석 메시지도 정상적으로 들어왔당 ㅎㅎ

 

 

  이 로컬 저장소에있던 파일들을 그대로 원격 저장소로 보낸 것이다.

 

  이제 내 소스들도 서버에 백업시켜 놓았으니, 뭔가 하다가 안될때 예전으로 되돌리기 수월해졌다. 내일 아침부터 다시 MariaDB연결을 시작해보자!

 

#GIT #깃허브 #GITHUB #이클립스 #프로젝트 #원격 #로컬 #저장소 #올리기 #커밋 #commit

 

 

 

반응형
반응형

 

https://extsdd.tistory.com/107

 

[GIT/GITHUB] #2 깃허브 회원가입 / 로컬 저장소 - 원격 저장소 연동 / Git 시작하기 / 소스 전송

https://github.com/ Build software better, together GitHub is where people build software. More than 50 million people use GitHub to discover, fork, and contribute to over 100 million projects. gith..

extsdd.tistory.com

  자 우리가 저번시간까지 회원가입부터 GIT 로컬저장소를 만들고 GITHUB 원격 저장소도 만들고 그 두 저장소를 연동하는 작업까지 완료했다. 이번에는 저 원격저장소랑 우리 이클립스 폴더하고 연동을 해보자!

1. 이클립스 - GIT 연동

 

 

 

  이클립스 창 1시 구석을 보면 검색창이 있는데 거기 "GIT"을 입력하고 검색해보자. 그럼 쭈르륵 뜨는데 2번 박스에 있는 Git repositories 버튼을 눌러주자.

 

 

  하단에 보면 깃 저장소 탭이 떳당(1)..!! 이미 우린 원격 저장소를 만들어 놨기 때문에 2번 버튼을 누른다!

 

 

  Browse 버튼을 눌러 전에 생성했던 로컬 저장소의 .git파일까지 경로를 잡아준다. 그럼 인식된 git이 2번에 나타나는데 체크해주고 Add(3) 를 눌러주자.

2. 완성

 

 

 

GIT 저장소 탭을 보면 추가된 것을 알 수 있다 ^_^

 

 

#GIT #GITHUB #깃 #깃허브 #이클립스 #스프링 #저장소 #연동 #불러오기 #프로젝트

 

반응형
반응형

 

https://extsdd.tistory.com/99

 

[Spring/eGov] #3 스프링 기본 구조 / Sample 예제 프로젝트 분석 / 원리 / 전자정부프레임워크 / 컨트롤�

 

extsdd.tistory.com

 

  저번시간에 기본적인 스프링 프로젝트가 어떤식으로 돌아가는지 알아보았다. 막판에 카페 닫을시간이 되서 급히 마무리한 감이있는데, 오늘도 열심히 진도를 빼보자!

 

  오늘 해볼일은 바로 전자정부 예제로 들어있는 Sample 예제 프로젝트를 내 프로젝트로 바꿔보려고 한다. 이게 무슨말이냐고!? 자 우리가 셈플 프로젝트를 생성하면 패키지 디렉토리의 이름들이 egovframework.example 로 되어있고, 이름들이 sample 머시기로 되어있으니까 아무리 생각해도 간지가 안난다. 내 프로젝트는 따로 이름이 있다고!!

 

  그럼 아예 너껄로 새로 만들면 되잖아 ㅡㅡ! 라고 생각할 수 있지만... 그건 ..싫다.. 왜냐하면.. 기본예제에 셋팅이 너무 잘되어 있기 때문이다... DB를 읽어오는 MYBATIS, IBATIS등.. 이미 유용한 라이브러리들도 연동이 되어있기 떄문에 아예 깡통에서 시작해서 이것들을 추가하느니 그냥 샘플 예제의 이름만 내껄로 바꾸는게 이득이라고 판단했기 때문이다. 그럼 시작해보자

 

1. 패키지 디렉토리 수정

 

 

 

 

  자 먼저 패키지 익스플로어에서 1번 화살표를누르고 2번 package Presentation 버튼을 눌러준다. 나는 보통 하이어라키 타입을 쓰는데 디렉토리 수정을 위해서 Flat으로 바꿔주자!

 

 

 

  자 우리가 바꿀 패키지들은 1번 박스에 있는 총 5개를 바꿔야 한다. 보면 알겠지만 egovframework.example 이부분이 기본 예제이름으로 박힌 것 같고 나머지 cmmn 은 공통기능이니까 놔두고 sample은 샘플 기능으로 넣은것이니 저 패키지 명도 바꿔주도록 하자!

 

  - egoveframework.example → cpservice (자기 프로젝트 이름)

  - egoveframework.example.sample → fwd (기능 집합 이름) (fwd = forwarding 기능들의 집합)

 

  나는 저렇게 바꾸려고 한다. 내가 시험으로 만들 서비스 이름은 내 서버로 요청이 들어오면 그걸 다른 인터넷 URL로 포워딩 해주는 기능이기 때문이다. 바꿀 명칭은 3번 박스에 넣고 4번 OK를 눌러 명칭들을 바꿔주자 5개 다 바꿔주면 된다.

 

 

  짜잔~ 바꾸면 이렇게 될 것이다 ㅎㅎ

 

2. base-package 명 변경

 

  자. 이제 두번째로 할 것은 바로 base package명을 바꿔주는 것이다. 이게머냐면, 어떤 패키지 디렉토리들에서 컨트롤러 파일들을 읽어올 것이냐는 것이다 ! 이해가 됐으려나..!? 어려운건 없어보이는데..? 말로만 하면 모르니 파일을 보면서 다시보자

 

  먼저 알아야할게 있다. 앞으로 가장 많이 쓸 단축키인데 우리 프로젝트 소스상 특정 텍스트를 검색하는 기능이다.

파일 검색 : Ctrl+ H

 

 

 

  자 컨트롤키와 H를 눌러보자. 위 창이 뜨는데 1번에 파일 서치 탭에 들어가보자. 아마 처음 하시는 분들은 여러가지 탭이 뜰텐데 나는 나머지 탭은 많이 안써서 다 꺼놓은 상태이다. 아무튼 File Search탭에 들어가고 2번에는 검색할 스트링을 입력하는 공간이다. 그리고 3번은 확장자인데 *이 입력되어있으면 전체라는 뜻이다. 머 화면단에서만 찾고싶으면 *.js, *.jsp, *.html 등으로 검색하는 확장자를 제한할 수 있다. 우린 소스 규모가 크지 않으니 걍 *로 둬도된다. 나중에 검색 시간이 너무오래걸리면 줄여주도록하고, 마지막 4번을 누르면 검색된당. 검색해보자!

<context:component

  위 텍스트를 복사해서 2번 항목에 넣고 검색을 돌려보자

 

 

  뚜둔! 하단을 보면 검색 결과가 나왔다! 1번 박스를 보니 프로젝트 내에서 모두 2건이 검색됐당!! 2번 박스를 눌러 다 펼쳐보자. 그럼 context-common.xml과 dispatcher-servlet.xml 두파일에서 해당 텍스트가 발견됐다. 두 파일 모두 바꿔줘야하는데 먼저 3-1을 더블 클릭 해보자.

 

 

  처음 열어보면 base-package가 egovframework만 있을텐데 그 앞에 아까 자기가 정했던 패키지 이름을 추가해주고 쉼표를 찍어준다. 나는 패키지 이름의 맨 앞을 cpservice라고 변경했기때문에 cpservice, 을 삽입했다. 그리고 컨트롤+S를 눌러 저장해준다.

 

  이 문서에는 프로젝트에서 공통으로 사용하는 기능들을 객체로 만들어 놓는 곳인데, 그중에 컨트롤러를 긁어오는 친구도 저 우리가 바꾼 beans 에 설정을 해놓기 때문에 바꾸는 것이다. beans이란 일단 간단하게 객체정도로 알고 있으면 된다.

 

 

  자 다시 나머지 하나 3-2번 박스를 더블클릭 눌러 dispatcher-servlet.xml을 열어준다. 수정하는 방법은 똑같아. 자신 패키지, 을 추가해준다.

 

  이 dispatcher-servlet.xml은 사용자의 요청이 들어왔을때 이걸 어떤놈한테 떤져줄지에대한 정보를 정의해 놓는곳이라, 여기에도 우리의 새로운 패키지를 인식시켜놔야 그 패키지의 컨트롤러를 인식한다.

3. 참조 패키지 디렉토리명 일괄 변경

 

자. 큰 설정은 끝났는데, 이미 소스코드상에서 기존에 있던 패키지명을 참조하는 부분도 있을것 아닌가? 그부분을 한방에 바꿔주기 위해서 서치기능인 컨트롤+H버튼을 눌러보자!

egovframework.example.sample

 

  자 위에 검색어를 입력하고 2번 박스에 있는 Replace를 눌러보자! 그럼 창이 또 뜨는데 With칸에 아까 우리가 위에서 변경했던 패키지 명을 참조해 자신 프로젝트명.기능명으로 바꿔보자!

 

 

egovframework.example

 

  이번엔 이거를 바꾸자 이건 프로젝트명으로만 바꾸면된다. 참고로 위에 바꾼거하고 순서가 바뀌면 안된다!

4.확인

 

 

 

  자 서버를 실행시켜야 하는데, 뭐 저번에 잘 따라왔다면 잘 알겠지만 까먹었을 분들을 위해서 새로 캡쳐해왔다. 하단에 서버탭에 들어가 실행하려는 서버를 클릭하고 재생버튼을 누르면 된다.

 

 

  그럼 Console들이 이렇게 쭉 찍히고 다 완료되면 하단에 빨간줄이 몇줄 찍힌다. 그리고 서버탭에 톰캣의 상태가 Started상태로 변하기도한다. 서버 부팅을 완료했으면 자기 로컬 서버에 들어가보자.

 

http://localhost:8080

 

접속!

 

 

 

  이상 없이 빌드된 것을 볼 수 있다. ㅎㅎ다음시간엔 진짜 기능을 만들어보도록 하자!

 

#스프링 #Spring #전자정부프레임워크 #기본예제 #Sample #프로젝트 #이름 #패키지 #바꾸기 #파일 찾기 #샘플

 

 

 

반응형
  1. 쿠거 2020.12.02 09:16

    안녕하세요. 선생님의 포스팅을 보고 웹프로젝트를 실습하고 있는데요.

    [Spring/eGov] #4 스프링 Sample 기본 예제 프로젝트, 패키지 이름 바꾸기 / 파일 찾기
    3. 참조 패키지 디렉토리명 일괄 변경 부분이 그림/내용 등 뭔가 빠진듯 합니다.
    포스팅과 똑같이 cpservice로 그대로 따라 했습니다.
    컨트롤+H 로 egovframework.example 서치시 8개정도가 나오는데 포스팅 자료는 1개 나오고
    그리고
    egovframework.example.sample => 프로젝트명.기능명
    egovframework.example => 프로젝트명
    위의 두가지도 우측 replace 할 값을 cpservice 기준으로 명시 부탁 드립니다.
    상단의 5개 패키지명 수정시 처럼...
    암튼 감사히 잘 공부하고 있습니다만 수정 부탁 드립니다.
    수정후 가능하시면 LNIJHOR@hanmail.net 으로 회신한번 주시면 감사하겠습니다.
    금번 실습 프로젝트를 기본으로 ajax, jquery 등등 살을 붙여가면서 실습 예정입니다.

    • 동글 2020.12.30 16:38

      저도 맨처음에 그대로 했다가 안되서 서치된 8개 항목들 하나하나 고쳤는데 패키지명 똑같이 하셨으면 egovfreamework.sample까지 지우시고cpservice.fwd 붙여넣으면 되더라구여

    • WJ.Lee 2021.11.23 16:18 신고

      저 부분을 보면서 실수할 수 있겠구나... 라고 생각했습니다.
      위에서 수정한 것 처럼
      egovframework.example.sample
      => cpservice.fwd

      egovframework.example
      => cpservice

      로 replace 하시면 됩니다.

  2. 저는 2021.12.24 12:12

    저는 cpservice.sample 이런식으로 되어있어서 cpservice.fwd로 바꿔주니깐 되네요

반응형

 

https://extsdd.tistory.com/98

 

[Spring/eGov] #2 아파치 톰캣 설치 및 스프링 프로젝트 연동 / 셈플 예제 / WAS 구동 / 이클립스-톰캣 ��

저번시간까지 스프링 예제에 대해서 알아보았다. 이젠 이걸 실제로 구동을 시켜야 함으로 아파치 톰캣 8.0 위에 올릴 예정이다. 혹여나 아직도 아파치 톰캣에대한 개념이 잡히지 않았다면 https://

extsdd.tistory.com

 

  자 우리가 저번시간까지 전자정부프레임워크에서 만들어놓은 기본 예제를 실행시켰다. 일단. 이프로젝트가 저번에 실행시켜서 보아하니 간단한 게시판 웹 페이지를 구현해 놓은 것같다.

 

  이제 우리가 웹 서비스를 만들꺼니 당연히 구조를 알아야한다. 하지만 나도 어릴때부터 컴퓨터를 공부했지만, 아무것도 모르는 노베이스 상태에서 컴퓨터 전문가들이 하는 클래스니 객체니, VO니 DAO니 MVC니 이런 개념들 글로만 읽어봤자 아무소용이 없었다. 귀에 하나도 안들어오다가 결국 이해하게된 시점은 내가 직점 해보고 만들어보면서다. 작은 기능단위의 개념을 이해하면서 점차 넓혀 나가는 방식이 프로그래밍을 이해하는데 좋다.

 

  나는 비전공자들도 웹 서비스를 이해할 수 있는 것이 목적이기 때문에 MVC니 이런 큰 개념보다는 당장 눈에 보이는 것들 위주로 설명을 할 예정이다. 나도 처음 프로젝트를 생성했을때 아니 빈 깡통 만들었는데 무슨 파일이 이렇게 많고... 한파일에 수백, 수천줄이 이미 코딩되어있고.. 이 것들이 다 뭘 의미하는지 몰라서 자괴감을 느꼈었다. 하지만 이번부턴 그런거 느낄 시간도 없이 빠르게 진행해보자.

 

 

  Look! 봐라 일단 좌측 프로젝트 익스플로어 창에 내 프로젝트를 보자. 이미 호기심 많은 분들은 이것저것 디렉토리를 눌러보며 수많은 파일을 보며 한숨을 쉬엇테지만. 저것들 다 나중에 알아도 되는 것들이다. 이미 날고 기는 개발자들이 수많은 고민을 거쳐 만들어 놓은 파일이니. 우리가 뭐 이건 어떻고 저건 어떻고 할 시간조차 필요가 없다. 그분들을 믿고 우린 우리할껄 하자.

 

  자 아무것도 만지지말고 1번 폴더를 눌러서 그 하위 폴더를 다 펼쳐주자. 다만 저 사진에나온 cmm 폴더는 열어볼 필요 없다. 왜냐? cmm이 common 즉 "공통"의 약어이다. 저기 폴더는 우리 프로젝트에서 공통적으로 쓰이는 기능들을 구현해 놓은 이다. 공통 기능..! 자 이름만 들어도 살짝 만들기 어려운게 느껴지지 않나..? 지금 우린 한개기능 만드는것도 힘든데 서비스 전체에서 작동시킬 공통적인 기능들을 집대성한 공통기능..! 맞다. 이것도 위 문단에서 말했다시피 잘하시는 분들이 다 구현해 놓았다 ^-^ 열어보지도 말고 그냥 일단 넘어가자

 

  궁금한 사람들을 위해 간단하게 설명해주자면 프로젝트에 있는 모든 컨트롤러에 전역으로 적용되는 initBind를 정의하거나, 예외상황이 생겼을때 어떻게 할지를 전역으로 설정하거나, 게시판같이 페이지를 넘어가는 기능등 cmm 즉 공통기능답게 서비스 "전체"에 적용되는 부분을 관장한다. 여긴 몰라도 된다. 나중에 코드를 볼 줄 알면 쓱 읽으면 알게 되니까!

 

  자 이제 겁먹지 말라고 3개 문단에 나눠서 말했으니 이제 본격적으로 예제를 분석해보자. 2번 박스에 있는 EgovSampleController.java를 보자!

 

 

Camel 표기법

 

  자 일단 대소문자가 섞여잇는데 대문자가 나올때마다 띄어쓰기라고 생각하면 된다. Egov Sample Controller.java 라고 생각하면된다. 파일명이나 변수명에 띄어쓰기가 안되는데, 그냥 소문자로만 이어쓰면 Egovsamplecontroller.java 로..사실 단어 단위로 구분해낼 수가없어 암호문이 되버린다. 그래서 띄어쓰기를 표현하기위해 띄어쓰기마다 첫글자를 대문자로 작성한다. 이 표기법을 낙타 등에 혹처럼 들어갔다 나왔다 반복한다해서 Camel 표기법이라도 한다.

 

EgovSampleController.java

 

 

  자 일단 읽어보자. Egov는 이거 전자정부프레임워크의 앞글자를 딴거고 Sample은 우리가 만든 샘플 예제정도 되는거 같고. Controller..! 대박 Cmm 패키지 폴더에는 어려운 글자들만 보이다가 여기와보니 컨트롤러라는 아는 단어가 있다! 살짝 자신감이 생긴다. 컨트롤러..? 뭔가 조작을 하는가보네..?

 

 

  속한 패키지 디렉토리 이름부터 봐라. web이다.. 맞다 여기가 제일 중심이다. 뭔가 처리해주고 판단해주고 두뇌같은 역할을 한다. 이 간단한 프로젝트에 사용자들이 요청하는 기능들에 대해서 어떻게 수행하면 되는지가 요기 정의된다.

 

  앞으로 사용자가 요청이 들어왔을때 그 요청을 어떻게 처리하라!! 라고 정의하는 곳을 Controller라고 부를 것이다. 여기서 Controller에대한 개념을 조금 알고 가길 바란다.

컨트롤러(Controller)란 무엇인가.

 

 

 

  컨트롤러는 하나만 있는건 아니고 큰 기능 단위로 있다. 우린 예제 프로젝트라 걍 뭐..걍 컨트롤러라고 부르기 간지가 안나니까 Sample이라고 이름이라도 붙혀서 뭔가.. 아..컴퓨터는 Sample이란 단어 잘 안쓰는데 ㅎㅎ... 이거 사람이 만든거구나.. 인간적인 냄새라도 나라고해서 EgovSampleController지만 실제 스프링 프로젝트들을 보면 위와 같이 킨 기능 단위로 컨트롤러를 만든다.

 

  예약 조회, 삽입, 삭제, 수정 등 예약에 관한 모든것은 예약 Controller가 관리하고 그 파일에 다 명시를 하는거다. (물론 한글명으로 Controller를 만들지는 않고 뭐 RsmController.java 정도로 만든다). 또 고객에 대한 모든 기능은 고객 Controller에 담아둔다. 자이제 Controller에 대한 개념은 잡혔을 것이다. 말 그대로 기능이 어떻게 작동할지 조작을 제어하는 곳 정도로 생각하면 된다.

 

 

 

  그럼 service에 있는 애들은 머야 ㅡㅡ 서비스..? 뭔가 코딩이 아니어도 현실세계에서 서비스라고 하면 뭔가 보이지 않는 무엇을 해주는..? 이정도로 알고있을텐데 맞다 . 여기 서비스에 있는 파일들은 저기 web 패키지에 Controller가 일 할 수 있도록 도와주는 쩌리들이 모여있다. 많이 드러나지는 않아서 활약이 크게는 안느껴지는 친구들이다. 바로 서비스부터 들어가면 어려우니까 Controller의 코드부터 분석해보자!

 

 

 

  1. 자 package 머시기라고 써져있다. 여기 볼꺼없다. 그냥 이 파일이 속해있는 패키디 디렉토리 경로라고 보면 된다. 우측 패키지 익스플로어를 보면 저 경로에 파일이 위치해 있는 것을 알 수 있다. 민증 깠을때 내 집주소가 찍혀있듯이, 저 맨위에 이파일의 주속다 찍혀있는 것이다. 그렇다. package는 코딩계의 민증이라고 보면 된다. 자. 첫 번째줄은 큰 어려움 없이 통과했다. 히힣..

 

  2. import라고 써져있다. 와우! 짧다.! 하지만 좌측 +버튼을 눌러보자. 와우. x 됐다. import는 컴퓨터 좀 깔짝거리면서 프로그램 몇개 만져보면 많이 봐왔어서 익숙한데.. 밑에보니 무슨 Pagination, fdl, prt, VO..갑자기 어려운게 생겨버렸다.

 

  겁먹을거 없다. 처음부터 차근차근 이해해보자. 자 우리가 제일 자신있는 단어 import!! 맞다. 뭔가 넣어주는 거다 우리의 이 컨트롤러에(EgovSampleController.java). 근데 뭘 넣냐구..? 기능에 필요한 파일들을 넣어주는 것이다. 다시 또 묻는다. 아니 그니깐..! 뭘..! 왜 넣냐구! 한다면.. 뭐 더이상 할말이 없다.. 왜냐면.. 진짜 기능에 필요한걸 넣어주는거니까.. 하지만 나는 raw한 표현을 잘 하니 노베이스 기준으로 또 설명을 해보겠다.

 

  자.. 우리가 기능을 만들면서 숫자를 반올림하고 반내림 하는 기능이 필요하다고 가정해보자. 자 1.9를 반올림 하라하면 어떻게 할 것인가. 우린 인간이니까 그냥 딱 바로 2잖아! 하지만 컴퓨터는 그런걸 모른다. 어떻게 구현할 것인가. 반올림을 하는 인간의 사고를 그대로 컴퓨터가 이해할 수 있도록 시간을 들여 번역을 할 것인가..? 아니다. 그럴 필요가 없다.

 

  애초에 첫 포스팅부터 썻던 프레임워크가 뭔지 이해햐면된다. 우리가 프로젝트를 쉽고 빠르게 만들 수 있게 만드는 툴! 맞다. 우리가 원하는 고차원적인 예를들어 고객을 조회해 포인트를 차감하는 이런 구체적인 기능단위는 대부분의 사람들의 프로젝트에는 사용하지 않는기능이지만, 저 반올림이라는 아주 원초적인 기능은 대부분의 프로젝트에서 요구되는 기능일 것이다. 아주 기초적인 것이니까. 프레임워크란 이런 기초적인 기능들을 모아놓고 빠르게 조합해서 쓰라는 것이다.

 

  즉, 저렇게 많이쓰는 함수들은 이미 이 전자정부프레임워크라는 작업대에 다 포함되어 있는 것이고. 저 import 뒤에 나오는 경로는 그 경로에 있는 파일에 있는 기능들을 여기서도 사용하겠다!의 이미라고 보면된다.

 

  이미 import된 친구들은 이 서비스를 돌리기위해 이미 추가되어있는 것이니 손댈꺼 없다. 아~ 그냥 이 컨트롤러를 돌리는데 이런친구들을 활용하는구나~ 생각하면 된다. 다음으로 넘어가자

주석

 

 

 

  와우 씌엣..! x 됐다..! 코딩도 아닌 그냥 평문이 써져있잖아..! 20세기 코딩법인가..? 아니면 22세기 코딩법인가..? 아니다 놀라지 않아도 된다. 저건 주석이라고 한다. 뭐냐면 코드 중간중간 이코드가 무엇인지 써놓는 낙서장 같은 역할이다. 사용하는법은 이렇다 코드에 // 을 붙이면 그 뒷줄은 컴퓨터가 인식하지 못한다. 하지만 100줄을 주석처리할려면 //을 100번을 쳐야할까..? 아니다 그 그 100줄을 앞뒤로 /** 내용 ㅎㅎ **/로 감싸면 그 사이를 모두 인식 못하게 된다.

 

  저 주석을보면 저 코드가 2009년에 수정되었나보다... 아니 2019년 오타아냐?ㅡㅡ 할 수 있지만.. 2009년이면 양호한거다.. 어떤코드를 보면 2003년 주석도있고.. 그 당시 개발자의 욕..애환들도 써져있기도 하다.. 아..이거 왜 안돼.. 집에 언제가.. . 이런게 써져있는걸 처음 봤을때 잘못본줄 알았던게 생각난다..ㅋㅋ 마치 디지털 동굴 벽화를 본 느낌.. 저 주석은 읽고 이해되면 그런가보다하고 이해못하면 걍 넘어가자 ㅎㅎ

 

 

 

  1. 자 @가 붙어있다. Annotaion(어노테이션)이라고 하는데 앞으로 이 골뱅이의 의미는 "얜! 이런 성격을 가지고 있어!"라고 알려주는 거다. 즉, 이 데이터가 어떤 데이터인지 설명해주는 데이터라고 보면된다. @뒤에 Controller라고 써져 있으니. 미 밑줄 public class EgovSampleController 라는 친구는 "Controller"라는 친구야!! 라고 설명을 해주는 것이다. 이건 컴퓨터가 소스코드를 읽어올때 먼저 어노테이션부터 읽어놓고 이놈에 필요한 정보들을 미리 준비한다. 그럼 또 Controller라고? 그게 먼데? 라고 또 묻는다면 위를 다시 읽어보면 된다. 내가 계속 말한 컨트롤러에 대한 설명을 저 @Controller 라는 한줄로 컴퓨터는 아하!!! 하고 알아듣는다.

 

  2. public class EgovSampleController 이부분을 보자. 이건 java에대한 기본 지식이 있으면 저 public calss의 의미는 알것이고 비전공자분들은 저거 크게 신경 안써도 된다. 학교에서 시험볼때나 저거만지지 스프링 프로젝트 하다보면 거의 만지는일은 없다.. EgovSampleController는 이 컨트롤러의 이름이다. 이건 좌측 패키지 익스플로어에 나오는 파일명과 일치해야한다. 자 2번까지도 별거 없다. 3번으로 가자

 

 

  3. 자 이제 좀 코드다운게 나왔다. 쫄지말자 일단 첫줄 /** EgovSampleService **/ 이건 위에 말했다시피 주석이다. 밑에있는 내용이 EgovSampleService라는 친구에요 ^-^하고 알려주는 것이다. 자그럼 두번째줄 @Resource(name = "sampleService") 어..! 이거 살짝은 알아 들을 수 있을꺼 같은데..!? 그렇다 @Resource가 붙어있으니 아래 나오는 private EgovSampleService는 Resource라는 형태로 되어있는놈이다!! 이렇게 해석하면된다. 저기 name = "sampleSerivce"라고 되어있는데 짐작이 가지 않는가..? 맞다 그 Resource의 이름은 sampleService라는 놈이고 그놈이랑 연결을 시킨다라는 의미다.

 

  좀 더 나아가자면 웹 서비스가 처음 구동될때 생성된 POJO라고 불리는 함수나 상속, 구현이 없이 순수히 데이터만 가진 객체를 생성하는데 물론 그 데이터마다 name이 있다. 그 당시 만들어진것을 지금 저 Controller가 지금 매칭을 시키는 것이다. 시작하면서 만들었던 그 객체!! 우리가 지금 써야해!! 하고 Resource 어노테이션을 이용해서 연결시키는 것이다.

 

  다음줄을 보면 private EgovSampleService sampleService라고 되어있다. 자 이건 자료의 형이 EgovSampleService이면서 여기서 사용할 이름은 sampleService라고 선언하는 것이다. 물론 이 객체는 위에 Resource 어노테이션을 이용해 연결된 smapleService라는 객체의 데이터를 받았다고 생각하면 된다.

 

서비스(Service)란 무엇인가

 

  자.. 위에서 본 3번 박스.. 요약하자면 지금 sample이란 이름의 service를 데리고 온거나! 컨트롤러에! 그게 뭐냐면 앞으로 컨트롤러 내부에서 sample에서 정의된 모든 기능들을 쓸 수 있다는 얘기!! 자.. 여기서 뭔 소린가 멘탈나간 사람들을 위해서 그림으로 정리해봤다.

 

 

 

  자 .. 이상하긴 하겠지만 군대에 이걸 대입해보자. 자 컨트롤러란 공통된 기능들의 집합인데 이걸 군대로 치면 통신부대, 전차부대, 포병부대, 공병부대 이렇게 각 역할들로 묶인 집단으로 생각할 수 있다. 사용자들이 웹 페이지에 요청을 어떻게 처리할지 Controller에 정의하듯이, 통신부대도 상급부대에서 명령이 내려오면 어떻게 할지는 통신부대 내부에서 처리한다.

 

  자! 다시 부대얘기로 돌아와서 사령부에서 "지금 A~B구간의 통신망 개통이 가능하니?" 라는 요청을 한다면 이 통신부대에서는 요청을 처리해야할 것 아닌가? 그럼 요청은 어떻게 처리할까? 그냥 부대원들 모여서 야 ㅎㅎ 개통 가능할까..? ㅎㅎ 투표할까..? 아님 발표하고싶은사람있어..? ㅎㅎ 이렇게 오합지졸로 결론을 도출할까? 아니다.

 

  그 통신부대에는 운용과장이 전술,전략에대해 판단하고, 군수과장은 출동에 가용한 차량은 몇대나 되는지, 식수는 몇명인지 등 각 역할별로 본인들의 "기능"들이 있을 것이다.

 

  더 세부적으로 들어가면 운용과장은 1. 지형을 판단하여 통신망 개통이 가능한지의 판단. 2. 적의 예상 침투로를 판단, 3. 지형과 기상을 판단 등 여러가지 판단을 내릴 수 있고 이건 인사과장이나 군수과장의 임무가 아니고 운용과장만이 주로 해야하는 일종의 기능들인 것이다.

 

  이제 좀 감이 잡혔는지 모르겠다. 즉 서비스라는 것은 특정 기능들을 하기위해 필요한 객체들을 불러와 놓은것이다. 서비스 이름이 SampleService라고 해놔서 샘플 기능을해..? ㅡㅡ 라고 좀 이해가 안된다 생각할 수도 있지만.. 머 마땅히 붙힐 이름이 없어서 저렇게 붙혔을 것이다.. 샘플 프로젝트라 머..아무 기능이 없는데 뭔서비스라고 지어 ㅡㅡ 라고 생각해서 아마 그냥 프로젝트의 이름을 따와서 SampleService라고 지어놨을 것이다.

 

 

 

  자 그럼 어떤 서비스들을 꺼내놨는지 보자.

 

 

  1. sampleService란다. 이건 우리가 예제로 만들어져 있는 서비스다. 그 상세 기능은 저 파일안에 정의되어 이씅며 저 서비스가 하는내용으론 게시판의 글을 조회하고, 수정하고, 목록을 가져오는 아주 범생이같은 일을 처리해주는 서비스다.

 

  2. propertiesService는 파일에 찾아봐도 없을 것이다. 바로 이건 살짝 깊숙한 곳에서 불러왔기 때문이다. 여기에대해서 설명하면 좋은데 그럼 또 너무 길어진다. 우린 쓸일이 없으니, 분량을 위해 더이상 알아보지말고 어떤 놈인지만 알고 넘어가자. 바로 페이지의 크기가 정의되어 있다.

 

 

  context-properties.xml에 정의되어 있는데 아니..!갑자기 잘나가다 왜 갑자기 이딴게 튀어나와!!! 할 수 있지만. 일단 넘어가자. 설명하면 좀 길다. 일단 이 서비스는 게시판 목록에대한 정보를 가져오는 서비스라고 생각하자.

 

  3. 자 얘도 더욱이 알필요 없다. 말그대로 Validator 즉, 유효성을 검증해주는 친구인데 말만들어도 재미없다..그냥 시스템을 탄탄하게 해주는 놈이라고 생각하고 넘어가자.

 

URL Request Mapping

 

 

 

  자 이제 쭈르륵 내려보면 저 뭉텅이의 꼴들이 계속 나올텐데 이게 가장 중요하다 사실 위에 말했던거 이해하면 좋은거고 이해못해도 상관없다. 어차피 저거다 복붙해서 이름만 바꾸고 크게 중요하지 않다 초보자 입장에서는..

 

  이제 알아볼 것은 이제 진짜 요청을 어떻게 처리시킬지를 정의해두고 있다. 주석을 보면 함수가 어떤기능을 하는지를 정의해놨다 긍 목록을 조회하는 함수라고 한다.

 

  1. 자 어노테이션에 RequestMapping이 붙었다. 제일 중요한 녀석이다. 사용자가 글목록을 조회할때 http://localhost:8080/egovSampleList.do 라는 URL이 요청될텐데 웹 서비스는 저 egovSampleList.do 라는 요청을 누가 처리하는지 찾아낸다. 근데 모든 함수를 전수조사하면 답이 없으니 저 RequestMapping이라는 어노테이션이 붙은 친구들중에서만 찾아낸다. 만약 저걸 처리해주는 함수를 만나면 실행시키는 것이다!

 

  2. 그래서 함수의 이름도 요청의 이름과 동일하다

 

  3. 글을 어떻게 불러오고 어떻게 처리할지 구체적인 비지니스적인 로직이 여기 작성된다. 일단 우린 큰틀부터 잡을 것이기 때문에 여기에 그런 것들이 적힌다는 것만 알고 넘어가자

 

  4. "sample/egovSampleList"를 반환헀다. 결국 3번에서 처리한 결과를 반환한것이다. 이제 그 결과가 사용자가 보는 화면단에 나타날 것이다.

 

 

  여기까지 알아본게 바로 뒷단 로직인것이다. 전체적으로 한번 보자. 컨트롤러는 함수이름으로 보지말고 RequestMapping 값이 어떤 URL인지 보는게 더 편하다. 사용자도 저 주소를 치고 들어가니까말이다. 아 그리고 요청 URL의 끝은 .do를 쓰는데 그냥 그런가보다 해라. do someting!! 뭔가를 수행해라!!의 의미로써 우리가 아는 do의 의미랑 같다. 이렇게 붙인 이유는 다른 Servlet과 충돌을 막기위해 아무거나 바꾸긴 해야하는데... 그냥 적당한걸로 바꿨다고...

 

 

 

  자 정리해보자. 우리의 기본 컨트롤러인 EgovSampleController는 게시글 관련기능, 페이지 목록, 유효성을 검증해주는 3개의 서비스를 호출해놨고 이 컨트롤러에서는 글 조회, 등록화면 조회, 글 수정화면 조회, 글 수정, 삭제 등 5가지의 기능을 수행하는 컨트롤러다!

 

  만약 사용자가 http://localhost:8080/ + 저 기능에대한 주소 를 요청하면 이 컨트롤러가 위에 정해진 로직대로 기능을 수행할 수 있다. 오늘은 여기까지 뒷단 로직의 일부를 알아보았다.

 

 

 

  자 정리하면 딱 이거다.

 

  1. 사용자는 크롬이던 익스플로러든 웹 화면을 보고 글을 쓰기위해 "등록" 버튼을 누른다

  2. 등록 버튼이 눌리면 등록 화면을 호출해주는 URL을 호출한다.

  3. 그 URL은 addSample.do 이다.

  4. 스프링 서비스에서는 Servlet이란놈이 저 addSample.do요청이 들어오면 누가처리해!!!!!!!!소리를 지르다 RequestMapping 어노테이션을 뒤져보니 EgovSampleController가 해준다는 것을 알아낸다.

  5. 찾아냈으니 그 요청에대한 비지니스 로직을 실행한다

  6. 결과로 sample/egovSampleRegister.jsp를 반환했다. 그럼 사용자한테 이 화면을 보여주면 되는거다!

  7. WAS가 5번에서 넘어온 정보들을 sample/egovSampleRegister.jsp에 뿌려 조립을해서 그 결과를 사용자에게 보여준다!!!!!!!!!!!

 

  하!!!!!!!!! 이거 포스팅 작성하는데 한 4시간 걸린 것같다...일단 큰 개념을 잡았으니, 다음시간에..간단한 요청처리를 하나 만들어보자..ㅠㅠ 힘드러

 

 

#스프링 #Spring #전자정부프레임워크 #기본구조 #샘플예제 #예제 #프로젝트 #분석 #원리 #컨트롤러 #Controller #서비스 #Service

 

 

반응형
  1. codeNug.... 2021.01.07 17:38

    아... 스프링에 대한 기본 개념없이 전자정부프레임웍을 만지다가 한계를 느끼고 다시 시작해보려고 찾아들어왔는데...
    넘나 정성글에 재밌게 따라갔네요ㅋㅋㅋㅋ 내 마음이랑 똑같잖아....?! 전부 정독하고있습니다....!

  2. c린이 2021.01.14 10:56

    글 절대 지우지 말아주세요,,ㅠㅠㅠ 감사합니다ㅜㅡㅠ

  3. 호야 2021.01.18 21:03

    소중한정보감사합니다 ㅠ

  4. 디디 2021.11.22 20:57

    이해가 쏙쏙됩니다~!!! 좋은 글 넘 감사드려요!!!

  5. WJ.Lee 2021.11.23 15:50 신고

    잘 정리해 주셔서 감사합니다.

반응형

 

  저번시간까지 스프링 예제에 대해서 알아보았다. 이젠 이걸 실제로 구동을 시켜야 함으로 아파치 톰캣 8.0 위에 올릴 예정이다. 혹여나 아직도 아파치 톰캣에대한 개념이 잡히지 않았다면

https://extsdd.tistory.com/79?category=853192

 

[아마존 AWS EC2] #2 웹 서비스 구축하기 / 아파치 vs 톰캣 차이점 / 서버란? / WEB서버 vs WAS서버 / Apache

https://extsdd.tistory.com/78 [아마존 AWS EC2] #1 EC2 서버 접속하기 / PUTTY 다운 및 설치 / PEM→PPK 변환 / Server refused our key https://extsdd.tistory.com/77 [아마존 AWS 무료 EC2 서버 생성하기..

extsdd.tistory.com

 

  요기 링크를 보고 이해하면 될 것 같다.일단 시작하기 전에 우리가 어디까지 왔는지 한번 보자. 내가 항상 어떤 작업을 하던지 느끼는거지만, 전체 숲을 보고 이해를 해야 비로소 그 숲에서 본인이 뭘 하는지 알 수 있다. 군 생활을 하던 회사 생활을 하던, 숲을 모른체로 시키는 것만 하다보면 내가 뭔가를 하고 있어도 그 큰 숲에서 뭘하는지 모르면, 내가하는 것도 이해할 수 없기 때문에 우리가 지금 어떤 부분에서 뭘 하려는지 먼저 알아보자.

 

 

 

  짜잔. 금방 파워포인트로 만들었다. 우리가 저번 시간까지 스프링 예제 프로젝트를 하나 만들어 놨고, 이제 그걸 돌리기 위해서 아파치 톰캣이란 놈 위에 올릴 것이다. 그러기 위해 먼저 톰캣을 설치하고, 그다음에 스프링 프로젝트랑 연결할 계획이다.

 

아파치 톰캣 8.0 설치

 

http://tomcat.apache.org/download-80.cgi

 

Apache Tomcat® - Apache Tomcat 8 Software Downloads

Welcome to the Apache Tomcat® 8.x software download page. This page provides download links for obtaining the latest versions of Tomcat 8.x software, as well as links to the archives of older releases. Unsure which version you need? Specification versions

tomcat.apache.org

 

  위 아파치 톰캣 사이트로 접속하자.

 

 

 

  저 박스안에 있는 버튼을 클릭해서 다운받아주자. 용량은 10메가 정도라 금방 받는다. 다운받은 파일을 실행해주자.

 

 

 

 

1. 넥스트를 눌러주자.

2. 열심히 하곘냐는 약속에 동의해주자.

3. 여기도 걍 넘어가준다.

 

 

 

  요기는 좀 설명할 내용이 있다. 1번 박스를 보자.

 

  - Server Shutdown Port : 셧다운 명령어로 끌 수 있게할 건지인데 -1 포트는 사용안함이다. 무난하게 8005로 맞춰주자.

  - HTTP/1.1 Connector Port : 제일 중요하다. HTTP 통신 포트를 뭘로 할꺼냐는데 우리가 저번에 AWS 톰캣 포트 방화벽을 8080으로 열어놨으니 8080으로 설정해주자. 혹시 오라클 등 다른 프로그램과 충돌날 것이 무서운 사람은 8090으로 설정해도 무방하다.

  - Windows Service Name : 이 톰캣 서비스 이름이 머냐는데 그냥 둬도 무방하다.

  - Create Shortcut for all users : 무슨 의민지 모른다. 걍 두자. 아는사람 있으면 알려줘라

  - Tomcat Administrator Login(optional)

      - User Name/Password : 해당 톰캣에 접속할 ID와 비번

      - Roles : 권한 같은데 그냥 두자.

 

  위 내용들을 다 기입해주고, Next버튼을 눌러주자. 위 내용중 사용자 계정내용만 각자쓰고 나머지는 같게하면 될 것 같다.

 

 

 

 

  1. 자바 JDK가 설치된 위치를 확인하고 NEXT를 눌러준다. 보통 자동으로 잡아주는거 같은데 혹시 경로를 못잡거나 해당 경로에 자바 JDK가 없으면 나중에 오류뜨니 한번 저 경로에 가보길 추천한다.

 

  2. 톰캣을 어디다 설치할껀지 경로를 지정한다. 원하는 드라이브에 바로 Tomcat 8.5 이름으로 생성하는 것을 추천한다.

 

  3. 마지막 화면에서 둘다 체크를 해제하고 완료를 누른다. 혹시 Run Apache Tomcat 버튼을 눌렀다면 화면 우측 하단 트레이 아이콘 모인데에 가서 아파치 실행되고 있는걸 오른쪽 마우스 누른뒤 Stop Service를 눌러주자.

 

아파치 톰캣 연동

 

 

 

  자 다시 저번시간에 우리가 만들었던 프로젝트로 돌아와서 상단에 Window-Preferences 버튼을 눌러주자. 혹시 프로젝트 생성을 못했다면 저번 글을 읽고 따라하면 된다. 아 그리고 저번 포스팅에는 아파치 8.0으로 한다 했었는데 8.x버전중에 8.5가 최신이길래 이번편부턴 다 8.5로 진행하는 것으로 할 예정이다. 저번 Servlet Spec은 영향이 없는데 아파치 톰캣 8.5도 Dynamic Web Module Version 3.1을 사용하기 때문에 상관이 없다.

 

https://extsdd.tistory.com/97

 

[Spring/eGov] #1 새 프로젝트 생성 / 스프링 / 전자정부프레임워크 / cannot change version of project facet dyna

스프링 관련 포스팅을 마지막으로 쓴게 2019년 8월 말이라니..ㅋㅋ 벌써 1년이 다되가는 시간이 흘러버렸다..ㅋㅋㅋ 이번에 만들어볼 웹 서비스는 특정 URL을 요청하면 다른 URL로 자동 포워딩해주�

extsdd.tistory.com

 

 

 

 

 

  좌측 1번에서 Server를 눌러주고 하위 메뉴인 Runtime Envirionment 클릭 후 3번에 있는 Add버튼을 클릭한다. 이후 4번 박스에 있는 아파치 톰캣 8.5를 선택해주고 넥스트를 눌러준다.

 

 

 

  여기도 개쉽다. 1번 Name은 톰캣 이름인데 간지나는걸로 하나 정해준다. 사실 기본값인 Apache Tomcat 8.5가 제일 간지나니 걍 둬도 된다.

 

  이후 2번 박스에있는 Browse.. 버튼을 눌러서 아까 톰캣 설치한 폴더로 경로를 잡아준다. 이후 3번 박스를 보면 잡힌 경로를 볼 수 있다. 이후 4번 Finish 버튼을 눌러 마무리 해주자.

 

  오우~shit~ 정상적으로 등록이 돼따.6번 박스에 있는 Apply and Close 버튼을 눌러 마무리 해주자.

 

 

 

  메인화면에서 Server 탭을 누르고 다음 밑에 긴 텍스트를 눌러주자. 그럼 아마 우측 사진의 화면을 보면 저렇게 되어있을꺼다. 3번 박스에있는 아파치 톰캣 8.5가 선택되어있고, 4번 박스에는 저렇게 기본 설정이 되어 있을 것이다.

 

  제일 중요한건 저기 Server runtime environment에 아까 만든 Apache Tomcat v8.5 라는 실행환경이 잡히나 봐야한다. 저게 뜨면 아까 만든 실행환경이 잡히는거다. 그러므로 서버 이름 고칠꺼면 고치고 꾸밈은 사치라고 판단되는 사람은 그냥 파로 5번 박스에 있는 Next 버튼을 누르면 된다.

 

 

 

 

  자 화면에서 우리가 만들었던 프로젝트가 뜰텐데 그걸 누르고 2번 박스인 Add버튼을 누른다 그럼 3번 박스위치로 프로젝트가 이동한다. 사용 가능한 프로젝트중 어떤 프로젝트를 톰캣에 올릴껀지 정하는 화면이다. 다됐으면 4번 Finish버튼을 눌러주자.

 

 

  오우 씨엣..! 톰캣 서버가 만들어졌다..!

 

 

  보면 Package Explore 창을 보면 Servers 라는 폴더가 추가된 것을 알 수 있다. 잘 되었다는 뜻이다. ㅎㅎ

 

 

톰캣 세부 설정

 

  자 그냥 돌리면 접속 주소가 http://localhost:8090/CP_service 로 접속해야 프로젝트가 돌아간다. 이렇게하면 두 가지 문제점이 있다. 먼저 우린 톰캣 포트를 8080으로 할껀데..? 8090으로 설정되니 이거 바꿔야하고, 두번째 주소 맨뒤에 프로젝트의 이름이 노출되어 있다. 이후 어떤 요청을 하더라도 저 프로젝트 명이 따라다니니 저걸 숨겨줄 예정이다.

 

 

  자 일단 하단의 1번 박스인 서버탭에 가서 2번 추가한 톰캣 서버를 "더블 클릭" 한다.

 

 

  그럼 톰캣 설정화면이 나오는데 1번 박스에 지금 8090으로 되어있을 텐데 8080으로 변경하고 "Ctrl+S"를 눌러 저장한번 해주고 2번 박스에 있는 모듈 탭으로 이동한다.

 

 

  모듈탭으로 이동 후 1번 박스에 있는 추가한 프로젝트를 눌러주고 2번 박스에 있는 Edit 버튼을 누른다. 3번 박스를 보면 우리 프로젝트의 이름이 디폴트로 들어가 있을텐데 다 지워주고 4번 박스인 OK를 눌러주자

 

  그리고 마지막으로 "Ctrl+S"를 눌러 꼭 저장해주자!!!

 

 

  그 다음 우리 1번 박스의 우리 서버를 눌러주고 2번 박스에 있는 재생버튼을 눌러주자.

 

 

  머 이런 방화벽 경고가 뜰텐데 다 허용해주자.

 

 

  이후 간지나는 Log 들이 찍히면서 구동된다.

 

 

  톰캣 상태도 Strated로 변한 것을 볼 수 있다.

프로젝트 서비스 접속

 

http://localhost:8080/

 

  자 위 주소를 인터넷 주소창에 쓰고 엔터를 눌러보자!

 

대표사진 삭제

사진 설명을 입력하세요.

참고로 localhost란 바로 자기 자신 컴퓨터의 주소를 말한다. 저렇게 localhost라고 써놓고 컴퓨터가 작업을 수행할때는 localhost -> 127.0.0.1 로 변환한다. 여기서 127.0.0.1 이란 컴퓨터 세계에서 자기 자신이라고 약속한 IP주소이다.

 

그리고 뒤에 나오는 :8080은 포트번호인데 8080이 톰캣포트니까 처음부터 보자면 http:// 즉 HyperText Transfer Protocol 통신방식으로 내컴퓨터의 톰캣포트를 요청한다~ 정도 되겠다.

 

여기서 또 http의 의미가 궁금할 수도 있는겠지만, 비전공자분들 수준에선 우리가 어떤 정보를 남에게 전달할때, 말로도 할 수 있고, 편지로도 줄 수 있고, 택배로도 줄 수있고, 전화로도 줄 수 있는 것 처럼. 정보를 전달하는 방법의 한 가지라고 생각하면된다.

 

살짝만 더 들어가면, www(world wide web) 세상에서 웹페이지나 그림같은 것을 전달하는 통신 규약이라고 생각하면 된다!

 

 

 

 

  와우 Shit!! 페이지가 떴다..!! 샘플 예제가 정상적으로 아파치 톰캣이 작동하고있다.!!!

 

  이 예제에 스프링을 이해할 수 있는 기본적인 틀이 짜져있음으로 이제부터 기본적인 요청을 처리하는 페이지를 만들어보도록 하자!

 

#스프링 #전자정부프레임워크 #아파치 #톰캣 #프로젝트 #연동 #이클립스 #셈플예제 #WAS구동 #tomcat

 

 

반응형
  1. 이제현 2020.06.23 16:39

    이미지로 보여주라하는데 안되는부분 근데 올리수가 없네요

  2. 2021.07.15 13:39

    create shortcut for all user 체크버튼은 컴퓨터 모든 사용자 바탕화면에 바로가기 버튼을 생성하는 것 인거 같아요!

+ Recent posts