VisualWorksTutorial1:Page04

From 흡혈양파의 번역工房
Jump to navigation Jump to search

cincom_tutorial_vwlogo
cincom_tutorial_cincomlogo

웹로그 통계 레슨 3
외부파일 억세스

cincom_tutorial_stlogo

| 목차 | 레슨2 | 레슨4 |
cincom_tutorial_openbook 웹사이트 억세스 정보는 로그파일을 포함하고 있습니다. 웹서버는 그 정보를 기술하기 위해 매일마다 새로운 파일을 작성합니다. 거기서 이 파일중 하나를 읽어들여 웹사이트에 방문한 중복되지 않는 IP어드레스(인터넷을 경유한 다른 컴퓨터)를 수집해서 “Hit”을 모아보도록 합시다.
cincom_tutorial_certificate 이 레슨에서는 우선 로그파일이 있는 곳을 찾습니다. 그리고 그것을 열고 VisualWorks에 그 내용을 가져온 후에 파일을 닫는 방법을 설명하겠습니다.
cincom_tutorial_lightbulb
이 튜토리얼은 연습이나 워크샵에서 사용하는 추가파일이 필요합니다. 시작하기 전에 다운로드하여 소정의 장소에 복사해 주기시 바랍니다.
cincom_tutorial_steps 1. VisualWorks가 실행중이지 않은 경우엔 실행시켜주십시오.


2. VisualWorks 메인 런쳐화면에서 툴바에 있는 맨끝 버튼을 클릭, 혹은 Tool>>Workspace 메뉴를 선택해주십시오.


3. 작업공간에 아래와 같이 입력해주십시오

'ws000101.log'


4. 텍스트를 반전시키고 <오퍼레이트 클릭>Inspect를 선택해주십시오.

새롭게 복수의 탭이 있는 화면이 표시됩니다.(Inspector 화면) a ByteString(화면 타이틀)은 디폴트로 Text 탭을 표시합니다. 다른 탭에 관해서는 다음 레슨에서 설명하겠습니다.

그림3-1. VisualWorks 인스팩터 화면의 바이트 문자열


반전시킨 문자열에 주목합니다. 이것은 single quotes로 둘러싸인 문자열을 인스팩트(조사)하듯 Smalltalk에 전달하여, 그 결과를 바이트 문자열로 표시하였습니다. 컴퓨터이기에 전달 받은 그대로 실행했을 뿐입니다. Smalltalk는 표시된 내용의 문자열이 컴퓨터 파일을 의미한다고 생각하지 않습니다. 만일 문자열에 의미를 부여하려 한다면 Smalltalk에 지시할 필요가 있습니다.


5. 인스팩터 화면을 닫고 아래와 같이 행을 변경해주십시오

'ws000101.log' asFilename


6. 이 텍스트를 반전시키고 <오퍼레이트 클릭>후 Inspect를 선택해주십시오.

두 가지 뷰를 가진 Inspector화면이 표시됩니다. 이때 윈도우의 타이틀이 아까와는 다르다는 점에 주목해주십시오. 예를 들자면, WindowsNT의 경우는 a NTFSFilename, Linux/UNIX의 경우엔 a UnixFilename로 표시됩니다. Windows 9X에서는 a FatFilename로 표시됩니다. Smalltalk가 이 문자열을 Filename로서 "인식하고 있다는" 증거입니다.

그림 3-2. 지정파일을 비주얼월스 인스팩터 화면에서 표시
cincom_tutorial_lightbulb
Inspector화면이 표시되지 않는 경우, 위에 적혀있는것과 비교해 문자에 오타가 없는지 확인해주십시오. Smalltalk는 대, 소문자 구분을 합니다. 그리고, asFilename 메시지는 아래와 같이 입력해도 오류가 납니다.


  • "as File name"
  • "as Filename"
  • "as file name"
  • "asfilename"
  • "asFileName"


asFilename메시지는 문자열에서 Filename객체로 변환하기 위한 String클래스의 인스턴스 메서드입니다. 위의 예시문과 비슷하지만 정확한 메서드는 asFilename입니다. 메서드명은 공백을 포함할 수 없기 때문에 처음에 나온 세 가지 예는 논외입니다. 마지막 두 가지는 유사하지만 메서드명을 정확하게 기술하지 않으면 동작하지 않습니다

