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발생시점에 느려지지는 않음








Posted by 고잉고

파일업로드 Rest full 기능 샘플 소스
 - 참고 : http://www.technicalkeeda.com/spring-tutorial/spring-mvc-file-upload-restful-web-service-example
 - 소스 : https://github.com/oshnew/spring-boot-study/blob/master/study-spring-boot/src/main/java/com/biz/fileUpload/controller/FileuploadController.java



@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 ;

}




Posted by 고잉고
준비물

  1. Centos 다운로드(6.7ver 64bit)
  2. Virtual box 다운로드(Windows용)
  3. putty(SSH 접속을 위해 사용)
  4. FilezZila(FTP)



Virtualbox에 CentOS 설치
  1. Virtualbox를 다운받아서 설치 : https://www.virtualbox.org/
  2. 환경설정
    • 파일->환경설정->입력->호스트 키 조합에서 F12입력



  3. Virutalbox에 CentOS설치
    • 종류는 Linux, 버전은 Red Hat 64-bit로 선택(64bit가 선택항목에 없다면, 바이오스에서 CPU 설정 부분에 있는 인텔 가상화 모드가 꺼져있어서 발생한거니 켜주세요)







    • 가상이미지 삽입하여 설치








    • biz라는 계정 생성 후 암호 설정(앞으로 모든 예제는 biz 계정을 예로 작성)



    • root 계정으로 네트워크 설정을 해주세요

      • 재 부팅시 자동으로 ifup되도록 설정
        • vi /etc/sysconfig/network-scripts/ifcfg-eth0 후 ONBOOT=no를 yes로 수정




외부 SSH 접속을 위한 Virtualbox  설정









  1. Putty로 접속성공



  2. SFTP로 접속 성공





Posted by 고잉고