1. STS설치
  2. lombok 설치 : java get, setter 등을 소스에서 없애서 가독성 향상
  3. SVN커넥터 설치 : Subversive로 설치








  4. 글꼴 변경
  5. 코드 템플릿 변경





  6. JRE(Java) 설정



  7. 톰캣서버 설정



  8. 로거 자동완성용 Java 템플릿 추가
    • CTRL+Space로 로거 자동 완성을 위한 템플릿 등록(LOG 타이핑 후 CTRL+Space를 누르면 자동 완성 됨)
      • private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);




  9. 인코딩 변경
















  10. javascript 자동완성 셋팅
    • javascript 어시스트 기능 ON



    • javascript Plug-In 설치(문제가 있을 수 있으니 필요한 경우에만 설치)


  1. STS설치
  2. lombok 설치 : java get, setter 등을 소스에서 없애서 가독성 향상
  3. SVN커넥터 설치 : Subversive로 설치





  4. 글꼴 변경
  5. 코드 템플릿 변경



  6. JRE(Java) 설정


  7. 톰캣서버 설정


  8. 로거 자동완성용 Java 템플릿 추가(lombok을 사용한다면 클래스파일위에 @slf4j를 사용하기 때문에 셋팅할 필요 없음)
    • CTRL+Space로 로거 자동 완성을 위한 템플릿 등록(LOG 타이핑 후 CTRL+Space를 누르면 자동 완성 됨)
      • private static final Logger LOG = LoggerFactory.getLogger(${enclosing_type}.class);



  9. 인코딩 변경









  10. javascript 자동완성 셋팅
    • javascript 어시스트 기능 ON


    • javascript Plug-In 설치(필요시)


  11. 저장시 자동으로 포맷팅 및 import 처리

코딩하다가보면 가끔 특정 코드 블럭에는 formatter를 적용 안해야하는 부분이 있음.(가독성을 위해서)
그럴 때 사용하는 방법

  1. Enable tag


  2. 소스에 적용 샘플
   // @formatter:off
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
       
        /** 인터셉터 */
        registry.addInterceptor(getAccessInterceptor())
            .addPathPatterns( "/**")
                .excludePathPatterns( "/")
                .excludePathPatterns( "/favicon.ico")
                .excludePathPatterns( "/resources/**")
                .excludePathPatterns( "/error/**");
       
        super.addInterceptors(registry );
    }
    // @formatter:on


  1. 현상
    1. 기존 설치형톰캣 + Spring 3.2 기반의 프로젝트를 Spring boot 1.3.5와 임베디드 톰캣으로 변경하였는데 일정 주기마다 응답이 느려지는 현상이 발생(약, 2~3초)
    2. 다른 프로젝트도 Spring boot로 서비스 중이지만 동일현상이 발생하지 않았음
  2. 의심사항 리스트업
    1. 일정주기 -> ehcache 캐쉬 리로드 타임
    2. 로그백 캐쉬 리로드
    3. 기타 여러가지
  3. 디버깅
    1. 테스트용 URL을 만들어서 call 찍어봄
    2. Spring boot tomcat access로그를 남겨서 응답시간을 남겨봄
    3. 어플리케이션 로그를 DEBUG레벨로 남겨봄
  4. 디버깅을 통한 의심사항 확인
    1. 응답이 느려질 때 어플리케이션 로그에 아래와 같은 딜레이가 발생됨을 확인(3초 가량의 딜레이)
    2. 2016-07-03 12:22:04 [DEBUG] o.a.c.connector.CoyoteAdapter:180 - The variable [semicolon] has value [-1]
      2016-07-03 12:22:04 [DEBUG] o.a.c.connector.CoyoteAdapter:180 - The variable [enc] has value [utf-8]
      2016-07-03 12:22:07 [DEBUG] o.a.c.a.AuthenticatorBase:180 - Security checking request POST 요청URL 블라블라
    3. 해당 시점에 jvm gc를 확인해보니 young gc가 발생 -> GC시점에 느려짐?? -> FULL GC도 아닌데 왜 느려짐? -> 임베디드톰캣 설정이 문제인가??
      1. jstat -gcutil -h10 프로세스ID 1s
      2. 재 확인해보니 꼭 GC발생시점에 느려지지는 않음









