목록Java (18)
지석이의 일기

지난 시간에 S3와 Cloudfront 를 연계해서 Cloudfront 를 통해서만 이미지를 호출 할수 있도록 실습해 보았다. 그런데 Cloudfront 를 호출하면 호출 할수록 비용이 든다. URL만 누군가가 가져간다면 누구도 모르게 트래픽이 쌓일수도 있다는 것이다. 그러므로, Forntend 가 있는 서버만 ip 허용을 하여 frontend에서만 이미지를 호출 할수 있도록 해보자.AWS 콘솔에서 WAP 을 검색해서 IPSETS - CREATES IP SET으로 IP 모음집(?)을 생성 해주자 IP SET NAME => IP모음의 이름 설정DESCRIPTION => IP모음 설명CloudFront 를 사용해야하기때문에 Global을 선택.IP addresses 에 이미지 호출을 허용시킬 ip와 /32..

이전 시간에 S3를 이용해서 파일을 저장하는 방법을 확인했고, 그 파일을 바로 URL로 호출하는 것까지 확인을 했다. 그런데 왜 굳이 CloudFront 를 또 연계 해야하나? 한번 알아보자. CloudFront란 무엇인가? CloudFront는 AWS에서 제공하는 CDN(Content Delivery Network) 서비스야. 간단히 말해서 전 세계 여러 위치에 데이터를 복사해 두고, 사용자가 요청했을 때 가장 가까운 위치에서 데이터를 제공해서 빠르게 내용을 볼 수 있게 해주는 시스템이지. CloudFront 를 사용해야 하는 특징 4가지빠른 속도: 전 세계에 분포된 엣지 로케이션을 통해 사용자에게 데이터를 빠르게 전달해. 확장성: 트래픽이 많아도 자동으로 스케일링돼서 성능 문제 없이 서비스를 제공해..

낮은 사양의 서버를 호스팅하거나, 대량의 이미지 파일들을 저장할경우 cdn 을 사용하거나 다른 nas를 사용해서 파일을 저장한다. S3는 Amazon Simple Storage Service의 약자로, 웹에서 데이터를 저장하고 검색할 수 있는 무한한 저장 공간을 제공한다. S3 특징들 1. 무한한 저장 공간 너의 모든 데이터를 무한히 저장할수 있고,사용한 만큼만 비용을 지불한다. 2. 높은 내구성과 가용성 내가 올린 데이터를 여러 저장소에 저장하기에 물리적으로 문제가 생긴다해도 내 파일의 무결성을 보장한다. 3. 보안 데이터는 전송 중이나 저장 중일 때도 암호화된다. 4. 간편한 데이터 관리 데이터 라이프 사이클 관리, 자동 아카이빙 등 다양한 기능을 통해 데이터를 쉽게 관리할 수 있다. S3를 사용하기..

이번에 세미 프로젝트용으로 채팅을 구현하기로 했다. 서버는 Spring boot , 프론트는 React 로 구성했다. 채팅 기술스택은 websocket 을 사용하려고 한다. WebSocket의 기본 원리 WebSocket 프로토콜은 ws (또는 보안 연결을 위한 wss) 스키마를 사용하여 작동. 클라이언트(보통 웹 브라우저)는 WebSocket 객체를 생성하여 서버에 연결을 시도한다. 이 연결 과정은 HTTP 프로토콜을 사용하여 시작되며, Upgrade 헤더를 통해 WebSocket 연결로 전환. 연결 과정 핸드셰이크 요청: 클라이언트는 서버로 HTTP 요청. 이 요청에는 Upgrade: websocket과 Connection: Upgrade 헤더가 포함되어 WebSocket 연결로의 전환을 요청. 핸드..

