ㅇ. 다형성이란
: 많은 클래스들이 동일한 속성과 메서드를 가지고 있을 경우 호출한 쪽에서는 현재 사용중인 개체가 어느 클래스를 기반으로 하고 있는지 알필요가 없다.

ㅇ. 다형성을 이용한 클래스 작성 접근방법

-. 인터페이스(Interface) 기반
: 기존의 VB6.0에서 사용
: 클래스 안에서 인터페이스 멤버를 구현한다.
- Interface키워드를 사용하여 인터페이스 정의
- Implements 키워드를 사용
: Overloads 키워드 사용 가능

형식)
Interface tmpInterface
Function Method1(ByRef s As String) As Boolean
Overloads Sub Method2()
Overloads Sub Method2(ByVal i As Integer)
End Interface

Ex)

Interface iPerson
Property LastName() As String
Sub Display()
End Interface

Class Emp
Implements iPerson
Private strName As String
Private strCompant As String

Public Sub Display() Implements iPerson.Display
MsgBox(LastName & " " & strCompant, , "Employee")

End Sub

Public Property LastName() As String Implements iPerson.LastName
Get
Return strName
End Get
Set(ByVal Value As String)

End Set
End Property

Public Property Company() As String
Get

End Get
Set(ByVal Value As String)

End Set
End Property
End Class

Dim perPerson As Iperson, empEmp As New Emp
empEmp.Company = "Company Name"
perPerson = empEmp
perPerson.LastName = "Yoo"
perPerson.Display()
empEmp.Display()


-. 상속(Inheritance)을 기반
: VB.NET에 새롭게 추가됨
: 베이스 클래스에서 메서드를 작성
: 파생된 클래스에서 오버라이딩

Ex)
상속을 이용한 클래서 두어개 만들고..
서브루틴 함수 호출해만서 클래스변수를 넘겨 주면..
해당 루틴안에서 어떤 클래스건 상관없이 공통의 메소드를 실행시켜 준다는 건데..
예제가 좀 기네..



사실.. 별거 아닌듯..

인터페이스를 기반으로 한거나.. 상속을 기반으로 한거나...

설명이 간단해서 그런가..

동영상 강좌로 공부하고 있는데..


별거 없지 싶은.. 쩝..

말만 너무 어려워서.. 쯧... -_-++
VB개발만 하다보니.. 개념이 헷갈려서.. 쯧..

ㅇ. 이미 존재하는 클래서(Base Class)로 부터 새로은 클래서(Derived Class)를 만들기 위해 사용.

ㅇ. 파생된 클래서에서는 속성, 메서드, 이벤트, 필드, 이벤트 핸들러등을 그대로 혹은 새롭게 정의해서 사용 가능

ㅇ. 한 프로젝트 내에서 다른 클래서로부터 혹은 프로젝트에서 찹조하고 있는 개체로부터 상속 가능

ㅇ. Array
-. VB6.0
: 배열첨자의 시작은 기본적으로 0
: Option Base문을 이용하여 1부터 시작하도록 지정 가능
: tmpArr(1 to 10) 가능
: 첨자가 0부터 시작하는 경우 Upper Bound +1이다.
Dim tmpArr(20) as Single : 21개의 요소를 가진다.


-. VB.NET
: 배열 첨자는 0부터 시작
: Option Base 문은 지원하지 않는다.
: 배열 참저는 0 ~ 배열크그 -1 이다.
Dim tmpArr(20) as Single : 20개의 요소를 가진다.


.NET FrameWork




Common Langauge Runtime




Base Class Liabrary

ㅇ. 상속 (Ingeritance)
-. 클래스 정의 이후 해당 클래스를 상속받아 새로운 클래스를 생성
-. 부모 클래스(base class)의 메서드를 파생된 클래스(child class)에서 새롭게 구성할수 있다.
-. 기본적으로 모든 클래스는 상속가능
-. Form등의 User Interface를 갖는 상속은 Visual Inheritance라고 한다.

