1. 문제상황

ORA-28000: the account is locked

  1. db sys 계정으로 확인
  1. 계정상태 확인 쿼리
select username, account\_status, lock\_date  
from dba\_users  
where username = '홍길동'  
;  
  1. lock 해제
ALTER USER 홍길동 ACCOUNT UNLOCK  

'DBMS' 카테고리의 다른 글

ORACLE DBMS 테이블 스페이스 구성  (0) 2022.10.26

 java.io.FileNotFoundException (Permission denied) 에러 해결방법

  • 파일업로드 관련한 기능을 테스트 중, 특정 시점 이후로 해당 에러로그가 발생
  • 리눅스 서버의 특정 경로나 파일은 각각 읽기/쓰기/실행 권한이 존재하는데 이 권한이 없는 경우 발생
  • 테스트용 개발 서버의 일부 폴더 권한이 root로 변경되어 프로그램 권한으로는 접근 할수 없어서 발생했음
cd '/첨부파일저장경로'

ls -l  # 권한 확인
# 대상 파일이나 경로의 권한문제인 것으로 파악된다면, 소유자를 변경해준다.

chown -R '그룹':'사용자' ./  #  -R옵션은 재귀적으로(Resursive) 하위 폴더 소유자 모두 변경

ls -l # 정상적으로 변경되었는지 확인

 

'Java' 카테고리의 다른 글

[번역] JAVA Reflection  (0) 2022.11.21
자바프로젝트에서의 WEB과 WAS  (0) 2022.11.18
캡슐화(Encapsulation) in Java  (0) 2022.10.11
PriorityQueue in Java  (0) 2022.10.10
[번역] The Basics of Java Generics  (0) 2022.10.05

[extJS] 입력제어

 

입력 자리수 제어

 maxLength : 4,
 minLength : 4,
 enforceMaxLength : true,
 
 

 

VType 오버라이드

  • 기본적으로 제공하는 vtype으로 부족하다면 구현도 가능
Ext.define('Override.form.field.VTypes', {
    override: 'Ext.form.field.VTypes',

    /**
     * 숫자와 '-'만 입력
     */
    numericDashText: "숫자와 '-'만 입력 가능합니다",
    numericDashRe: /^[0-9\-]+$/,
    numericDash: function (value) {
        return this.numericDashRe.test(value);
    },
    

});
 
 
  • 오버라이드 용 VTypes.js 파일 구현
  • Override.form.field.VTypes
 

 

유효성 검사

  • 입력은 가능하지만 유효성 걸리도록 붉은줄 및 메세지 표시
          regex : /^([0-9]{4})$/,
          regexText : '연도형식(YYYY)값만 입력 가능합니다.',
 

 

'extJS' 카테고리의 다른 글

[ExtJS] AllowBlank 속성 동적으로 할당/제거 하기  (0) 2023.01.05

컴포넌트 속성 중 allowBlank는 기본적으론 bind 시켜서 변경 할 수 없습니다.

 

따라서 별도로 해당 컴포넌트를 조작해보았습니다.

 

 

dynamicAllowBlank: function(allowBlankArr, isAllowBlank){

		for(var i = 0; i < allowBlankArr.length; i++){
			if( allowBlankArr[i] ) {
				allowBlankArr[i].allowBlank = isAllowBlank;

				var newFieldLabel = isAllowBlank? allowBlankArr[i].getFieldLabel().replace('<span style="color:red">*</span>', '')
						: allowBlankArr[i].getFieldLabel() + '<span style="color:red">*</span>';
				allowBlankArr[i].setFieldLabel(newFieldLabel);

				if(isAllowBlank){
					allowBlankArr[i].clearInvalid();
				}else{
					allowBlankArr[i].validateValue(allowBlankArr[i].getValue());
				}

			}
		}
	},

 

첫 매개변수는 변경할 컴포넌트들이 담긴 배열,

두번째 변수는 변경을 위한 boolean 값입니다.

 

 1. allowBlank 속성 변경
 2. FieldLabel 변경 : 라벨 오른쪽에 붉은 별 표시
 3. clearInvalid / validateValue 변경 : 입력위치의 붉은 선

'extJS' 카테고리의 다른 글

[extJS] 입력값 제어  (0) 2023.01.06

JAVA Reflection 

 
  • Reflection은 런타임에 메서드, 클래스 및 인터페이스의 동작을 검사하거나 수정하는 데 사용되는 API
  • 리플렉션에 필요한 클래스는 리플렉션을 이해하는 데 필수적인 java.lang.reflect 패키지에 존재
 
  • 리플렉션은 객체가 속한 클래스에 대한 정보와 객체를 사용하여 실행할 수 있는 해당 클래스의 메서드에 대한 정보를 제공합니다.
  • 리플렉션을 통해 사용된 접근 지정자(access specifier)와 상관없이 런타임에 메서드를 호출할 수 있습니다.
 
  • 리플렉션은 클래스, 생성자 및 메서드에 대한 정보를 가져오는 데 사용할 수 있습니다.
