Classic ASP with Oracle Database

Classic ASP는 아직도 많이 사용된다. (cba)
일반 웹사이트에서는 많이 없어졌지만 Legacy System.에는 아직도…
새로 만드는 곳도 간혹 그냥 ASP로 하기도 한다.

용도는 주로 관리자 사이트, 소규모 쇼핑몰.

 

소규모 SI업체에서 일을 하다보면 이 꼴도보기 싫은 Legacy System을 설치/수정해야 할 일이 생긴다.
(새로 만들고 – 메뉴얼 문서작성한 다음에 유지보수팀에 인수인계 하기 싫으면 그냥 해야지)

시스템 엔지니어도 Windows서버 잘 하는 사람도 잘 없고.. ClassicASP와 얽혀있는 문제는 잘 해결이 되지 않는다. IIS설정과 DB연결에서부터 심각한 문제가 발생한다.

잘 알지도 못하면서 보다보니 순수 투입시간만 10시간은 여기저기 찾아보고 삽질 반복한 것 같다.

 

WebServer(IIS)

IIS설정은 그래도 검색하면서 하면 금방 처리 된다.
http://tutorial.beansugar.org/w/WindowsServer:IIS

Database(ODBC)

보통 IIS설치하고 ASP첫화면 뜨는거 보고 끝난줄 알지만…
사실 여기서 고생 시작이다.

ConnectionString은 다음과 같다.

ASP는 윈도우 기반 언어답게 윈도우 커넥션을 사용하는데… ODBC, OleDB, ADODB, ADONET.. .뭐 등등 있는 것 같은데… 사실 뭐가뭔지 잘 모르겠다.

ADO.NET 닷넷용이고 ODBC는 JDBC처럼 윈도우 구형 커넥션 프로토콜… ADODB는 ODBC Wrapper정도 아닐까? 생각해본다. (따로 찾아봐야겠다)

Oracle Provider에는 두가지가 있다.
Provider=msdaora.1 (32bit)
Provider=OraOLEDB.ORacle.1.1 (32bit, 64bit)
이름에서 알 수 있듯이 MS에서 제공하는 것과 Oracle에서 제공하는 것.
내가 설치한 프로젝트에서는 이 두가지를 함께 쓰고 있었다.

왜 두가지를 함께 쓰는지 이해할 수가 없었는데…
같은 프로시저를 실행시켜도 커넥션 스트링에 따라 돌아가기도 안돌아가기도 하더라..
OraOLEDB.Oracle.1.1을 이용해서 접속한경우에 아래의 쿼리를 돌리면 파라미터 개수가 안 맞는다고 오류가 난다.

out OUT_RESULT 이외에 out SYSREFCURSOR이 있는데 이것을 못 받아오고
이런 오류를 낸다.
PLS-00306: wrong number or types of arguments in call to ‘{procedure name}’

다른방법으로 호출을 해야되나보다.. LegacyCode를 그대로 쓰려면 커넥션 스트링을 두개 생성할 수 밖에… msdaora를 쓰려면 32bit Client를 써야한다.

Client 설치

Oracle.com에서 Server 버전에 맞는 클라이언트를 다운받는다. 내 경우에는 서버가 11gr2 11.2.0.4.0버전이었다.
(클라이언트 버전은 크게 상관없을지도 모르겠다. 어느정도 호환이 되니까)
32bit – win32_11gR2_client.zip – http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-win32soft-098987.html
64bit – win64_11gR2_client.zip – http://www.oracle.com/technetwork/database/enterprise-edition/downloads/112010-linx8664soft-100572.html

설치할 때 instantclient로 설치하면 개발에 필요한 요소가 다 설치되지 않는다.(network/admin)
관리자 또는 런타임으로 설치하자.
그런데 마지막으로 성공했을 때 관리자로 했기 때문에 런타임으로 해도 잘 될지 모르겠다.

대강 경로는 비슷하다
C:\app\useruser\product\11.2.0\client_1\network\admin\tnsnames.ora

여기서 설치 완료

