본문 바로가기

Java and Spring

(13)
Virtual Thread란? 이번 포스팅에서는 Virtual Thread에 대해서 소개해보려고 합니다.자바 21에서 Virtual Thread가 공식적으로 Feature 되었다는 소식을 듣고 기존 Thread와 어떤 차이점이 있고 어떻게 동작하는지 원리를 알아보도록 하겠습니다.1. Virtual Thread 소개Virtual Thread는 기존 자바 Thread와 다른 방식으로 동작하는 경량 쓰레드입니다.간단하게 기존 Thread는 OS의 Thread와 1:1 맵핑을 하여 작업을 처리하는 방식이라면, Virtual Thread는 OS의 Thread를 사용하지 않고, JVM 내부 스케줄링을 통해 맵핑이 되는 구조라서 좀 더 빠르고, 생성시 비용적인 측면에서 효율적인 장점이 있습니다. 그럼 간단하게 Virtual Thread 생성시 비..
LogBack을 활용한 Log파일 관리 개인 프로젝트를 진행하면서 EC2서버에서 Nginx를 활용하여 무중단 CI /CD를 구축하였습니다. 하지만, 배포를 하는 과정에서 EC2서버에서 가끔씩 에러가 발생하여 서버가 죽는현상이 발생하였고, 이유를 알아내기위해 배포 Shell 스크립트도 많이 보았지만, 원인을 밝혀내지 못했습니다. 로컬환경에서는 콘솔창에 올라온 에러로그를 확인하여 해결하면 되지만, EC2에서는 로그를 보지못하여 LogBack을 프로젝트에 적용하여 로그 파일을 관리하게 되었습니다. 이번 포스팅에서는 LogBack의 사용방법과 실제 EC2환경에서의 로그파일이 어떻게 관리되는지 공부해보려고 합니다. 1. Logback 1 - 1. Logback이란 간단하게 자바에서 사용되는 로깅 라이브러리는 Log4j, Logback, Log4j2가 ..
Spring Boot에서 AWS Parameter Store 사용 프로젝트를 Github에 올리게 되면, application.yml에 있는 DB 접속정보, Jwt에 사용되는 secret key와 같은 중요 정보가 모두에게 노출 될 수 있습니다. 이런 중요 정보를 노출하지 않기위해 사용하는 방식에는 jasypt 암호화 방식, Git 서브모듈 등 여러가지 방식이 있지만, 이번 포스팅에서는 AWS에서 원격으로 설정값을 제공해주는 서비스인 파라미터 스토어에 대해 포스팅 해보려고합니다. 1. AWS Parameter Store 적용 1 - 1. Parameter Store 세팅 먼저 Parameter Store을 검색해서 들어가셔서 파라미터 생성 버튼을 클릭합니다. 그 후 이름, 설명을 입력하시고, 보안 문자열을 선택합니다. 1. 이름 같은 경우에는 아래 규칙에 따라 작성해주..
CORS(Cross-Origin Resource-Sharing)란? 개발한지 4년이 되었지만, 그 동안 회사에서 SSR(Sever-side Rendering)기반으로 프론트와 백엔드를 개발하다보니 출처가 다른 환경에서 API를 호출해본적이 없어서 CORS의 개념에 대해서 전혀 모르고 있었습니다. 그러던 중 우아한 테크에서 진행하는 [10분 테크톡]에서 CORS라는 주제로 발표하는 것을 보고 추후에 프론트와 백엔드가 나뉘어진 회사에서 CORS문제를 겪을수도 있을 것 같다는 생각이 들게 되어 공부하게 되었습니다. SOP란? CORS란? CORS 해결법 SOP(Same-Origin Poicy)란? 먼저, CORS문제를 겪게되는 이유는 SOP정책 때문입니다. SOP란, 동일 출처 정책이라해서 하나의 출처에서 자원을 얻기 위해서는 동일한 출처에서 접근을 해야 한다는 정책입니다. ..
[Spring] 커넥션 풀과 데이터소스 이번 포스팅에서는 커넥션 풀과 데이터소스에대해 공부하고 사용하는 이유에 대해 알아보려 합니다. 커넥션 풀 - 커넥션을 담아두는 장소 커넥션 풀을 알아보기전에 어플리케이션에서 요청이 들어오면 어떤 흐름으로 진행되는지 알아보도록 하겠습니다. 어플리케이션 요청 DB 드라이버를 통한 커넥션 요청(네트워크 통신 발생) 커넥션 반환 위와 같은 순서로 흐름이 진행됩니다. 하지만, 커넥션을 얻어오는 작업은 굉장히 무겁고 시간도 많이 들기때문에 매번 사용자의 요청이 있을때마다 커넥션을 만들어서 반환하는 방식은 트래픽이 많은 서비스에서는 적합하지 않습니다. 그래서 커넥션들을 미리 만들어두고 재사용하는 방식을 사용하게 되었는데, 미리 만들어둔 커넥션들을 담아두는 장소가 커넥션 풀입니다. 커넥션 풀을 사용하여 어플리케이션 서..
[Java] Message Digest 암호화 방식 공부하기에 앞서 먼저 알아둘 것이 있는데, 해싱과 암호화는 어느 정도 비슷하다고 생각할 수 있으나, 암호학적으로 본다면 차이가 있습니다. 먼저, 가장 큰 차이점은 "방향성"입니다. 단방향, 즉 평문을 암호화하고 난 후 복호화가 불가능한 것이 해싱이다. 양방향, 즉 평문을 암호화하고 난 후 복호화가 가능한 것이 암호화이다. 단방향 해시함수 이번에 공부할 MessageDigest함수는 단방향. 즉, 해싱에 대해서 알아 보려고 합니다. 간단하게 그림으로 설명을 해보자면 다음과 같습니다. Password를 MessageDigest함수를 사용하여 해싱은 가능하지만, 반대로 암호화된 데이터를 복호화하지는 못하는 의미입니다. 그렇다면, 가장 대표적인 해싱 알고리즘에는 어떤 것들이 있을까요?? 대표적으로는 MD5, S..
[Spring] 스프링 AOP 지금까지는 순수하게 AOP를 사용하기위해 스프링에서 무엇을 제공하고 어떤 개념을 알아야 하는지 공부했다면, 이번 포스팅에서는 스프링 AOP에대한 사용방법을 상세하게 알아보려고 합니다. AOP란? 결론부터 말씀드리자면, AOP는 핵심적인 기능과 부가적인 기능을 분리하는데에 그 목적이 있습니다. 예를들어서 OrderService클래스의 주문을 하는 로직이 있다고 가정합니다. 그리고 주문을 할때마다 로그를 볼 수 있는 기능을 넣는다면, 아래와 같은 이미지가 될 것입니다. 그런데 이러한 부가기능을 모든 클래스에서 사용되고 있다면???? 아래와 같은 그림이 될 것입니다. 사실 부가 기능이 모든 클래스가 들어가게 된다면, 반복되는 코드가 추가되고 핵심 기능과 부가 기능이 분리되지 않기때문에 유지보수 측면에서 굉장히..
[Spring] 빈 후처리기 이번 글에서는 빈 후처리기를 크게 3가지로 알아보려고 합니다. 빈 후처리기 빈 후처리기 - 예제코드 스프링이 제공하는 빈 후처리기 빈 후처리기란? 빈 후처리기는 스프링이 @Bean 혹은 컴포넌트 스캔으로 생성한 객체를 스프링 컨테이너에 등록하기 전에 조작하는 기술입니다. 빈 후처리기를 사용하기 위해서는 BeanPostProcessor라는 인터페이스를 구현해야하는데, BeanPostProcessor인터페이스의 Default메서드인 postProcessAfterInitialization를 Override하여 구현하면 됩니다. 일반적인 빈 후처리기의 과정을 보도록 하겠습니다. 스프링은 @Bean 혹은 컴포넌트 스캔 대상이되는 빈객체를 생성합니다(ex : A객체) 스프링 컨테이너(빈 저장소)에 등록하기 전에 빈..