Intelij를 사용하다가 갑자기 자꾸 먹통이 되는 상황이 되었다.

이유를 찾다보니 플러그인 문제다.

나는 "Handlebars / Mustache" 관련 플러그인의 문제였는데 다른 문제가 있는 플러그인도 있는 모양이다.


참고 : https://blog.naver.com/eunjuee2/221291967595


플러그인 설치하고 Indexing이 너무 오래 돌면 참고하자.


Leave a Comment

Spring Boot.

스프링 부트(Spring Boot)

  • 공식 홈 - https://spring.io/projects/spring-boot
  • 스프링 기반으로 상용제품 수준의 단독 실행형 애플리케이션을 복잡한 과정없이 개발할 수 있도록 하는 것

History


기능

  • 단독실행가능한 스프링어플리케이션 생성
  • 기본 설정된 스타터 컴포넌트
  • 내장형 WAS(톰캣, 제티, 언더토우)
  • AutoConfiguration 으로 기본 설정이 제공
  • 상용화에 필요한 통계, 상태 점검 및 외부설정을 제공
  • XML 코드를 생성하거나 요구하지 않음


특징

  • Spring CoC(Convention-over-Configuration) Version (Wikipedia)
  • 최적의 Dependency(라이브러리, 버전) 관리
  • 관례에 따른 기본 Bean 설정(@Configuration)을 미리 제공
  • 상용화를 위한 기능(Actuator 등)
  • Micro Service(Application With Single Responsbility) 구현에 최적화
  • 보안, 모니터링 구현을 프레임워크 레벨에서 지원


Leave a Comment


Spring Boot를 뛰울 때 나오는 로고처럼 텍스트 로고를 만들어주는 사이트
커스텀 로고를 만들 때 유용하겠다.

http://patorjk.com/software/taag/


          _____                _____                    _____                    _____          
         /\    \              /\    \                  /\    \                  /\    \         
        /::\    \            /::\    \                /::\    \                /::\____\        
       /::::\    \           \:::\    \               \:::\    \              /::::|   |        
      /::::::\    \           \:::\    \               \:::\    \            /:::::|   |        
     /:::/\:::\    \           \:::\    \               \:::\    \          /::::::|   |        
    /:::/__\:::\    \           \:::\    \               \:::\    \        /:::/|::|   |        
   /::::\   \:::\    \          /::::\    \              /::::\    \      /:::/ |::|   |        
  /::::::\   \:::\    \        /::::::\    \    ____    /::::::\    \    /:::/  |::|   | _____  
 /:::/\:::\   \:::\    \      /:::/\:::\    \  /\   \  /:::/\:::\    \  /:::/   |::|   |/\    \ 
/:::/  \:::\   \:::\____\    /:::/  \:::\____\/::\   \/:::/  \:::\____\/:: /    |::|   /::\____\
\::/    \:::\  /:::/    /   /:::/    \::/    /\:::\  /:::/    \::/    /\::/    /|::|  /:::/    /
 \/____/ \:::\/:::/    /   /:::/    / \/____/  \:::\/:::/    / \/____/  \/____/ |::| /:::/    / 
          \::::::/    /   /:::/    /            \::::::/    /                   |::|/:::/    /  
           \::::/    /   /:::/    /              \::::/____/                    |::::::/    /   
           /:::/    /    \::/    /                \:::\    \                    |:::::/    /    
          /:::/    /      \/____/                  \:::\    \                   |::::/    /     
         /:::/    /                                 \:::\    \                  /:::/    /      
        /:::/    /                                   \:::\____\                /:::/    /       
        \::/    /                                     \::/    /                \::/    /        
         \/____/                                       \/____/                  \/____/         
                                                                                                
   /\  \     /\  \     /\  \     /\__\          /\  \     /\  \     /\  \     /\  \     /\__\     /\  \     /\  \     /\__\  
  /::\  \    \:\  \   _\:\  \   /:| _|_        /::\  \    \:\  \   /::\  \   /::\  \   |::L__L   /::\  \   /::\  \   /::L_L_ 
 /::\:\__\   /::\__\ /\/::\__\ /::|/\__\      /\:\:\__\   /::\__\ /:/\:\__\ /::\:\__\  |:::\__\ /:/\:\__\ /:/\:\__\ /:/L:\__\
 \/\::/  /  /:/\/__/ \::/\/__/ \/|::/  /      \:\:\/__/  /:/\/__/ \:\/:/  / \;:::/  /  /:;;/__/ \:\ \/__/ \:\/:/  / \/_/:/  /
   /:/  /   \/__/     \:\__\     |:/  /        \::/  /   \/__/     \::/  /   |:\/__/   \/__/     \:\__\    \::/  /    /:/  / 
   \/__/               \/__/     \/__/          \/__/               \/__/     \|__|               \/__/     \/__/     \/__/  


 █████╗ ████████╗██╗███╗   ██╗    ███████╗████████╗ ██████╗ ██████╗ ██╗   ██╗ ██████╗ ██████╗ ███╗   ███╗
