@ResponseBody(서버 → 클라), ( 주로 비동기 )

메서드의 반환값을 HTTP 응답의 body에 직접 작성하도록 하는것

더 자세히 설명하면 메소드 파라미터가 Web Request Body에 명시한 데이터를 통해 bind 되는것을 나타내는 어노테이션이다 (@Valid 를 통해 자동 유효성검사 가능)

비동기 - ajax에 대한 요청을 json 데이터로 반환할때 사용

동기 - 사용은 가능하나 동기방식일땐 주로 HTML 페이지를 반환하는 뷰 렌더링 방식이 일반적으로 사용하기에 많이 쓰이진 않는다

 

@ResponseBody
@RequestMapping(value = "/ajaxTest.do")
public UserVO ajaxTest() throws Exception {

  UserVO userVO = new UserVO();
  userVO.setId("테스트");

  return userVO;
}

 

 

 

@RequestBody(서버 ← 클라), ( 비동기에서 주로 사용 )

클라이언트한테 받은 http Body를 자바객체 (Entity)로 변환해서 메서드 파라미터로 바인딩할때사용

클라이언트가 서버에 데이터를 전송할때 서버는 해당 데이터를 처리하기 위해 객체로의 형 변환이 필요한데 이를 담당하는것 (Message Converter가 변환해줌)

만약 Http의 Content Type을 지정해주지 않으면 415 에러가 나타난다

동기 - 주로 form 데이터나 쿼리 파라미터를 사용하는 동기방식에선 덜 사용됨

비동기 - 자주 사용(ajax로 JSON 데이터를 요청 본문에 담아 전송할때)

@RequestMapping(value = "/ajaxTest.do")
public String ajaxTest(@RequestBody UserVO getUserVO) throws Exception {

  System.out.println(getUserVO.getId());

  return "test/login.tiles";
}

 

 

쿼리스트링 → ?category=books&sort=price_asc&page=2

쿼리 파라미터 - 쿼리 스트링 내부에서 개별적인 데이터를 나타내는 키-값 쌍으로 여러 파라미터는 &로 구분된다

category=books (키 - category, 값 - books)

sort=price_asc (키 - sort, 값 - price_asc)

 

 

@RequesetParam ( 서버 → 클라 ) , ( 동기방식 )

ajax의 경우 보통 json 형태의 데이터를 요청본문에 담아서 사용하는데 어차피 여기에 데이터가 있기때문에 비동기에선 잘 안쓴다.

@RestController

class 최상단에 붙이는 어노테이션으로 리턴값에 자동으로 @ResponseBody가 붙게된다.

자바 객체를 할당하면 알아서 json 형식으로 매핑해서 응답한다.

 

@PathVariable ( 서버 ← 클라 )

URL 경로(Path)에 있는 변수값을 매개변수에 바인딩할때 사용 name=test?id=hello 일때 (@PathVariable String name, @PathVariable String id) 이런 형태로 사용

@GetMapping("/users/{name}/{id}")
public String getUser(@PathVariable String name, @PathVariable String id) {
    // 로직 처리
}

비동기 (AJAX) - RequestBody, ResponseBody를 주로사용

동기 - ResponseBody, RequestParam을 사용

타임리프 적용을 진행하는데 css를 지정해주었으나 찾지 못하는 문제가 존재했다.

 

파일구조

다음과 같은 형식으로 작성했으나 302에러가 나타났다.

<link th:href="@{/CSS/member/login.css}" rel="stylesheet" />

 

인터넷에 검색을 진행해보니 boot에선 해당 부분이 기본적을 scan되는 페이지라고 한다. 

 

이를 토대로 css를 지정하였고 시큐리티에 설정도 끝내주었다.

 

스프링 시큐리티

 @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(authorize  -> authorize
                                .requestMatchers("/customLoginPage","resources/*","/CSS/**").permitAll() // 여기서 모든 사용자의 접근을 허가

 

pom.xml

 

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.1'
	id 'io.spring.dependency-management' version '1.1.5'
}

	implementation 'org.springframework.boot:spring-boot-starter-security'

 

properties

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false

 

해당 형식으로 변경하니 css는 문제없이 가져오게 되었다.

 


 

rediret 문제

 

