목록Dev (36)
개발자 되버리기
최대한 비용 부담을 줄이면서 보안도 신경쓰고.. 개발하고.. 인증하기 위해서 노력을 많이 하는 편... 근 1년 들어 Let's encrypt 가 이런 저런 안되는 곳이 좀 있는 것 같아서 인증서를 알아보던 중 Zero SSL을 알게 되었다. 인증서 기간은 Let's encrypt 와 같이 3개월동안 무료로 제공! 스프링과 vue에 다 적용해주기 위해서 입력해야 하는 명령어들을 정리할 예정이다. 일단 Zero SSL에서 인증서를 받으면 다음과 같은 파일들을 준다. 여기 있는 세 개의 파일들은 추후 vue 쪽 설정 잡아주는 파일들과 매칭된다. zeroSSL -> vue 에서 쓰일 변수 private.key -> privkey.pem certificate.crt -> cert.pem ca_bundle.crt..
만약 메소드 단위별로 시간을 측정하고싶다면 (혹은 그 외의 무언가 특수한 공통적인 목적이 있을경우) 해당코드를 응용하면 좋을 것 같다. import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.springframework.stereotype.Component; @Aspect @Component public class TimeTraceAop { @Around("execution(* com.mydirectory..*(..))") public Object execute(ProceedingJoinPoint joinPo..
반복적인 파라미터에 응답을 해줄 경우가 있다거나 조회가 빈번히 일어나는 API의 경우에는 캐싱 기능을 이용하면 정말 좋습니다. 40ms 걸리던 것도 (혹은 1초 이상이더라도) 10ms 이내로 응답을 반환할 수 있기에 DB 커넥션을 불필요하게 사용하지 않고 리소스를 덜 잡아 먹으며 동일한 응답을 할 수 있습니다. 해당 포스트에서는 게시글을 조회하거나 저장할 때를 예시로 하여 포스팅을 하도록 하겠습니다. 우선 캐싱 설정을 해주어야 합니다. build.gradle에 해당 라이브러리를 추가해줍니다. implementation 'org.springframework.boot:spring-boot-starter-cache' 캐시 설정 bean을 주입해줍니다. @Configuration @EnableCaching pu..
사내에서 프론트엔드와 클라이언트 단에서 토큰 로그아웃을 진행하였는데 무언가 오류가 나거나 토큰이 불필요하게 남아있게 될 경우를 대비에 토큰이 불필요한 API에 대해 토큰을 사용하지 않도록 필터링 하는 작업을 진행하게 되었습니다. 일단 기본적으로 밑에 글의 트래픽 인터셉트 글을 참고하시면 좋을 듯 합니다. koogood.tistory.com/32 SpringBoot 트래픽 제한하기 한번에 많은 요청이 오거나 혹은 문자인증을 하거나 또는 외부로부터 공격이 왔을 경우 내부의 자원을 보호하기 위해 대비책을 세워두면 좋습니다. 이번 포스팅에서는 Bucket4j를 이용하여 트래 koogood.tistory.com 우선 인터셉트에 필터 관련 코드를 추가합니다. @Component @Log4j2 @RequiredArg..
한번에 많은 요청이 오거나 혹은 문자인증을 하거나 또는 외부로부터 공격이 왔을 경우 내부의 자원을 보호하기 위해 대비책을 세워두면 좋습니다. 이번 포스팅에서는 Bucket4j를 이용하여 트래픽을 제한하는 포스팅을 해보고자 합니다. // 대역폭 제한 implementation 'com.giffing.bucket4j.spring.boot.starter:bucket4j-spring-boot-starter:0.2.0' 위와 같이 build.gradle에 라이브러리를 추가 해줍니다. import io.github.bucket4j.Bandwidth; import io.github.bucket4j.Bucket; import io.github.bucket4j.Bucket4j; import io.github.bucket..
JWT의 장점은 세션을 사용하지 않기에 서버의 자원을 효과적으로 사용할 수 있다는 것에 장점이 있습니다. 장점도 분명 존재하지만 단점도 있고 그 단점중 하나는 로그아웃에 관련된 내용입니다. 우선 도커를 이용해 간단하게 Redis를 설치해보겠습니다. Redis는 키-값 기반의 인메모리 기반 데이터베이스 입니다. 메모리에 직접 저장이 되기에 껐다키면 날라가지만 인메모리 특성상 매우 좋은 성능을 제공합니다. 서버컴은 껏다 킬 일이 없으니..? jwt같은거 사용할 때 많이 사용 합니다. 우선 도커가 설치되어 있지 않다면 우분투에 도커부터 설치를 진행해야 합니다. sudo apt install docker-ce 이후에는 가볍게 사용할 수 있는 Redis를 설치합니다. docker run -i -t --name r..
컨테이너가 자원을 아무런 제약 없이 쓴다면 자칫 호스트의 자원을 전부 써버리면 다른 시스템이 동작을 멈출 수 있습니다. 컨테이너의 자원 제한을 확인하는 방법은 아래 명령어 입니다. docker inspect myubuntu 기존에 있는 컨테이너의 자원할당량을 변경하고자 한다면 docker update (변경할 자원 제한) (컨테이너 이름) 입니다. 메모리를 1GB로 제한한다고 하면 아래 명령어처럼 입력하시면 됩니다. docker update --memory="1g" myubuntu CPU를 제한 하고자 한다면 아래 명령어를 입력하시면 됩니다. docker update --cpu-shares 1024 myubuntu 위 명령어에서 1024가 의미하는 것은 cpu 하나의 할당에서 1의 비중을 뜻합니다. 만약..
도커에서는 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되며 컨네이너의 변경사항만 별도로 저장해서 각 컨테이너의 정보를 보존 합니다. 그렇기에 컨테이너를 삭제하면 기존에 컨테이너에 있던 데이터들까지 같이 삭제가 됩니다. 이를 방지하기 위해 컨테이너의 데이터를 영속적 데이터로 활용할 수 있는 몇가지 방법이 있습니다. 그중 딱 하나만 글로 적어두고자 합니다. 가장 간단한 방법인듯 합니다. docker volume create --name myvolume ┖ 위처럼 docker volume 명령어를 이용하여 볼륨을 생성합니다. 이후 우분투를 생성하고 접속할 때 -v 옵션을 주어서 볼륨 컨테이너를 연동시킵니다. docker run -i -t --name myvolume_1 -v myvolume:/root/..
구글쪽 smtp 쓰는것은 많이 나와있고 생각보다 쉽습니다. 구글이 아닌 네이버 쪽은 어떻게 할지 간단하게 포스팅해보겠습니다. 1. 설정으로 들어갑니다. 2. 위 사진과 같이 설정을 해줍니다. 이후에는 yml에 네이버 계정 관련된 정보를 넣어줍니다. email: host: smtp.naver.com username: myId password: myPassword port: naverport 저희가 쓰는 포트는 465 포트 입니다. 그 다음은 yml 데이터를 읽어올 클래스를 작성 합니다. @Configuration // yml 파일에서 가져올 변수 이름을 명시해준다. @ConfigurationProperties(prefix = "email") @Setter @Getter public class Applica..
사내에서 문자 서비스를 구축해야해서 네이버 nens를 다루게 되었는데 제가 미숙한 탓에 헤더 세팅하는데 어려움이 있었습니다. (혼자 핑계로 네이버 API 헤더 세팅 어렵다고.. 꿍시렁) 부디 이 글 보시고 헤더 세팅하시는데 어려움을 덜어내셨으면 좋겠습니다. 저는 막상 저 예제만 보고는 잘 모르겠더라고요... 결론은 헤더의 내용을 암호화하여 다시 헤더에 넣어라! 이런 얘기더랍니다... 소스코드 부터 확인해보겠습니다. public String makeSignature(Long time) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException { String space = " ";// one space String n..