일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Git
- gson
- intellijIDEA
- gradle
- jetbrains
- Spring
- JavaScript
- Windows
- MySQL
- nodejs
- tibero
- nginx
- log4j2
- useEffect
- react
- springboot
- LOG4J
- wildfly
- dbeaver
- BPMN
- JPA
- IntelliJ
- VSCode
- docker
- maven
- Kubernetes
- mybatis
- NCP
- Java
- database
- Today
- Total
목록분류 전체보기 (238)
두 손끝의 창조자
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에서 제공하는 라이브러리를 활용해서 처리해야한다.
게이트웨이는 시퀀스 흐름이 프로세스 내에서 모이고 흩어지는 방식을 제어하는데 사용. 다른 액티비티와 마찬가지로 토큰을 소비하고 토큰 추가 만들 수 있다. 모든 비즈니스 프로세스 흐름을 정의하는데 결정, 분기, 모이기, 복사, 연결 등에 사용할 수 있음. 게이트웨이는 발산 및 수렴을 제어하는데 이 말은 여러 인풋, 여러 아웃풋을 가질 수 있다는 의미임. Exclusive Gateway 한 곳만 선택 Inclusive Gateway 모든 흐름이 평가되고 참인 곳으로 모두 토큰을 보냄 병렬로 흩어진 흐름을 모으는데도 사용. 토큰이 게이트웨이에 도착하면 다른 흐름에서 오는 토큰을 기다릴 수 있음 Parallel Gateway 흐름에 대한 평가를 하지 않고 모든 흐름으로 토큰을 보냄 Complex Gateway ..
오브젝트는 instanceof 로 간단하게 여부를 알 수 있다. 클래스끼리 관계를 알고 싶을 때는 isAssignableFrom 메소드를 이용하자. 예를 들어 A 인터페이스를 구현한 AA 클래스가 있다면 AA 클래스가 A 인터페이스의 서브타입인지 확인 하고자 할 때 A.class.isAssignableFrom(AA.class) 하면 됨
MSC000001: Failed to start service jboss.module.service. Spring 4 버전으로 다운그레이드 필요
Spring MVC를 사용하고 보안을 위해 스프링 시큐리트를 도입했다면 볼 수 있는 예외 스프링 시큐리티의 HttpSecurity 설정 중 matcher로 MvcRequestMatcher를 사용하면 발생한다. http.authorizeRequests( authorize -> authorize .mvcMatchers("/api/").permitAll() .mvcMatchers("/hello").permitAll() .mvcMatchers("/admin").authenticated() ) No bean named 'A Bean named mvcHandlerMappingIntrospector of type org.springframework.web.servlet.handler.HandlerMappingIntr..
A 테스트 클래스에서는 @ContextConfiguration(classes = {AppConfig.class}) 형태로 컨택스트를 가져오고 B 테스트 클래스에서는 @ContextConfiguration(/applicationContext.xml 형태로 컨택스트를 가져오도록 설정했을 때, A와 B클래스 테스트 실행 순서에 따라서 AppConfig 클래스 설정정보를 먼저 로드하거나 applicationContext.xml 의 설정정보를 로드하게 된다. 문제는 두 설정 정보가 똑같다면 상관없지만 다르다면 A또는 B테스트에서 설정이 정확하게 세팅이 안된다. 왜냐하면 컨텍스트 두개를 동시에 불러서 테스트 컨텍스트에 올리지 않기 때문에다. 먼저 올라온 놈이 먼저 세팅되고 하나는 무시된다. 이 문제를 해결하기 위해..
- push 전 git commit --amend git rebase -i HEAD~2 해서 reword - push 후 * base repository option git config receive.denyNonFastForwards false * push 취소 git push -f origin HEAD^:dev -- 누군가 받았을 때 로컬에서 커밋 수정 후 git push -f 이거 했을 때 ! [remote rejected] dev -> dev (non-fast-forward) 에러나면 강제 push 권한 있는지 확인 받은 사람한테 fetch 후 reset --hard 로 변경된 커밋으로 이동하라고 알려야 함 -- 안 받았을 때 로컬에서 커밋 수정 후 git push -f
커맨드 라인에서 "code" 로 vscode가 실행되어야 함 환경 변수 파일 열기 ~/.gitconfig 환경 변수 파일이 없으면 한번도 설정정보를 넣은적 없다는 의미임. 이메일을 등록하든, 이름을 등록하든 하나는 설정한 뒤에 하던지, 파일을 직접 만들면 됨. 아래 설정은 lt 명령어로 log를 그래프로 표시되게 하는 설정. git config --global alias.lt "log --oneline --decorate --graph --all"이렇게 한뒤 git log lt라고 치면 로그가 그래프로 나옴. log lt -10라고 치면 최근 10개만 나옴 환경 설정하기 커밋 메시지 등에 사용할 에디터를 vscode로 설정함 비교 기능도 vscode에서 실행되도록 설정함 [core] editor = co..
git reflog --date=local [branch]
대용량 파일을 읽어 라인별 처리를 하는 것을 시도하였다. DirectByteBuffer를 사용한 이유는 대용량 데이터를 시스템에서 읽어서 jvm에 올리는 비용을 줄이고자 함이었다. 내가 필요한 작업은 파일을 일어서 행별로 읽어들이는 거였는데 DirectByteBuffer는 행단위 Reader를 제공하지 않는다. 그래서 별도로 구현을 했는데 구현 과정에 byte배열에 복사하고 하는 과정이 제법 있어서그런지 이렇다할 성능개선은 보이지 았았고 오히려 느려졌다. DirectByteBuffer는 데이터를 읽어 별도로 다른 buffer에 넣지 않고 즉시처리, 예를 들어서 다른 socket으로 보낸다던지 하는 경우 성능개선에 도움이 될 것같다. import sun.nio.ch.DirectBuffer; import j..
github에서 PR을 올렸는데 실패하거나 수정 요청이들어오면 어떻게 하나? 일단 PR에 올라가는 커밋은 단일 커밋으로 해야 프로젝트 이력관리에 유리하게 때문에 그렇게 해야한다. 수정을 하면 커밋이 하나 더 발생할 텐데 그럼 어떻게 하냐? 로컬에서 변경사항을 만들어서 커밋 한 뒤에 한 커밋으로 다시 만든다. 한 커밋으로 만드는 것은 rebase --interactive로 해도 되고 내 같은 경우는 그냥 git commit --amend 로 전 커밋과 바로 합쳐서 한 커밋으로 만들었다. push -f 로 강제로 올리면 github에 올라간 pr도 같이 자동으로 새로운 커밋id로 변경되면서 다시 프로세스가 진행된다. 긋긋 가장 좋은건 올리기전에 체크체크체크
파일을 찾을 수 없을 때 주로 이 예외가 발생하지만, 파일이 너무 많이 열려있어서 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객체를 넘긴다.
HTTP 커넥터 요소는 HTTP / 1.1 프로토콜을 지원하는 커넥터 구성 요소를 나타냅니다. 이를 통해 Catalina는 서블릿 및 JSP 페이지를 실행하는 기능 외에도 독립형 웹 서버로 작동할 수 있습니다. 이 구성 요소의 특정 인스턴스는 서버의 특정 TCP 포트 번호에서 연결을 수신합니다. 하나 이상의 이러한 커넥터를 단일 서비스의 일부로 구성 할 수 있으며, 각각은 요청 처리를 수행하고 응답을 생성하기 위해 연관된 엔진으로 전달합니다. 들어오는 각 요청에는 해당 요청 기간 동안 스레드가 필요합니다. 현재 사용 가능한 요청 처리 스레드에서 처리할 수 있는 것보다 더 많은 동시 요청이 수신되면 구성된 최대 값 (maxThreads 속성 값)까지 추가 스레드가 생성됩니다. 더 많은 동시 요청이 수신되면..
서블릿이 올바르게 초기화된 후, 서블릿 컨테이너는 이를 사용하여 클라이언트 요청을 처리할 수 있습니다. 요청은 ServletRequest 유형의 요청 오브젝트로 표시됩니다. 서블릿은 ServletResponse 유형의 제공된 오브젝트의 메서드를 호출하여 요청에 대한 응답을 채 웁니다. 이 오브젝트는 Servlet 인터페이스의 서비스 메서드에 매개 변수로 전달됩니다. HTTP 요청의 경우 컨테이너가 제공하는 객체는 HttpServletRequest 및 HttpServletResponse 유형입니다. 서블릿 컨테이너가 서비스에 배치 한 서블릿 인스턴스는 수명 동안 요청을 처리할 수 없습니다. 멀티 스래드 이슈 서블릿 컨테이너는 서블릿의 서비스 메소드를 통해 동시에 여러 요청을 보낼 수 있습니다. 요청을 처리..
서블릿이란? 서블릿은 컨테이너로 관리되는 동적 콘텐츠를 생성하는 Java ™ 기술 기반 웹 컴포넌트입니다. 다른 Java 기술 기반 구성 요소와 마찬가지로 서블릿은 플랫폼에 독립적인 Java 클래스로, 플랫폼에 중립적인 바이트 코드로 컴파일되어 Java 기술 지원 웹 서버에 동적으로 로드되어 실행될 수 있습니다. 서블릿 엔진이라고도하는 컨테이너는 서블릿 기능을 제공하는 웹 서버 확장입니다. 서블릿은 서블릿 컨테이너에 의해 구현된 요청 / 응답 패러다임을 통해 웹 클라이언트와 상호 작용합니다. 서블릿 컨테이너란? 서블릿 컨테이너는 요청 및 응답이 전송되는 네트워크 서비스를 제공하고 MIME 기반 요청을 디코딩하며 MIME 기반 응답을 형식화하는 웹 서버 또는 애플리케이션 서버의 일부입니다. 서블릿 컨테이너..
web.xml에 두 필터를 설정할 때 순서가 매우 중요하다. Spring-Session이 먼저, Spring-Security가 이어서 와야한다.
프래임워크를 사용한 애플리케이션의 상태를 확인하기 위해서 오픈소스 성능 분석도구 Scouter를 적용해봤다. 구성요소 및 역할 1. 정보를 수집하는 Collector. 타겟에서 발생하는 이벤트를 수집한다. 타겟에 설치한 Host Agent와 Java Agent로 정보를 받는다. 6100 포트를 사용한다. 2. WAS가 설치된 서버의 상태를 컬렉터로 송신하는 Host Agent 3. WAS에 붙어서 애플리케이션 상태를 컬렉터로 송신하는 Java Agent 4. 컬렉터가 수집한 정보를 모니터링하는 Client. 이클립스 기반 클라이언트는 컬렉터의 ID를 환경설정에서 설정한 뒤 사용한다. 웹 버전 클라이언트도 공개되어 있다. 설치 아래 사이트에 접속한 뒤 최신버전을 다운로드 한다. 파일은 scouter-all..