██╔══██╗╚══██╔══╝██║████╗  ██║    ██╔════╝╚══██╔══╝██╔═══██╗██╔══██╗╚██╗ ██╔╝██╔════╝██╔═══██╗████╗ ████║
███████║   ██║   ██║██╔██╗ ██║    ███████╗   ██║   ██║   ██║██████╔╝ ╚████╔╝ ██║     ██║   ██║██╔████╔██║
██╔══██║   ██║   ██║██║╚██╗██║    ╚════██║   ██║   ██║   ██║██╔══██╗  ╚██╔╝  ██║     ██║   ██║██║╚██╔╝██║
██║  ██║   ██║   ██║██║ ╚████║    ███████║   ██║   ╚██████╔╝██║  ██║   ██║██╗╚██████╗╚██████╔╝██║ ╚═╝ ██║
╚═╝  ╚═╝   ╚═╝   ╚═╝╚═╝  ╚═══╝    ╚══════╝   ╚═╝    ╚═════╝ ╚═╝  ╚═╝   ╚═╝╚═╝ ╚═════╝ ╚═════╝ ╚═╝     ╚═╝
                                                                                                         


'Devlopment' 카테고리의 다른 글

텍스트를 로고로 만들어주는 사이트  (0) 2018.06.21

Leave a Comment

오늘 회사 PC에서 작업을 하다가 크롬이 먹통이 되었다.
얼마 전 집에서 크롬이 문제가 생겨서 애를 먹었는데 회사 피씨도 동일한 증상을 보였다.

상당히 어이없는 문제는 다음과 같다.

  • 인터넷은 문제가 없다.
  • 프록시 설정도 문제가 없다.
  • IE는 되는데 크롬만 안된다.
  • 크롬 설정도 안 들어가진다.
  • 호환성 설정도 쓸모 없다.
  • --no-sandbox를 쓰면 되긴 된다.

인터넷에 나온 모두 해결 방법을 써보았으나 해결이 되지 않았다.
"--no-sandbox" 방법을 통해서 일단 쓸 수 있었지만 이것은 완벽한 해결책이 아니었다.

일단 "--no-sandbox"를 통해서 급한 업무를 처리하다가 퇴근 전에 이 문제를 다시 해결해보려고 구글링을 하는 도중 아래와 같은 해결 방법이 머리에 남았다.

  • 백신을 돌려서 PC를 검사하고 악성 코드나 바이러스를 제거한다.
  • 특정 프로세스를 끄고 해당 디렉토리를 삭제한다.

이것은 꽤 웃긴 일이다. 크롬이 안되는데 그 이유가 다른 프로세스(악성 코드나 바이러스일 수도 있는..) 때문인 것이다.
해당 특정 프로세스를 찾아보았지만 내 PC의 프로세스에는 그런 프로세스가 존재하지 않았다.
바이러스는 아닐 수 있지만 특정 프로세스때문에 크롬이 문제가 생기는 경우도 있는 듯하다.