ClassConstructorsMethods
 The getClass() method is used to get the name of the class to which an object belongs.
The getConstructors() method is used to get the public constructors of the class to which an object belongs.
The getMethods() method is used to get the public methods of the class to which an object belong

 
이름과 매개변수 유형을 알고 있으면 리플렉션을 통해 메서드를 호출할 수 있습니다. 
 

getDeclaredMethod()

  • 호출할 메서드의 개체를 만듭니다.
Class.getDeclaredMethod(name, parametertype)
Parameters:
  • 객체를 생성할 메서드의 이름
  • 클래스 객체의 배열

 

invoke()

  • 런타임에 다음 메서드를 사용하는 클래스의 메서드를 호출합니다.
Method.invoke(Object, parameter)
  • 클래스의 메서드가 매개 변수를 허용하지 않으면 null이 인수로 전달됩니다.

 
리플렉션을 통해 클래스 개체의 도움으로 클래스의 개인 변수 및 메서드에 액세스하고 위에서 설명한 개체를 사용하여 메서드를 호출할 수 있습니다. 
 

Class.getDeclaredField(FieldName)

  • 프라이빗 필드를 가져오는 데 사용됩니다. 지정된 필드 이름에 대해 Field 유형의 객체를 반환합니다.
 

Field.setAccessible(true)

  • 필드와 함께 사용되는 접근제한자(access modifier)와 상관없이 필드에 액세스할 수 있습니다
 

 

Reflection API의 특징

  • Extensibility Features: 응용 프로그램은 정규화된 이름을 사용하여 확장성 개체의 인스턴스를 만들어 외부 사용자 정의 클래스를 사용할 수 있습니다.
  • Debugging and testing tools: 디버거는 리플렉션 속성을 사용하여 클래스의 전용 멤버를 검사합니다.
  • Performance Overhead: Reflective 작업은 상대적으로 성능이 느리므로 성능에 민감한 애플리케이션에서 자주 호출되는 코드 섹션에서는 피해야 합니다.
  • Exposure of Internals: 반영 코드는 추상화를 깨뜨리므로 플랫폼 업그레이드로 동작이 변경될 수 있습니다.
 

 

참고자료

 
 

WEB

  • 정적
  • 빠름
  • OS위에서 동작
  • 캐싱, 로드밸런싱
 

WAS

  • 동적
  • 아파치는 OS위의 JVM위에서 동작
  • nginX는 OS위의 node.js 위에서 동작
  • 느림
 

어플리케이션을 개발하기 위한 스펙과 구현

 

JAVA EE

  • 자바의 기본적인 기능을 정의한 Java SE에 웹 서버 역할을 추가한 것으로 자바 애플리케이션을 동작시킬 수 있는 컨테이너 등을 표준화한 스펙
 

Servlet

  • 자바에서 웹 어플리케이션을 개발하기 위한 기술 또는 스펙

구현

  • 정의된 스펙들을 만족시키는 구현체가 WAS
  • 자바에서는 Tomcat, JEUS, Jetty 등이 있음
  • OS 위의 JVM 위의 WAS 위에 APP이 구동된다.
 

 

WEB 서버의 역할 

Reverse Proxy

  • 과거 L4스위치라는 하드웨어가 하는 역할(로드밸런서)
  • 사용자가 늘어날 때 응답하는 서버를 분산
  • 사용자가 어느 서버에서 응답을 받는지 모르게 숨김
  • 방화벽 분리 등 보안 상 유리함
  • 확장성이 좋아 많이 사용하는 구성

 

'Java' 카테고리의 다른 글

java.io.FileNotFoundException (Permission denied) 에러 해결방법  (0) 2023.02.20
[번역] JAVA Reflection  (0) 2022.11.21
캡슐화(Encapsulation) in Java  (0) 2022.10.11
PriorityQueue in Java  (0) 2022.10.10
[번역] The Basics of Java Generics  (0) 2022.10.05

1. JDK 설치

  • 톰캣 구동을 위해서는 자바가 필요
 

java 설치 확인

  • cmd 창에서 자바 버전 확인
java -version
  • 이미 설치되었고, JAVA_HOME 환경변수가 등록되어 있다면 다음 단계로 이동. 아니라면 이어서...
 

JDK 설치


JAVA_HOME 환경변수 등록

  • 윈도우의 경우,  내PC > 속성 > 고급 시스템 설정 > 환경변수의 시스템변수에 등록

 

2. tomcat 설치

  • 8.5나 9 버전으로 설치
  • 설치경로 안의 bin 폴더의 starup.bat으로 구동
  • 브라우저의 ‘localhost:8080’ 주소로 톰캣이 구동되고 있는지 확인

tomcat 로그 한글 깨짐

  • conf > logging.properties
java.util.logging.ConsoleHandler.encoding = EUC-KR
  • UTF-8 로 되어 있다면 EUC-KR로 변경해준다
 

OJDBC

  • lib 경로에 ojdbc6.jar 추가 (오라클)

war 파일 다운로드

 
  • 설치경로 안의 webapps 폴더에 war파일 이동
 