"인터넷 한겨레에서 무료로 배포 하니 그 글씨체를 니 컴터에 설치해놔라..."

한겨레 매니아이신 아버지가 아침에 식사시간에 하신말씀..


"네.. 마마... -_-;;;"


한겨레 사이트 뒤지다가 겨우 발견..

왜 요샌 이런거 하나 찾기가 이리 힘들지.. 쯧..



한겨레결체 다운로드
또 오라클.. -_-;;

이번엔 윈도우 오라클이..


고객이 연락와서 데이터가 안올라 온다고 해서 확인해 봤더니..
상기와 같은 오류가...




사실 난 이대로 안하고 걍.. TS의 MAX 사이즈만 수정해주고 해결했는데..

알아둬야 할것 같아서.. 쩝..
아침에 출근해서 담배한대 피고 있는데..
고객이 전화와서 데이터가 한개도 안올라 온다고.. 쩝..
확인해 보니 이런 에러가..

어딘가 시스템이 트랜젝션이 제대로 안먹고 있나본데.. 쯧..

시스템을 첨부터 일일이 뜯어볼수도 없고.. 젠장.. 쯧...



다음 내용은 절대적인 것은 아님을 밝혀둔다.

예전에 우리 회사 대리가 밑에 개발자들 참고하라고 살짝 간단히 정리해 준건데..
살짝 코멘트를 달아 보았다.

참고하면 괜찮을듯..



다 아시는 내용이지만 Procedure 사용에서 락 발생 다수 시 조치 사항입니다

1. TEMP 테이블 사용을 제한 - TEMP테이블의 경우 부하가 많은경우 락 발생이 급격하게 늘어나기 때문에 사용은 최소화 한다.
->
사실 그닥 좋은 방법이 아님은 누구나 다 알것이다.
다량의 DB작업을 하면서 임시로 쓰는것은 뭐 괜찮지만.
프로시져나 프로그램 내에서 Temp 테이블을 사용하는것은 결코 좋은 방법이 아니다.

2. 다이나믹 쿼리의 제한 - 차라리 조회 조건에서 select 을 전부 써버리는 것이 더 났습니다.
->
이 부분은 노코멘트..
사실 뭐가 성능향상에 좋은지 잘 모르겠다.
실상 테이블명이나 필드명등의 객체명이 유동적일때 다이나믹 쿼리를 자주 사용하는데..
걍 select를 다 해줘버려라.. 훔....
말했던대로 노코멘트.


3. 함수를 사용할 경우 다수의 값을 받아오는 경우에는 함수를 사용하기보다도 JOIN사용이 더 낫습니다.

함수를 사용할 경우 2건 이상인 경우에는 1건 1건씩 리턴값을 주기 때문에 리턴값이 늘어날 경우 점점 더 느려지게 됩니다.
->
예를 들어서 사번을 가지고 이름을 가져오고 메일주소를 가져올때..
보통 사번과 이름, 이메일 주소는 하나의 테이블에 있을것이다.
사원테이블 조인해서 이메일 주소와 이름을 가져오면 되는데.
함수를 사용하면 사원테이블에 접속해서 이름을 가져오고, 또 사원테이블에 접속해서 이메일 주소를 가져와야 한다. 두번 접속하게 된다.
당근.. 성능에는 치명적이다.



4. 잘 쓰지 않고 건수가 적더라도 테이블에는 반드시 인덱스를 잡는다. 실 예로 8건 밖에 안되는 코드성 테이블에 인덱스 잡는 것으로 전체 시스템 성능이 5-6배가 된 경우도 있습니다.
->
뭐 다들 알테니깐..

하지만 트랜젝션 처리가 빈번한 테이블에 인텍스는 치명적이라는 것도 알테고..

뭐 적당히 테이블 분위기 봐서 블루스를 추던 탱고를 추던 살사를 추던 해야 겠지..