css를 가져오는것 까진 문제없었으나 실제 controller엔 2번의 request가 요청되고 있었다.

Bean이 2개인가 싶어 확인해보았으나 그것도 문제가 아니었다.

 

 

확인해보니 favicon.ico에 설정을 따로 진행해주지 않아서 해당 리소스를 리로드하기 위해 redirect가 한번 더 진행된것이다

 

이를 해결하기 위해선 

html 코드에 favicon을 임의로 설정해준다던가

<link rel="icon" href="data:;base64,iVBORw0KGgo=">

 

시큐리티 부분에서 

.requestMatchers("customLoginPage","/CSS/**","/favicon.ico").permitAll()

 

해당 favicon을 수정해주면 된다.

'Spring' 카테고리의 다른 글

@ResponseBody @RequestBody  (0) 2024.09.15
젠킨스 로컬에서 자동화하기 - 1  (0) 2024.06.27
젠킨스 로컬에서 자동화하기 - 2  (0) 2024.06.22
젠킨스 관련 에러 내용 (crumb, 용량부족)  (0) 2024.06.16
Jmeter - 2  (0) 2024.06.12

공부목적 - git push -> ec2 -> deploy의 과정이 너무 길고 불편하였는데 이를 자동화하여 배포관련 시간을 줄이기 위한 목적

git에서 특정한 branch가 update(push 등..)이 발생할때마다 jenkins가 이를 자동으로 catch하여 빌드, 배포를 진행해주는것(현재 프리티어를 사용중인데 tomcat+docker+jenkins까지 사용하려고 하니 filesweap으로도 용량이 부족하여 로컬에서 진행한다..ㅠㅠ)

 

사전지식

CI (Continuous Integration) - 지속적 통합

CD (Continuous Delivery/Deployment) - 지속적 제공/배포

파이프라인 - CI/CD가 이뤄지는 일련의 과정 (스크립트)으로 커밋 -> 빌드 -> 테스트 -> 배포 -> 모니터링까지의 흐름

즉, CI와 CD가 이뤄지는 일련의 과정을 CI/CD 파이프라인이라 칭한다.

WebHook - git의 변동사항 확인

 

 

기본적인 코드 는 다음과 같다.

 

초기 코드