32비트 클라이언트를 사용하려면 IIS(인터넷 정보 서비스) 관리자에서 – 응용 프로그램 풀고급설정32비트 응용 프로그램 사용 = True로 변경해줘야한다. 기본값이 False로 되어 있다.
변경 후 IIS를 재시작 해보고.. 안되면 재부팅 해야한다.

 

ODBC 데이터 원본(32비트,64비트)

윈도우에서 이걸 설정 해 줘야 하는 줄 알았는데.. 안해도 된다.

 

 

ERRORS

 

*** 실패하면 완전 삭제 후 위 삽질을 반복하도록 한다

삭제는 D:\app\useruser\product\11.2.0\client_1\deinstall\deinstall.bat를 실행

제대로 안될때도 있는데 그 때는

1 서비스 종료
Oracle 관련 서비스 다 종료

2 레지스트리 삭제
시작 – regedit – Oracle 찾아서 삭제
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers
HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Oracle in OraClient11g_home2
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet001\Services\Oracle11
HKEY_LOCAL_MACHINE\SYSTEM\ControlSet002\Services\Oracle11

3 설치파일 삭제
C:\Program Files (x86)\Oracle
C:\Program Files\Oracle
C:\ProgramData\Oracle

4 D:\app\useruser\product\11.2.0\client_1\
이 경로 통째로 삭제

Jrebel, JAVA 웹개발자에게 정말 필수!!

Java 웹개발할 때 WAS를 재시작하지 않고도 코드가 적용된다니~
우와 굉장한 기술이다!!

근데…
이걸 왜 써야하나?

다른 주류 웹 언어들은 코드 변경하면 다 바로바로 적용된다.

많이 사용하는 다음의 언어들은 말할것도 없고
PHP, node-js, Ruby(on Rails), Python(on Django?)

JVM 계열인 Scala(SBT)도.. 소스변경 컴파일 하면 변경사항이 바로 적용된다고 하는데…

JAVA만… 300달러 정도 하다가 475달러로 가격을 인상한… JRebel같은 툴을 써야만 HotSwap이 가능하다.

그냥 웹개발을 자바로 안하면 될 것 아닌가?
그래서 안하려고 한다.
(SI업무라면은 할 수 없겠지만.. )
자바가 C,C++에 비해서는 생산성이 높은 언어였지만, Scala, Clojure, Python 등등에 비하면 아니기도 하니까

 

Log4j – WebAppRootKey 문제 발생시 처리

개발서버 설정하기 귀찮아서 Tomcat 하나에 VirtualHost설정 후 App을 때려넣다가 발생

 

한개의 컨테이너에 두개의 Webapp을 올릴 경우 나는 오류로

Log4j에서 라는 System.property("webapp.root")를 사용해서 발생하는 문제다.

하나의 인스턴스내에서 System.property는 공유되니까.. 한마디로 전역변수 문제라고 할 수 있다.

해결방법은

web.xml에서 앱마다 저 키값을 고유하게 지정 해 주는 것이다.

말 그대로 log4j에서 webapp의 root 디렉토리를 가져올 때 사용하는 값이다.

{tomcat_home}/webpaps/{app war파일명?}

 

 

 

Cafe24 사용후기 서비스의 문제점

트래픽이나 기타 비용적인 측면은 그냥 넘어가자
1위사업자인 만큼.. 서비스가 안정적으로 제공된다면 참고 넘어갈 수 있는 부분이다.|
과연 그런지는 써 봐야 알겠지만…

그런데
가상서버를 사용하는데
별도의 웹 터미널이 제공되지도 않고
서버의 개별적인 설정이 아닌 OS재설치에 비용이 부과된다
이 부분은 문제가 잇다.

가상서버라고 하면 기본적으로 기대하는게
스냅샷, 서비스 초기화, Scalable아닐까
1년계약하고 쓰는 가상서버에… 초기화 설치비용까지 따로 부과된다니
이래서는 서버호스팅과 다를게 없고 좋을게 하나도 없다. 값이 좀 싼가? 성능도 낮잖아