파일 업로드(다운로드) 작업을 수행하는 웹서버와, 업로드한 파일이 저장되는(다운로드할 파일이 저장되어 있는) 파일서버를 별개의 컴퓨터로 두고자 할 경우에는, 다음과 같은 네트워크 경로로의 액세스를 위한 추가적인 설정절차가 필요하다.

다음은 웹서버와 파일서버를 따로 두는 경우의 설정 절차이다. (Windows 2000 기준)

1. 익명 액세스를 위한 새로운 인터넷게스트계정 생성

1) 웹서버 컴퓨터에 임의의 로컬계정을 하나 만들고, 암호도 입력해 준다.
2) 이 계정에 대해 "암호 변경할 수 없음"과 "암호 사용 기간 제한 없음"이라는 두 개의 항목에만 체크표시를 해 주고, "다음 로그온할 때 반드시 암호 변경", "계정 사용 안함", "계정 잠겨 있음" 항목에 대해서는 체크표시를 없애 준다.
3) 만들어진 계정의 소속그룹 항목에서 이미 기본적으로 추가되어 있는 "Users"그룹을 제거하고, "Guests"그룹 을 추가해 준다.
4) 로컬 보안 정책 설정에서 이 계정이 "로컬 로그온" 권한을 가질 수 있도록 해 준다.
5) 파일서버 컴퓨터에서도 위 1)에서 4)와 동일한 절차를 거쳐 로컬계정을 하나 만들어 주되, 사용자 이름과 암호는 웹서버 컴퓨터에서 만들어준 것과 반드시 일치시켜 주도록 한다.

2. 웹서버 설정

1) 인터넷 서비스 관리자를 실행하여 해당 웹사이트의 디렉토리 등록정보 창을 연다.
2) "디렉터리 보안"탭에서 "익명 액세스 및 인증 제어" 항목에 있는 "편집"버튼을 클릭한다.
3) 여기서 "익명 액세스" 항목에 있는 "편집"버튼을 클릭하여, 익명 사용자 이름과 암호란에 위 1에서 만들어준 계정의 이름과 암호를 입력하되, 반드시 "IIS에서 암호를 제어할 수 있음" 체크박스의 체크표시를 없애 주도록 한다.

3. 파일서버 설정

1) 파일서버의 업로드 폴더의 디렉토리 등록정보 창을 연다.
2) 폴더를 공유하고 "공유"탭에서의 사용권한과 "보안"탭에서의 사용권한 모두에 대해 위 1에서 만들어준 계정을 추가해 준다.
3) 이 때, "공유"탭에서의 사용권한으로는 "읽기"와 "변경"을, "보안"탭에서의 사용권한으로는 "읽기", "쓰기", "수정" 권한을 지정해 주도록 한다.

위 1, 2, 3의 절차를 거쳐 웹서버와 파일서버를 설정하고 나면, 물리적 절대경로값을 필요로 하는 프로퍼티나 메쏘드에 다음과 같이 간단히 네트워크 경로를 지정함으로써, 파일을 업로드하거나 다운로드할 수 있게 된다.

예1) uploadform.DefaultPath = "\파일서버명공유폴더명"
예2) uploadform("file1").SaveAs "\파일서버명공유폴더명Sample.zip"
예3) oDownload.Download "\파일서버명공유폴더명Sample.zip"



근데.. 사실.. 잘안된다... ㅜㅡ

설정할때의 실수를 반복하지 않기 위해서 성공했던 케이스의 방법을 이렇게 정리해 놓았지만..

프로젝트 때마다 서버 셋팅을 하면서 단 한번도 한번에 깔끔하게 성공해본 적이 없다.


요는 계정을 하나 만들고 양쪽 계정을 일치 시켜 준다음에 네트웍 드라이브를 잡고 네트웍드라이브 계정 웹서버 계정 파일업로드 가상디렉토리 계정, 보안, 모든 계정을 동일하게 맞춰준다는 것이다.


하~ 서버셋팅은 넘 어려워서.. 쯧

+ Recent posts