CentOS 7.0 Samba 설치 및 4TB HDD 공유 


// 작은 용량의 서버에 파일을 공유하기 위해서 4TB HDD를 추가로 연결하여 해당 하드만 Samba 서버를 통해서


공유함을 위함


1. Samba 설치 


-> yum install samba



2. Samba User 생성


useradd testsamba ( testsamba 라는 유저 생성 (리눅스 계정))

passwd testsamba ( testsamba 라는 유정의 비밀번호 설정)


smbpasswd -a testsamba ( testsamba 라는 유저를 삼바 계정에 추가 하며 비밀번호 등록 **삼바 서버의 비밀번호


리눅스 서버 계정이랑 다름)


계정삭제는 -x


3. 방화벽 설정 


Centos 7.0 버전 부터는 방화벽이 iptable 에서 firewall 로 설정한다.


3-1 

방화벽 실행 여부확인

firewall-cmd --state (running 상태여야 합니다.)

**** 방화벽을 disable 하거나 stop해도 되지만 다른 곳의 접속까지 허용할 필욘 없기 때문에

samba 의 포트만 열어 두고 사용하길 권장합니다.

3-2

방화벽 재 실행

firewall-cmd --reload 

3-3

방화벽 존 확인

firewall-cmd --get-zones

3-4

서비스 포트 추가 제거

(ftp 추가)

firewall-cmd --add-service=ftp 

(ftp 제거)

firewall-cmd --remove-service=ftp


tcp 포트 추가 

firewall-cmd --add-port=21/tcp

제거

firewall-cmd --remove-port=21/tcp



3-5

방화벽 해제

systemctl stop firewalld


리부팅시 방화벽 실행 하지 않게 하기

systemctl disable firewalld


// 해당 추가되는 것들이 방화벽 재시작 혹은 시스템 재부팅후에도 영구 적용되도록 하기위해선

// -permanent 옵션을 사용

firewall-cmd --permanent -add-service=ftp

// 

결과적인 방화벽 설정은


firewall-cmd --permanent --zone=public --add-service=samba

firewall-cmd --permanent --reload 


방화벽이 올라가있어도 // 삼바 로는  가능 


방화벽 설정은


/etc/firewalld/zones/public.xml 에 위치




4. 삼바 폴더 설정 (공유할 폴더 설정)


cd /   // 루트로 이동 

mkdir samba // / 경로에 samba 폴더 생성 ( /samba)

chmod 777 samba // 삼바 폴더의 권한 777


ls 로 색상 확인 


//사진



5. 삼바 configuration 


vi /etc/samba/smb.conf ( 삼바 설정 파일)

들어가서 설정을 하게되는데 


맨아랫부분에 추가해주어야 한다.


[test]

comment = test folder samba

path=/samba 

public = yes

writable = yes

write list = testsamba

create mask = 0777

directory mask =0777


** *만약 그럴일은 없겠지만 작업그룹이 다르다면 workgroup 을 수정해주어야 한다.

vi 나 vim 을 키고 / 입력후 workgroup 으로 해당 값을 찾아서 환경에 맞는 작업 그룹을 적는다.



6. 삼바 서비스 재시작 


service smb restart


// 시작

service smb start



7. 윈도우에서 공유가 되어야 하기 때문에 selinux 수정


vi /etc/selinux/config

SELINUX=enforcing -> 주석  # SELINUX=enforcing

SELINUX=disabled  후 재부팅 


급한대로 사용하기에는


**** 하지만 위에 처럼 config에 지정하는 것을 권장 

setenforce 0 으로 지정해두댐 


8.  윈도우 로고 + R  ip주소 입력 (\\123.123.12.1) 시에 해당 폴더인 /samba가 실행됨

    폴더 실행후 주소창 도 괜찮

그러면 ID: testsamba

      PW: 입력하면 /samba폴더로 접속 


// 비밀번호는 

smbpasswd -a testsamba  때 입력한 비밀번호를 써야 하며

방화벽이 러닝중인지 꼭 확인하고 테스트한다.


firewall-cmd --state  (running)


\\192.168.9.123


사진 


// 삼바 설정은 http://brian-s.tistory.com/9 해당 블로그 가 가장 잘되어있어 출처를 남깁니다. 





9. 4TB 하드를 /samba 폴더에 마운트 시켜서 이어지게 한다. 


이짓을 하기전에 알아야 할 점 기본 파티션은 2TB (MBR) 이고 4TB는 GPT로 해야된다는점


처음 하드 를 받았을시에는 그냥 freespace 혹은 dos 로 되어있기 때문에 4TB 인식을 위해서