그래서 "시스템 구성"에 "시작 프로그램"에 들어가서 수상하다 싶거나 내가 모르는 프로그램의 경우는 시작 프로그램에서 제외해버렸다.
그리고 재부팅을 하였더니 놀랍게도 해결이 되었다.

실행 > msconfig > 시스템 구성 > 시작 프로그램 > 수상한 프로그램 체크박스 해제


나의 경우는 보안 관련 프로그램으로 생각되는 것들을 모두 제외했었다.

이 별거 아닌 문제로 정말 일 못하고 쓸데없이 시간을 날렸다.
구글링에서는 나오지 않아서 다른 분들은 삽질 안하길 바라며 글을 남긴다.


Comments

  1. 지나가던크롬장인 2018.04.07 00:32 신고 Permalink Modify/Delete Reply

    그냥 alt+ctrl+del 누른 뒤에 작업 관리자 들어가서

    프로세스 항목에 chrome 라고 남아있는 모든 프로세스 다 강제 종료 하고 다시 크롬 켜면 정상 작동 됩니다...

  2. 남자 2018.04.09 12:29 신고 Permalink Modify/Delete Reply

    저와 증상이 같군요..혹시 크롬에서 "앗 이런"이라는 오류 메시지가 빈 화면에 뜨지 않습니까??
    저도 이 증상으로 몇 달을 고생했는데 Fasoo DRM이 문제더군요..삭제하니 바로 해결됐습니다.

  3. 아틴 2018.05.15 21:28 신고 Permalink Modify/Delete Reply

    와! 남자님 감사합니다.
    Fasoo DRM 문제 맞았습니다.
    삭제되니 바로 해결되네요 ㅠㅠ

    삭제도 바로 안되서 엄청 애먹었네요. 아래 블로그 참고했습니다.
    http://infofrag.tistory.com/161

Leave a Comment

코드리뷰를 하다보면 늘 반복적으로 나오는 내용이 있다.
기능상 문제가 되는 것은 아니지만 걸고 넘어갈만한 내용인데 매번 설명하기가 힘들어서 정리를 해본다.

오늘 코드리뷰를 하면서 나온 내용중에 하나가 아래와 같은 선언이다.

일단 LOGGER라는 네이밍이 걸렸지만 그 외에도 리뷰할만한 말이 있는데 설명하자니 이 간단한 한줄이 길어지게 되었다.


참고 소스 [1] - DefaultRedirectStrategy.java


참고 소스 [2] - DefaultSecurityFilterChain.java



1. 왜 private으로 하였는가?
해당 클래스를 다른 클래스가 상속받아 사용하지 않게 하는 경우라면 private으로 사용하는 것이 맞습니다.
상속을 통한 재사용을 고려한다면 protected로 선언할 수 있겠습니다.
[1]과 [2]의 차이인데 [1]에서는 상속을 처리하기 위해서 static을 사용하지 않고 protected final만을 사용해서 선언하였습니다. 선언시에도 상속한 클래스명을 받기 위해 생성자의 메서드를 호출하고 있습니다. 
[2]의 경우는 상속을 허용하지 않는 경우여서 private static final로 선언이 되어 있고 class도 final로 되어 있습니다.

2. 왜 static으로 하였는가?
static으로 선언하는 이유는 객체가 생성이 될 때마다 해당 객체를 매번 생성하지 않고 초기 클래스 로딩시 한번만 생성해서 사용을 하기 위함입니다.
이전의 자바 클래스 코딩 스타일은 static을 많이 사용하는 추세였다고 생각되고 저도 많이 사용했었ㅅ습니다.
그러나 Spring을 사용하게 되면서 객체를 굳이 싱글턴 형태로 디자인하지 않아도 객체를 싱글턴과 같이 한번만 생성해서 사용을 하게 되었습니다.
애플리케이션에서 해당 클래스의 생성 방식이나 사용 형태에 따라서 무조건적인 static을 선언해서 Perm 영역의 공간을 소비할 필요가 없게 되었습니다.
Spring 소스에서도 Logger 사용시 [1]과 같이 static으로 선언하지 않은 경우가 있고 [2]와 같이 static으로 선언하는 경우가 있습니다.