Java에서 JWT를 이용하여 Access Token과 Refresh Token을 발행하고, API 요청 시 토큰의 유효성을 검사하는 방법에 대해 알아보겠습니다. 의존성 추가 먼저 'jjwt' 라이브러리를 사용하기 위해 다음의 의존성을 Maven 프로젝트에 추가해야 합니다. io.jsonwebtoken jjwt 0.9.1 Access Token과 Refresh Token 발행 다음은 JWT를 이용하여 Access Token과 Refresh Token을 발행하는 Java 코드입니다. import io.jsonwebtoken.*; import java.util.Date; public class JwtExample { private static final String SECRET_KEY = "SecretKey..

Interceptor에서 토큰 유효성 체크 도중에 유효하지 않은 데이터를 반환 할때, 에러를 throw해야하는 경우가 있습니다. 그때, @ControllerAdvice를 이용해 Spring Boot에서 전역 예외 처리를 하는 방법에 대해 알아보겠습니다. 먼저, 사용자 정의 예외 클래스를 만들어보겠습니다. @Data @ToString public class CustomException extends RuntimeException { private String message; private String code; private String returnUrl; public CustomException(String message, String code , String returnUrl) { this.code =..

만일 노드js 프로그램이 없는 상태에서 npm 진행 하려고 하면, CommandNotFoundException 이 발생한다. https://nodejs.org/en Node.js nodejs.org 에서 최신 버전 혹은 lts버전을 받아준다. lts 추천 exe 파일 설치 후, 진행 (server에서는 yum으로 설치 예정) 만일 노드js 프로그램이 없는 상태에서 npm 진행 하려고 하면, CommandNotFoundException 이 발생한다. 설치 이후 재부팅을 추천한다! 설치가 완료 되었으면 명령프롬프트 창에서 확인 가능 ( npm -v ) 단순히 명령 프롬프트에서 확인 가능하거나 인텔리제이 터미널에서도 확인 가능하다. 필자는 프로젝트 바로 1순위 아래에 frontend 프로젝트를 생성할것이다. ..

간단한 프로젝트를 테스트 하기 위해 DB를 설치하고 설정하기가 여간 귀찮지 않을 수 없다. 물론 추후에 배울 도커를 사용한다면 바로 DB환경을 만들 수 있겠지만, 그건 또 서버가 있어야 가능한 소리이다. 그래서 바로 설정이 가능한 H2 데이터 베이스를 사용 하자. H2 데이터 베이스는 간단하게 말하자면 내가 지금 작동중인 프로젝트 메모리 안에 작은 경량 DB를 만들어 그 안에서 사용하는것이다. 그러므로 매우 가볍고(경량화), 매우 빠르고(고성능) 라는 장점이 있다. 물론 단점으론, 큰 프로젝트에는 사용하지 못하고, 일관성이 유지 되기 힘들다는 점이 있다고 한다. 그러므로 테스트로만 사용하고 실질적인 프로젝트에는 다른 DBMS를 사용하자! 아래는 인터넷에서 찾아 검색한 H2의 장단점 요약이다. 장점: 경량..
아래의 Person 클래스를 이용해서 아래 17개의 구문을 Stream API로 구현하면 되겠다. class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } } 1.나이가 20세 이상인 사람들만 필터링하여 새로운 리스트를 만드세요. 2.모든 사람의 나이 합계를 구하세요. 3.이름에 '5'가 포함된 사람을 찾으세요. 만약 없다면 적절한 처리를 하세요. 4.사람들을 나이 순으로 정렬한 새로운 리스트를 만드세요. 5.각 사람의 이름 길이를 담은 리스트를 만드세요. 6.가장 나이가 많은 사람을 찾으세요. 만약 동일한 나이가 있다면 그 중 아무나 한..
for 만 사용하다가 정렬건때문에 더이상 방관하기 힘들어졌다. stream에 익숙해 지기 위해 예제를 설정하고 문제를 풀어보자. 문제는 아래와 같다. Product 객체를 여러 개 포함하는 List를 생성하세요. (최소 5개 이상의 Product 객체를 포함하도록 합니다.) Stream을 이용하여 가격이 5000원 이상인 제품들만 골라서 리스트로 만드세요. Stream을 이용하여 제품들의 이름만 추출하여 리스트로 만드세요. Stream을 이용하여 제품들의 평균 가격을 계산하세요. Stream을 이용하여 가장 비싼 제품을 찾으세요. 클래스 모델은 아래와 같다 public class Product { private String name; private int price; public Product(Strin..