GPT로 먼저 우선 변경을 해주어야 한다.


설치전


파일시스템 (ext 2 ext3 ext4 )


디스크 방식 (MBR GPT)에 대해 한번씩 조사해보면 좋을듯 하다.








# mkfs 로 ext4 타입으로 파일시스템 포맷

 

[Myuz@Study ~]# mkfs -t ext4 /dev/sdb1

                            mkfs.ext4


# mkfs 로 ext3 타입으로 파일시스템 포맷


[Myuz@Study ~]# mkfs -t ext3 /dev/sdb1

                            mkfs.ext3



마운트된 정보 확인은

  mount , dh -h , cat /dec/mtab 을 실행하면 볼수가있다















상세한 내용은 제우스 메뉴얼이 너무 잘되있어서 다 생략하고 


Java EE 모듈에서는 4개의 모듈이 있다.


1. EJB(Enterprise JavaBeans ... .jar file)


2. 웹 애플리케이션 (Web Application) 모듈 (.war file)


3. 애플리케이션 클라이언트(Application client)    .jar file


4. 리소스 어댑터 모듈 (Resource Adapter) .rar file   -> JEUS JCA 안내서 참고 


이중 2. 웹 애플리케이션을 통해서 웹을 띄울꺼다





그냥 당장 내 웹프로젝트를 브라우저에 띄워야 한다고 !!  를 위해서  작성한 내용



test용 웹을 위해서 index.html 을 하나 만들어서 작성한다.  // 시작 페이지만 띄워도 되기 때문 


.jsp 면 해당에 맞게 작성한다.


// index.html 

<!DOCTYPE html>

<html>

<head>

</head>

<meta charset="utf-8">

<title> 시작 페이지입니다. </title>


<body> 몸통 입니다. !!!! 



<b> 기본 html 태그 확인 </b>


</body>

</html>


아파치 톰캣을 보면 webapps에 index.html 을 넣고  dd(Deploy Descriptor)라고 해서  web.xml 을 쓰는데 jeus는


jeus.web-dd.xml 을 작성해주어야 한다. 


2개의 폴더를 만들고 작성해주어야 한다.


내가 작성한 웹 프로젝트 폴더가 webframework 라고 했을때


webframework 

- META-INF

- MANIFEST.MF

- WEB-INF

- classes(.java)

- jeus-web-dd.xml

- lib(폴더)

- tilds(폴더 없어두상관없음)

- index.html

- web.xml 


파일 생성

1. MANIFEST.MF


Manifest-Version : 1.0

Created-By : 1.5.0_22 (Sun Microsystems Inc.)


// 구색 맞추기


2. jeus-web-dd.xml (필수)


<?xml version="1.0" encoding="UTF-8"?>

<jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="6.0">

<context-path>/top_webframework</context-path>

<auto-reload>

<enable-reload>true</enable-reload>

<check-on-demand>true</check-on-demand>

</auto-reload>

</jeus-web-dd>


// context-path !!!



// dd 파일들이 있어야지 컨테이너 생성하고 디플로이할때 제우스에서 인식이 가능



3. web.xml 


   <web-app xmlns ="http://java.sun.com/xml/ns/javee"

          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

          xsi:schemaLocation="http://java.sun.com/xml/ns/javee

                              http://java.sun.com/xml/ns/javee/web-app_3_0.xsd"

          version="3.0"

          metatdata-complete="true">

      <display-name>welcome to webserver</display-name>

 

 

  </web-app>


까지 작성하게 되면 폴더 트리는 아래 사진과 같이 된다.








이 상태에서 이제 index.html 을 브라우저에 띄우기 위한 디플로이 과정을 한다. 


http://blog.naver.com/PostView.nhn?blogId=catchbug&logNo=20128704331&categoryNo=12&viewDate=&currentPage=1&listtype=0


// 제우스 웹 어드민을 이용한 디플로이 방법 (컨테이너생성부터)









'JEUS(TmaxSoft)' 카테고리의 다른 글