pipeline {
    agent any

    stages {
    //빌드부분
        stage('Build') {
            steps {
                echo 'Building...'
                // sh 'mvn clean install'
            }
        }
        //테스트부분
        stage('Test') {
            steps {
                echo 'Testing...'
                // sh 'mvn test'
            }
        }
        //배포부분
        stage('Deploy') {
            steps {
                echo 'Deploying...'
                // sh 'scp target/my-app.jar user@server:/path/to/deploy/'
            }
        }
    }
	//성공 및 실패시
    post {
        success {
            echo 'Pipeline completed successfully!'
        }
        failure {
            echo 'Pipeline failed.'
        }
    }

 

이것을 변형하겠다.

 

해당 포스팅에선 배포를 진행하지 않고 로컬에 설정만 진행예정이며 다음 포스팅에서 배포까지 진행예정이다.

jenkins가 업데이트되어 UI가 사진과 다를경우도 종종있으니 참고할것

 

프로젝트 환경 설정하기

프로젝트 설정에 따라 gradle또는 maven을 선택하면 된다.

manage  jenkins - plugin -maven 또는 gradle다운 (Gradle은 defulat로 설치되기에 maven을 다룬다)

문제없이 설치된경우 Manage Jenkins - Tools에서 gradle 또는 maven 관련 설정을 진행할수있다.

Name은 나중에 PipeLine 스크립트 작성시 사용예정

 

git 권한 생성하기 

로컬 실행 기준

manege jenkins - Credentials - (Domains의) global 클릭

Global credentials 클릭

Add Credentials 클릭

 

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ여기서부터 gitㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

Git프로필 클릭 -> Settings -> Developer settings -> Personal access tokens -> Tokens(classic)

이름은 아무렇게나 짓기

repo 접근권한 + hook 접근권한 설정

토큰 발급후 다시 jenkins로 이동해서 password부분에 방금 복사한 code를 넣는다.

 

 

WEBHOOK 설정하기

Git의 자신이 jenkins에서 사용할 프로젝트 클릭 -> Setting -> WebHooks -> add Webhook

 

Content type을 json으로 바꾸며 URL은 다음과 같은 형태로 이뤄진다.

https://내 URL//github-webhook/

로컬에서 사용할 예정이기에 localhost를 입력하면 되는것 아니냐 했지만 실제로 진행해보면 에러가 나오는걸 확인할수있다.

이를 위하여 임시로 URL을 발급받아야하며 여기선 ngrok를 활용하여 진행하겠다.

 

Ngrok

https://dashboard.ngrok.com/get-started/your-authtoken

해당 사이트 회원가입 -> 토큰을 복사한다.

https://ngrok.com/download 이것도 다운받아놓자

 

토큰 복사후 방금 다운받은 ngrok exe를 실행하여 2번 코드를 입력한다

ngrok authtoken 발급받은authtoken //로컬에 내 토큰 저장 목적
ngrok http 젠킨스포트	//local:8080이면 그냥 ngrok http 8080 입력

 

정상적으로 완료했다면 다음과 같은 형태의 URL이 나타나며 포워딩된 url을 입력하면 내 local로 연결되는걸 확인할수있다. (처음 방문시 visit이라는 아이콘을 클릭 해야할수도 있다)

 

해당 URL을 아까 git에 입력해주고 결과를 확인해본다.

만일 403 crumb 에러가 나올경우 해당 링크를 참고할

https://honeyinfo7.tistory.com/293

 

 

PipeLine 코드

pipeline {
    agent any
    tools {
        maven 'Maven_PLUS' // Maven 도구 이름
    }
    environment {
        JAVA_HOME = 'C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.3.9-hotspot'
        PATH = "${env.JAVA_HOME}\\bin;${env.PATH}"
    }
    stages {
        stage('Checkout') {
            steps {
                // Git 레포지토리에서 코드를 가져오는 단계
                git branch: 'master', 
                    credentialsId: 'deploy-ssh-credentials-id', 
                    url: 'https://github.com/myname/projectname.git'
            }
        }
        stage('Build') {
            steps {
                // Maven을 사용하여 빌드
                bat "\"${tool 'Maven_PLUS'}\\bin\\mvn\" clean package"
            }
        }
        stage('Test') {
            steps {
                // Maven을 사용하여 테스트 실행
                bat "\"${tool 'Maven_PLUS'}\\bin\\mvn\" test"
            }
        }
    }
}

 

설정이 완료되었으며 build now 아이콘을 클릭해 실행하며 결과는 PipeLine Console에서 확인이 가능하다

 

 

'Spring' 카테고리의 다른 글

@ResponseBody @RequestBody  (0) 2024.09.15
타임리프 css 미적용 문제 + redirect 문제  (0) 2024.08.31
젠킨스 로컬에서 자동화하기 - 2  (0) 2024.06.22
젠킨스 관련 에러 내용 (crumb, 용량부족)  (0) 2024.06.16
Jmeter - 2  (0) 2024.06.12

이전 포스팅에서 로컬에서 git을 연결, 로컬에 테스트까지 완료하였다

해당 포스팅에선 로컬 -> ec2로 배포까지 자동화를 진행한다.

 

플러그인 다운목록

Publish over SSH -> ec2에 접근을 위한 SSH 인증을 진행해줌 (Manage Jenkins -> System의 Publish over SSH 부분 입력)

 

Publish over SSH 설정하기

jenkins manage -> system 메뉴 클릭 -> publish over ssh로 이동 (없을경우 플러그인이 제대로 설치된게 아님)

jenkins가 배포를 진행하려는 인스턴스의 접근을 위한 key를 입력해준다 - aws에 인스턴스를 생성하면서 발급받은 key를 입력해주면 되며 메모장 또는 브라우저에 드래그 앤 드롭을 진행하면 나타난다

-----BEGIN ~ PRIVATE KEY----까지 전부 입력해줘야 문제없이 진행된다.

Name - 내가 사용할 이름으로 후에 pipeline에서 사용예정

Hostname - ec2에서 사용중인 ip (public ip)

Username - ec2에 connect를 진행할때 로그인되는 id

Remote Directory - 배포할 위치 (tomcat에 배포할 예정이라 다음과 같이 나타났다)

전부 문제없이 입력한경우 Test Configuration 을 클릭해 테스트 가능

pipeline 변경

(이전 코드에서 deploy 부분 추가)

pipeline {
    agent any
    tools {
        maven 'Maven_PLUS' // Maven 도구 이름으로 따로 만들어놓은 Maven을 사용할경우 입력
    }
    
    environment {        //어디에 위치한 JDK를 사용할지 입력하며 로컬에 있는 파일을 사용예정이기에 다음처럼 입력
        JAVA_HOME = 'C:\\Program Files\\Eclipse Adoptium\\jdk-21.0.3.9-hotspot'
        PATH = "${env.JAVA_HOME}\\bin;${env.PATH}"
    }
    
    stages {
		stage('Checkout') {	                // Git 레포지토리에서 코드를 가져오는 단계
            steps {
                // Git 레포지토리에서 코드를 가져오는 단계
                git branch: 'master', 
                    credentialsId: 'deploy-ssh-credentials-id', 
                    url: 'https://github.com/myname/projectname.git'
            }
        }
        
        stage('Build') { // Maven을 사용하여 빌드
            steps {
                bat "\"${tool 'Maven_PLUS'}\\bin\\mvn\" clean package"            
            }
        }
        stage('Test') { // Maven을 사용하여 테스트 실행
            steps {
                bat "\"${tool 'Maven_PLUS'}\\bin\\mvn\" test"
            }
        }
        
        stage('Deploy') {	//배포진행
            steps {
                sshPublisher(publishers: [
                    sshPublisherDesc(
                        configName: 'test_ssh_server',	//publish over에서 설정한 이름
                        transfers: [
                            sshTransfer(	
                                sourceFiles: '**/target/deployfilename.war', 	//해당 형태로 war를 생성
                                removePrefix: 'target', 	//sourcesFiles에서 앞에 붙은 target을 삭제하기 위함
                                execCommand: '''
                                    sudo /opt/tomcat/bin/shutdown.sh;	//기존 톰캣 중지
									sudo /opt/tomcat/bin/startup.sh;	//톰캣 재실행
                                '''
                            )
                        ],
                        usePromotionTimestamp: false,
                        useWorkspaceInPromotion: false,
                        verbose: true
                    )
                ])
            }
        }
    }
}

 

 

실제 배포여부가 완료되었다면 1~2분뒤 본인이 배포한 사이트에 접속을 진행해보자

또한 빌드 자동화를 진행했으니 다음엔 블루-그린 배포전략에 대해서 알아보다

 

'Spring' 카테고리의 다른 글

타임리프 css 미적용 문제 + redirect 문제  (0) 2024.08.31
젠킨스 로컬에서 자동화하기 - 1  (0) 2024.06.27
젠킨스 관련 에러 내용 (crumb, 용량부족)  (0) 2024.06.16
Jmeter - 2  (0) 2024.06.12
Jmeter - 1  (0) 2024.06.08

CSRF 체크 목적으로 crumb 에러가 발생하는 상황이다.

  • CSRF (Cross-site request forgery) - 사이트 간 요청 위조 

1. host에서 jenkins접근 가능한지 확인

2. git의 webhook을 확인

Payload URL
http://내 URL /github-webhook/
Content type
application/json

ex : URL이 1.2.3.4:5000 일경우 
http://1.2.3.4:5000/github-webhook/

 

3. jenkins 설정 변경

build할 job 클릭 -> config -> build trigger -> GitHub hook trigger for GITScm polling 체크

 

3-1. GitHub hook trigger for GITScm polling이 보이지 않을경우

jenkins - Manage Jenkins- Plugins - 플러그인 설치

  • Strict Crumb Issuer Plugin
  • Git client plugin
  • Git plugin
  • GitHub plugin
  • GitHub API Plugin

3-2. 용량이 없다고 나올경우

3-2-1. 미사용 파일 삭제하기

젠킨스 설치 위치의 미사용, 캐시파일 삭제하기 

(filezilla를 사용했으며 log, .cache, caches, workspace(기존에 빌드 진행했던 내용물) 내용물 삭제하기)

 

3-2-2. 젠킨스 기준 사용 용량 줄이기

에러가 난 node 클릭 -> config -> 사진처럼 값을 바꾸기 (해당 크기보다 사용 가능한 용량이 작을경우 에러가 나오기 때문에 값을 강제로 수정, MB,GB말고 MiB, GiB이다) 

'Spring' 카테고리의 다른 글

젠킨스 로컬에서 자동화하기 - 1  (0) 2024.06.27
젠킨스 로컬에서 자동화하기 - 2  (0) 2024.06.22
Jmeter - 2  (0) 2024.06.12
Jmeter - 1  (0) 2024.06.08
배포흐름  (0) 2024.05.26

기본적인 실행 순서는 다음과 같다

홈페이지 접속 -> 로그인 -> websocket 연결 -> 종료 

다음의 형태로 진행할 예정이다.

 

테스트 생성하기

 

test plan - add - Thread Group 클릭

 

 Thread Group은 테스트의 기초설정을 담당하며 각 옵션은 다음과 같다.

Name: 테스트 계획에 대한 이름을 지정하는 필드입니다. 기본값은 "Thread Group"입니다.
Comments: 해당 Thread Group에 대한 설명이나 주석을 추가할 수 있는 필드입니다. 테스트 계획을 설명하는 데 유용합니다.

Action to be taken after a Sampler error:
Continue: 오류가 발생해도 테스트를 계속 진행
Start Next Thread Loop: 현재 스레드의 남은 작업을 중지하고 다음 루프를 시작
Stop Thread: 현재 스레드를 중지
Stop Test: 전체 테스트를 중지

Thread Properties:
Number of Threads (users): 테스트에 사용할 가상 사용자의 수를 설정 (100명으로 설정)
Ramp-up period (seconds): 모든 스레드를 시작하는 데 걸리는 시간을 설정 -> 0.01초마다 1명씩 총 100명이 스레드 실행
Loop Count: 각 스레드가 샘플러를 실행할 횟수를 설정합니다. "Infinite" 옵션을 선택하면 무한 반복됩니다.
Same user on each iteration: 체크하면 각 스레드가 반복할 때 동일한 사용자로 동작합니다.

Number of Threads (users): 100명의 가상 사용자를 생성하여 테스트를 수행합니다.
Ramp-up period (seconds): 1초 동안 모든 스레드를 시작합니다.
Loop Count: 각 스레드가 테스트 샘플러를 한 번 실행합니다.
Same user on each iteration: 동일한 스레드가 동일한 사용자로 반복 동작합니다.

 

 

주요 내용은 100명의 사용자가 0.01초마다 테스트를 진행할 예정이다.


홈페이지 접속하기

Thread Group - add - Sampler - HTTP Request 클릭

Path - 테스트할 페이지의 URL 입력
Server Name or IP - IP 입력

 

테스트 결과 확인하기

Thread Group - Add - Listener - 원하는 report 클릭 (여기선 View Result Tree 및 플러그인 3 Basic Graph의 Active Thread Over time을 사용)

View Result Tree - 테스트 상세 내역을 확인가능

Active Thread Over time - 전체 테스트 시간 확인가

 

로그인 진행하기

 

동일한 HTTP Request를 생성하며 HTTP Request를 POST로 변경, Body Data를 json형태로 입력 가능하다.

 

401에러가 나타날경우 

Add - Config Element - Http Header Mnager를 다음과 같이 설정해준다. 

CSV의 경우

만일 데이터를 동적으로 할당하고 싶은경우

Add - Config Element -CSV Data Set Config 클릭

filename은 자신이 사용할 CSV파일을 지정해준다

login은 다음과 같이 "${value}"의 형태로 사용한다

 

만약 에러가 나타날경우 추가적인 설정을 진행해줘야 한다. 에러에 대한 자세한 내용은 해당부분에서 확인 가능하다

1. DB랑 통신이 되어있는가?

2. 스프링 시큐리티 설정으로 인해 접근이 안되는가?

3. 로그인 정보가 올바른가?

view Results Tree에서 테스트 결과 확인이 가능하다


WEBSOCKET 테스트 

해당 설정은 Websocket의 설정이지만 내 방식은 STOMP를 활용하기에 조금 다른 형태로 진행한다.

 

처음 테스트를 진행했을때 계속 에러가 나왔는데 확인해보니 STOMP의 경우 URL이 변계속 연결부분이 바뀌는 문제가 있었다 (개발자도구에서 확인 가능)

 

해당 방식이 디폴트이다.

/example/stomp-endpoint/${counter}/${__RandomString(8,abcdefghijklmnopqrstuvwxyz,sessionld)}/websocket

 

  • /example/stomp-endpoint/: WebSocket 서비스의 기본 경로
자신이 만든 WebSocketConfig 에서 Endpoint 입력할것
@Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/example/stomp-endpoint")
                .setAllowedOrigins("*")
                .withSockJS();
    }
  • ${counter}: 랜덤한 index값