Http/2에서 변경되는 부분

Spec 문서 : https://tools.ietf.org/html/rfc7540

Github에 올라온 문서 : https://http2.github.io/faq/

 

Http/2정보 몇가지

구글 SPDY스피디에서 몇가지 스펙 덧붙여서 만든 프로토콜(인 것 같다)

Explorer 8(WinXP)에서 지원안함 볼 수 없음.. (현재 사용자의 6%가량)

Http 0.9 1.0 1.1처럼 .x가 안 붙고 Http/2라는것은 버전업을 할 예정이 없어서라고 자신있게 말 했다던데…

 

Http/2의 특징 대표적인 3가지는 아래~

참고정보 : https://b.luavis.kr/http2/http2-overall-operation

1.multiplex streams

http1은 무전기였다면 http2는 전화기. 양방향 데이터 흐름
http1은 request-response가 반복되느라 낭비가 있었는데
http2는 쭉 흘러온다고… stream. 그것도 양방향

http1에서 도메인당 request-response 채널이 보통 10개밑으로 열린다고 했다. 그래서 html, js, css, image. 등등을 다 다른도메인으로 설정하는 꼼수로 속도를 빠르게 할 수 있다고…

2. header compression

압축방식 : zlib(SPDY) -> HPACK(Http/2)
Http1.1까지는 text 통신이었는데 Http/2는 binary 통신이다. 압축해서 전달.

그로인한 변화는
text기반인 telnet은 이제 쓸 수 없다.
네트워크 용량이 절약된다.

3. server push

http1에서 html을 요청해서 받고나서 html을 파싱한다음에 리소스를 요청하는식으로 처리를 했다면… http2에서는 예상되는 파일들을 먼저 보내준다.
서버가 해킹당하면 이상한 파일을 먼저 보낼 수 있지 않을까? 라고 생각할 수 있지만.. 어련히 잘 해놨겠지? 나중에 찾아봐야겠다. (인증서라던가 신뢰할 수 있는 서비스에서만 사용할 수 있게 변경되는걸로 되지 않을까)

server push는 websocket과는 다른 기술이다.
관련 포스팅 : https://www.infoq.com/articles/websocket-and-http2-coexist
Well, the answer is clearly no, for a simple reason: As we have seen above, HTTP/2 introduces Server Push which enables the server to proactively send resources to the client cache. It does not, however, allow for pushing data down to the client application itself. Server pushes are only processed by the browser and do not pop up to the application code, meaning there is no API for the application to get notifications for those eve
대강 … 이벤트 전달용이 아니라 리소스만 전달한다는 것 같다.
WebSocket은 메셰지나 이벤트를 전달하는 용도고

이런이유로 속도가 빨라지고 네트워크 자원이 절약된다고 한다. Google이 죽자고 크롬 만들어서 배포한 이유가 여기 있었다. SPDY프로토콜 이용한 통신으로 네트워크 비용을 많이 절약했겠다.

빼먹은거 하나. Http1.1도 gzip 압축compress해서 전송하는걸 지원하긴했는데 Http/2에서 개선된점은 압축방식이 더 좋다고 한다. 뭔진 모르겠지만… 그리고 Http1에서는 헤더는 압축불가능하고 반복되는게 계속 전달됐는데 Http/2는 헤더와 쿠키의 반복전송을 하지 않는다는점.

웹개발자들은 WindowsXP8 유저들을 위한 대안도 준비해야겠다.
웹개발은 진짜 돈도 안되고 신경쓸것도 많고

Spring 5.0에서 바뀌는 점 + Java9에서 바뀌는 점

Java9 대응

따라서, Java9에서의 변화가 Spring5 에서의 변화겠지

JDK7에선 붜가 변했는지 잘 모르고 넘어갔고 <>??
JDK8에선 stream, lambda(람바다?람드아?)가 나왔는데 크게 사용률이 높지 않았다
JDK9에서는 좀 많은 변화가 있는 것 같다