3. 왜 fianl로 하였는가?
로그를 찍는 Logger는 초기 생성된 이후에 변경될 필요가 없습니다.
특별한 경우가 아니라면 변경되는 경우는 거의 없다고 보입니다. 
final로 선언하지 않더라도 이 Logger에 대해 변경하는 경우는 거의 없겠지만 유지보수와 가독성을 위해 final로 선언하는 것이 좋습니다.


4. 왜 LOGGER라는 이름으로 하였는가?
LOGGER라는 이름으로 선언된 이유에 대해서 다른 소스에서도 그렇게 사용되는 것을 보아서 그랬다는 답변을 들은 적이 있다.
내 생각에는 JAVA에서 상수 선언시 이름을 대문자로 많이 쓴다. 통상 static final의 멤버 변수의 경우는 상수 선언시 많이 쓰게 되고 static final은 대문자라는 공식이라는 생각에 대문자로 선언한 분이 있지 않을까 한다.

하지만 static final로 선언한다고 무조건 상수는 아니며, static final로 선언한 객체는 당연히 소문자로 해줘야 된다.
Spring 소스에서도 Logger는 static final을 쓰더라도 소문자를 사용하고 있다.


Reference

[1] https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/DefaultRedirectStrategy.java

[2] https://github.com/spring-projects/spring-security/blob/master/web/src/main/java/org/springframework/security/web/DefaultSecurityFilterChain.java


(글을 본 선배가 의견을 카톡으로 줘서 업데이트했습니다;ㅋ)


Leave a Comment

java에서 기본으로 제공해주는 MessageFormat을 이용하면 {0}, {1}, {2} 이런 값에 대해 변수를 대입해줄 수 있지만,
문제는 숫자로만 가능한다는 점이다.

숫자가 아닌 특정 템플릿 형태로 값을 주입하고 싶다면 common lang에서 제공해주는 StrSubstitutor을 이용하면 된다.
기본값은 "${name}"과 같은 형태이다. prefix가 "${"이고 suffix가 "}"이다.

이 외에 다른 형태로 값을 넣고 싶으면 메서드 호출시에 prefix와 suffix를 넣어주면 원하는 형태로 사용이 가능하다.


Test.java



Leave a Comment

.class에 대해 mock 처리를 해야 할 때가 있다.

이럴 때는 역시 파워목!

MockGateway.MOCK_GET_CLASS_METHOD를 true로 설정하면 된다.


TestCode.java



Leave a Comment

단위 테스트시에 객체 생성이 될 때, 예외가 발생을 하게 해야 하는 경우가 있다.

이런 경우에 PowerMock을 이용하여 테스트한다.


- 객체 생성시 예외 발생시키기 -





Leave a Comment

생성자가 private일 경우 테스트 필요시 처리.


생성자 호출



파라미터가 있는 생성자의 경우



Method 호출



필드값 주입



Leave a Comment

단위 테스트시에 파라미터에 따라서 다양하게 테스트를 해야 하는 경우가 있다.

이런 경우에 변경되는 파라미터에 대해 일일히 개발하거나 파라미터를 공통화해서 진행을 하기도 하는데

이럴 필요 없이 이미 다양한 파라미터에 대해 테스트할 수 있는 Parameterized가 있다.


- 사용법 - 

1. @RunWith(Parameterized.class) 선언 필요

2. 변경되면서 테스트가 필요한 파라미터 조건 선언

2.1. @Parameter를 붙여준다.

2.2. 파라미터는 반드시 public으로 선언해줘야 한다.


3. 파라미터 값들에 대한 테스트 목록 설정이 필요

3.1. @Parameters public static Collection<Object[]> data()로 선언해서 구현


ParamTest.java






Reference

[1] Mkyong (https://www.mkyong.com/unittest/junit-4-tutorial-6-parameterized-test/)

[2] junit team (https://github.com/junit-team/junit4/wiki/parameterized-tests)

Leave a Comment


to Top