분류 전체보기 88

[Security]JWT 토큰을 이용한 시큐리티 인증 처리

스프링 시큐리티와 JWT 토큰이 무엇인지에 대한 배경지식은 아래 게시글에 작성해두었다. https://dev-uu.tistory.com/93 [Security]Spring Security와 JWT1. 스프링 시큐리티란? 스프링 시큐리티는 사용자의 인증, 인가와 관련해 스프링 프레임 워크에서 제공하는 하위 프로젝트를 의미한다.앞선 정의에서 인증과 인가란 아래와 같이 정의할 수 있dev-uu.tistory.com 1. 프로젝트 환경- 테스트를 위한 기본적인 프로젝트 환경은 아래와 같이 진행하였다. 1) SpringBoot 3.4.02) SpringSecurity 6.0.0 이상 버전3) JDK 21 2. 프로젝트 생성스프링 부트 프로젝트 생성 사이트(https://start.spring.io/)에 접속해 ..

Spring 2024.12.13

[에러] java.lang.ClassNotFoundException: javax.xml.bind.DatatypeConverter

상황: JWT 토큰을 생성하기 위해 Jwts.builder 객체에 헤더, 페이로드 값 그리고 서명에 사용할 비밀 키를 적용하는 상황에서 해당 에러가 발생하였다. JDK 11 이후로 JAXB (Java Architecture for XML Binding)와 관련된 라이브러리를 직접 추가해야만 XML 데이터를 Java 객체로 변환하거나 그 반대 작업을 수행할 수 있다. Jwt 토큰을 생성하기 위해서는 base64로 인코딩 된 데이터가 이용되는데 이를 처리하기 위해서는 JAXB의 javax.xml.bind.DatatypeConverter 클래스의 이용이 필요하다.따라서 아래 라이브러리를 직접 추가해주어야 한다.  - gradle 기준implementation 'javax.xml.bind:jaxb-api:2.3..

기타 2024.12.10

[Security]Spring Security와 JWT

1. 스프링 시큐리티란? 스프링 시큐리티는 사용자의 인증, 인가와 관련해 스프링 프레임 워크에서 제공하는 하위 프로젝트를 의미한다.앞선 정의에서 인증과 인가란 아래와 같이 정의할 수 있다.인증: 사용자가 누구인지 확인인가: 인증을 통해 신원이 보장된 사용자가 리소스에 접근할 때, 접근 권한이 있는지를 확인  2. 스프링 시큐리티를 이용한 인증 - 스프링 시큐리티를 이용할 경우 서블릿 필터를 기반으로 작동하며, DelegatingFilterProxy를 이용해 시큐리티가 제공하는 FilterChainProxy를 필터체인에 등록하게 된다. 이후 FilterChainProxy는 SecurityFilterChain을 통해 인증과 관련된 여러 필터체인들을 선택해 이용하도록 한다.  - 별도의 설정이 없다면 Filt..

Spring 2024.12.09

[네트워크]HTTP, HTTPS 통신과 암호화 방식(대칭키, 비대칭키, 하이브리드) 그리고 SSL

1. 데이터 통신의 흐름 웹 상에서의 데이터 전송 시 데이터는 패킷형태로 전송되며 목적지는 IP 주소로 구분된다. 데이터가 전송될 때의 클라이언트와 서버간 연결 프로토콜은 속도 혹은 신뢰성에 따라 연결지향형인 TCP(Transmission Control Protocol) 통신과 비연결지향형인 UDP(User Datagram Protocol)로 나뉘게 되며 클라이언트와 서버 간의 통신 프로토콜로는 HTTP, HTTPS 와 같은 프로토콜이 이용되게 된다. - 통신흐름 예시클라이언트는 서버로 데이터를 보내고, DNS서버에서는 도메인 이름과 매칭되는 IP 주소를 찾게 된다. 데이터가 전송되는 동안의 연결 프로토콜은 TCP/IP와 같은 형태로 사용되며, TCP/IP 프로토콜과 함께 웹 상에서의 요청과 응답을 처..

BackGround 2024.12.02

JVM 이란?

1. JVM(Java Virtual Machine)이란?인간이 해석할 수 있는 텍스트 형태로 작성된 java 코드를 이용해 소스코드를 실행 시 다음과 같은 과정을 거쳐 해당 코드가 실행되게 된다.java 코드는 컴파일러에 의해 바이트 형태의 코드로 변경되고, 변경된 코드는 ClassLoader에 의해 JVM에 올라가게 된다. JVM 은 바이트 코드로 된 코드를 해석하면서 실행하고, JIT(Just-In-Time) 컴파일러를 사용해 실행 중에 최적화된 네이티브 코드로 변환시킨다. JVM 에 올라간 코드는 일종의 프로세스가 되어 JVM의 각각의 영역에서 메모리에 할당된 후 CPU에 의해 처리되면서 코드가 실행되며 필요한 작업을 시행하게 된다. JVM은 os 위에서 실행되므로 java는 다른 프로그램밍 ..

