캐시 사용 서버의 부담을 줄이고 성능을 높이기 위해 사용되는 기술 DB에서 조회하는 게 오래 걸리는 작업에 적용하여 해당 결과값을 저장해 두고 가져옴으로써 빠르게 처리가 가능해짐 동일한 결과값이 매번 자주 호출되는 작업에 적용하면 유리하다 -> 결과값이 매번 다른 작업에 적용한다면 캐시를 확인하는 작업으로 인한 부하가 생겨 성능이 오히려 떨어질 수 있으니 주의하여 사용한다 Spring Cache (@Cacheable) 간단 사용법 1. gradle 종속성 추가 implementation 'org.springframework.boot:spring-boot-starter-cache' 2. @EnableCaching 설정 캐시 기능을 사용할 애플리케이션에 @EnableCaching 어노테이션을 붙여준다 @Sp..
Github Actions의 self-hosted를 이용하여 자동배포를 구현하던 중 문제가 발생했다. 깃허브 액션에서 빌드 단계에서 계속 실패한다. 에러를 살펴보던 중 발견한 놈이다. Caused by: java.lang.IllegalArgumentException at PropertyPlaceholderHelper.java:180 37 내가 설정한 환경변수를 못 찾겠단다 ??? 아니 도대체 왜 못 찾는 거지? 난 분명 ec2에 환경변수 설정을 해놨는데 못 읽는단다;; 그래서 구글링을 하던 도중 알게 된 사실이 깃허브 액션은 빌드할 때 환경변수를 읽어오는 위치가 ec2가 아니란다 그럼 도대체 어디서 읽어오는 건데??? 구글 열심히 뒤져봤지만 원하는 답을 찾지 못했고 (아는 사람 제발 알려주세요..ㅠㅠ) ..
Github Actions를 이용하여 EC2, Linode 등 ubuntu 서버에 자동배포를 알아보겠습니다. 우선 본인의 서버 pc에 접속하여 기본적인 세팅을 해줍시다. sudo apt update # 각자 원하는 버전을 설치하시면 됩니다 sudo apt install openjdk-11-jre-headless 서버에서 사용할 포트도 열어줍니다 EC2 -> 보안탭의 인바운드 규칙 수정 Linode -> firewalld 를 사용하여 포트 개방 (기본적으로 열려있음) 자동배포할 프로젝트 레포지토리로 이동하여 Settings - Actions - Runners - New self-hosted runner로 이동합니다 운영 체제에 맞게 선택해주시고 표시한곳까지 서버 터미널에 명령어들을 차례로 입력해 줍니다. ..
클라이언트 측에서 Header에 Jwt 토큰을 실어 보내면 해당 정보를 볼 수 있는 방법을 간단하게 알아보겠습니다. 커스텀 애너테이션 @Login이라는 커스텀 애너테이션을 만들어서 UserDetails 객체에 받아온다 @Retention(RetentionPolicy.RUNTIME) @Target(ElementType.PARAMETER) @AuthenticationPrincipal public @interface Login { } @GetMapping public void getJwtEmailTest(@Login UserDetails userDetails) { System.out.println("@Login : " + userDetails.getUsername()); } @AuthenticationPrin..
Git 설정 로컬 레포지토리와 연결할 유저 정보를 설정합니다. # 버전 히스토리를 식별할 때 사용할 이름을 설정합니다. $ git config --global user.name "[firstname lastname]" # 각 기록과 연결할 이메일 주소를 설정합니다. $ git config --global user.email “[valid-email]” 도움말 보기 help 명령어를 이용하여 각 명령어 및 옵션의 기능에 대해 살펴볼 수 있습니다. # git에서 제공하는 모든 명령어를 볼 수 있습니다. $ git help -all # 특정 command에서 사용할 수 있는 모든 옵션을 볼 수 있습니다. $ git [command] -help 세팅 및 초기화 레포지토리를 초기화하거나 존재하는 레포지토리를 클론..
개발을 하다 보면 로컬 환경, 개발환경, 운영환경 등 다양하게 구분하여 사용합니다. 이를 간단하게 관리하는 방법을 알아보겠습니다. // application.properties의 경우도 동일한 방식으로 설정이 가능합니다. 1. application-{이름}.yml 만들어주기 예를 들어 로컬 환경이면 application-local.yml 실제 운영 환경이면 application-prod.yml 등 필요한 여러 방식들을 만들어 줍니다 2. 각 환경에 맞는 설정하기 공통적인 설정들은 application.yml에 모두 해주고 각 환경별로 다른 부분만 해당 파일에 설정을 해주시면 됩니다. 알아보기 쉽게 7777로 해봤습니다. 3. 사용할 환경 입력해주기 application.yml 에서 사용할 환경을 입력하고..
토큰이라 하면 오락실이나 놀이공원서 사용하는 동전을 떠올릴 수 있다 물론 요즘은 사용하지 않지만... ㅎㅎ 토큰은 '대가를 지불하였고, 이 시설(서비스)을 이용할 수 있다'는 의미를 담은 증표이다 애플리케이션 보안 측면에서의 토큰은 어떤 의미일까? ✔️ 토큰이란? 인증된 사용자의 자격을 증명하는 동시에 접근 권한을 부여해 접근 권한이 부여된 특정 리소스에만 접근이 가능하게 하는 역할 ✔️ 토큰 기반 자격 증명의 특징 인증된 사용자의 정보를 토큰에 저장하고, 접근 권한을 부여해 접근 권한이 부여된 특정 리소스에만 접근이 가능하게 하는 방식 토큰에 포함된 인증된 사용자 정보는 서버 측에서 별도의 관리를 하지 않는다 생성된 토큰을 헤더에 포함시켜 request 전송 시, 인증된 사용자 인지를 증명하는 수단으로..
✔️ 세션(session)이란? 웹 사이트의 여러 페이지에 걸쳐 사용되는 사용자 정보를 저장하는 방법 일정 시간 동안 같은 사용자로부터 들어오는 요구를 하나의 상태로 보고, 그 상태를 유지시키는 기술 쿠키는 클라이언트 측에 데이터를 저장하지만, 세션은 서버 측에 데이터를 저장한다 ✔️ 세션 기반 자격 증명의 특징 세션은 인증된 사용자 정보를 서버 측 세션 저장소에서 관리한다. 생성된 사용자 세션의 고유 ID인 세션 ID는 클라이언트의 쿠키에 저장되어 request 전송 시, 인증된 사용자인지를 증명하는 수단으로 사용된다. 세션 ID만 클라이언트 쪽에서 사용하므로 상대적으로 적은 네트워크 트래픽을 사용한다. 서버 측에서 세션 정보를 관리하므로 보안성 측면에서 조금 더 유리하다. (토큰에 비해) 서버의 확장..
✔️ Cookie 쿠키는 클라이언트에 데이터를 저장하기 위한 수단 중 하나이다. 서버가 클라이언트에게 쿠키를 전송하기도 하며, 클라이언트가 서버로 쿠키를 전송하기도 한다. 서버가 클라이언트에 데이터를 저장할 수 있으나, 아무 때나 데이터를 이용할 수는 없다. 데이터를 저장한 이후 특정 조건들이 만족하는 경우에만 다시 가져올 수 있다. 이러한 조건들은 쿠키 옵션으로 표현할 수 있습니다. ✅ Domain 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있게 한다. 도메인은 www.google.com 과 같은 서버에 접속할 수 있는 이름이다 쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보, 세부 경로를 포함하지 않는다. 쿠키 옵션의 도메인은 http://www.localhost.com:30..