2021. 3. 17. 16:11 PROGRAMMING
스프링부트 세션아이디와 셋쿠키값 다름, SpringBoot getSessionId, SetCookie, SessionId

스프링부트 2.0 이상부터 외부로 나가는 세션아이디는 base64로 인코딩되어 출력된다고 합니다.

 

 

SetCookie로 받은 세션값

YzlkZjRjMDgtODMwMi00OTAxLWE3MzUtMzFjYTE5YWEyMTM1

 

 

JAVA에서 getId로 출력한 세션아이디

request.getSession().getId()

c9df4c08-8302-4901-a735-31ca19aa2135

 

base64 인코딩

request.getSession().getId()의 세션아이디를 base64로 인코딩하면 같은 값이였다는걸 알수있습니다.

2020. 12. 27. 20:33 DEV ENVIRONMENT
스프링부트 로그파일 생성안됨, logging.file, application.properties, pom.xml

스프링부트프로젝트에서 로깅파일이 생성이 안되서 찾아봤더니

In higher versions of spring-boot-parent(from version 2.2.0), property logging.file is deprecated.

2.2.0버전 이상부터는 logging.file이라는 설정이 디프리케이티드 됬다는 예기입니다.

그래서 버전을 수정해주고 다시 테스트해보겠습니다.

 

 

스프링 버전이 2.2.0 미만일때

#application.properties
logging.file=파일명

#application.yml
logging:
	file: 파일명

 

 

스프링 버전이 2.2.0 이상일때

#application.properties
logging.file.name=파일명

#application.yml
logging:
	file:
    	name: 파일명

 

 

 

application.yml, pom.xml

...
...
logging:
  level:
    ROOT: DEBUG
    com.zaxxer.hikari.HikariConfig: INFO
    com.zaxxer.hikari: INFO
    org.springframework: INFO
    org.springframework.jdbc: ERROR
    org.springframework.web.filter: DEBUG    
    jdbc: ERROR
    jdbc.connection: ERROR      # 커넥션 open close 이벤트를 로그로 남긴다      
    jdbc.sqlonly: INFO          # SQL문만을 로그로 남기며, PreparedStatement일 경우 관련된 argument 값으로 대체된 SQL문이 보여진다.
    jdbc.sqltiming: WARN        # SQL문과 해당 SQL을 실행시키는데 수행된 시간 정보(milliseconds)를 포함한다.
    jdbc.audit: ERROR           # ResultSet을 제외한 모든 JDBC 호출 정보를 로그로 남긴다. 많은 양의 로그가 생성되므로 특별히 JDBC 문제를 추적해야 할 필요가 있는 경우를 제외하고는 사용을 권장하지 않는다.
    jdbc.resultset: ERROR       # ResultSet 로그를 남긴다. 
    jdbc.resultsettable: ERROR  # SQL 결과 조회된 데이터의 table을 로그로 남긴다.
    org.hibernate.validator: INFO
    springfox: ERROR       
    io.lettuce.core: WARN
    org.apache.http.wire: WARN
  file: 
    name: C:/logs/local.log
    max-size: 100MB
    max-history: 30
...
...
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>
	<parent>
		<groupId>org.springframework.boot</groupId>
		<artifactId>spring-boot-starter-parent</artifactId>
		<version>2.2.9.RELEASE</version>
		<relativePath /> <!-- lookup parent from repository -->
	</parent>
...
...

 

스프링부트 재시작 스크립트 - 15/17 AWS EC2 JENKINS 스프링부트 자동배포

 

 

이미 실행중인 서버가 있으면 중지하고,

서버를 시작하는 스크립트를 만들겠습니다.

 

직접 실행할 수도 있고, 젠킨스 빌드 후에 서버를 재시작하기 위한 스크립트 입니다.

 

 

1. webapps 디렉토리 생성, 스크립트 파일 생성

mkdir /home/ec2-user/webapps
cd /home/ec2-user/webapps

vi /home/ec2-user/webapps/start.sh

 

 

2. 스크립트 복사 > 붙여넣기

#!/bin/bash

REPOSITORY=/home/ec2-user/webapps
echo "REPOSITORY = $REPOSITORY"
cd $REPOSITORY

PROJECT_NAME=springboot
echo "PROJECT_NAME = $PROJECT_NAME"

PROJECT_PID=$(pgrep -f $PROJECT_NAME)
echo "PROJECT_PID = $PROJECT_PID"

if [ -z $PROJECT_PID ]; then
    echo "no running project"
else
    kill -9 $PROJECT_PID
    sleep 3
fi

JAR_NAME=$(ls $REPOSITORY/ | grep $PROJECT_NAME | tail -n 1)
echo "JAR_NAME = $JAR_NAME"

java -jar $REPOSITORY/$JAR_NAME &

 

 