Java 2024.11.30

[OS]Process와 Thread

이전에 공부를 하며 프로세스와 스레드에 대해 대략적으로 프로세스는 '실행해야 될 작업' 스레드는 이러한 '프로세스들을 받아 처리해야 하는 일꾼'과 같은 개념으로 막연히 비유해 생각하고 있었다. 컴퓨터에 관해 공부하면서 이에 대해 명확히 알아야 할 것 같아 해당 개념들을 찾아보고 정리하였다.  1. 프로세스와 스레드 정의프로세스와 스레드의 사전적 정의는 아래와 같다.프로세스스레드운영체제로부터 자원을 할당받은 작업의 단위프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위  2. 프로세스의 생성과 메모리 구조- 프로세스가 실행될 시 메모리 상에 프로세스를 실행하기 위한 자원이 할당된다. 프로세스를 실행하기 위한 메모리 상에 자원은 아래와 같이 크게 4가지 부분으로 구성되게 된다.   1) STACK : 메소..

BackGround 2024.11.30

Apache JMeter 기본 사용법

Apache JMeter란?서버가 제공하는 성능 및 부하를 측정할 수 있는 테스트 도구로써 오픈소스 Java 애플리케이션이다.(Apache JMeter를 사용하기 위해서는 사전에 java가 설치되어 있어야 한다.) 1. 설치법- 아래 사이트에서 설치파일을 받아준 후 원하는 디렉토리에 설치해준다.좌측 Download Releases 클릭 > Binary > zip 파일 다운로드 https://jmeter.apache.org/  Apache JMeter - Apache JMeter™Apache JMeter™ The Apache JMeter™ application is open source software, a 100% pure Java application designed to load test functi..

기타 2024.11.20

SpringBoot + redis 프로젝트 생성 후 JMeter 성능 테스트 해보기

redis란?redis는 메모리 기반의 데이터베이스를 의미한다.기존 RDBMS의 경우 디스크 기반의 데이터베이스로 Disk I/O를 이용해 데이터에 대한 요청을 처리한다.RDBMS에서도 캐싱처리를 이용해서 메모리에 데이터를 올려 디스크에 직접 접근하지 않아도 메모리 기반 데이터를 이용할 수 있지만, 메모리 기반의 데이터베이스인 redis에 비해 메모리 용량이 제한적이고, Disk I/O에 의한 병목현상등이 발생할 수 있다는 점에서 한계를 지닌다. 기존에 SpringBoot 프로젝트에서 redis를 이용해 본 경험이 없어, 프로젝트를 생성 후 redis를 적용하고 기본적인 CRUD 작업을 하는 코드를 작성하고 이를 바탕으로 테스트 코드를 작성해 결과를 확인해보았다. 또한 JMeter를 이용해 부하테스트를 ..

DB 2024.11.20

PostgreSQL DB에서 테이블 Vacuum 처리

회사에서 postgreSQL DB를 사용한 프로젝트 개발 중 특정 테이블에서 데이터를 가져올 때 속도저하 문제가 발생하는 경우가 있었다.DB를 확인해 본 결과 테이블의 용량이 증가해 있음을 확인할 수 있었다.해당 테이블은 수정/삭제가 빈번히 발생하는 테이블이었는데, 결국 원인은 postgreSQL에서 MVCC(다중 버전 동시성 제어)를 하며 생성된 데드튜플에 따른 디스크 I/O에서의 성능저하였다. 해당 DB에는 AutoVacuum 설정이 되어있지 않아 수동으로 vacuum 처리를 하여 용량을 확보해 성능을 개선한 경험이 있는데, 그 과정에서 운영 DB에 직접 바로 vacuum 처리를 하기에는 데이터의 손실위험이 있어 임의로 테이블을 만들어 실습을 진행한 경험이 있다.  실행계획은 아래와 같이 계획했었다...

DB 2024.11.11

[Docker]Dockerfile,Docker-compose을 이용해 Tomcat, DB 컨테이너 생성

Dockerfile과 Docker-compose를 이용해 Tomcat, DB 컨테이너를 생성해 로컬에 띄워보는 실습을 시도해보았다. 1. Docker image 생성을 위해 프로젝트에 DockerFile을 추가 후 관련된 내용을 작성한다.2. 생성된 Docker image를 바탕으로 Docker-compose를 이용해 Tomcat 컨테이너를 생성한다.3. postgresql 이미지를 내려받아 Docker-compose를 이용해  DB 컨테이너를 생성한다.4. 기타 설정 - 프로젝트 정보springboot 3.3.4openJDK 17gradle 8.10.1 1. Dockerfile 작성프로젝트 바로 아래에 Dokcerfile을 생성하고 아래와 같이 작성해준다. FROM : 베이스 이미지를 설정해준다. 여기..

docker 2024.09.23