cincom_tutorial_design 중요합니다

이 튜토리얼은 어떠한 OS에도 존재하지 않습니다. 때문에, 이 번 장에서 나오는 샘플코드를 바르게 작동시키기 위해서는 파일 위치나 VisualWorks 홈디렉토리 위치를 절대경로로 지정할 필요가 있습니다.

Temporary 디렉토리에 이 파일들을 저장할 경우, 이 로그파일에 억세스 하기 위해서 윈도우는 c:\temp\ws000101.log와 같이 지정합니다. Linux/UNIX에서는 /usr/tmp/ws000101.log와 같이 지정합니다. 하지만 샘플코드는 OS에 의존하지 않도록 하기 위해, OS에 따라 다른 방법을 사용한다거나 절대경로를 기술하지 않겠습니다. 이후, 이 파일이나 다른 파일로 참조를 요구받았을 때, 샘플코드에서는 이 파일명(ws000101.log)을 사용하겠습니다. 하지만 VisualWorks "표준 디렉토리"에 파일을 배치하지 않은 경우에는 파일로 절대경로를 지정할 필요가 있습니다.

VisualWorks "표준 디렉토리"를 설정하는 간단한 방법은 VisualWorks 메인 런쳐화면에서, File>>File Browser 메뉴를 선택합니다. 아래 그림과 같이 다이얼로그 박스가 표시됩니다.

그림 3-3. 반전표시된 VisualWorks "표준 디렉토리"


이것은 File Browser 화면입니다. 이 화면의 사용 방법은 다음 레슨에서 배우겠습니다만, 왼쪽 뷰에서 반전된 디렉토리에 주목해 주시기 바랍니다. 이것은 VisualWorks "표준 디렉토리"의 이름을 표시합니다. 이 예시에서는 윈도우계열 시스템이 사용되었으며, VisualWorks "표준 디렉토리"는 c:\vw7.7\image입니다. 이 튜토리얼을 작성하는 동안 로그파일을 위치시킨 곳입니다.


VisualWorks "표준 디렉토리"는 VisualWorks "홈 디렉토리"와는 다르니 헛갈리지 마십시오.


  • "표준 디렉토리" 는 VisualWorks가 파일을 최초로 검색하는 디렉토리입니다.
  • "홈 디렉토리" 는 VisualWorks가 인스톨된 루트 디렉토리입니다.


"홈 디렉토리"는 VisualWorks가 적절히 기능하도록 바르게 설정할 필요가 있습니다.


그러면, VisualWorks "홈디렉토리"가 어떻게 설정되어있는지 알아봅시다.


File Browser화면을 닫아주십시오.


VisualWorks "홈"디렉토리를 찾아보기 위해서는 VisualWorks 메인 런쳐 화면의 File>>VisualWorks Home Settings 을 선택해주십시오.

그림 3-4. 파일 메뉴에서 VisualWorks Home Settings를 선택
그림 3-5. 이 화면에서 VisualWorks "홈디렉토리"를 설정/확인합니다.


이 예시에서 VisualWorks의 "홈디렉토리"는 c:\vw7.7입니다.(윈도우 환경) 이것은 "표준" 디렉토리와는 다른 디렉토리입니다. 로그파일은 "표준 디렉토리"(c:\vw7.7\image)에 둘 필요가 있습니다. 그러므로 인해, 이 튜토리얼에서 로그파일지정을 절대경로로 할 필요가 없어집니다. 즉, 경로 지정이 필요 없습니다.

cincom_tutorial_steps 7. 인스팩터 화면을 닫아주십시오.

문자열이 파일이라는 것을 Smalltalk에게 지시하는 방법을 이해했습니다. 그러면 좀 더 파고들어 봅시다.


8. 아래와 같이 작업공간의 내용을 수정해주십시오.

| myFile | 
myFile := 'ws000101.log' asFilename. 
myFile fileSize.


9. 텍스트를 반전시키고 <오퍼레이트 클릭>Inspect를 선택해주십시오.