Jmeter - ADD - ConfigElemnet - Counter 클릭

111 부터 1씩 올리는 형태로 설정

  • ${__RandomString(8,abcdefghijklmnopqrstuvwxyz,sessionld)}: 각 연결에 대해 고유한 임의의 문자열을 생성한다 (8글자를 사용하며 랜덤으로 사용한다)
  • /websocket: WebSocket 프로토콜을 사용하여 연결을 설정

전체 depth는 다음과 같다.

 

 

 

 

결과

100개의 스레드가 10초간 실행되도록 하였을때 10초 부분까지 점진적으로 증가하다 테스트가 스레드가 종료되는 10초 이후부터 감소하는것을 확인할수 있다.

'Spring' 카테고리의 다른 글

젠킨스 로컬에서 자동화하기 - 2  (0) 2024.06.22
젠킨스 관련 에러 내용 (crumb, 용량부족)  (0) 2024.06.16
Jmeter - 1  (0) 2024.06.08
배포흐름  (0) 2024.05.26
소켓 / 웹소켓  (0) 2024.04.07

해당 포스팅에선 Jemter의 기초 설치방법 및 ngrinder 비교 포스팅만 진행할예정이며 Jmeter 실제 사용법은 Jmeter - 2 포스팅 참고할것

 

webSocket의 부하테스트를 진행해보기 위하여 테스트 도구를 검색하였고 Ngrinder 과 Jmeter 2가지를 사용해보았고 최종적으로 Jmeter를 사용하였다.

 