Server.xml (Context path)

  • 설치경로 안의 conf 폴더에 server.xml 파일 수정
<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    <Context path="/appName" docBase="applicationWarName"  reloadable="false" > </Context>  
</Host>
  • Host 태그 내부에 Context태그 추가
 

Server.xml (JNDI)

  <!-- Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
  -->
  <GlobalNamingResources>
    <!-- Editable user database that can also be used by
         UserDatabaseRealm to authenticate users
    -->
    <Resource name="UserDatabase" auth="Container"
              type="org.apache.catalina.UserDatabase"
              description="User database that can be updated and saved"
              factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
              pathname="conf/tomcat-users.xml" />

    <!-- oracle -->
    <Resource name="jdbc/ds_erp_app" auth="Container"
              type="javax.sql.DataSource"
              driverClassName="oracle.jdbc.driver.OracleDriver"
              url="jdbc:oracle:thin:@devdb.erp.co.kr:1521:xe"
              username="id" password="pw"
              maxTotal="10" maxWaitMillis="5000"
              testOnBorrow="false" testWhileIdle="true"
              />

  </GlobalNamingResources>
 
 
 

conf> context.xml

 
<?xml version="1.0" encoding="UTF-8"?>
<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!-- The contents of this file will be loaded for each web application -->
<Context>

    <!-- Default set of monitored resources. If one of these changes, the    -->
    <!-- web application will be reloaded.                                   -->
    <WatchedResource>WEB-INF/web.xml</WatchedResource>
    <WatchedResource>WEB-INF/tomcat-web.xml</WatchedResource>
    <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
    <!-- cache : 50MB -->
    <Resources cachingAllowed="true" cacheMaxSize="51200"/>
    <!-- Uncomment this to disable session persistence across Tomcat restarts --                                                                      >
    <!--
    <Manager pathname="" />
    -->

    <ResourceLink name="jdbc/ds_erp_app"
                  global="jdbc/ds_erp_app"
                  type="javax.sql.DataSource"
                  />

</Context>
 

 

3. Oracle 11g xe 설치

 
  • 오라클 11g xe 다운로드 링크
https://www.oracle.com/database/technologies/xe-prior-release-downloads.html
  • SID 등 기억
  • 설치확인 cmd
sqlplus
 

sqlplus에서  포트 변경

 
  • 디폴트는 8080

  • EXEC DBMS_XDB.SETHTTPPORT(9080);
     

프로그램 기초 데이터 생성

  • 사용자 아이디 비밀번호 대소문자 구분

 

'개발환경' 카테고리의 다른 글

Git Tag  (0) 2024.06.08
Git branch  (0) 2024.06.08
설치형 eXERD v3 SVN 플러그인 설치  (0) 2024.03.27


이 글에서 우리는 완전 탐색 알고리즘과 이것의 장단점에 대해 다룹니다. 완전 탐색 알고리즘은 다음과 같은 장단점을 갖고 있습니다:

  • 주어진 문제에 대한 가능한 모든 방법을 열거하는 직관적이고 직접적인 문제해결 기술입니다.
  • 완전 탐색 알고리즘을 이용하여 일상 생활의 많은 문제를 해결해왔습니다. 예를 들어 최단 경로를 찾기 위해 인근 시장으로 가는 모든 경로를 탐색합니다.
  • 선반 공간 등을 최적화하기 위해 모든 가능성을 사용하여 선반에 책을 배열 합니다.
  • 사실 일상 생활 활동은 최적 알고리즘도 가능하지만 무차별 대입 방식을 사용합니다.

완전 탐색 알고리즘의 장점과 단점:

장점:

  • 완전 탐색 접근 방식은 문제에 대한 가능한 모든 후보 솔루션을 나열하여 올바른 솔루션을 찾는 보장된 방법입니다.
  • 일반적인 문제 해결 방법으로, 특정 문제 영역에 국한되지 않습니다.
  • 작고 간단한 문제들을 해결하는데 이상적입니다.
  • 단순성으로 유명하며 비교 벤치마크 역할을 할 수 있습니다.

단점:

  • 완전 탐색 접근 방식은 비효율적입니다. 실시간 문제의 경우 알고리즘 분석은 종종 O(N!) 증가 차수를 초과합니다..
  • 좋은 알고리즘 설계보다 문제를 해결하기 위해 컴퓨터 시스템의 성능을 손상시키는데 더 많이 의존합니다.
  • 속도가 느립니다.
  • 다른 설계 패러다임을 사용하여 구성된 알고리즘에 비해 건설적이거나 창의적이지 않음

결론:


완전 탐색 알고리즘은 모든 영역의 문제에 대한 솔루션을 보장하는 기술입니다. 간단한 문제를 해결하는데 도움이 되며 다른 설계 기술을 평가하는 벤치마크 역할을 할 수 있습니다. 하지만 실행 시간이 많이 걸리며 비효율적입니다.


원문

'알고리즘' 카테고리의 다른 글

길찾기 문제 - BFS  (0) 2022.10.27

+ Recent posts