Inspect 화면이 표시됩니다. Self값은 69072입니다. 여기서 두 가지를 검증하겠습니다. 첫 번째는 존재하는 파일을 가르키고 있는지, 두 번째는, 이 연습을 위한 파일을 가르키고 있는지 입니다. Inspector화면이 표시되지 않는지, Inspector화면에 69072라고 표시되지 않는 경우, ws000101.log가 존재하는 곳을 가르키고 있는지 확인해주십시오.

그림 3-6. VisualWorks 인스팩터 화연에 파일 사이즈를 표시
cincom_tutorial_question 만약 아래와 같은 다이얼로그 박스가 나타난 경우의 대처법은?
그림 3-7. 악명 높은 노티파이 다이얼로그 박스(Notify dialog box)


이것은 두 가지 좋지 않은 의미가 있습니다. 이곳에서의 목적은 VisualWorks가 로그파일에 억세스할 수 있는가를 확인하는 것입니다. ERROR_FILE_NOT_FOUND메시지에서 추측 하건데, 다이얼로그 박스는 VisualWorks가 지정파일을 발견하지 못했다는 것을 나타내고 있습니다. 그 이유로 두 가지 경우를 생각해 볼 수 있습니다.


1) 로그파일이 VisualWorks "표준 디렉토리"에 없다
2) 대, 소문자 구분


처음 상황을 해결하기 위해서 VisualWorks의 "표준 디렉토리"에 이 파일이나 그 외의 "log"파일이 있는지 확인합시다. VisualWorks "표준 디렉토리"를 확인하는 간단한 방법은 VisualWorks 메인 런쳐화면에서 File>>File Browser 메뉴를 선택합니다. 파일 브라우저가 맨 처음 나타내는 곳이 로그파일을 보관해야만 하는 곳입니다.

그림 3-8. VisualWorks "표준 디렉토리"의 로그파일을 표시(소문자)


그러면 작업공간으로 돌아가 다시 시작합시다. 만일 VisualWorks의 “표준” 디렉토리로 로그파일을 이동시켜도 이 에러가 뜨는 경우 대, 소문자가 원인일 수 있습니다. 로그파일 이름은 전부 소문자로 해주십시오.(다시 확인해주십시오) 위의 샘플 코드는 소문자(ws000101.log)로 파일 이름을 표기했습니다. 만일 Linux나 UNIX를 OS로 쓰는 경우 이것이 원인일 수도 있습니다. OS에 의한 개별적인 원인을 확인할 수 없다면 작업공간에 아래와 같이 입력해주십시오. 그리고 텍스트 전부를 반전시키고 <오퍼레이트 클릭>해서 Print를 선택해주십시오.

Filename isCaseSensitive


True 혹은 False, 둘 중에 하나가 돌아옵니다. 만일 True라면 기술한 파일 이름(ws000101.log)이 시스템에 보존되어있는 로그파일 이름과 완전히 일치하는지 확인해주십시오.


그러면 작업공간으로 돌아가서 다시 시작합시다. 로그파일에 억세스하는 경우에는 수많은 주의점에 신경써주십시오.

cincom_tutorial_question 그러면 이 코드를 하나하나 분석해보겠습니다
| myFile |

맨 처음 행은 템퍼러리 변수(가변수, 일시변수)를 선언하고 있습니다. 템퍼러리 변수는 세로줄로 둘러싸여 있습니다. 변수 이름에는 스페이스를 포함할 수 없습니다. 일반적으로 변수 이름은 내용을 나타내며 의미 있는 단어로 씁니다. 절대 축약해서 쓰지 않습니다. 변수 이름에 복수의 단어가 포함되는 경우(위의 myFile : my와 file) 첫 단어는 소문자로 시작하며, 다음 단어부터는 첫 문자만 대문자로 씁니다. 이후 레슨에서 좀 더 자세한 네이밍 규약에 대해 설명하겠습니다.


myFile := 'ws000101.log' asFilename.