파일업로드 Rest full 기능 샘플 소스



@RestController
@RequestMapping ("/file")
public class FileuploadController {

     @Autowired
     private ServletContext context;

     /**
      * 파일 멀티파트 업로드 Rest full
      *
      * @param inputFile
      * @return
      */
     @RequestMapping(value = "/upload", headers = ("content-type=multipart/*" ), method = RequestMethod.POST )
     public ResponseEntity<FileInfo> upload(@RequestParam ("file") MultipartFile inputFile) {

          FileInfo fileInfo = new FileInfo();
          HttpHeaders headers = new HttpHeaders();
           if (!inputFile .isEmpty()) {

               try {

                   String oriFileNm = inputFile.getOriginalFilename();
                   File destinationFile = new File(context.getRealPath("/WEB-INF/uploaded" ) + File.separator + oriFileNm);
                    inputFile.transferTo(destinationFile );
                    headers.add("File Uploaded Successfully - ", oriFileNm);

                    fileInfo.setFileName(destinationFile .getPath());
                    fileInfo.setFileSize(inputFile .getSize());
                    return new ResponseEntity<FileInfo>(fileInfo , headers, HttpStatus.OK );

              } catch (Exception e ) {
                    return new ResponseEntity<FileInfo>(HttpStatus.BAD_REQUEST);
              }
          } else {
               return new ResponseEntity<FileInfo>(HttpStatus.BAD_REQUEST);
          }
     }
}




/**
 * 파일정보 VO
 *
 * @author 엄승하
 */
@Data
public class FileInfo {

     private String fileName;
     private long fileSize ;

}





  1. SVN


  1. SVN 커넥터(Repositories 추가시 설치 창이 뜸)



  1. 인코딩셋 셋팅(웹 개발관련)


4. 에디터에 라인 번호 표시



  1. 톰캣서버 설정






2016-05-31 기준
설치한 플러그린 리스트




import java.io.IOException;
import java.net.URI;

import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.auth.AuthScope;
import org.apache.http.auth.UsernamePasswordCredentials;
import org.apache.http.client.AuthCache;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.CredentialsProvider;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.protocol.HttpClientContext;
import org.apache.http.impl.auth.BasicScheme;
import org.apache.http.impl.client.BasicAuthCache;
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

/**
 * Jenkins JOB 실행하는 프로그램
 *  - httpclient 4.3.x 이상 필요
 *  - 참고 : https://wiki.jenkins- ci.org/display/JENKINS/Authenticating+scripted+clients
 *
 * @author 엄승하
 */
public class TestCallJenkinsJob {

     public String scrape(String urlString, String username, String password ) throws ClientProtocolException, IOException {

          URI uri = URI.create( urlString);
          HttpHost host = new HttpHost(uri.getHost(), uri.getPort(), uri .getScheme());
          CredentialsProvider credsProvider = new BasicCredentialsProvider();
           credsProvider.setCredentials(new AuthScope(uri.getHost(), uri .getPort()), new UsernamePasswordCredentials(username , password));

           // Create AuthCache instance
          AuthCache authCache = new BasicAuthCache();

           // Generate BASIC scheme object and add it to the local auth cache
          BasicScheme basicAuth = new BasicScheme();
           authCache.put(host , basicAuth);
          CloseableHttpClient httpClient = HttpClients.custom().setDefaultCredentialsProvider( credsProvider).build();
          HttpGet httpGet = new HttpGet(uri);

           // Add AuthCache to the execution context
          HttpClientContext localContext = HttpClientContext.create();
           localContext.setAuthCache(authCache );

          HttpResponse response = httpClient .execute(host, httpGet, localContext );

           return EntityUtils.toString(response.getEntity());

     }

     public static void main(String[] args) {

          String jobUrl = "JOB URL(토큰정보 포함)" ;
          String userNm = "계정ID" ;
          String pwd = "계정 암호" ;

           try {

              String rslt = new TestCallJenkinsJob().scrape(jobUrl , userNm, pwd);
              System. out.println("rslt: " + rslt);

          } catch (IOException e ) {
               e.printStackTrace();
          }
     }

}


+ Recent posts