목록Java (17)
아님말고
AWS의 S3, DynamoDB 등을 Java 어플리케이션에서 이용하려면 AWS SDK을 이용해야 하는데 AWS SDK의 V1과 V2의 차이점이 많다. 그리고 구글링을 하면 주로 sdk v1을 이용한 결과가 대부분이어서 v2와의 차이점을 알고 구글링을 하는 것이 좋을 것 같아 간단하게 정리를 해본다. Java 1.x용 SDK에서 Java 2.x용 SDK로의 눈에 띄는 변화는 패키지 이름이다. v1 v2 package name com.amazonaws software.amazon.awssdk 그래서, dependency할때도 아래와 같다. v1 implementation 'com.amazonaws:aws-java-sdk-dynamodb:1.12.239' v2 implementation platform('s..

네이버의 lucy 라이브러리를 이용하여 xss filter을 적용해보자 공식문서 : GitHub - naver/lucy-xss-servlet-filter 1. 라이브러리 가져오기 implementation 'com.navercorp.lucy:lucy-xss-servlet:2.0.1' 2. lucy-xss-servlet-filter-rule.xml 설정 xssPreventerDefender com.navercorp.lucy.security.xss.servletfilter.defender.XssPreventerDefender xssSaxFilterDefender com.navercorp.lucy.security.xss.servletfilter.defender.XssSaxFilterDefender lucy-x..

AWS의 KMS (key managerment service) 을 이용하여 DB 암복화을 구현해보자. local에서는 암복화를 실행하지 않고, 서버에서만 암복화를 실행한다고 했을때 아래와 같이 interface를 두고 local용 LocalKMSManager 와 서버용 BaseKMSManager을 구현한다. 1. KMS 암복화 모듈 개발 profile 환경에 따라 KMSManager 이름으로 bean을 등록한다. public interface KMSManager { public String encrypt(String plainText); public String decrypt(String encryptedText); } @Slf4j @Component("KMSManager") @Profile({"dev"..

계층형 아키텍처 우리가 익숙한 계층형 아키텍처 이다. 표현 계층은 사용자 요청을 받아 응용영역에 전달하고 처리 결과를 다시 사용자에게 보여주는 역할을 하는 Controller이고,응용 계층과 도메인 계층은 비즈니스 로직을 구현하는 Service이며, 인프라스트럭처 계층은 DB 연동을 처리하고, 메시지 큐에 메시지를 전송하거나 수신하는 기능을 구현하고 SMTP을 이용하여 메일을 발송하기도 한다. 계층구조의 문제는 상위 계층에서 하위 계층으로 의존한다는 것이다. 예를 들어 표현 계층은 응용 계층에 의존하고 응용 계층은 인프라스트럭처 계층에 의존한다. 그래서, 개발 순서도 DB 쿼리 작성하고 Dao를 만들어 Service가 호출하고 controller를 만든다. 한 마디로 DB가 왕이다. DB 테이블이 변경되..
token 의 알고리즘을 HS256으로 하게 되면 secret key 가 256bit 보다 커야 한다. 영어 알파벳이 8bit 이니, 영어 32자로 만들면 되겠다. 랜덤한 key를 자동으로 만들어 주는 사이트가 있다. RandomKeygen - The Secure Password & Keygen Generator RandomKeygen - The Secure Password & Keygen Generator RandomKeygen is a free mobile-friendly tool that offers a randomly generated keys and passwords you can use to secure any application, service or device. randomkeygen.c..
CustomFilter request Header에 추가하기 public class CustomFilter extends AbstractGatewayFilterFactory{ public GatewayFilter apply(Config config){ return ((exchange, chain) -> { exchange.getRequest().mutate().header("키", "값").build(); return chain.filter(exchange); }); } }
1. 호출할 API 8100 port로 기동하는 API 프로젝트를 만든다. application.yml server: port: 8100 controller @RestController public class RedisController { @GetMapping("hello") public String getHello() { return "hello!"; } } 2. API GATEWAY 8080 port로 기동하는 gateway 프로젝트를 만든다. build.gradle plugins { id 'java' id 'org.springframework.boot' version '2.7.5' id 'io.spring.dependency-management' version '1.1.0' } group = 'c..
1. 의존성 추가 implementation 'io.jsonwebtoken:jjwt-api:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-impl:0.11.5' runtimeOnly 'io.jsonwebtoken:jjwt-jackson:0.11.5' 2. 토큰 만들기 및 검증하기 @Service public class TokenService { private static final String SECRET_KEY = "OnlyICanChangeMyLifeNoOneCanDoItForMe"; /** * 토큰 생성하기 * @return */ public String makeJwtToken() { Date now = new Date(); Key key = Keys.hmacShaKey..