2행째는 웹서버 로그파일을 참조하는 파일명을 템퍼러리 변수에 대입합니다. 이후 연습에서는 이 파일을 자주 참조합니다. 템퍼러리 변수를 사용하면 작업이 손쉬워집니다. 이 방법으로 인해, 프로그램에서 몇 번이고 ws000101.log asFilename을 기술할 필요가 없어집니다.


myFile fileSize.

세 번째 행은 다른 언어에서는 일반적이지 않을 수도 있습니만Smalltalk에서는 전형적인 식입니다. myFile 객체는 2행째에서 작성되어 있습니다. 그리고 myFile에 파일 크기를 바이트로 계산하는 fileSize 메시지를 전달하고 있습니다. Inspect를 선택했으니 이 값은 Inspector 화면에 표시됩니다.

아직 파일을 읽어오지 않았습니다만, 닫도록 합시다.

cincom_tutorial_steps 10. 아래와 같이 텍스트를 수정해주십시오. 텍스트를 전부 반전(역자주.선택하라는 의미)시키고 <오퍼레이트 클릭>실행을 선택해주십시오.
| myFile | 
myFile := 'ws000101.log' asFilename. 
myFile edit.

여기서 주목할 부분은 새로운 화면이 표시되었으며, 이 파일의 내용이 파일 에디터에 표시되었다는 점입니다. 이름에서 나타나듯, 이 화면은 텍스트 에디터 기능을 가지고 있습니다. notepad(윈도우)나 vi(Linux/UNIX), SimpleEdit(Mac)등과 같습니다.

그림 3-9. VisualWorks의 파일 에디터에 의한 ws000101.log파일 표시


11. VisualWorks의 파일 에디터를 닫아주십시오. 그러면 파일은 자동적으로 Close(닫기) 처리 됩니다.

cincom_tutorial_lightbulb
만약 프로그래밍 경험이 있다면, 이전에 사용했던 언어와 Smalltalk를 비교하여 비슷한 부분에 주목하게 될지도 모릅니다. 예를 들어 대입문자(:=)는 Pascal에서 사용되는 것과 비슷합니다. 그리고 문(테스트먼트, 센텐스)의 마지막을 의미하는 피리오드는 마치 COBOL 같습니다. 여기서는 누가 처음 사용했는가, 어디서 인용했는가를 논할 생각은 없습니다. 단지 Smalltalk언어의 몇 가지 키포인트를 파악하길 바라기 때문입니다.

만일 프로그래밍 경험이 없다면 다음에서 말하는 부분을 기억해야할 필요가 있습니다. Smalltalk에서는 연속되는 식을 피리오드로 구분한다 대입식은 Colon equal(:=)을 사용합니다. 왜 이퀄 기호를 대입식으로 사용하지 않는지 알고픈 사람을 위해 짧게 말하자면, 이퀄은 동일한지 아닌지를 판단할 때 사용되기 때문입니다. Smalltalk에서는 x=3이라는 문은 x의 값에 의해 TrueFalse로 돌아옵니다.

Smalltalk의 파일 에디터에 파일 내용이 표시되는 위의 "3줄 프로그램"은, Filename이라 불리우는 클래스의 인스턴스를 작성하고, 또한 edit라 불리우는 메시지를 전달합니다.

cincom_tutorial_certificate 정리

여기서 웹서버의 로그파일은 콤마로 15개로 구분된 아스키 텍스트 파일입니다. 이것들의 필드 중 몇 가지는 보면 알지만 그 이외는 잘 모를 것입니다. 맨 오른쪽에 있는 필드는 웹사이트에 방문한 IP 어드레스입니다. 다음 연습에서는 그것들을 카운트해봅시다.

아래와 같은 내용을 학습하였습니다

  • VisualWorks 표준 디렉토리의 결정
  • VisualWorks 홈 디렉토리의 설정
  • 파일 불러오기
  • 파일 사이즈의 측정
  • Smalltalk 에디터에 파일을 불러오기
  • String을 Filename로 변환
  • 템퍼러리 변수를 선언
  • "colon equal"(:=) 을 사용해서 변수에 값을 대입
  • 복수의 Smalltalk식을 구분(피리오드를 사용해서)

| 목차 | 레슨2 | 레슨4 |