Maven project를 deploy 하는 과정에서 다음과 같은 오류가 발생할 수 있다. [INFO] ------------------------------------------------------------------------ [INFO] BUILD FAILURE [INFO] ------------------..
프로젝트에서 같은 성격의 여러개의 UI 서버가 생기게 되었다. 여러개의 UI 서버지만 UI 단의 공통은 하나로 가져가야 한다. 그래야지 n번의 재작업을 하지 않을테니까.. 공통화 하려고 하는 항목은 static resou..
지난번에는 gogs라는 자체 호스팅 git 서비스를 설치해 보았고 프로젝트를 만들어 보는것을 포스팅하였다. 이번시간에는 gogs를 어떻게 사용하는지에 대해서 알아보도록 하겠다. 결론부터 얘기를 하자면 gitlab을..
STS(Spring Tool Suite)는 이클립스 (or visual studio code or theai) 기반의 스프링에 최적화된 IDE이다. java로 프로젝트 하는 곳에서 Spring을 사용하지 않는 곳이 없으니 이 STS도 개발환경 구성의 필수 요소..
Windows 환경에 임시 개발환경을 구성해야 할 일이 생겼다. SCM(Source Code Management) 으로 git을 사용하고 자체 호스팅 git 서비스로 무엇을 쓸까 고민을 했다. linux에서는 gitlab을 쉽게 설치해서 사용을..
Springboot 환경이 보편화가 되고 많은 부분들이 편해졌고 필자는 Batch가 엄청나게 편해진것 같다. 많이 사용해서 그런것 같다. 왜 Springboot Batch가 좋은지에 대해서는 이 글에서 다룬적이 있다. 그리고 빌드..
Spring이 고도화되면서 점차 properties 파일은 사용되지 않고 yaml 파일을 사용하고 있다. 써보면 yaml 이 좋은점이라고 생각되는 점이 첫번째로는 가독성이 더 좋고 두번째로는 spring profiles 적용시 하나의..
프로젝트를 하다 보면 3rd party library를 사용할 일이 빈번하게 있다. 이를 Nexus에 등록하는 과정은 지난번에 다룬적이 있다. (궁금하다면 이곳을 참조하도록 하자.) 지난번에는 등록하는 과정이었다면 이제는..
개발을 하고 was를 기동할때 아래와 같은 메세지를 만날 수 있다. Caused by: org.springframework.core.NestedIOException: Failed to parse mapping resource: 'file [C:\oingdaddy\target\classes\~\oingServic..
엄청 고인물일수도 있는데... 잠도 안오고 해서... Jenkins에 처음 접속하면 위와 같이 온화한 Jenkins아저씨가 반겨준다. 하지만! plugin manager에서 emotion 이라고 검색을 해보면 emotional-jenkins-plugin..
[WARN ][o.s.w.s.m.s.DefaultHandlerExceptionResolver.logException:line199] - Resolved [org.springframework.http.converter.HttpMessageNotWritableException: No converter found for return value of type:..
API 통신을 할때 json으로 메세지를 보내면 다음과 같은 오류를 자주 접할 수 있다. 바로 Content Type이 맞지 않는다는 메세지이다. 위와 같이 message가 application/json not supported면 요청을 보낼 때 Head..
빠르게 MSSQL 환경을 구성해야 할 일이 생겼다. Docker가 있어서 이제 이런건 정말 간단하게 해결할 수 있다. Docker를 설치하는것은 이 글을 참조하도록 하자. Docker Windows 에 설치하기 지난번에는 linux 환경..
MyBatis 진영에서 MyBatis-Spring-Boot-Starter 라는것을 내놓았다. 아니.. 나만 몰랐던것 같다. 누군가가 작성한 샘플을보니 mybatis-config.xml (MyBatis 설정파일) 파일에 보통 있어야 할 내용들이 없는데도 있..
일전에 springboot base에서 File to DB Spring Batch 에 대한 예제를 포스팅했었다. 이번에는 DB to File Spring Batch에 대한 예제를 살펴보도록 하겠다. 대략적인 시나리오는 DB로부터 내용을 읽어서(JdbcCurso..
지난번에는 Custom ArgumentResolver를 만드는 예제를 해봤다. 이전에 다뤘던 ArgumentResolver가 Controller에 들어오는 파라미터를 가공 및 추가를 하는데 사용되었다면, RetunValueHandler는 리턴 타입으로 판..
Spring을 사용하면서 ArgumentResolver라는것을 한번은 들어봤을 것이다. 이것은 Servlet 과 Controller 사이에서 전달되어진 값을 가공하거나 추가할 필요가 있을때 사용한다. AOP와 같이 중복 코드를 제거하는데..
그동안 잘 사용하고 있던 RestTemplate이 곧 Deprecated가 된다고 한다. 그렇다고 못쓰는건 아니다. NOTE: As of 5.0 this class is in maintenance mode, with only minor requests for changes and bugs to be..
MinioClient를 통해 putObject를 하는 과정에서 다음과 같은 오류가 발생하였다. io.minio.errors.ErrorResponseException: Object name contains unsupported characters. at io.minio.MinioClient.executeReq(Mi..
File과 관련된 백엔드단 테스트가 필요한 경우가 종종 있다. File을 MultipartFile 형식으로 바꾸어서 처리를 해줘야 하는 경우가 있는데 어떻게 해야 하는지 난감하다. 그럴때는 아래와 같은 로직을 추가함으로써..
spring cloud openfeign 을 사용하기 위해 관련 dependency를 넣고 springboot 기동을 했는데 아래와 같은 오류가 발생했다. Caused by: java.lang.ClassNotFoundException: org.springframework.boot.context.pro..
spring cloud openfeign 을 사용하는데 오류가 발생하였다. Caused by: java.lang.IllegalStateException: Method has too many Body parameters: public abstract byte[] com.example.demo.testFeign.encryption(..
지난 시간에는 Springdoc을 사용하는 한 사이클에 대해서 봤다면 이번시간에는 어떻게 상세하게 내가 원하는대로 설정을 할 수 있는지에 대해서 알아보겠다. OpenAPI 설정 지난시간에 application.yml 파일에 spri..
지난번에 JavaDoc이라던지 JSDoc을 사용하는 방법에 대해서 다룬적이 있었다. 이와 마찬가지 맥락으로 API Docs을 생성하는 방법도 있다. MSA가 유행을 하며 이로 구성된 시스템은 수많은 API Service를 관리해야..
이클립스에서 git을 사용하면 여러가지 문제와 직면하게 된다. 그중 가장 골치가 아픈것이 충돌(Conflict) 문제인데 이에 대해 간단하게 해결하는 방법에 대해 소개하고자 한다. Pull Conflict pull 을 받고 comm..
개발환경을 구성해야 하는 입장에서 Eclipse와 JDK의 호환성 여부는 꼭 알고 있어야 한다. 한동안 jdk version 8에 머물고 있어서 편했는데 이제 또 챙겨야 하는 시점이 왔다. eclipse version jdk version Eclips..
Eclipse(STS)를 구동시킬때 openjdk 11을 사용하다가 어떠한 이유로 jdk 1.8을 사용해야 할 일이 생겼다. 그래서 SpringToolSuite4.ini (eclipse.ini) 파일에서 vm을 jdk 1.8 이 설치된 위치로 변경시키고 기동을..
springboot에 대해 이론적으로 열심히 공부를 해보지는 않았지만 사용해보면서 기존 spring과 가장 많이 다르다고 느낀점은 크게 두가지가 있다. 하나는 embedded was를 사용하여 간단히 구동을 시켜볼 수 있다(St..
들어오는 Data에 대한 검증은 어디에서나 필요하다. @Data public class MemberDto { @NotNull(message="name must not be null") private String name; ... 후략 ... } 위와 같은 방식으로 DTO에 message를 하드..
한글은 위대하지만 우리나라가 IT 업계를 선도하지 못해서 우리나라 개발자는 이런 인코딩과 관련된 문제를 많이 겪고 있다. 인코딩에 관련된 공수만 아꼈어도 더욱 발전된 우리나라 IT의 모습이 있었을것 같다...
이전에 springboot와 hsqldb를 연동해서 간단히 프로토타입을 만들기 위한 준비를 했었다. Springboot + embedded hsqldb 로 간단히 샘플 프로젝트 만들기 springboot는 이게 정말 왜 되지? 할 정도로 내장되어 있..
Eclipse에서 Java 파일들에 대해 JavaDoc을 생성하는 방법은 지난 포스팅에서 살펴보았다. 하지만 이건 말그대로 Java 파일들에 대해서 할 수 있다. JavaScript라서 혹시 되나 해봤는데 역시 안된다. 하지만 역시..
JavaDoc은 자바 소스를 문서화를 하는 방법을 말한다. 개발 표준을 잡거나 인수인계 등등의 작업을 할때 JavaDoc을 생성하여 배포하기도 한다. 어떻게 JavaDoc 을 생성하는지 살펴보자. /** * Boot Class * * * Co..
이클립스에서 Tomcat을 기동시 The specified Tomcat installation directory does not exist 오류가 발생하는 경우가 있다. 오류의 원인은 명확하다. Tomcat이 설치된 위치를 못찾는것이다. 해결방법 이클립스..
Eclipse를 사용하며 주석을 설정하는 방법에 대해 알아보자. 위와 같이 아무 클래스 선언부 위에 /** 라고 입력하고 엔터를 쳐보자. 그럼 우측과 같이 @author 가 나오면서 주석을 입력할 수 있는 공간이 생긴다...
MyBatis를 활용해서 여러가지 프로젝트를 하다보면 같은 MyBatis인데도 다른 경우가 있다. 바로 제목에 나온것처럼 Mapping 방식의 차이가 있을수 있기 때문이다. Query ID Mapping 방식 vs Mapper Interface 방식..
A라는 공유폴더에 E라는 계정으로 붙어 있는데 F라는 계정으로 변경을 해야 하는 상황이다. 이럴 경우 로그아웃을 하고 새로운 계정으로 로그인을 해야 하는 방법에 대해 기술한다. 윈도우의 검색 > cmd 라고 입..
중요한 일은 아니지만 개발환경을 만드는 입장에서 어떻게 하면 조금 더 로그를 가독성이 좋게 보여줄 수 있을까 고민을 했고 출력 로그의 색상을 바꿔보기로 하였다. 바쁜 사람을 위해 결론부터 말하면 색상을 변..
필자는 일단 이 글을 쓰면서도 이 include를 사용하여 가독성을 높이는게 더 나은 방법일까? 라는 의문을 계속 가지고 있다. 답은 어느정도 정해져있다. 내가 관리를 할때 파일을 여러개로 쪼개서 가독성을 높이는..
Keycloak을 사용하면 세션, 쿠키 및 토큰 시간 제한을 자유롭게 설정할 수 있다. 설정방법에 대해 알아보자. 전역설정 (Realm 단위) KeyCloak Session, Token에 대한 Timeout 설정은 Realm Settings > Tokens 에..
이전 Xml Config 방식에서 ComponentScan을 사용하는 방법은 다음과 같았다. applicationContext를 구성할때 이렇게 명시적으로 내가 읽어들여야하는 component들이 있는 package를 넣어줬다. 하지만 Springboot에..
Spring Security tag를 사용하다 보면 이런 오류가 발생하는것을 볼 수 있다. [ERROR][o.a.c.c.C.[.[.[.[dispatcherServlet].log:line175] - Servlet.service() for servlet [dispatcherServlet] in context with..
KeyCloak은 쓰면 쓸수록 매력적인 솔루션인것 같다. 잘 다룰줄만 알면 인증, 권한 관련해서는 어느정도 경지에 오를수도 있을것 같다는 생각이 든다. 요즘같이 OSS가 각광받는 시대에는 꼭 알고 있어야 할 OSS라고..
지금은 거의 사용되지 않는(아직도 많이 사용할수도 있겠지만..) Jenkins + Ant + SVN + Windows서버 조합으로 자동배포하는 포스팅을 하려고 한다. Hudson이 껴있었으면 딱 again 2010년쯤 유행했던 기술셋인거..
잘 되던 어플리케이션이었는데 오랫만에 보니 갑자기 pom.xml 에 오류가 떠있다. x 표시 위에 마우스를 올려봐도 아무런 힌트도 안나오고 무작정 알수 없는 에러란다. Overview를 봐도 마찬가지고 problem을 봐..
지난 포스팅으로로 Jenkins 권한관리를 KeyCloak과 연동해서 하는 방법에 대해 다뤘었는데 이것만으로는 성에 차지 않을 수 있다. 왜냐면 글로벌한 설정이기 때문이다. 대형 프로젝트 같은것을 하는 경우 각 파트..
SI 업계에서 IntelliJ를 사용하는곳은 극히 드물다. 왜냐!? 모든것을 다 비용으로 생각하고 비용을 줄이고 줄이고 줄여서 이윤을 가장 많이 남기는것이 가장 잘 한다고 칭찬을 받는게 이 업의 특징이기 때문이다...
Jenkins와 KeyCloak을 openid 방식으로 연결을 하다가 로그인이 안되고 KeyCloak 오류화면으로 리다이렉트 되는 현상이 발생을 했다. http://localhost:8180/auth/realms/Oingdaddy/protocol/openid-connect/auth?..
Jenkins에 대한 주제를 많이 다루면서 설치하는 방법에 대해서는 포스팅을 안했었다니... 마침 새로운 PC에 Jenkins를 설치할 일이 있어서 겸사겸사 포스팅도 해본다. Jenkins download and deployment Jenkins –..
지난 포스팅에서는 Jenkins를 KeyCloak을 이용해서 로그인하는 방법에 대해서 알아보았다. 단순 로그인만 통합로그인으로 하는것에서 그치지 않고 이번에는 KeyCloak의 권한(ROLE)에 따라 Jenkins의 사용권한을 통..
프로젝트를 관리하다보면 여러개의 솔루션을 각각 계정관리를 해야 하는데 KeyCloak을 사용하면 어느정도 통합해서 관리를 할 수 있다. Jenkins도 KeyCloak을 통해서 통합로그인을 할 수 있다. 기본적으로 Jenkins..
예전에 CORS(Cross-Origin Resource Sharing)를 filter를 사용해서 설정하는것에 대해 포스팅을 한적이 있다. Spring Security를 사용하면 이렇게 별도의 filter를 만들지 않고 간단하게 CORS 설정을 할 수 있다...
Redis를 설치하고 redis-cli 에서 다음과 같이 test를 했었다. 이 뿐만 아니라 get yellow 이런식으로 값을 부르면 다 가지고 온다. 여기에 암호를 설정해 보자. Redis는 접근제한을 두가지 방법으로 할 수 있는..
MinIO는 고가용성을 확보하기 위해 Distributed mode를 지원한다. 그래서 운영환경에서 MinIO를 사용하기 위해서는 Distributed mode가 필요하다. 이를 구성하기 위해 별다른 복잡한 기술이 필요한게 아니라 기존..
linux의 실행파일이 자주 사용되어지고 또 재기동시 자동으로 시작되어야 한다면 실행파일을 Service에 등록을 하고 사용한다. Systemd를 통해서 Service를 등록할수도 관리할수도 있다. 이 모든 작업을 할때는 ro..
지난 시간에는 간단히 Window 환경에 Redis를 설치해 보았다. Windows 10 환경에 Redis 설치해보기 Monolithic 환경에서 점점 벗어나고 MSA 지향적인 환경으로 변화함에 따라 기존의 세션 방식을 사용하기가 어려..
종종 application을 기동하다 보면 볼수 있는 오류다. 원인 바라보고 있는 테이블이 삭제되었거나 테이블에 대한 권한이 없을때 발생 해결책 테이블을 다시 생성하거나 synonym을 drop 후 새로 생성, 아니면 테..
Jenkins의 기능은 무궁무진한것 같다. 아직 빙산의 일각밖에 모른다는 생각도 든다. 이번에 포스팅할 내용은 Jenkins에서 제공하는 REST API를 사용해 Jenkins의 Job을 생성, 실행, 삭제, 결과조회 등을 해보는 것..
JWT payload (claims, body) 부 암호화 및 복호화 방법 JWT를 사용하는것 자체가 암호화된 json 문자열로 전송을 하는건데 무슨 암호화 및 복호화를 또 하느냐!? 암호화가 된다 하더라도 jwt.io 에서 알고리즘만..
Spring을 사용하면서 외부 설정 파일(properties or yml)은 필수적으로 사용된다. 하지만 이를 읽어오지 못하는 문제는 자주 직면하게 된다. 예를 들면 다음과 같은 오류다. org.springframework.beans.factory.Un..
Jenkins에서 빌드한 산출물에 대해 Tagging을 하기 위해 Git Publisher를 사용한다. 하지만 Tagging을 할때 아래와 같은 오류가 발생하며 Jenkins Job이 실패를 했다. using credential gitlab_build > git tag -..
JWT를 사용하는것 자체가 암호화된 json 문자열로 전송을 하는건데 무슨 암호화 및 복호화를 또 하느냐!? 암호화가 된다 하더라도 jwt.io 에서 알고리즘만 알고 있다면 다시 복호화된 값으로 볼수 있다. 그래서 보..
Jenkins의 다양한 기능중 이번에는 Slack과 연동해서 배포 실패 시 또는 배치 수행중 문제가 생겼을 경우 알림을 보내주는 기능에 대해 알아보겠다. 내가 직접 Jenkins에서 빌드 버튼을 눌러서 실패를 하는 경우에..
기업에서 slack을 사용하는곳이 점차 늘고 있다. 사용을 해보니 장점은 별도의 프로그램을 설치하지 않고 web에서 바로 실행시킬수도 있고 여기에서 채팅을 할때 사진이나 엑셀의 표, 파일등 여러가지 형태의 컨텐..
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (6) - XML config to JAVA config spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml spring 프로젝트에서 springboot 프로젝..
OpenSSL은 네트워크를 통한 데이터 통신에 쓰이는 프로토콜인 TLS와 SSL의 오픈 소스 구현판이다. C 언어로 작성되어 있는 중심 라이브러리 안에는, 기본적인 암호화 기능 및 여러 유틸리티 함수들이 구현..
spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml spring 프로젝트에서 springboot 프로젝트로 migration 하기 (2) - web.xml spring 프로젝트에서 springboot 프로젝트로 migration 하기..
springboot를 사용해서 web 개발을 하면 초반에 ERR_ABORTED 404를 심상치 않게 만나볼 수 있다. 404는 알다시피 경로에 있는 파일을 못찾는 경우이다. 즉 잘못된 경로를 입력했다는 것이다. 필자의 static resou..
XML로 설정되어 있던 spring web application context를 Java Config 로 변환하는 과정에 오류가 발생하였다. java.lang.IllegalStateException: No thread-bound request found: Are you referring to request at..
Monolithic 환경에서 점점 벗어나고 MSA 지향적인 환경으로 변화함에 따라 기존의 세션 방식을 사용하기가 어려워졌다. 여러가지 방안이 나왔고 세션을 사용하는 방식 중 가장 많이 쓰이고 있는건 바로 Redis를 활..
프로젝트 변경사항이 있어서 BootApplication.java (springboot main class)의 위치를 변경하였다. 변경하고 나니 다음과 같은 오류가 발생을 했다. WARNING: Failed to scan [file:/C:/Users/tester/.m2/reposito..
Springboot 기동시 콘솔의 아래와 같은 메세지가 나오고 시작이 정상적으로 되지 않는 경우가 있다. The Class-Path manifest attribute in [path]/xxxx.jar referenced one or more files that do not exist 어플..
gitlab에 새로운 프로젝트를 push를 하는데 에러가 난다. RFC failed; 413 Request Entity Too Large 위에는 Request Entity Too Large 라는 오류가 나타나지는 않지만 이 push 를 이클립스에서 해보면 이..
지난 시간에 아래와 같은 과정을 거치면서 Custom Ruleset을 만들었다. Sonarqube Custom Rule 6.7 to 8.5 migration 기존에 Sonarqube 6.7에서 사용하던 Java Custom Ruleset이 있었다. 그런데 Sonarqube를 8.5 v..
Pod 살펴보기 Pod 생성 쿠버네티스의 모든 리소스는 YAML 형태의 선언형 정의서 (declarative description)으로 표현될 수 있습니다. 먼저 다음과 같이 Pod template을 만들어 보겠습니다. --dry-run, -o yaml..
지난 시간에 scouter 설치와 application과의 연동을 알아보았다. 이제 이렇게 연동된 application과 server에 대한 정보를 가지고 모니터링을 해야 한다. 우선 scouter client를 구성하기 앞서 설정을 할 부분이..
SonarLint를 설치했다면 SonarLint에서 제공하는 기본 Ruleset만 사용이 가능하다. 개인적으로 사용하며 조금 더 나은 품질을 추구한다면 이렇게 사용해도 되지만 엔터프라이즈 환경에서는 이정도 Ruleset으로는..
내부망에 구축된 Docker에 login을 시도했다. 하지만 오류가 발생하였고 다음과 같은 메세지가 나왔다. > Error response from daemon: Get https://docker.privatearea.com/v2/: dial tcp 172.17.xxx.xxx:443: co..
Sonarqube Custom Ruleset 파일을 정의하고 드디어 적용을 하려는 순간이다. 하지만 Restore를 하고 나서 한참을 기다려봐도 아래와 같은 메세지가 상단에 나타나며 적용이 되지 않는다. 분석중이라는데 생각보다..
일전에 Spring Batch가 수행을 하다가 실패를 해도 Jenkins에서는 SUCCESS를 찍는 문제가 있다고 글을 쓴적이 있다. Jenkins Log Parser 사용해서 Application 오류 처리하기 엄청나게 편리한 Jenkins이지만 불편..
소스의 정적분석을 도와주는 대표적인 솔루션은 Sonarqube이다. 보통은 이 Sonarqube를 서버에 별도로 설치를 하고 소스를 이곳으로 보내 분석을 한다. 그렇기 때문에 개발자는 소스를 모두 deploy하고 Sonarqube..
현 Sonarqube 버전에 맞는 Ruleset을 재정의를 하라는 작업을 받았다. 전에 작성했던 글과 연장선상에 있는 글이다. 새로 나온 수많은 Sonar way를 다 사용할수는 없다. 이중에서 골라서 사용을 해야 한다. 하지만..
Ant Build는 이제는 잘 쓰이지 않지만 종종 maven이나 gradle이 아닌 일반적인 Dynamic Web Project로 프로젝트를 구성하는 경우 사용된다. 일을 하며 많은 시간을 이 Ant Build를 사용했고 그중 가장 일반적인 모..
jacoco를 사용하여 소스코드에 대한 동적 분석을 한 결과물의 이름을 jacoco.exec로 사용하고 있다. 이 파일은 빌드서버인 jenkins가 설치된 곳으로 이동이 되어서 분석이 되어야 한다. jacoco의 분석은 sonarqube..
기존에 Sonarqube 6.7에서 사용하던 Java Custom Ruleset이 있었다. 그런데 Sonarqube를 8.5 version으로 올리면서 기존의 Custom Rule + Sonarqube 8.5에 추가된 Sonay way를 선별해서 반영해야 한다. 결론부터..
대용량 파일을 업로드할때 업로드하는 시간이 2분을 넘어가자 nginx 504 Gateway Time-out 이 발생하며 안되는 문제가 발생을 하였다. 이것에 대한 원인과 해결책은 다음과 같다. 문제점 : nginx의 기본 timeout..
하나의 SVN 저장소에 여러개의 프로젝트가 올라가 있는 경우 각 프로젝트 별로 업무 연관성이 있는 개발자만 접근하여 사용을 해야 하는 상황이다. 이렇게 oingdaddy라는 저장소에 현재 A-project, B-project가..
일전에는 linux 환경에 SVN을 설치해보았다. 보통은 linux에 올려놓고 쓰지만 서버가 들어오지 않은 상황에 임시로 잠깐 사용할 용도로 로컬 PC의 Windows에 설치를 해야 했다. linux와 거의 유사하게 설치할 수..
Monolithic Architecture에서 Micro Service Architecture까지는 아니더라도 많은 부분이 API로 분리가 되고 이에 대한 인증의 필요성이 생겼다. Spring Security와 JWT를 이용하면 이런 API 서버간의 인증을 간단..
이클립스(STS)에는 기본적으로 SVN Repository Perspective가 설치되어 있지 않다. 하지만 이클립스에서 SVN을 사용하고 싶을때 다음과 같이 간단하게 구성할수 있다. 이클립스 상단의 Help > Eclipse Marketpla..
예전에 Sonarqube와 Jenkins를 연동해서 사용하는법에 대해서 다룬적이 있었다. Jenkins에 Sonarqube 연동하기 Jenkins와 Sonarqube 연동을 하려면 일단 Jenkins와 Sonarqube가 설치가 되어 있어야 한다. 각각의..
A Server에서 B Server로 SSH를 이용하여 파일을 전송하거나 작업을 할 경우가 있다. 가장 대표적인것은 SCP이다. SCP로 이렇게 파일을 전송하려고 했을때 대상서버의 비밀번호를 물어본다. 비밀번호 넣어주고 해..
개요 JAVA에서 DB 프로그래밍을 하기 위해서 JDBC가 제공되었다. JDBC는 RDB 사용을 위한 다양한 API를 제공하지만, DB가 방대해지고 각 data간 관계가 복잡해짐에 따라 다수의 메소드를 호출하고 관련 객체를 해..
프로젝트에서는 보통 서버에 들어가서 작업을 할수 있는 사람과 서버에 대한 접근권한이 없는 개발자들이 있다. 개발자들이 개발서버에 어플리케이션을 올렸을때 로그를 확인하고 싶어하는 경우가 있다. 그럴때 매..
Kubernates를 사용하며 자주 사용하는 기본명령어 (사실 이것밖에 모른다.)를 그래도 조금 익숙한 Docker 명령어와 비교해서 정리를 해본다. Kubernates 명령어 Docker 명령어 Desc kubectl run eg) kubectl run..
MSA로 구성을 하면 어려워지는 기능 중 로그추적 기능이 있다. 기존의 Monolithic 구조에서는 로그 추적을 쉽게 할수 있었는데 app이 분산됨에 따라 어려워졌다. 하지만 훌륭한 로그 추적 솔루션들이 생기기 시작..
아주 기본적인건데 삽질을 많이 했다. 나름 spring과 오랜 시간을 보내며 조금 안다고 생각을 했는데 한참 부족한것 같다. 지난번에 Springboot Batch Tasklet에 대해 글을 쓰며 두가지 방식에 소개를 했었는데 이..
A, B라는 서버가 있고 A라는 서버의 특정 폴더를 B서버로 옮기고 싶을때 사용하는 방법이다. A라는 서버에서 FTP로 파일을 받아서 그걸 B서버에 전송을 해줄수도 있지만 SCP를 이용하면 훨씬 간편하게 진행할 수..
Minio를 이것저것 설정하고 되랏! 하며 기동을 시키면 다음과 같이 오류가 나는 경우가 있다. Unable to initialize server switching into safe-mode: Unable to initialize sub-systems: Unable to initialize..
Spring Batch의 기본적인 기능들을 지난 포스팅들을 통해 알아보았다. 이번에 알아볼 Skip/Retry도 Spring Batch에서는 기본적으로 제공을 하는 기능이다. 간단한 예제를 통해서 알아보자. us-500.csv (웹에서 쉽..
지난 포스팅으로 Chunk 방식과 Tasklet 방식의 Spring Batch에 대해 알아보았다. 이제는 이 방식을 조금 응용하여 이를 병렬처리하는 방법에 대해 알아보겠다. Chunk와 Tasklet과 마찬가지로 이것도 매우 직관적이..
Chunk 방식은 정형화된 방식이라면 Tasklet 방식은 비교적 자유로운 방식이다. 따라서 실제로 batch를 사용할때 적어도 내가 경험해본 프로젝트에서는 Tasklet 방식을 훨씬 선호하였다. 이것도 Chunk와 마찬가지로..
지난 글에서 다뤘던 Springboot Batch Chunk Example에서 소스들을 살펴 볼때 Listener도 살짝 나왔다. 우리가 정의한 Job이나 Step 실행 전 후로 필요한 공통 작업을 기술하기 위해 주로 사용되며 사용된다. 이..
Spring Framework의 개발환경이 Springboot 기반으로 변함에 따라 Spring Batch의 개발방식도 이전과는 많이 달라졌다. 필자가 전에 쓴 Spring Batch에 관한 글은 Springboot 기반이 아니라서 Batch Job을 작성하..
A bean with that name has already been defined ~ 관련 오류 *************************** APPLICATION FAILED TO START *************************** Description: The bean 'sampleChunkJob', defined in clas..
Spring Batch 환경을 구성할때 Job이 여러개 있고 이것을 실행시켰을때 어떤 결과가 나올까? 정답은 "모든 Batch Job이 실행이 된다. " 이다. 내가 만든 Job 중 특정 Job만 실행을 시키고 싶다면 어떻게 해야 할..
Parameterized Trigger를 사용하면 다양한 Job간의 연계작업을 할 수 있다. 전에 살펴본대로 후속 job으로 parameter 값도 넘길 수 있고 후속 job으로 여러가지 job 동시에 실행시키는것도 가능하다. Parameterize..
Parameterized Trigger 를 사용하면 후속 작업을 지정 및 수행할 수 있을뿐만이 아니고 현재 job의 param값, 넘기고 싶은 변수값도 넘겨줄 수 있다. 다음은 bjob에서 cjob으로 param값을 넘기는 예제이다. Paramet..
Jenkins를 사용하다가 실패한 Job에 대해서는 어떻게 처리를 하는게 가장 좋을까 고민을 하고 있다. 전에 다뤘던 pipeline을 사용해서 실패한 job에 대한 처리를 하는 방법도 있지만 이건 pipeline job을 한셋 더..
Pipeline으로 Job을 실행하고 실행결과에 따라 분기처리를 하고 싶은 경우가 생겼다. 예를 들면 a라는 job이 실행이 되었고 이 job이 성공을 하면 b라는 job을 수행하고 실패를 하면 c라는 job을 수행하도록 하고..
엄청나게 편리한 Jenkins이지만 불편한점도 있다. 예를 들자면 Jenkins를 이용해 batch를 처리할때 분명 batch job은 내가 원하는대로 수행되지 않고 Error가 발생했는데 Jenkins job은 이를 Success 처리를 하는..
springboot는 이게 정말 왜 되지? 할 정도로 내장되어 있는 편리한 기능들이 많이 있다. 이번에 소개할 내용도 그렇다. 내부 로직을 까보지 않아서 정확한 동작원리는 파악하지 못했지만 그래도 급하게 DB 연동해..
CSV파일은 지금은 많이 안쓰이지만 그래도 종종 사용이 된다. 여러가지 OSS가 이를 지원해주고 있지만 그중 간단하게 CSV파일을 파싱할 수 있는 방법을 소개한다. 일단 univocity-parsers dependency 추가가 필요..
IT 기술이 급변하면서 많은 회사들이 이를 따라가기 위해 열심히 노력을 하고 있다. (아닌곳도 있고..) 필자는 아키텍트 직군이다. 아키텍트도 일반적으로 여러 기준(TA, AA, SA, DA 등등)으로 나뉘어져 있는데 Ku..
docker-compose는 조금 더 docker를 편하게 사용할수 있도록 해주는 도구이다. Docker 플러그인 같은 개념이라고 생각하면 이해가 편하다. 근데 뭘 조금 더 편하게 해줄까? docker에서 수행되는 일련의 작업(eg. b..
Docker image를 빌드하고 다음에 또 사용하고 싶은 경우가 있다. 그럴때 어떻게 하는지에 대해서 알아보자. 사전준비 일단 빌드를 하는 과정은 건너뛰고 간단하게 보여주기 위해 아무거나 Docker Hub로 pull을 받..
지난 포스팅으로 RabbitMQ를 설치하는 방법에 대해서 알아보았다. 이 설치한 RabbitMQ와 management를 띄워놓고 Springboot를 연동하여 비동기통신을 하는 간단한 샘플을 만들어보자. 설치에 앞서 간단한 개념을..
MSA 프로젝트를 준비하며 여러가지 준비사항이 있지만 느슨한 결합을 위해 MQ (Message Queue) 가 필요하다. 여러가지 이런 메세징 기능이 있는 툴이 있지만 RabbitMQ를 일단 사용해보려한다. 어떻게 설치하는지..
Hystrix가 무엇인가? 에 대한 내용은 지난 시간에 다루었다. 열심히 이 method, 저 method에 @HystirxCommand를 달아 놓고 이게 잘 동작하고 있는지 직접 확인을 하는건 작은 프로젝트에서는 가능할지 몰라도 서비..
성능테스트를 하는 방법은 여러가지가 있지만 가장 간단하게 할수 있는 도구중 하나인 Apache JMeter에 대해 알아보자. Apache JMeter는 오픈 소스 소프트웨어로 무료로 사용할 수 있고 JAVA Application이다. 설..
현재까지 Service Discovery, API Gateway, Configuration Externalization 등을 통해 MSA 수박 겉을 핥아보고 있다. 간단하게 현재까지 이런저런 기능을 구현했었는데 장애가 발생하는 경우에 대해서는 다룬적이..
springboot application을 기동하니 기동하자마자 로그 몇줄 찍히고는 바로 terminated 상태가 되어버린다. 오류도 나오지 않는다.. logging.level을 debug로 내리니 그래도 몇줄 더 보인다. 그리고 맨 마지막에는..
MSA를 하면 당연히 어플리케이션 개수가 많아지고 그에 따라 어플리케이션마다 있는 설정 파일도 많아진다. 이렇게 되면 관리의 어려움이 생기고 이번에도 이런 관리의 어려움을 해결해주기 위해 Spring Cloud 형..
하는김에 Eureka application.properties Configuration 번역에 이어 Zuul도 해놓으려고 한다. 번역의 정확도는 구글 번역에 문의를 해보길.. Name default Desc zuul.add-host-header false 프록시가 호스트 헤더..
Eureka를 사용하면서 application.properties (application.yml) 에서 설정값에 대한 공부를 자세히 하고싶은데 자료를 찾는것이 쉽지 않다. 대부분의 포스팅은 매번 사용하는 비슷한 설정만 사용하고 그 외의 자..
지난 시간에 Eureka Server와 Eureka Client를 구성해 봄으로써 Service Registry, Discovery에 대해서 알아보았다. MSA처럼 여러개의 API Service 들을 생성하고 그것을 Eureka에 regist까지 해봤다. 이제 이 Eur..
Monolitic 어플리케이션을 여러개의 서비스로 나누다 보니 서비스도 많아지고 그에 따라 인스턴스의 개수도 엄청나게 늘어난다. 또한 오토스케일링 기술을 사용하며 동적으로 ip가 바뀌기도 한다. 그래서 기존과..
이클립스에서 Maven project를 import를 하면 다음과 같이 No marketplace entries found to handle maven-compiler-plugin:3.8.1:compile in Eclipse. 오류가 발생을 하는 경우가 있다. 이것은 필자의 경우는 ST..
MSA (Micro Service Architecture) 가 이쪽 업계에서는 아주 뜨겁다. JD를 봐도 MSA 경험자 찾는 회사들이 엄청나게 많아진걸 보면 대세가 되어가고 있는듯 하다. 조금 공부를 해보니 그렇게 될 수밖에 없는듯 하..
FHD (1920*1080) 영상을 FFmpeg을 이용하여 여러가지 사이즈의 동영상으로 인코딩을 해 보았다. 그리고 아주 적은 표본이긴 하지만 대략적인 테스트한 결과를 적어본다. 테스트 환경 CPU (2Core) : Intel Xeon Sil..
오래된 프로젝트의 배포환경을 구성해달라는 요청을 받았다. ant 로 빌드스크립트를 작성하고 빌드를 수행했는데 다음과 같은 오류메세지가 나오면서 빌드가 정상적으로 되지 않았다. build-project: [javac] Comp..
tomcat을 사용하다보면 종종 다음과 같은 오류가 발생한다. # There is insufficient memory for the Java Runtime Environment to continue. # Native memory allocation (mmap) failed to map 134217728 bytes f..
Springboot 내장 톰캣을 사용할때 session clustering에 대해서 글을 썼는데 역순으로 글을 쓰는것 같다. 이 글을 쓸때 이미 구성되어 있는 Tomcat server.xml 의 clustering 부분을 가져다가 썼는데 그것에 대해..
springboot는 내장 톰캣을 사용하기에 server.xml 이라던지 context.xml 등등의 xml 설정파일이 없다. 하지만 이런 설정파일을 java config로 대체할 수 있다. 기존에 server.xml 에서 tomcat 간 session clusteri..
지난번에 간단하게 nginx 설치를 해봤다. 설치를 했으면 써먹어보자. 일단은 was와 연동을 하는 작업을 해보자. 보통은 web-was 연동을 해서 was라고 표현을 했지 프록시 서버 역할을 할거라 연결할 수 있는 무엇..
세션 클러스터링 관련 테스트를 해야 할 일이 생겼다. 이런 테스트를 하기 위해 서버 환경과 비슷하게 web 서버를 설치해야 했다. web 서버로 선택한것은 nginx. 내 로컬 윈도우에 설치를 해보자. nginx: download..
이번 프로젝트는 의사소통수단으로 slack을 사용한다. slack을 사용하는 목적은 의사소통 뿐만 아니라 webhook을 이용해서 다양한 모니터링 도구와의 연동에 있다. slack에 들어가면 채널(채팅방이라고 생각하면..
minio를 실행시킬때 처음에는 잘 되는데 두번째부터는 이와 같은 메세지를 경험할 수 있다. "Detected default credentials 'minioadmin:minioadmin', please change the credentials immediately" 최초..
MinIO JAVA API 사용하는법 예제를 통해 쉽게 알아보기 지난번까지 MinIO를 설치하고 어떻게 사용하는지에 대해서 살펴보았다. 물론 그냥 MinIO Browser 자체를 사용하는 사람도 있을거라 생각하지만 이것만 사용..
지난번까지 MinIO를 설치하고 어떻게 사용하는지에 대해서 살펴보았다. 물론 그냥 MinIO Browser 자체를 사용하는 사람도 있을거라 생각하지만 이것만 사용하는것은 앙꼬없는 찐빵같은 것이다. 어플리케이션과 연..
영상을 다뤄야 하는 업무가 주어졌다. FFmpeg 이라는 처음 들어보는 프로그램을 사용해서 인코딩 및 디코딩 등의 업무를 해야 한다길래 조금 알아보니 이건 멀티미디어쪽에서는 엄청나게 유명한 프로그램이었다...
MinIO 설치를 해보고 로그인까지 성공을 했으면 그다음은 사용을 하는 방법을 알아야 한다. 사실 인터페이스가 너무너무 직관적이라 따로 글을 쓸 필요도 없지만 그래도 hoxy 모를 사용자를 위해 글을 써본다. Mi..
linux를 사용하며 자주 사용하는 명령어에 대해 정리한다. zetawiki.com/를 참조하였다. 리눅스 종류 확인 $ grep . /etc/*-release 다른 계정으로 전환 - testuser 계정으로 전환 $ su - testuser 특정 명령어 ro..
MinIO를 설치하면 최초의 계정은 minioadmin/minioadmin 이다. 최초 minio를 실행하면 정상적으로 실행이 되고 지정한 위치에 data 폴더가 생긴다. 그리고나서 두번째 실행을 하면 처음에 실행했던 방법으로는 되..
지난번에 MinIO를 공식홈페이지에서 나온대로 설치를 해보니 불편한점이 있었다. 실행, 중지에 대한 별도의 script를 제공하지 않아서 MinIO에 대해서 잘 모르는 사람들은 이를 기동하기 힘들수도 있다는 생각이..
성능테스트를 할때 이슈가 발생을 하였다. 성능이 생각만큼 나오지 않아서 원인을 찾다가 한가지 흥미로운 사실을 발견했다. MSSQL은 DataType에 따라서 우선순위가 존재하는데 NVARCHAR가 VARCHAR보다 더 높은 우..
예전에 파일 업로드를 위한 서버를 구성을 한적이 있었다. 들어온 요청(파일)을 특정 경로에 저장시켜주는 역할을 하는 하나의 JSP 파일을 가진 초간단 파일 업로드 서버였다. 이정도 역할만 해주면 되어서 더이..
폐쇄망에 docker 설치를 마쳤다면 이제 Image를 설치해보자. 그냥 안되는걸 알면서 hello-world 되나 한번 쳐본다.. 역시 안된다. 인터넷이 되는 곳에서 가지고 와야 한다. 그럼 어떻게 가지고 올까? 이방법 저..
docker를 사용하려면 기본적으로 외부망(인터넷이 되는 환경)이 되는 환경이어야 하는데 폐쇄망에서 docker를 설치해야 하는 경우도 있다. 이럴 경우 어떻게 docker를 어떻게 설치하는지 알아보자. 폐쇄망 Docker..
Docker를 설치하고 기분좋게 시작을 하려고 하는데 발생하는 오류가 있다. Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running? docker 돌고 있는거 맞냐? 라는..
우리가 아는 jenkins의 익숙한 모습이다. 물론 과거 hudson부터 써온지라 이정도 디자인만 되어도 참 훌륭하다고 생각한다. 하지만 뭔가 개발은 하기 싫고 이런걸 꾸미고 싶은 날도 있다. 어제는 티스토리 코드블..
Jenkins가 설치되어 있는 서버가 외부와의 통신이 되는 환경이면 좋겠지만 그렇지 않은 환경이 여지껏 더 많았다. 따라서 Jenkins를 설치할때도 이미 많이 사용하고 있는 플러그인들을 다 가지고 있는 Jenkins를..
전시간에는 Zabbix Agent 설치 및 Collector 서버와의 연동, 호스트 생성 등을 진행했다. 이제 이렇게 만들어진 Host를 바탕으로 Dashboard를 구성하여 본격적으로 모니터링 작업을 해보자. 일단 frontend에 접속..
지난시간까지는 Zabbix Collector (Server) 에 대한 설치 및 설정을 했다면 이제 이 Server에 붙일 Zabbix Agent에 대한 설치 및 Zabbix Server와의 연동을 설정을 할 차례다. Zabbix Agent 설치 모니터링을 할 서..
설치를 다 마치고 Zabbix Setup 화면을 띄웠다면 90프로 이상은 다 한것이라고 보면 된다. 남은 부분을 얼른 마무리를 하고 모니터링을 하러 가보도록 하자. Welcome to Zabbix! 그간의 피로를 씻게 해주는 화면..
CentOS에 zabbix 설치를 해보자. zabbix는 zabbix를 하나 딱 설치하고 끝나는 것이 아니라 apache, php, mysql 등 여러가지를 같이 설치를 해주고 연동해줘야한다. 그만큼 설치난이도는 높은 편이다. 설치한 환경..
지난번에는 rpm으로 설치한 package에 대해 삭제를 했는데 이번에는 yum으로 설치한 package를 삭제하는 방법에 대해 알아보겠다. yum 으로 설치된 package 목록을 확인한다. $ yum list installed | grep [설치한..
기존에 rpm을 통해 설치한 package가 있는데 이를 지우고 싶은 경우가 있다. 가령 다음과 같은 상황이다. 사정상 더 낮은 버전의 zabbix를 설치해야 하는데 이미 최신버전이 깔려있어서 설치를 할 수 없다. 그래..
Zabbix를 사용하는 곳이 점차 늘고 있다. 사용을 해보니 왜 많은 곳에서 사용하고 있는지 알것 같다. 이제는 사용자의 입장에서 설치하고 연결하고 모니터링하는 역할을 수행해야 하기에 확실히 알고 넘어가야 할..
Host에 있는 파일을 Docker Container로 복사를 해야할 상황이 생겼다. 방법은 간단했다. Host -> Container Copy $ docker cp /source/* contanier_name:/target/ 이런식으로 docker cp 명령어를 활용해서 하면..
Jasypt를 사용해서 암호화를 하는 방법은 지난번에 포스팅을 했다. Spring properties 파일의 내용 암호화하기 (with Jasypt) properties 파일을 구성할때 암호화가 필요한 부분들이 존재한다. 가장 대표적인 예가..
properties 파일을 구성할때 암호화가 필요한 부분들이 존재한다. 가장 대표적인 예가 datasource의 username, password 부분이다. 이것들은 정말 다양한 방법을 통해서 암호화가 되고 있지만 요즘 추세는 datasou..
우리가 보통 사용하던 Spring MVC + RDBMS 패턴은 Blocking IO 방식이다. Blocking IO 방식이라는 것은 요청을 처리하기 전까지는 다른 작업을 수행할 수 없는 상태라는 것을 말한다. 동시에 여러 요청을 처리하기..
이전 포스팅까지는 Thymeleaf 의 문법을 위주로 보았다면 이번에는 layout 을 구성하는 방법에 대해서 알아보겠다. 기존에는 tiles를 활용하여 이런 layout을 구성하고는 했는데 Thymeleaf를 사용해서도 가능하다...
docker image를 변경한 뒤 재배포를 위해 build를 시도했다. unable to prepare context: unable to evaluate symlinks in Dockerfile path: CreateFile C:\Users\User\Dockerfile: The system cannot find the f..
지난번에 Docker의 Container를 컨트롤 하는 방법에 대해서 알아봤었고 이제 image 를 조회하고 추가하고 삭제하는 방법에 대해서 알아보겠다. Docker image 추가 $ docker pull tomcat docker 의 image를 가지고..
Docker를 사용하면서 가장 많이 사용하게 될 명령어들을 소개하고자 한다. 이전에 Docker에 관련된 글을 쓰면서 조회, 실행 방법은 소개가 되었지만 정리 차원에서 한번 더 다루고자 한다. Container 실행 $ docke..
지난번에는 linux 환경에 docker를 설치해서 이런저런 container 들을 등록하고 실행도 시켜봤었다. 이제 Windows10 환경에서 docker를 설치하고 사용해야 하는 상황이 되었다. Windows에 설치하려고 보니 제약이..
이번에는 생각해서 작성한 내용 없이 Thymeleaf 공식 홈페이지에서 지원하는 API 목록 을 쭉 긁어왔다. 왜냐면 공식사이트가 너무 느려서 한번씩 찾아볼때마다 울화통이 터진다.. 출처 : https://www.thymeleaf.or..
비교적 최근에 나온 기술답게 thymeleaf 도 메뉴얼이 아주 훌륭하다. Tutorial: Using Thymeleaf 1 Introducing Thymeleaf 1.1 What is Thymeleaf? Thymeleaf is a modern server-side Java template engine for b..
springboot 로 기존의 app을 converting 하며 가장 충격?적이었던 말은 'JSP는 더이상 권고하지 않는다. Thymeleaf나 Freemaker, Jade4j 와 같은 template engine 사용을 권고한다.' 라는 것이었다. PHP를 사용하..
새로운 Maven 프로젝트를 생성했을때 다음과 같은 오류를 종종 만나볼 수 있다. Could not calculate build plan: Plugin org.apache.maven.plugins:maven-jar-plugin:3.2.0 or one of its dependencies could no..
상용 WAS 들이 생각나지 않을만큼 강력한 Tomcat에서 아쉬운점은 admin console 역할을 하는 GUI 가 없다는 것이다. 아니다. 사실은 있다. Tomcat Manager 라고 불리는데 기능은 상용 WAS 에서 제공하는 것만은 못..
일전에 이클립스에서 클래스 파일 디컴파일을 하기 위해 JadClipse를 이용하는 방법에 대해 포스팅한적이 있다. 이클립스용 Java Decompiler JadClipse 설치방법 Jad는 Decompiler 이다. 다음 링크를 통해 Jad를..
Scouter Client (Viewer) 를 실행하면 다음과 같이 오류가 나오는 경우가 있다. Failed to create the part's controls 오류가 크게 있어서 눈에 확 띄지만 그것보다 중요한것은 이라고 표시된 부분이다. 이 오류..
전에는 Jennifer 같은 유료 모니터링 솔루션을 거의 다 썼다면 요즘엔 오픈소스 모니터링 솔루션을 많이 사용한다. 그 중 LG CNS에서 만들어서 배포하는 오픈소스 APM (application performance monitoring) 을 설..
이전까지 작업을 통해 소스코드를 git에 올리고 또 이클립스에서는 어떻게 branch의 소스를 mergy 하는지에 대해서 알아보았다. branch와 mergy를 하는것이 3편이었는데 branch를 생성하는것이 3편이다.. 사실 작..
log4j는 한때 위용을 떨쳤던 강력한 logging framework였다. 하지만 세월이 흐르고 기술은 발전하여 더 나은 logging framework들이 등장했다. 성능적인 측면이나 기능적인 측면에 더욱 발전하여 전환은 선택이 아..
일단은 이 둘을 연결하기 전에 webhook이라는 개념부터 알고 넘어가자. webhook이란 간단히 말해 서버(이글로 치면 gitlab)에서 어떤 이벤트가 발생했을때 클라이언트(jenkins)에게 알릴수 있는 메커니즘이라고 이..
git을 local에 설치한 이유는 gitlab에서 직접 프로젝트를 등록하기가 어렵다. 또한 git을 사용하기 위해서는 CLI 환경에 익숙해지기도 해야한다. 그래야지 다양한 git의 기능을 십분 활용할수 있다. 일단은 local..
git을 그동안은 누군가가 만들어 놓은 git을 이용하기만 했지 내가 직접 git 프로젝트를 생성해본적은 없었다. 새로운 프로젝트를 생성해야 하는 상황이 되었고 한번 해보자! 일단 git이 local에 호옥시 설치가..
Spring에서 외부 환경변수의 값을 가지고 오는 방법은 다양하다. 그중 하나가 PropertyPlaceholderConfigurer 를 통해서 가져오는 방법이다. 가장 일반적인 방법이다. 사용법은 다음과 같다. classpath*:/config/t..
org.apache.catalina.loader.WebappClassLoaderBase modified 가 나오면서 어플리케이션이 수정되지 않았는데도 무한으로 서버가 재기동되는 현상이 발생했다. 이 현상은 여러가지 원인이 있지만 내가 찾은 해결..
이 오류는 웹 프로젝트를 진행하다보면 흔히 만날수 있는 오류이다. web.xml에서는 Dynamic Web Module이라는것을 3.0으로 정의를 했는데 이것과 project facet 의 version이 다르다는 것이다. project facet 이..
maven project를 수행할때 필요한 settings.xml 파일은 보통은 MAVEN_HOME/conf 밑에 존재한다. 이곳은 전역 설정을 위한 곳이고 /USER_HOME/.m2/settings.xml 이렇게 지역설정을 할 수 있다. 하지만 이런 설정들..
docker로 sonarqube를 설치하고 script를 작성하고 돌려보았다. "No quality profiles have been found, you probably don't have any language plugin installed" 이라는 오류가 떨어지면서 fail 이 발생했다...
web/was 세팅을 마치고 브라우저에서 잘 연결이 되는지 확인을 하려고 nginx에 설정한 도메인을 딱 치는순간! 왜 이런 오류가 날까? 원인을 파악해 보니 web서버에서 was서버로 (물리적으로 다른 서버) 연결을 하..
springboot 로 프로젝트를 구성하고 배포환경을 구성하였다. 이제 실행 스크립트만 작성을 하면 되는데 문제가 생겼다. 내장 was를 사용하기에 springboot 실행/중지 파일 (start.sh/stop.sh) 을 직접 만들어줬고..
이클립스 환경에서는 Window > Preperences > Maven > User Settings 에서 settings.xml 파일의 위치를 지정할 수 있었다. 그럼 linux에서는 어디에서 할까? 바로 이곳에서 한다. $ vi /maven 설치경로/maven/conf..
꼭 docker에 국한된건 아니고 vim 이 설치가 되지 않은 OS에서 설치하고 실행하는 방법을 가이드한다. 뭐 이런 오류가 난다. 이유는 간단하다. vim 이 설치되지 않았기 때문이다. 설치하면 된다. 설치하는 방법은..
nexus 초기 구성을 할때 3rd party library를 올리기 위한 공간도 생성을 해두는 것이 좋다. release에 두고 쓸수는 없으니 말이다. 생성을 하는 방법은 간단하다. 맨 위의 설정을 누르고 Repositories > Create..
docker를 써보면서 image를 run 해서 설치 및 실행을 해봤다. 하지만 이건 docker 내부 Container 에 설치가 되는 것이기 때문에 host에서 설치된 내용에 대해 찾아봐도 찾을수가 없다. (설치 시 디렉토리 마운트..
docker 설치가 완료 되었다면 이제 container를 구성해보자. Docker Official images 확인 docker에서는 쉽게 container를 만들 수 있도록 docker hub에서 official image를 제공을 해주고 있다. Docker Hub hub.d..
이 카테고리에 linux에 여러가지 app (svn, gitlab, sonarqube... )을 설치를 했었다. 하지만 요즘 유행하는 docker에 설치를 한다면 먼저 설명했던 설치방법보다 훨씬 간단하게 설치할 수 있고 관리도 용이하다...
요즘 docker를 사용해서 서버를 구성하고 있다. 확실히 편리하다. 개념만 조금만 더 잡으면 서버를 구성하는데 훨씬 빠르게 편리하게 할 수 있을것 같다. 사람들이 많이 쓰는데는 다 이유가 있다. 사용하다 보니..
배포환경을 구성하다보면 서버간 ssh 연결이 안되는 경우(거의 대부분)을 볼수 있다. 이럴 경우에는 방화벽으로 막혀 있는것이 아니라면 hosts.allow 설정으로 해결할 수 있다. 배포서버를 A, 개발서버를 B 라고..
개발서버에 git 을 설치해야 한다. 사용을 해본적은 있어도 설치는 해본적이 없었는데 역시 요즘 기술답게 설치는 어렵지 않았다. 간단하다. git 설치하기 가장 간단한 방법은 wandisco 사의 repo를 활용하는 것이..
git이 대세이고 흐름을 따라가야 하지만 일부 소규모 프로젝트에서는 svn을 고집하는 경우가 아직은 많이 있다. 그래서 이번엔 svn을 linux 환경에서 어떻게 설치하는지 알아보도록 하자. (사용자 계정으로 설치한..
sonarqube를 설치하고 실행을 하면 unable to start jvm permission denied (13) 오류가 떨어지는 경우가 있다. 실행을 시켰을때는 바로 확인을 할수는 없고 /sonarqube 설치경로/logs/sonar.log 파일을 보면 다음..
maven 방식의 프로젝트들이 많아짐에따라 nexus를 설치해야 하는 경우들도 많아졌다. 일단 nexus는 외부와 통신이 되는 서버에 놓는것이 맞다. 내부망에서도 사용은 가능하지만 없는 라이브러리 같은 경우는 직접..
CentOS에서 JAVA를 설치해보자. openjdk11 을 설치할것이기 때문에 이것부터 구해야 한다. Archived OpenJDK GA Releases Archived OpenJDK General-Availability Releases This page is an archive of previously..
리린이(리눅스어린이)에게 서버 구성의 임무가 주어졌다. 리눅스를 많이 사용해보긴 했어도 남이 구성한 환경 위에서 기본적인 명령어나 shell script 정도 만들어서 동작시키고 하는것이 전부였는데 처음부터 구..
지금은 많이 사용되지 않는 기술인 ant 이지만 언젠가는 다시 사용할수 있기에 설치방법을 정리해본다. (지금은 2020년인데 아직도 어느 프로젝트에서는 ejb 2.0을 사용하는 곳도 있기에...) 일단 ant 를 다운로드..
기존 log를 관리하기 위한 구현체로써 log4j가 사용되었다. 그러나 보다 안정성이 높고 편리하게 log를 관리하기 위해 Logging framework인 Slf4j(Simple Logging Façade for Java)와 그 구현체로써 Logback이 고..
앞서 설명한 Chunk 방식을 사용하지 않는 경우 Tasklet 방식의 Batch를 사용한다고 했었다. 두 방식 모두 많이 쓰이는데 장단이 있다. 생각나는대로 말해보면 Chunk 방식은 포맷이 딱 정해져 있어서 그에 맞게 코..
springboot로 기존에 있던 프로젝트를 전환을 하고 화면개발을 시작하는데 JSP 파일을 수정하고 아무리 새로고침을 해보고 캐시도 날려보고 요란법석을 떨어도 반영이 되지 않았다. 서버를 재기동해야만 이게 반영..
Quartz scheduler란? 거의 모든 Java 응용 프로그램에 통합 할 수 있는 풍부한 기능의 오픈 소스 작업 스케쥴 라이브러리이다. 보통 배치작업이나 변경된 정보를 주기적으로 reload 해주기 위해 사용한다. 대략..
JSP를 사용하여 하나의 프로젝트를 하면 알게모르게 수많은 Tag Library를 사용하게 된다. Tag Library란? 자바 코드를 캡슐화 하여 JSP에서 간단하게 사용할 수 있게 해주는것을 말한다. 이런 수많은 Tag Librar..
windows 서버는 기본적으로 ssh를 지원을 하지 않는다. 따라서 windows 서버에 배포를 하기 위해서는 openssh 를 설치하거나 ftp로 배포를 해야 한다. 이중 ftp를 사용하여 배포하는것을 설명하려고 한다. 일단 wi..
Windows 서버로 진행을 하는 프로젝트를 몇번 진행을 해봤지만 우리 생활에 밀접하게 있는 OS라 친숙하면서도 SSH, FTP, 방화벽 등등 리눅스보다 다루기 어려운 부분들이 많이 있었다. 이 Windows 서버에 개발서버..
SSL을 설치를 해도 거의 대부분의 사람들은 URL을 통한 접근을 할 때 HTTP protocol로 입력을 하고 들어온다. 그렇다고 사용자들보고 꼭 우리 사이트는 HTTPS protocol을 사용하니 https://xxxx.xxxx 이렇게 들어..
spring의 환경변수를 정의하는 역할을 하고 있는 application.properties 파일의 내용을 가지고 오는 방법은 여러가지가 있다. 하지만 이 여러가지 방법들은 사용을 하기 번거로울수도 있고 또한 bean이 아닌 POJO..
Jenkins에서 master-slave node로 구성하는건 분산 빌드라던지 원격지에서 원격지로의 배포 등 여러가지 용도로 사용될 수 있다. Jenkins를 사용한다면 실제 빌드는 모두 Jenkins가 위치한 서버에서만 가능한데 이..
spring에서 mysql datasource를 설정하는 방법이다. pom.xml 에서 mysql 연동을 위한 driver를 가지고 온다. mysql mysql-connector-java 8.0.20 applicationContext에서 datasource 설정을 다음과 같이 한다. (xm..
dataaccess를 혁신적으로 편하게 만들어준 MyBatis. SI를 수행하는 사람은 모르는 사람이 없는 스킬셋이다. 이 MyBatis를 사용할때 성능을 꽤 올릴수 있는 방법들이 있다. 대량데이터를 조회하는 query 설정에 fet..
springboot 1.4.2 를 사용하다가 2.x 로 versionup을 하였다. 오 생각보다 별 이슈 없이 잘 되네? 하며 종속성 에러를 다 잡고 서버를 기동하는 순간 다음과 같은 오류가 떨어졌다. 이 익숙한듯 익숙하지않은 익..
잘 돌아가던 springboot 1.x 기반의 웹프로젝트를 사용하다가 msa 관련 지원이 더 유연한 springboot 2.x 로 전환을 해야 했다. springboot 2.x 로 migration을 하려면 생각보다 많은 부분을 봐야 한다. 기본 spri..
batch 성 업무를 처리할때 동일한 쿼리에 바인딩할 값만 변경하여 계속 반복하며 처리해야 하는 상황이 있다. public void updateEmployee(List list) { for (Employee employee : list) { sqlSession.update("Emp..
프로젝트를 수행함에 있어 오픈시 가장 크리티컬한 문제이기도 하고 자주 문제가 발생하는 부분인 Transaction 오류에 관련된 내용을 정리해본다. Transaction이 잘 수행되다가 사용자가 몰리면 DB가 죽는경우 Spr..
JSP에서 spring 설정 파일인 application.properties 안의 내용을 가지고 와야 할 경우가 있다. 이럴 경우는 다음과 같이 간단하게 가져올 수 있다. 위와 같이 정의하면 jspPath라는 변수에 spring.mvc.view.prefi..
기존의 프로젝트를 springboot 전환 과정에서, 모든 jsp에서 include하고 있는 공통 jsp 파일에 대해 전환하는 부분을 찾기 힘들었다. stackoverflow 같은곳에서 도움을 얻고자 열심히 찾아보았지만 jsp 자체가 sp..
Maven 프로젝트를 빌드할때 java.lang.AssertionError 이 발생하는 경우가 있다. Exception in thread "main" java.lang.AssertionError at jdk.compiler/com.sun.tools.javac.util.Assert.error(Assert.java:155)..
maven에서 사용할 수 있는 명령어들에 정리해본다. command desc compile 컴파일 수행 test 컴파일 수행 후 테스트 클래스 수행 package 컴파일을 수행하고 컴파일한 소스를 packaging 양식(war or jar)에 맞춰 프..
전에 Jenkins 내에서 pipeline script 작성을 하여 Jenkins Pipeline으로 Job 병렬처리 하는것을 해보았다. 말 그대로 Jenkins Job을 구성할때 Pipeline 영역에 DSL을 작성을 하는 것이다. Jenkins Pipeline 으로..
Jenkins를 사용하다보면 비슷한 성격의 Job들을 병렬로 처리하기를 원하는 경우가 있을수 있다. 이럴 경우는 pipeline 을 사용하여 간단하게 처리할 수 있다. pipeline이란 전용 DSL을 통해 코드로 빌드 과정을 나..
서버는 영원히 부팅된채로 동작할 수 없다. 패치에 따라 혹은 새로 반영해야할 무언가가 있으면 재부팅을 해줘야 한다. 그럼 재부팅을 할때마다 서비스를 수동으로 다 동작시켜야하는가? 물론 아니다. 다 방법이..
Jenkins를 통해 배포환경을 구성하고 실제 운영을 할 때 빌드 및 배포를 한 버전의 application이 문제가 생겼을 경우 급하게 이전 버전으로 복구를 하고 싶은 경우가 있다. 예전에 nexus를 통해서 이와 비슷한 방..
지난번에 "Jenkins에서 Build FAILURE 시 특정 위치에 로그남기기"를 하며 거기에서 사용된 Shell Script가 있다. Jenkins에서 Build FAILURE 시 특정 위치에 로그 남기기 Jenkins에서 빌드를 하던지 배치를 돌리..
springboot를 기동을 시작하면 제일 먼저 다음 문구가 나오는것을 확인할 수 있다. . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| | | | |..
Jenkins에서 빌드를 하던지 배치를 돌리던지 할때 오류가 발생을 할 수 있다. 이때 오류에 대해서 즉각 noti를 받고 싶은 경우라면 일반적으로는 Jenkins와 연동이 되는 email noti를 받던지 slack을 통해서 noti..
자주 쓰이는 String prototype 에 대한 정리 (긁어모으기!) /** * 문자열 replaceAll */ String.prototype.replaceAll = function (target, replacement) { return this.split(target).join(replacement); }; /*..
웹어플리케이션을 개발하면 거의 필수적으로 하는 것이 바로 클라이언트 IP를 획득하는 것이다. 왜냐? 누가 뭘 하는지 알아야 문제가 생겼을때 대처가 가능하기 때문이다. 어떻게 IP를 얻어올수 있는가? public st..
자바로 코딩을 할때 반복적으로 또는 기계적으로 작업을 해야 하는 몇몇 경우가 있다. 예를들면 model 클래스를 작성할때 멤버변수를 정의하고 그에 따른 getter, setter 등을 만든다거나 로그를 사용할 클래스에..
이번에 소개할 내용은 소스를 빌드하여 nexus에 배포를 하고 그 배포된 파일 목록을 Jenkins에서 가져와 원하는 파일로 was에 배포를 하는 것이다. 이게 뭐하는 일인가 싶을수도 있지만 was에 배포한 파일이 잘못..
이클립스로 개발환경을 새로 구성을 할때 기존의 소스를 import 를 시키고 JSP나 Html, CSS 파일 등을 열어보았을때 인코딩이 깨지는 경우가 있다. 이런식으로 인코딩이 깨지는데 해결방법은 두가지가 있다. 첫번..
프로젝트를 하다 보면 LogFactory 관련 오류가 나는 경우가 있다. 말그대로 LogFactory 클래스를 찾지 못해서 발생하는 exception이다. 이유는 다 exclusion 만 시켰지 '연결'을 시켜주지 않아서이다. org.spring..
이클립스를 통해 Maven 프로젝트 수행시 다음과 에러가 나면서 에러표시가 사라지지 않는 경우가 생긴다. 이건 자식 프로젝트의 pom.xml 설정이다. 결론부터 미리 말하자면 위와 같은 오류가 발생했을때는 조치를..
지난 글인 File to File 예제를 통해 어떤것이 Chunk 지향적인것인지 간단히 알수 있었다. Spring Batch Chunk Example (1) - File to File (with FlatFileItemReader, FlatFileItemWriter) 현재까지 진행한 대부..
현재까지 진행한 대부분의 프로젝트는 복잡하기도 하고 상황에 맞지 않아(WebService, EAI 연동 등) Spring Batch에서 일반적으로 사용하고 있는 chunk 방식 대신에 tasklet을 이용하여 사용하였다. tasklet을 이..
요즘 JAVA 버전이 참 정신없이 나오고 있다. 6개월에 한번씩 버전업데이트라니... 유료화 되면서 구독형 라이센스니 뭐니 해가지고 신경써야 되는게 늘었다... 개발환경을 구성해야 하는 입장에서는 발빠르게 대응..
Spring Batch 를 통해 Batch Job을 만들었으면 이걸 주기적으로 돌려주는 무언가가 필요하다. 배치와 스케쥴러를 혼동하는 사람들이 종종 있는데 이것은 완전히 다른 개념이다. 배치는 실시간으로 처리를 하는것이..
라디오버튼(input type="radio") 을 핸들링 시 크롬에서는 정상동작하지만 IE에서는 비정상으로 동작하는 경우가 있다. 바로 다음과 같은 경우이다. .attr("checked", true); 이렇게 작성을 하면 IE에서는 정상동..
spring batch는 여러 회사가 제각기 만들던 batch framework을 통합시켰을만큼 잘 만들어진 batch framework이다. 많은 사람들이 사용을 하고 또 표준이 되었다는건 그만큼 강력한 기능과 누구나 쉽게 다룰수 있는..
tomcat에서 jndi datasource 설정을 하는 방법은 전에 알아보았다. Tomcat JNDI Datasource 설정하여 Spring 연동하기 보통은 로컬 개발환경을 제외하고는 was에 datasource 설정을 하는 JNDI 방식을 많이 사용을..
보통은 로컬 개발환경을 제외하고는 was에 datasource 설정을 하는 JNDI 방식을 많이 사용을 한다. JNDI는 datasource 설정을 was에서 하고 효율적인 connection pool 관리 등 여러가지 장점을 가지고 있어서 주로..
springloaded는 hot deploy를 가능하게 해주는 기술 중 하나이다. hot deploy는 뭐냐? 쉽게 설명을 하자면 소스의 변경을 was의 재기동 없이 반영을 해주는 것이라고 생각 하면 된다. was의 재기동은 상황에 따라..
전에 spring 프로젝트를 springboot 프로젝트로 migration 하는 과정을 기술한 적이 있다. 마찬가지로 현재 Spring Batch로 구성된 batch 프로젝트를 springboot batch로 전환을 하려고 한다. 두 프로젝트 모두 ma..
svn을 통한 배포 관리 (trunk, branches, tags 활용) 지난번에는 svn에 trunk, branches, tags 생성하는 방법에 대해서 알아보았다. svn trunk, branches, tags 생성하기 (with svn:E160013) 일단 TESTSVN 이라는..
지난번에는 svn에 trunk, branches, tags 생성하는 방법에 대해서 알아보았다. svn trunk, branches, tags 생성하기 (with svn:E160013) 일단 TESTSVN 이라는 svn repository 를 생성을 하였다. (svn 은 설치가 되..
git을 더욱 효과적으로 사용할 수 있도록 도와주는 여러 도구들이 있지만 오늘은 이클립스에서 git plugin을 통해서 git을 사용하는 방법에 대해 알아보겠다. 요즘 나오는 이클립스나 STS는 모두 git이 기본적으로..
spring에서 transaction propagation 은 전파옵션을 뜻한다. 전파옵션이라는 것은 트랜잭션을 시작하거나 기존 트랜잭션에 참여하는 방법에 대해 결정하는 속성값 정도로 생각하면 된다. 즉 큰 트랜잭션의 흐름을..
javascript에서 window.open() 으로 popup을 띄울때 스크롤바가 생성이 되지 않는 현상이 있다. 물론 크롬에서는 문제 없이 잘 된다. 항상 이놈의 IE가 문제를 일으킨다. 문제가 발생한 원인은 IE에서는 스크롤바..
일단 TESTSVN 이라는 svn repository 를 생성을 하였다. (svn 은 설치가 되었다는 전제) svnadmin create --fs-type fsfs /app/svn/TESTSVN 생성을 마치면 이클립스에서 바로 생성된 svn 주소를 통해 만든 Reposit..
Sonarqube를 사용하다 보면 특정 프로젝트에 맞게 룰셋을 정의해야 하는 경우가 생긴다. 룰셋 관련 파일을 받았을 때 이를 어떻게 Sonarqube에 적용을 해야 하는지, 또 어떻게 룰셋 파일로 추출해 내는지에 대해..
apache 설치 위치가 /app/webserver/apache 라고 한다면 기동 명령어인 apachectl (or httpd) 은 /app/webserver/apache/bin 에 위치하고 있다. 이곳으로 이동한다. 중지 : ./apachectl stop 시작 : ./apachectl s..
Jenkins와 Sonarqube 연동을 하려면 일단 Jenkins와 Sonarqube가 설치가 되어 있어야 한다. 각각의 설치 과정은 생략하도록 하겠다. 이 두개의 어플리케이션이 설치가 되어 있다는 가정하에 설명을 하도록 하겠다...
수많은 삽집을 해가며 결국에는 전환에 성공을 했다. 아주 초간단으로 최소한의 것들만 바꾸고 전환한거라 앞으로 할일(applicationContext의 java config 전환, spring properties 활용 등)도 많지만 그래도 기쁜..
2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml 2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration..
2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml 2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration..
2020/05/13 - [framework/Springboot] - spring 프로젝트에서 springboot 프로젝트로 migration 하기 (1) - pom.xml 위의 글에서 springboot 전환의 첫 걸음인 pom.xml 전환을 해 보았다. 그다음은 web.xml 파일..
요즘? MSA가 많은 IT 선도기업들 사이에서 사용이 되면서 보수적인 IT 회사들도 그 장점에 혹해서 기존의 Monolithic Architecture에서 탈피하고 싶어하는 움직임을 보이고 있다. 스프링 개발팀은 이렇게 추세가..
JaCoCo (Java Code Coverage)는 품질 측정 도구중 하나로 동적 소스 분석 툴에 해당한다. 쉽게 설명을 하자면 내가 개발을 하면서 100가지 기능을 만들었는데 이 기능들이 모두 잘 사용이 되고 있는지 검사를 해주..
logback이라던지 log4j2 등 비교적 최근에 나온 logging framework을 사용하면 appender를 이용해 시간이 오래 된 로그를 삭제할 수 있지만 그 전에 나온 log4j 등의 logging framework은 이런 기능이 없다. 따라..
spring에서 mssql datasource를 설정하는 방법이다. pom.xml 에서 mssql 연동을 위한 driver를 가지고 온다. com.microsoft.sqlserver sqljdbc4 4.0 applicationContext에서 datasource 설정을 다음과 같이 한다...
Jeus WebAdmin 진입 후 Servers > 적용할 서버 선택 > Basic 탭 > Basic Info > JVM Option 에서 -Dfile.encoding=UTF-8 추가 Servers > 적용할 서버 선택 > Engine 탭 > Web Engine > Basic > 고급선택사항 에서..
이클립스 환경에서 SVN sync를 맞추고 update든 commit이든 하려고 하면 아주 가끔 다음과 같은 오류창이 뜨면서 당황하게 한다. 나는 commit 할것이 하나도 없고 update만 받아야 될 상황이고 프로젝트가 작다면..
logback에 spring profile을 왜 적용하는가? 이유는 간단하다. 하나의 파일만 만들기 위해서다. spring profile을 적용하지 않는다면 logback.xml 하나만 있어도 될걸 logback-dev.xml, logback-prd.xml 등등 각 P..
RESTful은 REST + WebService 으로 REST 원리를 따르는 시스템 정도로 이해하면 될듯 싶다. 그럼 REST(REpresentational State Transfer)는 무엇일까? HTTP URI (eg. /customer)로 자원을 표현하고 Method(GET, P..
maven으로 프로젝트를 진행하다보면 3rd party library를 가져와야 하는 상황이 있다. 3rd party library는 maven central repository에는 물론 등록되지 않은 library이다. 일반적으로 이럴 경우에는 remote repo..
springboot 2.0 부터 기본 JDBC Connection Pool 로 지정이 된 hikariCP 라는 JDBC Connection Pool 이 있다. 나온지가 꽤 오래 되었지만 매번 쓰던 Spring의 SimpleDriverDataSource 라던지 Commons DBCP 만 사용..
이클립스에서 SVN을 사용하여 프로젝트를 진행할때 SVN Repository와 sync를 맞춰 보면 위와 같이 내가 의도치 않은 target 하위에 있는 내용들도 모두 나오는걸 볼수 있다. 이렇게 target 하위의 내용들이 모두..
어떤 클래스를 리눅스 서버에 배포를 했더니 위와 같은 오류가 서버 로그에 출력이 되었다. 오류 내용은 java.awt.HeadlessException: no x11 display variable was set but this program performed an..
spring security에서는 중복 로그인 방지를 다음과 같이 간단하게 수행할 수 있다. 하지만 login page를 통하지 않고 SSO로 로그인을 하기를 원하는 경우에는 위와 같은 방법이 통하지 않는다. login page를 통해..
Jad는 Decompiler 이다. 다음 링크를 통해 Jad를 다운받을 수 있다. JAD Java Decompiler Download Mirror JAD Java Decompiler Download Mirror As http://www.kpdus.com is no longer accessible, JAD Java Deco..
CORS 란 간단히 말해 서로 다른 도메인간 통신을 하는것을 승인하거나 차단하는 것. 차단이 되어 있을때는 여러가지 방법( eg. jsonp, proxy, 웹서버설정 등)으로 해결할수 있지만 그중 filter를 이용해서 해결하..
프로젝트를 하다 보면 application을 /app/was/tomcat/instance1 이라는 곳에 deploy를 시켜놨는데 /app/NAS/images 라는 곳에서 이미지를 가져와야 하는 경우가 생길수가 있다. 실제 내 application이 deploy 된..
datasource intializing 과정에서 [18:17:46.353][ERROR][com.zaxxer.hikari.pool.HikariPool.throwPoolInitializationException:line595] - HikariPool-1 - Exception during pool initialization. java.sql.SQLE..
SI 프로젝트를 하며 매번 하는일들 그런데 매번 망각하는 부분들 매번 다시 찾아보는 수고를 없애고자 이곳에 정리를 하려고 합니다.
application을 구현하다보면 jsp에서 분기처리를 해서 권한에 따라서 다른걸 보여줘야 하는 상황이 발생한다. 이럴때 기존의 JSTL 을 사용하여 if 문으로 분기처리를 할수도 있지만 객체를 받아와서 그걸 풀고 그..
일전에 springloaded를 이용하여 일반적인 tomcat 개발환경에서 hot swapping을 하는 방법에 대해 다룬적이 있었다. Eclipse, tomcat 환경에서 hot deploy 적용하기 (with springloaded) springloaded는 hot deplo..