none
SQL azure의 firewall IP설정? RRS feed

  • 질문

  • Java JBoss 7과 Hibernate로 Azure cloud services를 구축했습니다. SQL Azure에서 allowed ip addresses로 클라이언트의 IP를 입력하고 저장하였습니다. Azure Emulator로 오류없이 빌드되고 실행도 원하는 데로 되었습니다. 그런데 Windows Azure로 deploy시켜 publish하니 오류가 발생합니다. Server IP로 Public virtual IP를 입력하였고 Allowed Services에서 WINDOWS AZURE SERVICES를 YES로 설정하였는데도 오류가 납니다. 오류내용은

    javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: The connection is closed 입니다. 어떻게 IP 주소를 설정해야지 배포한 Azure service에서 SQL Azure에 접속이 가능할까요? 조언부탁드립니다.

    2012년 8월 16일 목요일 오후 12:16

답변

  • 서버 연결 문자열이 일단 틀린것 같습니다. 아래 링크의 맨 아래부분을 참고하십시오. encrypt, user id, password가 설정되지 않았습니다.

    http://msdn.microsoft.com/ko-kr/library/hh290696.aspx

    해당 Web Role의 서버에 jBoss 가 기본적으로 설치되지는 않는것 같습니다.

    Azure로 배포한 서버에 원격 연결을 하여 JSBC 드라이버가 설치되었는지 확인하시고 없다면 설치하시고 테스트해보십시오.


    Hong-ju

    • 답변으로 표시됨 gladiator67 2012년 8월 23일 목요일 오전 4:15
    2012년 8월 19일 일요일 오후 11:31
    중재자
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    포럼을 좀 더 검색해보았고, 문제에 대한 접근을 해볼 때, Hibernation과 SQL Azure 사이에 특별한 문제가 있을 것 같진 않습니다.

    그러나 Hibernation의 특성상 연결 유지 기간이 길 때 이 연결을 예고없이 SQL Azure가 닫는 것과 문제 발생 현상이 관계가 있을 것 같습니다. 유휴 상태로 연결을 열어놓는 것도 SQL Azure 입장에서는 관리 대상으로 보기 때문입니다. 그리고 이렇게 문제점으로 인지되어 닫힌 원격 연결에 대해서는 일정 시간동안 연결을 다시 할 수 없도록 Blocking하는 보호 정책까지 더해져서 해결이 늦어질 수도 있을 것 같습니다.

    사용하시는 Hibernation 프레임워크의 종류에 맞는 해결책을 정확히 말씀을 드릴 수 없어 죄송스럽습니다만 일단은 예상되는 원인 중 하나입니다.

    혹 다른 문제나 특이한 점 있으시면 스레드에 덧글 추가 부탁드립니다.

    감사합니다.


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    • 답변으로 표시됨 gladiator67 2012년 8월 23일 목요일 오전 4:15
    2012년 8월 21일 화요일 오후 2:04
    중재자