Ngrinder

Naver에서 개발한 오픈소스 프로젝트이다.

웹에서 lib를 jar, zip등의 형태로 다운받아 따로 라이브러리 폴더에 올리는 형태로 작업한다.

Jmeter

apache에서 개발한 테스트 툴이다.

jenkins와 연동을 지원한다.

lib를 받기 위해선 market plugin을 다운받고 여기서 필요한 lib를 다운받는 형식이다.

 

 

 

 

처음엔 Ngrinder를 사용하려고 했으나 Jmeter에 비하면 레퍼런스가 적었고 실제로 Groovy로 코드를 작성해봤으나 에러파악 및 이와 관련된 질문이 없는경우도 있어서 Jmeter로 변경하였다.

GUI의 최적화가 덜되어 가끔 렉걸리는 경우가 있었지만 무엇보다.. Jmeter가 Ngrinder보다 용량을 덜 차지한다..


Jmeter 실행

https://jmeter.apache.org/download_jmeter.cgi 
접속하여 zip 다운로드 후 압축해제

cmd -> jmeter 설치위치 이동 (apache-jmeter-5.6.3\bin) -> jmeter.bat 입력후 실행 

 

Apache JMeter - Download Apache JMeter

Download Apache JMeter We recommend you use a mirror to download our release builds, but you must verify the integrity of the downloaded files using signatures downloaded from our main distribution directories. Recent releases (48 hours) may not yet be ava