‘ http://blog.takipi.com/5-features-in-java-9-that-will-change-how-you-develop-software-and-2-that-wont/

추가되는 기능

  • repl – jshell (커맨드라인 명령 지원 )
    • 다른 언어에서 지원되는거 보고 부러워하던 기능 아닌가 ㅎ
  • Microbenchmarks(JMH)
    • 벤치마크 기술이라고 하는데…
  • GC 개선
    • G1엔진을 쓴다고 하는데.. 빨라진다고?
  • http2.0
    • 2.0 스펙도 봐야한다.
  • OS컨트롤 능력 강화
    • 예를 들자면 PID 가져오는 기능이라던가

사라지는 기능

그런게 있었나 싶은 기능들 : Json API, Money currency

 

Spring5 추가기능

Mono 되는거 뭐 추가되는 것 같았는데…

DispatcherHandler라는 클래스 중심으로 flow가 추가되는 것 같고…

아직 제대로 안봐서 모르겠다.

 

Spring5 지원중지

Portlet, JDO, JSF 등 공부할 생각도 못했던 몇몇 기술들 지원중단
Hibernate3, 등 구버전 중단.
좀 더 과감해졌으면 좋겠지만…

최근에 Spring재단이 거의 Jaav 표준을 주도하고 있는 것 같아서
조심스러운가보다.

https://spring.io/blog/2015/06/10/feedback-welcome-spring-5-system-requirements

어설프게 몇 줄 읽어봤는데 역시나 댓글에 반발이 조금 있는 것 같다.

Portlet3.0(JSR362)스펙은 2017.Jan에 새로 발표된 것 같은데.. 지원 중단이군 ㅎ
공부할거 하나 줄었다.
왜 필요한가 의문이 좀 있었다. servlet 페이지에 삽입되어서 사용자의 상태를 기억하기도 하고 페이지 일부분의 동적인 변경을 담당하는 기술.. 정도로만 알고 있었는데
오늘 갑자기 protlet 관련 검색하다가 springframework 5.0소스에 portlet 패키지가 없는걸 보고 알게됏다.
DispatcherPortlet
https://en.wikipedia.org/wiki/Java_Portlet_Specification
http://stackoverflow.com/questions/1480528/what-is-the-difference-between-a-portlet-and-a-servlet
몇가지 찾아보니 portlet 기술은 jsp 페이지에 jstl방식으로 fragment를 삽입하는 기술의 일종인 것 같은데
최근에 ajax widget이나 template engine등이 이를 완전히 대체하고 있어서… 굳이 필요한가 싶은 생각이 든다.
그런의도에서 portlet 지원을 중단한게 아닌가….? 싶다.

web.xml 버전별로 정리

를 하려고 했지만…. 최근것만

4.0

은 언제 나오나

 

3.1

 

3.0

 

If it ain’t broke, don’t fix it. 고장나지 않았으면 고치지 말아라!

In the immortal words of Henry Ford, ‘If it ain’t broke, don’t fix it.’ (출처:옥스포드)
헨리 포드가 남긴 불후의 명언으로 말하자면, “고장나지 않았으면 고치지 마라.”

 

명언 별로 안좋아하는데

정말 기억에 남는 말이라서 기록 해 놓는다.

헨리 포드의 말이었구나… 어디선가 영국 명언이라고 봤었는데

알고리즘 공부 사이트

알고스팟

https://algospot.com/

 

더블릿

http://www.dovelet.com

 

Colility
https://codility.com/programmers/lessons/1-iterations/

개발자 알고리즘 테스트할 때도 쓰는 사이트

 

코딩도장

http://codingdojang.com/

 

오일러 프로젝트(Project Euiler)

https://projecteuler.net/

http://euler.synap.co.kr/

 

LeetCode

https://leetcode.com/problemset/algorithms/

기타

백준 https://www.acmicpc.net/

http://www.koistudy.net/

http://jungol.co.kr/

http://www.koreaalgorithm.com/

http://poj.org/

 

 

 

http://exercism.io

https://www.4clojure.com/