목록전체 글 (39)
개발자 되어버리기
------------------서론------------------ 어느덧 개발한지 5년차가 되었다. 클라우드 서버를 접한건 대학교 1학년이었다.이 시기에는 AWS는 워낙 잘 나갔었고 추후에 구글에서는 GCP, 마이크로소프트는 Azure를 내놓았다.덕분에 클라우드 컴퓨팅 시장이 잘 형성되어 있기에 서버 운영에 대한 러닝커브가 적어진 것은 사실인듯하다. 하지만 공짜는 없고.. AWS는 1년동안 프리티어 무료, GCP는 300달러? 정도를 줬었던게 기억난다. 이런 무료플랜들은 사양도 안좋을뿐더러 일정 기간이 지나고 나면 갑자기 청구서에 0$가 아닌 유의미한 금액의 숫자가 찍혀서 온다는 것이다. (대충 학생인데 어떻게 안되냐라는 내용으로 글 써서 보내면 한 번 정도는 청구서 요금을 내지 않게끔 조치를 취해준..
이전에는 let's encrypt가 플러터 통신할때 뭔가 안맞아서 zero ssl로 cname 찾아서 인증받고 그랬었는데.. 이제는 문제가 해결된듯 하여 다시 Let's Encrypt를 사용하기로 마음먹었다. 기존에는 Springboot 자체적으로 https를 적용해왔었는데이게 서비스가 많아지다 보니 그냥 웹서버 하나 두고 얘가 reverse proxy로 퍼다 나르는게 낫겠다 싶었다. 일단 기존 스프링부트에서 쓰던 인증서는 주석 처리 해준다.#server:# ssl:# enabled: true# key-store: ./cert_and_key.p12# key-store-password: helloworld# key-store-type: PKCS12# key-alias: tom..
2019년 부터 펫x너 flutter 컨버팅 작업을 시작으로 앱개발에도 관심이 붙고 앱개발이랑 서버개발을 병행하면서 지낸지 어느덧 5년이 지났다. 2022년 1월 1일에 쓴 글이 마지막 글이었는데 그럼에도 불구하고 블로그를 꾸준히 찾아 주시는 분들이 계시기에 블로그 포스팅도 더 열심히 해야겠다 느꼈다. 2021년부터 하던 서버를 조금 내버려두고 앱개발에 흥미가 붙어서 앱개발쪽으로 본격적으로 전향한 바가 있다. (하지만 외주나 개인 플젝 전부 Springboot 쓰고.. 회사에서도 결국 서버 개발을 담당하게 되었다는...) 특히 22년부터 23년까지는 외주를 엄청나게 많이 했던 것 같다...2023년에만 해도 외주로 벌어들인 수익이 쫌 됐기에 시간을 돈으로 바꾸는 작업을 무진장 했다고 느껴졌다... ..
최대한 비용 부담을 줄이면서 보안도 신경쓰고.. 개발하고.. 인증하기 위해서 노력을 많이 하는 편... 근 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..