5. JEUS 6.0(Fix #9) 재기동  (0) 2016.10.24
삼바  (0) 2016.10.14
3. JEUS 6.9 설치 (CentOS 7.0 x64)  (0) 2016.10.06
2. WAS 와 웹 서버  (0) 2016.10.06
1. Cent OS ( 설치 )  (0) 2016.10.06

(지금 은 바뻐서 나중에 글 정리를 해야겠다...) // rpm ( rpm -ivh jdk-6u45-linux-x64.rpm~~


**** jdk 설치에대해 추가적인 설명을 하자면 


제우스는 openjdk는 호환하지 않으며


제우스 6 은 jdk 1.5 1.6


제우스 7 은 jdk 1.6 1.7 을 설치하여야 한다. 


필자는 6버전에 Fix 9 이기 때문에 jdk 1.6을 설치 하였다. 


CentOS 7버전에 Jeus 6.9 버전을 설치 한다.(Jeus6.0 Fix9라고 보면 될거다.)


1. http://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase6-419409.html


쭉 내리다보면 Java SE Developement Kit 6u45( 달라질수있음)


Linux x64개가 2개가 있을것이다. 하나는 -rpm.bin 과 .bin 


둘다 상관은 없지만 필자는 -rpm.bin 을 사용하였다.


rpm으로 설치 시에는 rpm -qa | grep jdk  입력시 현재 설치된 패키지들을 확인할수 있다.(jdk)


rpm이라는 말이 있어서 rpm으로 설치 할려고할 필요가 없는게 .bin 파일이다.


chmod  u+x 로 권한을 준 후에 실행시 설치가 시작된다.


설치 후에 

which java


java -version

javac -version


으로 버전을 확인한다. 


확인이 완료된면 제우스 를 설치 한다.




설치 중에 이전단계는 back 입력


종료시에는 quit 혹은 컨씨


티맥스 테크넷에 들어가게되면 jeus60-<platform>.[bin|exe] 로 되어있지만 난 저렇게 안된다.  (X윈도우가 아닌가보다)


1. 실행 권한 주기


받은 실행파일 에 대한 실행 권한을 준다. 

# chmod u+x jeus60-unix-generic.bin


2. 설치파일 실행

# ./jeus60-unix-generic.bin


3. 라이센스 확인 후 enter

라이센스 동의 화면 y/n


4. 플랫폼 목록에서 설치할 플랫폼을 선택한다.


5. 설치 디렉토리를 정한다.


6. Full Install, Typical 설치 중 하나를 선택한다.

Full Install : JEUS 예제인 Samples와 JEUS 관련 문서 파일이 포함된 JEUS Full 버전을 설치한다.

Typical : Samples을 제외한 JEUS 관련 문서 파일과 JEUS Core 파일을 적용하여 JEUS 필수 파일들을 설치한다.


7. JDK의 위치를 입력한다.

enter키를 누르면 자동으로 인식한 jdk 위치를 사용한다

// 자바의 위치에 대해서는 설치 후에  /jeus/bin/jeus.properties 에 들어가면 


JAVA_HOME 에 설정을 다시할수 있다. 


JEUS_HOME의 경우에는 설정을 해줘야 했었지만 6.0버전 Fix4부터는 제우스 스크립트에 설정값이 들어가있기 때문에


JAVA_HOME 만 잡아주면 된다. 




비밀번호를 묻는 장면이 나오는데 1234로 했다가 다시 입력;


해당 비밀번호는 최초 실행시 나오는 웹 어드민 실행시에 


id는 administrator 


비밀번호는 이때 입력한 비밀번호이다. 


Password Input

--------------


Enter the Password for the administrator account.

This password will be registered in JEUS as the first user.


Input Password::


--------------------------

 This is a Wrong Password

--------------------------

    Above 7 characters


    a ~ z  A ~ Z  0 ~ 9


Input Password::


Corfirm Password::




===============================================================================

Pre-Installation Summary

------------------------


Please Review the Following Before Continuing:


Product Name:

    JEUS6.0


Install Folder:

    /home/user1/jeus6


Install Set

    Full Install


Disk Space Information (for Installation Target):

    Required:  308,147,759 bytes

    Available: 940,857,270,272 bytes







설치된 자바 경로 보기

# which java


자바 버젼 확인

# java -version


8. jeus 관리자 계정(administrator)의 비밀번호 설정


9. 설치에 관한 요약 정보 표시


10. 설치 완료


환경변수 설정


// 제우스 홈의 경우는 6버전에서 Fix가 이루어지면서 지정한 필요가 없어졌다. /bin/jeus 의 스크립트에 보면 JEUS_HOME에 대한 변수가 지정되어있지 않을시에 


대한 스크립트가 작성되어있다. 


PATH 또한 지정할 필요는 없다.

# export JEUS_HOME=/home/jeus (/home/jeus 는 5번의 설치경로)

# export PATH=${PATH}:/home/jeus/bin:/home/jeus/lib/system:/home/jeus/webserver/bin


필자는 아무 지정도 하지않았다. /etc/profile에는


끝나고 바꿔준것은 /jeus/bin/jeus.properties 에서 JAVA_HOME 의 위치만 정상적으로 잡아 주었다. (rpm으로 설치시에는 대부분 /usr로 잡으면 되고)

tar.gz로 설치시에는 해당 경로를 잡아 줘야 한다. 


//

jeus 실행 


// # jeus 


실행후에 


localhost:9744/webadmin 입력시 (어드민 페이지가 나타나게 되면)


administrator 와 지정한 비밀번호를 입력하여 로그인하면 웹 어드민 사용이 가능해지며 기본적인 작업이 된상태이다.


// 요약 


준비물 : oracle jdk - 1.5 or 1.6


1. 제우스 파일 받음 


2. 권한 설정 777  or u+x ( chmod )


3. 실행 ./


4.  라이센스 동의 


5. 플랫폼 선택(자동)


6. 설치 딛렉토리 선택 (JEUS_HOME 이 될 위치 )


7. Full Install, Typical 선택 ( Full_Install 의 경우 Sample JEUS 예제 관련 문서 전부 설치 )


8 JDK 위치 인식 (엔터로 하면 자동인식)


9. 6에서 설치한 디렉토리 들어가서 /bin/jeus.properties 에  JAVA_HOME 을 설정 한다. 



**** 중간에 비밀번호 묻는 장면에서 비밀번호를 잊지 않도록 한다. 기본 제우스 실행시


administrator 의 비밀번호가 된다. 


또한 제우스 버전이 올라가면서 JEUS_HOME은 잡아 줄 필요가 없다.

// ex :   export JEUS_HOME = /home/jues 브랍 ㅡㄹ라 ~



이 작업 후 

#jeus 입력 


JEUS Manager is READY 창이 떴다면

브라우저로 들어가서


localhost:9744/webadmin 입력시 (어드민 페이지가 나오는지 확인 IE의 경우 http:// 을 같이 입력해주어야 한다.


administrator : ID 


지정한 비번 : PW (위에서)


어드민 까지 사용이 가능하면 내 웹 프로젝트 를 디플로이 해보도록 한다. 









'JEUS(TmaxSoft)' 카테고리의 다른 글

5. JEUS 6.0(Fix #9) 재기동  (0) 2016.10.24
삼바  (0) 2016.10.14
4. JEUS 6.0 (#Fix 9) 내 웹 프로젝트 디플로이 하기  (0) 2016.10.13
2. WAS 와 웹 서버  (0) 2016.10.06
1. Cent OS ( 설치 )  (0) 2016.10.06

http://egloos.zum.com/slog2/v/3787621


설명이 너무 잘되어있어 따로 적을 필요가 없다.

'JEUS(TmaxSoft)' 카테고리의 다른 글

5. JEUS 6.0(Fix #9) 재기동  (0) 2016.10.24
삼바  (0) 2016.10.14
4. JEUS 6.0 (#Fix 9) 내 웹 프로젝트 디플로이 하기  (0) 2016.10.13
3. JEUS 6.9 설치 (CentOS 7.0 x64)  (0) 2016.10.06
1. Cent OS ( 설치 )  (0) 2016.10.06

설치 과정에 사진 넣고 뭐하고 설명하기는 구글링에 너무많이 나온다.


그냥 러프하게 말하자면



1. https://www.centos.org/download/ 에서 다운로드 받는다. 


2. rufus 로 usb로 굽는다.


3. 부팅 


4. 난 웹 서버로 쓰기 때문에  소프트웨어 배경 환경 설정에서 -> 그놈  선택후 -> 우측 전부 체크 


5. 디스크 설정(파티션 은 자동으로) HDD 권장  해당 설치시 폴더 트리 설정에 대해서는 나중에 다시 


6. 다음 누르면 루트 계정 설정하고 *****  사용자계정 설정 (꼭해줘야 한다. ) 그룹에 wheel 설정시에는 sudo 로 root실행 가능



그리고 키게되면 뭐 라이센스 어쩌구 저쩌구 나온다.


1 2 q 엔터



'JEUS(TmaxSoft)' 카테고리의 다른 글

5. JEUS 6.0(Fix #9) 재기동  (0) 2016.10.24
삼바  (0) 2016.10.14
4. JEUS 6.0 (#Fix 9) 내 웹 프로젝트 디플로이 하기  (0) 2016.10.13
3. JEUS 6.9 설치 (CentOS 7.0 x64)  (0) 2016.10.06
2. WAS 와 웹 서버  (0) 2016.10.06

Unicode - 문자 하나당 2바이트의 공간을- 확보

멀티 바이트 : ANSI 에서는 1바이트 공간을 다국어에서는 2바이트의 공간을 확보

영어는 1바이트 한글은 2바이트를 사용 한다.

char , wchar_t ,TCHAR

유니코드상에서 char을 쓰면 문제발생 한문자를 쓰는데 2바이트를 사용하므로

char는 문자 하나당 1바이트 한문자를 쓰지만 실제는 2바이트를 쓰기때문에 글자가 깨져서 나온다.

멀티바이트상에서는 wchar_t 를 사용 할 떄 문제가 발생한다.

wchar_t는 한글자를 쓰는데 2바이트를 사용하므로 영어를 담고있다면

영어는 멀티바이트상에서 1바이트만 표현이 가능하므로 나머지는 0으로 채워진다.

그런데 멀티바이트에서는 NULL 로 인식하기 떄문에 영어 한글자만 출력이 된다.


TCHAR는 멀티바이트상에서는 char로 유니코드상에서는 wchar_t로 바뀐다.

wchar_t를 사용할 경우 앞에 L(매크로)을 붙여준다.


async 파일시스템에 대한 I/O가 비동기적으로 이루어짐

// 비동기 ; 이벤트 큐에 추가된 후 실행이 된다. 

sync 파일 시스템에 대한 I/O가 동기적으로 이루어짐 

// 동기 호출의 끝날때까지 블록 상태를 유지한 후 스레드로 제어가 넘어온다.

메인 이벤트 스레드를 블록하거나 너무 많은 백그라운드 스레드를 실행할 경우 성능의 저하를 가져올 수 있다.  // sync의 경우에는 지속적으로 읽거나 쓰기를 반복할때 최적의 효과를 보여준다.

세팅을 다 하고 알았지만 

꼭 이클립스 에서 할 필요 없이 웹 같은 경우는 소스 수정이 주된 목적일수 있어서...


http://www.atom.io/ 에서 git에서 만든 툴인데 이거 받아서 쓰는것도 좋습니다. !! (이쁨;;;)



시작하기에 앞서 기본 세팅을 해야한다.


1. 테마 
* 학교 다닐때 처럼 한두시간 보는게 아니기 때문에 (물론 학교다닐때도 한두시간만 본건 아니였지만)
눈에 익숙할수 있도록 테마를 지정해 주어야 한다. 그렇기 위해서 테마 설정을 위한 기본 테마를 다운 받는다.



Eclipse MarketPlace 에 " color theme " 검색 후 Installed


그렇게 되면 Window-> Preferences -> General -> Appearance  에 Theme: Window Classic 선택 





Window -> Preferences -> General -> Appearance -> Color Theme -> 적당한것 선택 필자는 Oblivion 선택




해당 선택을 하게되면 테마 적용이 된다.




결과는 에디터 창은 검정색이 되며 탐색기 창은 원래 기본 클래식으로 변하게 된다.


해당 테마 적용시 json 과 html 에 대한 에디터 색이 마음에 들지 않는다.


이 또한 맞게 변화를 주어야 한다.





Web -> HTML Files -> Syntax Color -> 해당 칼라에 대한 수정 





JSON -> JSON Files -> Editor -> Syntax Color 에 서 수정




가끔 HTML 사용하다 보면 js 파일이나 jquery 파일들 적용이 직접 안되서 Unknown Tag(Warning 시작에 지장 X) 라고 뜨는 경우가 있는데


이걸 제거해주기 위함이다. HTML 파일에서 해당 태그를 제거 시켜주기 위해서는 


Web > HTML Files -> Validation 에 들어가서 Elements, Attribute에서 해당되는 태그에 대한 유효성 검사를 Ignore로 바꾸게 되면 밑줄이 나타나지 않아 코딩하기 좀더 수월해질것이다. 





'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

5. Spring 기본 세팅  (0) 2016.09.27
4. Spring (개요 - 2) IOC 및 DI  (0) 2016.09.26
3. Spring (프로젝트 생성)  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

스프링 - Life Cycle 


1. 클라이언트 요청에 대한 최초 진입 지점  !!(DispatcherServlet) 


2. DispatcherServlet 은 Spring Bean Definition 에 설정되어있는 Handler Mapping 정보를 참조하여


해당 요청을 처리하기 위한 Controller 를 찾는다.


3. DispathcerServlet 은 선택된 Controller를 호출하여 클라이언트가 요청한 작업을 처리한다.

4. Controller는 Business Layer와의 통신을 통하여 원하는 작업을 처리한 다음 요청에 대한 성공유무에 따라 

Model And View 인스턴스를 반환한다. ModelAndView 클래스에는 UI Layer 에서 사용할 Model 데이터와

UI Layer로 사용할 View에 대한 정보가 포함되어 있다.

5. DispatcherServlet 은 ModelAndView의 View의 이름이 논리적인 View의 정보이면 ViewResolver를 

   참조하여 이를 논리적인 View정보를 실질적으로 처리해야할 VIew를 생성하게된다.

   DispatcherServlet은 ViewResolver를 통하여 전달된 View에게 ModelAndView를 전달하여

   마지막으로 클라이언트에게 원하는 UI 를 제공할 수 있도록 한다. 마지막으로 클라이언트에게 UI를 제공할 책임은 View클래스가 담당 



클라이언트의 요청이 DispatcherServlet에 전달되서 HandlerMapping을 사용하여 클라이언트의 요청을 처리할 Controller 객체를 선택합니다.


Controller 객체는 비즈니스 로직을 호출해서 처리하고 요청 처리 결과 정보를 ModelAndView 객체를 리턴합니다.


DispatcherServlet은 넘겨받은 ModelAndView 객체를 이용해서 ViewResolver로부터 응답 결과를 출력할 뷰 객체를 구해서 출력합니다.




1. 클라이언트의 요청을 받을 DispatcherServlet을 web.xml에 등록

2. 클라이언트의 요청을 처리할 Controller 클래스를 생성

3. ViewResolver를 설정

4. JSP나 HTML 또는 Velocity를 이용해서 출력 코드 작성 


이 기본 라이프 사이클이라는 가정 


프로젝트 기준으로는 


1. web.xml 들어가서  Dispatcher  설정 







servelt-name 은 WEB-INF 에 appServlet폴더에 맞춰서 되어있고

url-pattern 은 *.do주어서


test.do sample.do 같은 액션으로 컨트롤러에서 받아서 사용할수 있도록  변경 

// 컨트롤러에 대한 개념은 다시 설명 


2. appServlet -> servlet-context.xml 설정 





새로운 패키지 작성 kr.or.testcontroller (의 내부에 있는 testController를 동작하게 하기 위해서는


context:component-scan base-package ="kr.or.testcontroller" 를 추가해주어야 한다.


필자는 html 파일도 열어야 하기 때문에 (스프링에서 html 파일 열기가 자주하시는 분들이 없어서 그런가 찾아서 했다.)


webapp 폴더 바로 밑에 html폴더를 하나 만들고 intro.html을 열기 위해서 


<resources mapping="/html/**" location="html/"/> 을 추가해주었다.   // 그래야 리소스 폴더로 인식하고 리다이렉트가 가능


// 멀티 리졸버 라는 기능을 사용하시는 분들도 있던데 알면 좋켔다.. p:order에서 에러가 나버려서;;;



3. Controller 작성 



2에 작성 되었던 base-package에 대한 컨트롤러를 작성한다.



패키지에 일반 자바 클래스 생성후 


@Controller 로 Annotation 을 설정 한다.

이후 해당 클래스 내부 함수에 


@RequestMapping 설정 후 위와같이 입력 test.do 에 대한 값이 진행시(*.do)


반환값으로 redirect:/html/index.html 을 하는 모습을 볼수있다. 위에 화면엔 가려져있지만 사실 index.html이 있음


// 위에 <resources:~~~~/> 추가 때문에 html폴더를 리소스 폴더로 인식하고 리다이렉트시 해당 파일을 열수 가 있다.













'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

6. Spring 기본 세팅 - 2 (테마 및 유효성 검사)  (0) 2016.09.28
4. Spring (개요 - 2) IOC 및 DI  (0) 2016.09.26
3. Spring (프로젝트 생성)  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

1. IOC


객체를 만드는 부분(생성자를 호출)을 직접호출하지 않고 분리를 해서 별도의 클래스 또는 객체의 메서드가 생성자를 호출해서 리턴하도록 구현하는 경우


다른 클래스의 객체를 만드는 역할을 수행하는 메서드를 소유한 클래스를 팩토리 클래스 라고 하며 이러한 형태의 디자인 패턴을 팩토리 메서드 패턴이라고 합니다.


프로젝트의 facotry 패키지에 DaoFactory 클래스 생성



package factory;

import db.*; // 사용자 


public class DaoFactory {

static public GoodsDao create () {

 return new GoodsDao();

}

}


프로젝트 Main 클래스의 main 메서드 수정


import db.*;

import factory.*;

public class Main {

public static void main(Strinbg[] args)

{

GoodsDao dao = DaoFactory.create();

GoodsDto good = new GoodsDto();

good.setCode("010");

good.setTitle("grapefruit");

good.setManufacture("japan");

good.setPrice("3000");

dao.insertGoods(good)


GoodsDto dto = dao.get("001");

System.out.println(dto);

}

}




일반적인 프로그램에서의 제어는 오브젝트를 생성하고 그 오브젝트를 이용해서 작업을 수행하는 형태입니다.


제어의 역전이란 앞에서의 코드처럼 직접 객체를 생성하지 않고 다른 곳에서 생성해준 객체를 가지고 작업을 수행하는 방식입니다.


Eclipse 기반의 톰캣 컨테이너를 사용하는 프로젝트에서 서블릿은 메인 메서드가 없고 우리가 직접 생성자를 호출한 적도 없는데 서블릿 객체의 메소드가 호출되어있는데는 서블릿에 대한 제어권한을 가진 컨테이너가 적절한 시점에


서블릿 크래스의 오브젝트를 생성하고 그 안의 메서드를 호출하는 형태로 동작하기 때문인데 이러한 방식을


제어의 역전이라고 한다.


프레임워크나 Connection Pool  을 이용한 데이터베이스 활용도 제어의 역전을 활용한 예로 객체 생성시 객체의 생성자를 직접 호출하지 않습니다.


스프링에서는 스프링이 제어권을 가지고 생성하는 관계를 설정하는 오브젝트를 Bean 이라고 합니다.


스프링 빈은 스프링 컨테이너가 생성과 관계설정, 사용등을 제어해주는 제어의 역전이 적용된 오브젝트를 가리키는 단어 입니다.


스프링에서 빈의 생성과 관계설정 같은 제어를 담당하는 IoC 오브젝트를 빈 팩토리(Bean Factory)라고 한다.


Bean Factory 인터페이스


--- bean 객체를 관리하고 각 bean 객체간의 의존 관계를 설정해주는 기능을 제공하는 가장 단순한 인터페이스로 이 인터페이스를 implements 한 클래스로는 XmlBeanFactory 클래스가 존재 


--- 생성자의 Resource 인터페이스를 구현한 클래스의 객체를 대입해서 객체 생성

--- Resource 인터페이스를 구현한 클래스

--- --- FileSystemResource : 파일 시스템의 파일로부터 생성

--- --- InputStreamResource : InputStream 이용

--- --- ClassPathResource: 클래스 패스에서 읽어 나옵니다.

--- --- UrlResource : URL 에서 읽어옵니다.

--- --- ServletContextResource : 웹 애플리케이션의 루트 디렉토리에서 읽어 옵니다.


Resource 인터페이스를 implements 한 클래스의 객체 생성 후 getBean() 을 호출해서 설정된 bean 의 id를 넘겨주거나 여기에 추가로 리턴되는 클래스 이름을 넘겨서 bean 객체를 생성합니다.


BeanFactory 인터페이스만 구현한 클래스는 단순히 컨테이너 객체를 생성하고 DI를 처리해주는 기능만을 제공 합니다.


스프링에서 다양한 부가 기능(웹 개발, 메시지 처리...)을 사용하기 위해서 인데 이러한 기능사용시에는 ApplicationContext 인터페이스를 이용해야 한다.


ApplicationContext

--- BeanFactory 인터페이스를 상속한 인터페이스로 빈 객체 라이프 사이클, 파일과 같은 자원 처리 추상화, 메시지 지원 및 국제화 지원 , 이벤트 지원, xml 스키마 확장 등의 추가적인 기능을 제공하는 인터페이스


--- AnnotationConfigApplicationContext, GenericXmlApplicationContext 클래스가 ApplicationContext 인터페이스를 implements



WebApplicationContext

--- Web 프로젝트에서 사용가능 한 ApplicationContext 인터페이스 

--- ClassPathXmlApplicationContext, FileSystemXmlApplicatonContext, XmlWebApplicationContext, AnnotationConfigWebApplicationContext, 클래스가 implements 


--- 클래스를 이용하는 경우는 거의 없고 웹 애플리케이션에서 web.xml 파일의 설정을 통해 XmlWebApplicationContext 객체를 생성해서 사용하는 경우가 많음


--- --- --- --- --- Annotation 을 이용해서도 객체 생성이 가능한데 Factory 클래스 상단에 @Configuration 을 추가하고 Factory 메서드의 상단의 @Bean 을 추가한후 아래 클래스의 객체를 생성해서 getBean 을 호출 한다. 



@@@@ Annotation 을 이용한 ApplicationContext 활용 bean 생성


프로젝트의 DaoFactory 클래스 변경

package factory;


import db.*;

import org.springfraemwork.context.annotation.*;


@Configuration


public class DaoFactory {

@bean 

static public GoodsDao create()

{

return new GoodsDao();

}

}


// 해당 예제는 3.2.5 RELEASE 입니다. 후에 필요시 교체 



Main 클래스 변경


package db;


import org.sprignframework.context.annotation.AnnotationConfigApplicationContext;


public class Main {

                      public static void main(String[] args){

AnnotationConfigApplicationContext context = new 


AnnotationConfigApplicationContext(DaoFactory.class);

GoodsDao dao = context.getBean("create",GoodsDao.class);


GoodsDto dto = dao.get("001");


System.out.println(dto);

context.close();

}



}



앞에  예제와 같이 객체를 생성했을 때의 장점은 오브젝트가 생성 시점과 전략을 다르게 가져갈 수 있도록 해주고 의존관계 자동설정 및 오브젝트에 대한 사후 처리 정보의 조합, 

인터셉팅 등 오브젝트를 효과적으로 활용할 수 있도록 해주는 기능을 제공 한다.

--- ApplicationContext는 IoC 컨테이너면서도 Singleton을 저장하고 관리하는 Singleton 레지스트리이기도 합니다.


--- 특별한 설정을 하지 않으면 스프링에서 생성한 빈 오브젝트에서는 전부 Singleton 형태로 생성되고 매개변수가 없는 생성자(디폴트 생성자)를 이용해서 생성됩니다.


--- 싱글톤으로 생성하는 이유는 스프링이 구동되는 환경이 서버 환경일 가능성이 높기 때문입니다.


---  클라이언트의 요청이 올 때마다 각 로직을 담당하는 오브젝트를 새로 만들게 되면 너무나 많은 오브젝트를 생성하게 되       어서성능이 저하되기 때문이다.


<<<( ( 해당 싱글톤 패턴 의 경우는 디자인 패턴 프로그래밍에서 나타나는 패턴이므로 C++ 에서도 사용이 가능하다 )


**** ** Singleton 패턴을 만드는 방법

---  생성자를 private 으로 생성

---  자신과 같은 타입의 static 필드를 선언

---  static 필드의 팩토리 메서드인 getInstance 메서드를 생성해서 앞에서 만든 static 필드에 메모리를 할당하고 리턴하는 코드를 작성



****** Singleton 패턴의 한계

--- 상속할 수 없습니다.

--- 테스트가 어렵습니다.

--- Singleton 은 항상 전역의 개념을 가지고 있으모 바람직하지 않을수 있다. (상황에 맞춰서 잘 사용해야 함)


p 1 - 26


'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

6. Spring 기본 세팅 - 2 (테마 및 유효성 검사)  (0) 2016.09.28
5. Spring 기본 세팅  (0) 2016.09.27
3. Spring (프로젝트 생성)  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

일단 STS를 받아야 한다. 



// 글 작성시에 생성된 버전은 STS 3.8.1.RELEASE


https://spring.io/tools/sts/all 에 들어가서 버전에 맞는 STS를 받아서 설치 한다.



File -> New -> Spring Legacy Proejct 선택 




Project Name 을 입력 후 맨 아래에 Spring MVC Project 를 선택후 Next 를 선택 한다. 




그럼 해당 창이 나타나는데 여기서는 111.222.333 형식으로 작성 한다.


이후에 톰캣으로 테스트 할시 가리키는 프로젝트 명이 될수 있다. 


ex) kr.or.test 라고 작성시에 


localhost/test 로 사용해서 테스트를 진행할수 있기 때문에  기본 3개는 작성하여야 한다 (2개 1개 는 Finish 가 되지도않지만)



여기까지 작성후 Finish 할시 적상적인 MVC 프로젝트의 생성을 마친다. 


이 이후 설정은 다음장에서 보도록 한다. 


'개발일지(Platform & Library) > Spring' 카테고리의 다른 글

6. Spring 기본 세팅 - 2 (테마 및 유효성 검사)  (0) 2016.09.28
5. Spring 기본 세팅  (0) 2016.09.27
4. Spring (개요 - 2) IOC 및 DI  (0) 2016.09.26
2. Spring(개요)  (0) 2016.09.26
1. Spring(이해)  (0) 2016.09.26

+ Recent posts