일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- kubectl
- NCP
- dbeaver
- MySQL
- database
- springboot
- tibero
- Git
- Java
- nodejs
- useEffect
- LOG4J
- BPMN
- maven
- docker
- react
- wildfly
- gson
- JavaScript
- log4j2
- VSCode
- intellijIDEA
- JPA
- Windows
- Spring
- gradle
- Kubernetes
- nginx
- IntelliJ
- mybatis
- Today
- Total
목록프로그래밍언어 (41)
두 손끝의 창조자
java.lang.reflect.Type Type은 Java 프로그래밍 언어의 모든 Type에 대한 공통 수퍼 인터페이스입니다. 여기에는 Raw types, Parameterized types, Array types, Type variables, Primitive types이 포함됩니다. GenericArrayType ParameterizedType WildcardType TypeVariable Class
CheckStyle로 자바 코드의 스타일을 강제할 수 있다. 하지만 test 코드는 이 강제에서 좀 벗어나게 할 수 있는데 그걸 구현할 수 있는 모듈이 SuppressionFilter이다. checkStyle.xml 설정 파일에서 Checker 모듈 바로 밑에 모듈을 추가한다. config_loc 은 기본값으로 프로젝트 루트 기준으로 config/checkstyle 이 된다. 상대 경로로 지정이 안되니 이런 변수값을 활용해서 지정하는 수밖에 없다. checkStyle-suppressions.xml 파일에 무시할 파일의 패턴과 어떤 Check를 그냥 통과시킬지 정의하면 된다. 위 xml은 src/text 밑에 있는 모든 java 파일들에 대해서 JavadocPackage, FileLength, Missin..
wildfly는 VFS 를 사용한다. getClass().getResource() 를 하면 url을 가져오지만 실제로 존재하는 경로가 아니기 때문에 그 경로로 파일을 가져온다던지 하는 것은 안된다. getClass().getResourceAsStream() 메소드로 스트림을 바로 가져오던지 해야한다. 이렇기 때문에 클래스 패스 리소스 안에 어떤 파일들이 있는지 파일 목록을 가져오는데 문제가 있다. jboss에서 제공하는 라이브러리를 활용해서 처리해야한다.
오브젝트는 instanceof 로 간단하게 여부를 알 수 있다. 클래스끼리 관계를 알고 싶을 때는 isAssignableFrom 메소드를 이용하자. 예를 들어 A 인터페이스를 구현한 AA 클래스가 있다면 AA 클래스가 A 인터페이스의 서브타입인지 확인 하고자 할 때 A.class.isAssignableFrom(AA.class) 하면 됨
대용량 파일을 읽어 라인별 처리를 하는 것을 시도하였다. DirectByteBuffer를 사용한 이유는 대용량 데이터를 시스템에서 읽어서 jvm에 올리는 비용을 줄이고자 함이었다. 내가 필요한 작업은 파일을 일어서 행별로 읽어들이는 거였는데 DirectByteBuffer는 행단위 Reader를 제공하지 않는다. 그래서 별도로 구현을 했는데 구현 과정에 byte배열에 복사하고 하는 과정이 제법 있어서그런지 이렇다할 성능개선은 보이지 았았고 오히려 느려졌다. DirectByteBuffer는 데이터를 읽어 별도로 다른 buffer에 넣지 않고 즉시처리, 예를 들어서 다른 socket으로 보낸다던지 하는 경우 성능개선에 도움이 될 것같다. import sun.nio.ch.DirectBuffer; import j..
파일을 찾을 수 없을 때 주로 이 예외가 발생하지만, 파일이 너무 많이 열려있어서 OS에서 파일 여러는 것을 막아버릴수도 있다. 이때도 FileNotFoundException 이 발생한다. 메시지는 "Too many open files". 현재 OS에 설정되어 있는 최대 파일 오픈가능 개수를 확인한다. ulimit –a 명령어로 open files 설정값을 확인한 뒤 현재 특정 프로세스에 의해 열린 파일들도 확인한다. lsof -i :[port] 로 특정 포트를 사용하고 있는 프로세스를 확인한다. lsof -p [PID] | wc –l 로 현재 오픈되어 있는 파일들의 개수를 확인하고 적절한 값으로 변경한다. ulimit -n [변경개수] 명령어로 변경한다.
NioEndpoint->AbstractProtocol#process->Http11Processor#service->CoyoteAdapter#service 프로토콜이(HTTP/1.1 이면 Http11NioProtocol) 소켓에서 요청 정보를 받아서 처리할 프로세서를 가져온다. 프로세서는 AbstractProcessorLight를 구현한 구현체가 반환될텐데 HTTP/1.1이면 Http11Processor를 선택 할 것이다. 프로토콜은 프로세서의 service 메소드를 호출하면서 요청처리를 넘긴다. 프로세서에서는 처음으로 Request, Response 객체가 등장하고 CoyoteAdapter의 Service를 호출하면서 컨테이너에 Resquest와 Response객체를 넘긴다.
서블릿이 올바르게 초기화된 후, 서블릿 컨테이너는 이를 사용하여 클라이언트 요청을 처리할 수 있습니다. 요청은 ServletRequest 유형의 요청 오브젝트로 표시됩니다. 서블릿은 ServletResponse 유형의 제공된 오브젝트의 메서드를 호출하여 요청에 대한 응답을 채 웁니다. 이 오브젝트는 Servlet 인터페이스의 서비스 메서드에 매개 변수로 전달됩니다. HTTP 요청의 경우 컨테이너가 제공하는 객체는 HttpServletRequest 및 HttpServletResponse 유형입니다. 서블릿 컨테이너가 서비스에 배치 한 서블릿 인스턴스는 수명 동안 요청을 처리할 수 없습니다. 멀티 스래드 이슈 서블릿 컨테이너는 서블릿의 서비스 메소드를 통해 동시에 여러 요청을 보낼 수 있습니다. 요청을 처리..
서블릿이란? 서블릿은 컨테이너로 관리되는 동적 콘텐츠를 생성하는 Java ™ 기술 기반 웹 컴포넌트입니다. 다른 Java 기술 기반 구성 요소와 마찬가지로 서블릿은 플랫폼에 독립적인 Java 클래스로, 플랫폼에 중립적인 바이트 코드로 컴파일되어 Java 기술 지원 웹 서버에 동적으로 로드되어 실행될 수 있습니다. 서블릿 엔진이라고도하는 컨테이너는 서블릿 기능을 제공하는 웹 서버 확장입니다. 서블릿은 서블릿 컨테이너에 의해 구현된 요청 / 응답 패러다임을 통해 웹 클라이언트와 상호 작용합니다. 서블릿 컨테이너란? 서블릿 컨테이너는 요청 및 응답이 전송되는 네트워크 서비스를 제공하고 MIME 기반 요청을 디코딩하며 MIME 기반 응답을 형식화하는 웹 서버 또는 애플리케이션 서버의 일부입니다. 서블릿 컨테이너..
프래임워크를 사용한 애플리케이션의 상태를 확인하기 위해서 오픈소스 성능 분석도구 Scouter를 적용해봤다. 구성요소 및 역할 1. 정보를 수집하는 Collector. 타겟에서 발생하는 이벤트를 수집한다. 타겟에 설치한 Host Agent와 Java Agent로 정보를 받는다. 6100 포트를 사용한다. 2. WAS가 설치된 서버의 상태를 컬렉터로 송신하는 Host Agent 3. WAS에 붙어서 애플리케이션 상태를 컬렉터로 송신하는 Java Agent 4. 컬렉터가 수집한 정보를 모니터링하는 Client. 이클립스 기반 클라이언트는 컬렉터의 ID를 환경설정에서 설정한 뒤 사용한다. 웹 버전 클라이언트도 공개되어 있다. 설치 아래 사이트에 접속한 뒤 최신버전을 다운로드 한다. 파일은 scouter-all..
이 Appender에 환경변수값을 바인딩할 수 있는 표현식 ${sys:key} 에서 환경변수에 그 값이 없으면 기본값으로 가지도록 하고자 할 때는 local 에 를 추가하면 된다. 표현식 내에서 직접 넣고 싶으면 ${sys:fileHourName:-하고싶은값} 형태로 선언하면 된다. 프로퍼티 내에 표현식이 있을 때도 마찬가지로 하면 된다. INFO ${sys:systemLogLevel} http://logging.apache.org/log4j/2.x/manual/configuration.html#PropertySubstitution
HttpClient 전송중에 커넥션에 끊기면 자동적으로 재송신 시도를 한다. 필요에 따라 재전송하면 안되는 경우에 하는 조치이다. HttpClientBuilder.create().disableAutomaticRetries().build();
ES6(ECMA2015)에서 처음 소개된 import, export, const 같은 기능들은 ES6을 지원하지 않는 브라우저에서는 실행되지 않는다. ES6 문법으로 만들어진 소스 코드를 ES5 등 다른 형태로 변환을 시켜주는 트랜스 파일러 중에 한 아이가 Babel이다. import, export는 require, module.exports로 변환이 되는데 이 둘은 또 브라우저가 해석하지 못한다. 그래서 모듈을 가져오는 것들을 한 파일로 만들어서 require 같은 키워드를 사용하지 않아도 되도록 한 파일로 묶어줄 필요가 있다. 그럴 때 쓰는 것이 번들러라고 하고 번들러 중에는 webpack, rollup 등이 있다. ES6에서 ES5로 전환할 수 없는 기능은 변환하지 않고 그대로 놔두는데 이게 구형 ..
Formatter를 Prettier 사용하고 있다는 전제하에 settings.json 파일 열기 VS Code에서 cmd + shift + p 를 눌러서 커맨드 창을 연뒤 open settings(json)를 선택해서 settings.json 파일을 연다. 설정추가 아래 설정을 추가한다. "vetur.format.defaultFormatterOptions": { "prettier": { "singleQuote": true } } 세미콜론 자동 추가도 끄자 "vetur.format.defaultFormatterOptions": { "prettier": { "singleQuote": true, "semi": false } }
1. 프로젝트 생성 vue-cli 3.X vue create '프로젝트 명' vue-cli 2.X vue init webpack '프로젝트 명' 2. 프로젝트 구조 vue-cli 3.X vue-cli 2.X
핵심 Interface PlatformTransactionManager getTransaction() commit() rollback() TransactionDefinition 트랜잭션 4가지 속성 구현체 DataSourceTransactionManager TransactionAPI를 이용해서 관리 트랜잭션을 적용할 datasource가 빈으로 등록되어 있어야 함 JDBC과 SqlMap으로 만든 DAO에 적용가능함 트랜잭션을 적용할 DAO가 사용하는 것과 동일한 datasource를 빈으로 제공해야 함 Datasource를 getConnection()이 호출될때마다 매번 새로운 Connection을 돌려줘야 함 ThreadLocal 등을 이용해 트랜잭션을 저장해두고 돌려주는 특별한 기능을 가진 DataS..
JavaScript Array에서 Element 하나를 지울 때 delete Operator를 사용하여 지울 수 있습니다. 이 명령어로 삭제를 했을 때 해당하는 index는 undefined로 바뀌고 Array의 길이는 변하지 않습니다. var fruits = ["Banana", "Orange", "Apple", "Mango"]; delete fruits[1];위 구문 실행 후 fruits의 상태는 원하는 결과 : ["Banana", "Apple", "Mango"] 처리 결과 : ["Banana", undefined, "Apple", "Mango"] 이렇게 되어 원하는 결과를 얻지 못하는데요, 원하는 결과를 얻기 위해서는 splice() Method를 사용 해야합니다.fruits.splice(1, 1);..
1. SW공학 수업의 핵심 주장: SW is not a function but a dynamic sytem(state transition machine) dynamic system의 구성요소 a. 초기자원 b. 상태변환규칙들 c. 최종상태 변환방식 옛날 방식 specification -> 프로그램 -> 자바 코드 새로운 방식 specification -> 프로그램 -> 상태변환 기계 [C interpreter or Java or prolog...] 2. Why linear logic is important. 계발시간이 짧아진다. ex) sum(n) = 1+2+3+ ... + n을 프로그램하시오. 상태변환기계.. 초기자원 : 변환규칙 : -> linear logic programming: sum(1,1)...
semantic web : 핵심 idea : web 정보를 사람이 처리하는 것이 아니라, 컴퓨터가 자동으로 처리 web page in English = program but not a good program. 웹은 프로그램의 자격은 있지만 좋은 프로그램이 아님. =>자연어 처리가 요구되기 때문에 효율성이 떨어짐. ==> 자연어 대신에 linear logic을 사용 ex) in Korean 부산에서 제일 좋은 대학교는 동아대이다. in English The best university in Busan is Dong-a University. in C or Java,etc.. bestuniv(busan) = donga. Korean에서 C로 옮길 때 많은 정보를 잃어 버렸다. 따라서 자연어에서 다른 언어로 옮..
단계 1. 사용자 요구 분석 - 사용자가 개발자에게 줘야 할 정보 = what(specification language(명세언어:어떤것을 정의할 때 쓰는 언어, 종류:petrinet, finite state mechine, logic),) - 개발자가 사용자에게 줘야 할 정보 = how(c, java) 2. 설계 - 모듈(또는 객체)로 분할하여 공략 3. 구현 - 모듈의 인터페이스를 실제 구현 4. 테스팅 today's topic : specification ex1) tree를 일반인에게 설명 -> 아주 쉽지도 어렵지도 않다. ex2) Given two list L1 and L2, define L1 = L2 두 개의 리스트 L1, L2가 있을때 L1, L2가 같다는 개념을 정의하고 싶다. 두 개의 리스트..