jmeter.apache.org


문제 업승ㄹ경우 화면과 같은 형태로 나타나며 

 

초기 화면은 다음과 같다.

테스트 저장시 jemter.bat이 위치한 폴더에 저장된다.

 

 

설치된 플러그인 확인 및 추가 플러그인 설치방법

https://jmeter-plugins.org/install/Install/

  1. jmeter-plugins-manager.tar 다운
  2. jmeter가 설치된 폴더로 이동
  3. lib/ext에 tar를 압축해제한 폴더를 드래그 앤 드롭 후 재시작

 

 

websocket이 테스트 목적 플러그인을 다운받았으며

2가지에서 WebSocket Samplers by Peter Doornbosch를 사용하였다

Maciej는 마지막 업데이트가 11년 전이다..

 

기본적인 설정은 끝났으니 실제 테스트는 다음 포스팅에서 진행하겠다.

'Spring' 카테고리의 다른 글

젠킨스 관련 에러 내용 (crumb, 용량부족)  (0) 2024.06.16
Jmeter - 2  (0) 2024.06.12
배포흐름  (0) 2024.05.26
소켓 / 웹소켓  (0) 2024.04.07
스프링 시큐리티  (0) 2024.02.20

1. JDK 설치

1. sudo apt install -y openjdk-11-jdk //(pom.xml에서 본인 java 버전에 맞는걸 확인)

