spring 21

Springboot 속도 제한 및 조절 구현, 유량 제어 | Resilience4j

1. 적용 사유2. Resilience4j가 뭔가요3. 적용 방법4. 결과 1. 적용 사유https://roadmap.sh/projects/weather-api-wrapper-service Weather API Project IdeaBuild a weather API that fetches and returns weather data from a 3rd party API.roadmap.sh요 과제를 수행하다 Rate Limit을 조절해달라는 요구사항이 있어서 사용했습니다.특정 API 의 요청이 일정 수치 이상 되면 오류 Response body를 반환합니다. 2. Resilience4j가 뭔가요Resilience4j는 Circuit Breaker, Rate Limiter, Retry, Bulkhead을 ..

SpringBoot 2025.03.17

Springboot ECS logging structure

1. 적용 사유2. Marker가 뭔가요3. ECS 로깅이 뭔가요4. 적용 방법5. 결과  1. 적용 사유datadog에 로그를 쌓기 위해 ecs 포맷을 사용해야 했습니다.그 중 개인정보가 포함되어있는 로그 정보를 datadog에 보낼 수 없었습니다.그래서 slf4j 혹은 log4j 로그에 Marker를 추가하여개인정보 로그는 보내지 않도록 설정하기로 하였습니다. 2. Marker가 뭔가요로그에 Object를 추가하여 태그를 지정할 수 있습니다.예를 들어 특정 Marker가 있는 로그는 출력하지 않기. 3. ECS 로깅이 뭔가요ECS는 로그 및 메트릭과 같은 Elasticsearch 혹은 datadog 에 이벤트 데이터를 저장할 때 사용할 공통 필드 집합입니다. 이벤트 소스 : 이벤트 소스가 Elasti..

SpringBoot 2025.02.26

Spring Boot XSS 크로스사이트 스크립트 적용하기 with jsoup

1. 서론2. 적용 방법3. 결과적용했던 코드https://github.com/GHGHGHKO/roadmap-todo/commit/2b7f2543df849704f9784d3afc818ae07db72ef81. 서론회사에서 최근에 시작한 프로젝트에 보안 검사를 받았습니다.Request body를 통한 크로스사이트 스크립트 취약점이 도출 되었습니다. 도출되었던 방식은1. a_dns API Request body에 악성 script를 심어서 전송합니다.2. database에는 악성 script가 입력됩니다.3. 일반 고객이 b_dns 로 홈페이지에 접속합니다.4. 악성 script가 들어가 있는 정보를 조회합니다.5. 악성 script가 db에서 조회되어 고객에게 보여집니다.6. 해당 스크립트가 웹사이트에서 실..

SpringBoot 2024.12.01

집에서 서비스를 오픈 해보자 (1) | 개요

집에서 서비스를 오픈 해보자 (1) | 개요집에서 서비스를 오픈 해보자 (2) | 서버 세팅하기집에서 서비스를 오픈 해보자 (3) | dns 연결하기집에서 서비스를 오픈 해보자 (4) | CI/CD 연동하기집에서 서비스를 오픈 해보자 (5) | upptime 모니터링, status 페이지 추가하기    Web : https://klassic-quote.vercel.app/API : https://klassic-quote-api.mooo.com/v1/random-quote취미로 만들었던 서비스에서활용한 방법을 작성하였습니다.  집에서 서비스를 오픈하는 이유클라우드 비용을 사용하고 싶지 않았습니다. 사용자가 거의 없어서..그리고 집에 남는 컴퓨터가 있었습니다. 😁  집에서 서비스를 오픈하기 위한 준비물1...

self-hosted 2024.06.06

GraalVM 으로 SpringBoot 시작 시간 줄이기 (맛보기)

TL;DRGraalVM(지랄VM)은 Java 어플리케이션을 미리 컴파일하여 바로 시작될 수 있게 합니다. 시작 시 워밍업이 필요하지 않으며, 더 적은 리소스를 사용합니다. 대신 빌드가 느립니다. 자세한 정보는 https://www.graalvm.org/latest/docs/getting-started/ 시작시간 비교하기Spring Batch를 사용하였습니다. (아주 간단한 Job을 실행하였습니다.) 2.474s -> 0.114s 예시 코드 https://github.com/GHGHGHKO/migration-v3-with-graal migration-v3-with-graal/src/main at main · GHGHGHKO/migration-v3-with-graalMigrating from Spring B..

SpringBoot 2024.03.27

Kotlin Springboot Rest API 만들기 6 - 테스트 코드 작성, exception handling, Spring Security 인증 인가 적용하기