모든 응답

  • SQL Azure의 방화벽 설정에는 문제 없는것 같습니다.  연결 문자열이나 계정 정보를 다시 한번 확인해보십시오.

    연결 문자열에 대한 내용을 다시 한번 확인해보시고 로컬에서 SQL Azure로 연결해서 테스트해서 별 문제없다면

    다시 배포해서 테스트해보십시오.

    여러 문제로 연결이 끊길수 있으므로 Retry Logic을 추가할 수 있습니다. C#이지만 자세한 정보는 아래 링크를 참고하십시오.

    http://social.technet.microsoft.com/wiki/contents/articles/4235.retry-logic-for-transient-failures-in-windows-azure-sql-database-en-us.aspx


    Hong-ju

    • 답변으로 표시됨 gladiator67 2012년 8월 17일 금요일 오후 12:35
    • 답변으로 표시 취소됨 gladiator67 2012년 8월 19일 일요일 오전 7:24
    2012년 8월 17일 금요일 오전 12:00
    중재자
  • 답변 감사합니다. 그래도 결과는 같습니다.

    저의 SQL Server 연결은 다음과 같습니다.

    <datasources>
                    <datasource jndi-name="java:jboss/datasources/SQLServerDS" pool-name="SQLServerDS" enabled="true" jta="true" use-java-context="true" use-ccm="true">
                        <connection-url>
                           jdbc:sqlserver://o04wovsend.database.windows.net:1433;database=MyTestSQLServer;encript=true;hostNameInCertificate=*.database.windows.net;loginTimeout=7200;
                        </connection-url>
                        <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-class>
                        <datasource-class>com.microsoft.sqlserver.jdbc.SQLServerDataSource</datasource-class>
                        <driver>
                            sqljdbc4.jar
                        </driver>
                        <pool>
                            <prefill>
                                false
                            </prefill>
                            <use-strict-min>
                                false
                            </use-strict-min>
                            <flush-strategy>
                                FailingConnectionOnly
                            </flush-strategy>
                        </pool>
                        <security>
                            <user-name>
                                MySQLAdmin@o04wovsend
                            </user-name>
                            <password>
                                test
                            </password>
                        </security>
                    </datasource>
                    <drivers>
                        <driver name="sqljdbc4.jar" module="com.microsoft.sqlserver.jdbc">
                            <xa-datasource-class>
                                com.microsoft.sqlserver.jdbc.SQLServerXADataSource
                            </xa-datasource-class>
                        </driver>
                    </drivers>
                </datasources>

    어디서 잘못되었는지 모르겠습니다. SQL Server에 허가된 IP도 입력하였는데 MS Azure Emulator를 이용한 로컬에서는 되고 Azure에서는 Connection Closed가 되고....

    혹시 생성되는 Windows Azure Cloud Server에 JBoss가 디폴트로 설치되나요? 가끔 JBoss 7.0.1에서 오류메세지를 받습니다. 제 JBoss 버전은 7.0.2인데요.

    조언부탁드립니다. 꾸벅(_ _)

    • 편집됨 gladiator67 2012년 8월 19일 일요일 오전 9:16
    2012년 8월 19일 일요일 오전 7:29
  • 서버 연결 문자열이 일단 틀린것 같습니다. 아래 링크의 맨 아래부분을 참고하십시오. encrypt, user id, password가 설정되지 않았습니다.

    http://msdn.microsoft.com/ko-kr/library/hh290696.aspx

    해당 Web Role의 서버에 jBoss 가 기본적으로 설치되지는 않는것 같습니다.

    Azure로 배포한 서버에 원격 연결을 하여 JSBC 드라이버가 설치되었는지 확인하시고 없다면 설치하시고 테스트해보십시오.


    Hong-ju

    • 답변으로 표시됨 gladiator67 2012년 8월 23일 목요일 오전 4:15
    2012년 8월 19일 일요일 오후 11:31
    중재자
  • 빠른 답변감사합니다. 위 <datasources> XML은 JBoss 7에서 DB에 원격으로 연결하는데 사용되는 문서입니다.JBoss 7단독으로 실행하여도, MS Azure Emulator로 작동해도 모두 SQL Azure에서 값을 불러옵니다. 이 프로젝트를 그대로 Windows Azure에 publishing하면 Connection is closed 란 예외 메세지가 나타납니다.

    좀 도와주십시요..T_T 미치겠슴다.....


    • 편집됨 gladiator67 2012년 8월 20일 월요일 오전 3:56
    2012년 8월 20일 월요일 오전 3:27
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    고민이 많으시겠지만, 문제를 좀 더 정확히 알아보기 위해서 필요한 것이 있을 듯 합니다. 아래의 내용들을 참고하셔서 문제를 진단해보신 다음 발견한 부분들을 알려주시면 좀 더 빠른 해결에 도움이 되지 않을까 생각합니다.

    • JBoss와 연결하여 사용하시는 JDBC 드라이버가 Microsoft JDBC Driver일 필요가 있습니다. (http://www.microsoft.com/en-us/download/details.aspx?displaylang=en&id=11774 에서 다운로드 가능합니다.)
    • JDBC용 연결 문자열을 Windows Azure Management Portal에서 찾아서 적용하시는 것이 좋을 듯 합니다. (manage.windowsazure.com)
    • JBoss 내의 추적 기능을 활용하셔서 SQL Azure가 반환하는 오류 코드를 정확히 확인해보시는 것이 필요합니다. SQL Azure 자체에는 로깅 기능이 없기 때문에 이 작업이 문제 해결에 꼭 필요합니다.
    • JBoss 내의 Connection Pooling이나 다른 부가적인 요소로 인해서 SQL Azure의 Connection Throttling을 유발하고 있지는 않은지 확인해봐야 할 것 같습니다. SQL Azure는 공유 환경에서 실행되는 클라우드 서비스이고, 다른 사용자의 성능에 영향을 끼칠 가능성이 있는 동작이나 위험 요소를 회피하는 기능으로 인해 예고없이 연결을 끊는 행위가 있을 수 있습니다.
    • 그 외에도 로캘 설정, 시간대 설정 같은 지역적 부분의 차이나 환경의 차이도 검토해보실 필요가 있을 것 같습니다. Azure OS의 실행 환경은 일반적으로 해당 지역 데이터센터와 미국/영어 설정을 따르는 것이 기본 방침이므로 이에 관련된 호환성 문제가 있을 것으로 예상됩니다.

    그리고 좀 더 쉬운 문제 해결을 위해서 권하고픈 부분으로, Cloud Service로 배포하지 마시고 manage.windowsazure.com (windows.azure.com이 아닙니다!)의 Windows Azure Virtual Machine을 이용하여 직접 Windows Server 컴퓨터를 프로비져닝하여 이곳에서 디버깅을 진행해보시는 것이 어떨까 합니다. 기본적으로 Cloud Service와 Virtual Machine은 같은 라인업 위에서 실행되는 서비스이므로 문제 추적이 좀 더 용이할 수 있습니다. 혹은 Cloud Service로 배포를 하시더라도 원격 데스크톱 기능을 활성화하셔서 배포한 다음 원격으로 접속해서 문제를 파악해보는 것도 도움이 되실 수 있습니다.

    덧) 진행하시는 프로젝트의 보안 규정이나 대외비 성격, 혹은 비밀성 여부에 위배되지 않는다면 원격 지원을 통해서 진단을 한 번 해드려도 될지 여쭤봅니다. 포럼 스레드로는 답이 잘 나올 것 같지 않아 달아둡니다.


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    2012년 8월 20일 월요일 오후 4:07
    중재자
  • 답변 갑사합니다. 먼저 질문에 답변을 드리면

    - JBoss에서 사용하는 JDBC Driver는 MS사의 JDBC Driver입니다. Windows Azure SDK를 설치하니까 JDBC 드라이버를 자동으로 설치하더군요. 그래서 그 JDBC Driver를 JBoss 7로 복사하여 사용하고 있습니다. Local과 MS Azure Emulator에서 이상 없이 사용하고 있습니다.

    -JDBC 문자열은 Azure 포털에서 제공하는 Azure SQL Connection String을 그래로 사용하고 있습니다.

    - Windows Azure Virtual Machine에서 이미 JBoss와 JDK를 로컬처럼 사용하여 설치, 운영하였습니다. 아무 문제 없이 작동합니다.

    Cloud 컴퓨팅 관련 책을 집필 중입니다. 딱히 보안에 대한 문제가 없습니다. 원격으로 진단을 해주시면 감사하겠습니다.

    Virtual IP Address : 168.63.170.129  

    http://168.63.170.129/EJBLoginTestWeb/index.jsp

    입력 : hwa5383

    입니다.

    좋은 하루 되십시요..^^

    • 편집됨 gladiator67 2012년 8월 21일 화요일 오전 7:11
    2012년 8월 21일 화요일 오전 2:03
  •  다시 한번 접속을 시도하니 됩니다. 제가 MS Azure에 위 애플리케이션을 업로드해서 실행을 할때 업로드 시간이 거의

    30~40분입니다. 그사이에 DB 쪽 Connection이 강제종료되는 것 같습니다. Googling해보니까 초기 생성

    커넥션 수를 줄이거나 Validation Query를 수행하는 것이라는데....구체적으로 Hibernate를 어떻게 구현을 하는 것인지 잘

    모르겠습니다. Hibernate와 SQL Server 2008예제가 흔하지 않아서요...

    다시 한번 조언 부탁드립니다.  꾸벅(_ _)

    참고로 제 persistence.xml 파일입니다.

    <persistence-unit name="MyFamily">
            <jta-data-source>java:jboss/datasources/SQLServerDS</jta-data-source>
            <properties>
              <property name="hibernate.dialect" value="org.hibernate.dialect.SQLServer2008Dialect"/>
                <property name="hibernate.show_sql" value="true"/>
                <property name="hibernate.hbm2ddl" value="update"/>
                <property name="hibernate.c3p0.min_size" value="5"/>
          <property name="hibernate.c3p0.max_size" value="20"/>
          <property name="hibernate.c3p0.idle_test_period" value="60"/>
          <property name="hibernate.c3p0.max_statements" value="100"/>
            </properties>
        </persistence-unit>

    2012년 8월 21일 화요일 오전 9:23
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    지금 알려주신대로 테스트를 해보니 아래와 같이 메시지가 나오네요.

    아이디 : hwa5383, 암호 : bbb, 이름 : 옹녀입니다.^^ 홍길동이 입력되었습니다.... 임꺽정으로 변경되었습니다.... 삭제하였습니다.

    정상적으로 작동하는 것 같습니다만 실제 오류 메시지가 어떻게 나타나는지 볼 수 있을까요?

    감사합니다.


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    2012년 8월 21일 화요일 오후 1:53
    중재자
  • 안녕하세요. Windows Azure MVP 남정현입니다.

    포럼을 좀 더 검색해보았고, 문제에 대한 접근을 해볼 때, Hibernation과 SQL Azure 사이에 특별한 문제가 있을 것 같진 않습니다.

    그러나 Hibernation의 특성상 연결 유지 기간이 길 때 이 연결을 예고없이 SQL Azure가 닫는 것과 문제 발생 현상이 관계가 있을 것 같습니다. 유휴 상태로 연결을 열어놓는 것도 SQL Azure 입장에서는 관리 대상으로 보기 때문입니다. 그리고 이렇게 문제점으로 인지되어 닫힌 원격 연결에 대해서는 일정 시간동안 연결을 다시 할 수 없도록 Blocking하는 보호 정책까지 더해져서 해결이 늦어질 수도 있을 것 같습니다.

    사용하시는 Hibernation 프레임워크의 종류에 맞는 해결책을 정확히 말씀을 드릴 수 없어 죄송스럽습니다만 일단은 예상되는 원인 중 하나입니다.

    혹 다른 문제나 특이한 점 있으시면 스레드에 덧글 추가 부탁드립니다.

    감사합니다.


    남정현 (rkttu@rkttu.com) - Windows Azure Cafe SYSOP - http://cafe.naver.com/wazure | DEVPIA C# Forum SYSOP - http://www.devpia.com/CSharp.MAEUL | ContentStory (http://www.ineat.co.kr)

    • 답변으로 표시됨 gladiator67 2012년 8월 23일 목요일 오전 4:15
    2012년 8월 21일 화요일 오후 2:04
    중재자