2. java -version //버전확인용

2-1. sudo update-alternatives --config java   //만일 여러 버전이 설치되있을경우 해당 명령어로 jdk 버전선택

 

2. maven 설치

sudo apt install -y maven

mvn -version //버전확인용

 

3. 톰캣 설치

1. 톰캣 공식홈페이지의 Core : tar.gz 주소복사
2. sudo useradd -m -U -d /opt/tomcat -s /bin/false tomcat	//사용자 추가하기

3 cd /tmp	//폴더로 이동
4. curl -O https://downloads.apache.org/tomcat/tomcat-8/v8.5.100/bin/apache-tomcat-8.5.100.tar.gz
	//curl -O 1.에서 복사한 주소
5. sudo mkdir -p /opt/tomcat	//디렉토리 만들기
6. sudo tar xzvf apache-tomcat-8.5.100.tar.gz -C /opt/tomcat --strip-components=1
	//압축해제 및 설치되있던 최상단 폴더 제거
7. sudo chown -R tomcat: /opt/tomcat	//권한설정 (소유자 변경)
   sudo chmod -R 755 /opt/tomcat		//권한설정 (소유자에게 RWX)
   //R - read(읽기), W - wirte(쓰기), X - execute
8. sudo nano /etc/systemd/system/tomcat.service //톰캣 서비스 설정
9. 서비스 파일 입력하기
[Unit]
Description=Apache Tomcat Web Application Container
After=network.target

[Service]
Type=forking

User=tomcat
Group=tomcat

Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64"
Environment="CATALINA_PID=/opt/tomcat/temp/tomcat.pid"
Environment="CATALINA_HOME=/opt/tomcat"
Environment="CATALINA_BASE=/opt/tomcat"
Environment="CATALINA_OPTS=-Xms512M -Xmx1024M -server -XX:+UseParallelGC"
ExecStart=/opt/tomcat/bin/startup.sh
ExecStop=/opt/tomcat/bin/shutdown.sh

[Install]
WantedBy=multi-user.target
저장하기 (컨트롤 + O)

10. 재시작하기
sudo systemctl daemon-reload
sudo systemctl start tomcat
sudo systemctl enable tomcat
sudo systemctl status tomcat	//실행 확인하기

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ
// 만약 새롭게 설치해야 할경우
sudo systemctl stop tomcat	//기존 실행중인 톰캣 종료
sudo systemctl disable tomcat	 //기존에 설치된 톰캣비활성화
sudo rm /etc/systemd/system/tomcat.service	//기존에 만든 service파일 삭제
sudo systemctl daemon-reload	//시스템 재시작
sudo rm -rf /opt/tomcat	//톰캣 디렉토리 삭제
sudo userdel -r tomcat	//추가한 사용자 삭제

 

확인사항

src\main\resources 여기에 존재해야 빌드가 가능하다
rasd\src\main\webapp\WEB-INF\resources 여기있으면 파일 못찾는다!.. mapper 등 모두 다!

 

'Spring' 카테고리의 다른 글

Jmeter - 2  (0) 2024.06.12
Jmeter - 1  (0) 2024.06.08
소켓 / 웹소켓  (0) 2024.04.07
스프링 시큐리티  (0) 2024.02.20
웹에서 핸드폰으로 메세지 보내기 - 2  (0) 2024.02.05

+ Recent posts