이전 포스팅에서는 jwt token, SpringSecurity로 인증 인가, 로그인을 추가했습니다. 이번 포스팅에서는 이전 포스팅에서 언급했던 1. Jwt 토큰 없이 api를 호출하였을 경우 2. 형식에 맞지 않거나 만료된 Jwt 토큰으로 api를 호출한 경우 3. Jwt 토큰으로 api를 호출하였으나 해당 리소스에 대한 권한이 없는 경우 내용과 필터 적용 후의 테스트 코드를 작성하고 exception handling을 진행하겠습니다. 전체 코드는 여기에 있습니다. 테스트를 하기 위해서 postman으로 호출하는 것이 너무 귀찮아서 테스트 코드를 추가하게 되었습니다. 지금까지 만든 API는 signIn, signUp, helloWorld 입니다. 그 외에 다른 API는 만들지 않았습니다. signIn,..

Kotlin 2023.02.05

Kotlin Springboot Rest API 만들기 5 - jwt token, Spring Security로 인증 인가, 로그인 만들기

이전 포스팅에서는 Entity를 토대로 회원가입을 만들어보았습니다. 동시에 i18n을 포함한 Common Response body를 만들었습니다. 이번 포스팅에서는 jwt token, SpringSecurity로 로그인 만들기를 할겁니다. 전체 코드는 여기에 있습니다. API를 만들고 인터넷에 열어두면 위험 소지가 있습니다. 로그인, 회원가입 이외에 다른 API를 그냥 호출하면 401 오류가 나오게 설정하고 headers에 jwt 기반의 token 을 넣어야만 호출이 되도록 설정할 예정입니다. 여기서 사용될 Filters는 아래와 같습니다. A Review of Filters Spring Security는 공격에 대한 인증, 권한 부여 및 보호 기능을 제공하는 프레임워크입니다. SpringSecurity..

Kotlin 2023.01.23

Kotlin Springboot Rest API 만들기 4 - 회원가입, common response body 만들기

이전 포스팅에서는 앞으로 만들 Entity 구조를 간략하게 설명하고 예시로 우아하게 Entity를 구성하는 방법에 대해 작성하였습니다. 불필요한 쿼리는 사용하지 않는게 좋으니까요! 이번 포스팅에서는 위 Entity를 토대로 회원가입을 만들어보겠습니다! 동시에 i18n을 포함한 Common Response body를 만들어보겠습니다! + 약간의 SpringSecurity가 추가되어 있습니다. 다음 포스팅에서 다루겠습니다. 전체 코드는 여기에 있습니다. BaseEntity 생성하기 common.domain package안에 user_master에 들어갈 BaseEntity를 생성합니다. HTML 삽입 미리보기할 수 없는 소스 BaseEntity는 @MappedSuperclass annotation을 활용해서..

Kotlin 2023.01.17

Kotlin Springboot Rest API 만들기 3 - Entity 만들기

전체 코드 https://github.com/GHGHGHKO/pepega-blog-kotlin 이전 포스팅에서는 HelloWorld API를 개발 후 Postman을 활용하여 API를 호출하였습니다. 이번 포스팅에서는 앞으로 만들 Entity 구조를 간략하게 설명하고 예시로 우아하게 Entity를 구성하는 방법에 대해 작성하였습니다. 불필요한 쿼리는 사용하지 않는게 좋으니까요! 다음 포스팅에서 로그인과 회원가입을 만들어보겠습니다! 1. domain(entity) 생성 JPA에서 가장 중요하다고 생각되는 것이 entity입니다. https://spoqa.github.io/2022/08/16/kotlin-jpa-entity.html 스포카에서 Kotlin으로 JPA Entity를 정의하는 방법 도도카트 서비..

Kotlin 2023.01.03

Kotlin Springboot Rest API 만들기 2 - HelloWorld, REST API TEST CLIENT 사용하기

전체 코드 https://github.com/GHGHGHKO/pepega-blog-kotlin 이전 포스팅에서는 localhost:8080에 Username, Password를 입력하여 Whitelabel Error page를 확인했습니다. 이번 포스팅에서는 HelloWorld API를 개발 후 Postman을 활용하여 API를 호출합니다. 1. HelloWorldController 생성 package 이름 밑에 (본 글에서는 com.example.pepega) helloworld package를 생성하고 그 안에 HelloWorldController.kt를 생성합니다. HTML 삽입 미리보기할 수 없는 소스 @Controller, @RestController의 차이 https://dncjf64.tist..

Kotlin 2023.01.03