3. 스크립트 파일에 실행권한 부여 > 스크립트 실행

chmod 770 /home/ec2-user/webapps/start.sh

/home/ec2-user/webapps/start.sh

 

 

 

4. 실행된 스프링부트 프로젝트 확인

 

스프링부트 서버 실행, 8080, 80포트 포워딩 - 14/17 AWS EC2 JENKINS 스프링부트 자동배포

 

 

스프링부트 프로젝트(다른것들도)를 EC2에서 가동하면 80포트 접근이 제한됩니다.

그래서 스프링부트는 8080으로 띄우고,

사용자가 80으로 접속해도 8080에 접속되도록 설정하겠습니다.

 

 

1. 젠킨스 워크스페이스로 이동

경로는 사용자마다 다를 수 있습니다.

cd /var/lib/jenkins/workspace/springboot/target

 

 

2. 스프링부트 서버 시작

java -jar ./springboot.jar &

 

 

3. 8080으로 접속 테스트

application.properties(yml)의 포트로 접속하시면 됩니다. (80은 안됩니다.)

 

 

 

4. IP테이블 등록

sudo iptables -A PREROUTING -t nat -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 8080
sudo iptables -t nat -L --line-number

 

 

5. 80포트로 접속

 

 

6. IP테이블 서비스 설치

sudo yum -y install iptables-services

 

 

7. IP테이블 서비스 설정

sudo service iptables save
sudo systemctl start iptables
sudo systemctl enable iptables
sudo iptables -t nat -L

 

rc.local에 등록

sudo vi /etc/rc.local

sudo iptables -t nat -I PREROUTING -p tcp --dport 80 -j REDIRECT --to-port 8080
맨 아래에 추가

wq:


sudo iptables-save > /home/ec2-user/iptables
sudo mv /home/ec2-user/iptables /etc/sysconfig/iptables
젠킨스에 깃허브 연동, 빌드 - 13/17 AWS EC2 JENKINS 스프링부트 자동배포

 

 

이번에는 젠킨스에 새로운 아이템을 생성해서 Github에서 소스를 받아서 jar파일을 생성해보겠습니다.

그리고 서버에서 스프링부트 프로젝트를 실행하면 수동으로 배포가 완료됩니다.

 

 

1. 젠킨스 > 새로운 Item

 

 

2. 이름 입력 (저는 springboot로 입력했습니다)

 

 

3. 소스 코드 관리 > Git 선택

 

 

 

4. 깃허브 > Code > Clone > HTTPS > 주소 복사

 

 

5. Repository URL에 복사한 주소 입력 > Credentials > Add > Jenkins

 

 

6. Github 계정정보 입력 > Add

Domain: Global credentials (unrestricted)
Kind: Username with password
Scope: Global (Jenkins, nodes, items, all child items, etc)
Username: 깃허브아이디(이메일주소)
Password: 깃허브비밀번호

 

 

7. Branch Specifier (blank for 'any') 에 */master 입력 > 저장

다른 브랜치가 있으면 다른것을 입력해도 됩니다.

 

 

 

8. 젠킨스 > Item > Build Now

 

 

9. 콘솔 출력 확인

첫 빌드때는 프로젝트에 필요한 jar파일을 다운받느라고 좀 느립니다.

 

 

10. EC2 > 빌드된 jar 확인

springboot는 젠킨스에서 생성한 Item이름입니다.

cd /var/lib/jenkins/workspace/springboot/target
ls -l

 

EC2 보안그룹 인바운드 규칙 접속 설정 - 2/17 AWS EC2 JENKINS 스프링부트 자동배포

 

 

AWS EC2 서버는 기본적으로 모든 접근이 막혀있습니다.

콘솔 접근을 하거나 젠킨스 접속/사용,

스프링부트 프로젝트 확인을 위해서

접속권한을 설정하겠습니다.

 

 

1. AWS 콘솔 > 서비스 > EC2

 

 

2. 인스턴스 > 인스턴스 > 내 인스턴스 체크(선택)

 

 

3. 보안 탭 > 보안 그룹 > 보안그룹링크 클릭 (sg-0549a.... 사용자마다 다릅니다)

 

 

 

4. 인바운드 규칙 편집

 

 

5. 규칙 추가 > 80, 22, 8080, 8090 입력 > 내 IP

80		스프링부트 프로젝트 접속 포트, 브라우저로 접속
22		EC2접속 포트, PUTTY로 접속
8080		스프링부트 프로젝트 접속 포트, 브라우저로 접속
8090		젠킨스 접속 포트, 브라우저로 접속

 

 

- 컴퓨터 아이피가 자주 바뀌는 분들은 XXX.XXX.XXX.0/24로 설정하면
아이피가 변경되도 접속할 수 있습니다.

 

EC2 인스턴스 생성 - 1/17 AWS EC2 JENKINS 스프링부트 자동배포

 

 

AWS EC2에 스프링부트 프로젝트를 자동배포 하는 방법입니다.

로컬 컴퓨터에서 스프링부트 프로젝트의 소스를 푸시(커밋)하면 EC2에 자동으로 배포/적용되게 하겠습니다.

 

예제에서 사용하는 스프링부트 프로젝트는 메이븐 기반입니다.

(그래들 프로젝트도 젠킨스에 기본으로 깔리니까 잘 빌드될것 같습니다.)

스프링부트 프로젝트가 있고 소스가 Github에 있어야 합니다.

AWS 회원가입(카드등록)도 되어있어야 합니다.

 

 

먼저 AWS에 EC2를 생성하는 방법입니다.

 

 

1. 서비스 > 컴퓨팅 > EC2

 

 

2. 인스턴스 > 인스턴스 > 인스턴스 시작

 

 

3. Amazon Linux2 AMI > 선택

(아마존 리눅스나 우분투 아무거나 해도 됩니다)

 

 

 

4. t2 마이크로 선택 > 다음: 인스턴스 세부 정보 구성

 

 

5. (변경한게 없습니다.) 다음: 스토리지 추가

 

 

6. (변경한게 없습니다.) 다음: 태그 추가

저는 기본으로 적혀있는 8Gb를 선택했는데, 30Gb까지는 프리티어 무료 입니다.

 

 

7. (추가한게 없습니다.) > 다음: 보안 그룹 구성

 

 

 

8. SSH, 22, 내 IP선택 > 검토 및 시작

접속해야 하니까 일단 SSH한개만 열어주면 됩니다.

 

 

9. 자신이 선택한 세부정보 확인 > 시작하기

 

 

10. 새 키 페어 생성 > "키페어이름입력" > 키 페어 다운로드 > 인스턴스 시작

키파일은 한번 받으면 더이상 받을 수 없습니다.

잃어버리면 셋팅을 다시 해야하니까 잘 보관하세요.

 

 

11. 인스턴스 생성 완료 > 시작

 

 

 

12. 인스턴스 > 인스턴스 > 생성된 인스턴스 확인

2020. 11. 22. 00:32 카테고리 없음
자바, 스프링부트에서 레디스 키-값 출력 예제, SpringBoot+Redis Key-Value PrintAll

 

자바(스프링부트)에서 레디스 키 출력

 

spring:session:TEST:sessions의 모든 값을 출력하는 예제 입니다.

Set<String> redisKeys = redisTemplate.keys("spring:session:TEST:sessions:*");
List<String> keysList = new ArrayList<>();
Iterator<String> it = redisKeys.iterator();
while (it.hasNext()) {
	String data = it.next();
	keysList.add(data);
	System.err.println("@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ "+data);
}

 

 

2020. 8. 12. 10:24 DEV ENVIRONMENT
AWS EC2 스프링부트 JSP 404 에러, SpringBoot JSP Not Found Error, WAR, JAR

오늘은 어렵사리 스프링부트 프로젝트에 jsp를 적용했습니다.

로컬에서 테스트를 해보고 aws에 올렸는데,

로컬에서는 되던게 aws에서는 안되는것입니다.

코딩한것에서는 오류가 없었는데 컨트롤러에 연결되는 jsp파일을 찾지 못하는 오류가 발생합니다.

 

 

 

Whitelabel Error Page

This application has no explicit mapping for /error, so you are seeing this as a fallback.

Mon Aug 10 04:07:03 UTC 2020

There was an unexpected error (type=Not Found, status=404).

/WEB-INF/views/index.jsp

 

 

검색해보니 이런저런 방법들이 많이 나와있던데,

저같은 경우에는 jar패키징을 war로 변경해서 해결했습니다.

 

- 클래스가 찾는 뷰파일의 위치 확인,
- 프로젝트가 빌드될때 war로 빌드되게 변경
- war패키지 안에 jsp파일이 잘 들어있는지 확인

하면 됩니다.

 

 

1. build.gradle 파일에 war설정

plugins {
	id 'war' // 추가
}

apply plugin: 'war'  // 추가


bootWar {
	archiveBaseName="springboot" // 추가
	archiveVersion="1.0.0-SNAPSHOT" // 추가
}

 

2. 로컬에서 실행시
그래들 싱크 > gradle 탭에서 bootWar 실행 > 어플리케이션 실행

 

3. AWS EC2에서 실행시

cd 프로젝트디렉토리

./gradlew bootwar

nohup java -jar ./build/libs/스냅샷파일.war &

 

 

EX: 스프링부트에 JSP사용 설정시, 파일 위치

 

 

최근에 올라온 글

최근에 달린 댓글