Tiny Star

전체 글 74

[Oracle Cloud] 인스턴스 생성 자동화 (Out of host capacity)

나도 이제 최대 4CORE, 24RAM 무료 인스턴스를 생성할 수 있다는 설레는 마음으로 생성을 시도했다. Out of capacity for shape VM.Standard.A1.Flex in availability domain AD-1. Create the instance in a different availability domain or try again later.If you specified a fault domain, try creating the instance without specifying a fault domain. If that doesn’t work, please try again later.Learn more about host capacity.헛된 꿈이었음을...싱가포르(가입 ..

IT 2025.07.03

[Oracle Cloud] 오라클 클라우드 프리티어(Free Tier) 가입

서버를 구성하기 위해 가장 많이 알려진건 AWS 무료티어라고 생각한다. 옛날기억으로는 잘못된 설정으로 과금이 됐을지 온종일 조마조마하며 바라봤었다. 찾아보니 최근에도 과금되는 건 어쩔 수 없는 것 같다.알아보니 오라클 클라우드 무료티어는 설정에 따라 1~4대 서버를 제공하고 무료로 제공하는 것만 잘 체크하면 과금되는 일이 없는 것 같아서 사용해보기로 했다. 신중하게 도전하는 걸 추천한다. 필자는 이거저거 틀리고 계속 재시도하라고해서 다시했더니 너무 많은 시도로 막혔다. 몇 분뒤하면 되는데 다음 단계에서 또 시도횟수가 많다고 막히고... 얼마만큼의 간격으로 시도가 가능한지 모르므로 각 잡고 시도하자. 오라클 클라우드 무료 티어(Oracle Cloud Free Tier) 페이지에 접속해서 [무료로 시작하기..

IT 2025.07.02

[뉴스 요약] 로그인 구현 (Spring Security ,JWT Token)

전체 흐름프론트에서 로그인 요청(`login`)을 보내면 백엔드는 이를 처리해 `accessToken`, `refreshToken`을 발급하고, 클라이언트는 이를 저장한 뒤 홈 화면으로 이동합니다. 이후 홈 페이지에서 사용자 정보 요청(`me`)을 다시 보내 사용자 정보를 렌더링합니다. AuthController로그인 요청 처리@PostMapping("/login")public ResponseEntity login(@RequestBody LoginRequest request) { LoginResponse loginResponse = authService.login(request); return ResponseEntity.ok().body(loginResponse);}프론트에서 사용자 ID..

[뉴스 요약] SpringBoot + React 이메일 인증 기반 회원가입

이메일 인증을 포함한 회원가입 기능을 구현했다.단순한 입력폼과 회원 저장이 아니라, 인증 흐름과 사용자 경험까지 고려한 구조로 만들고자 했다.이 글에서는 프론트와 백엔드 양쪽에서 회원가입 기능이 어떻게 동작하는지 전체 흐름을 정리해봤다. 전체 흐름사용자가 이메일을 입력하고 인증코드를 요청한다. (`/send-code`)인증코드가 메일로 전송되고, 서버는 Redis에 인증코드를 저장한다.사용자가 인증코드를 입력해 검증한다. (`/verify-code`)인증이 성공하면 Redis에 "인증 완료" 상태를 저장한다.닉네임/비밀번호를 입력하고 가입을 요청한다. (`/signup`)서버는 Redis 인증 여부를 확인하고, DB에 사용자 정보를 저장한다./send-code /verify-code /signup ..

[Spring Boot] 대용량 데이터 이관 JPA vs JDBC vs MyBatis 비교

대용량 이관 시 JPA vs JDBC vs MyBatis: 어떤 Writer를 선택할까?대용량 데이터를 처리하다 보면, 성능이 코드 구조보다 우선이 될 때가 많다. 이 글은 실제 테스트를 통해 JPA, JDBC, MyBatis 각각의 Writer 성능을 비교하고, 어떤 상황에 어떤 Writer를 선택하는 게 좋은지 정리한 기록이다. 비교 조건약 10만 건의 BookRating 데이터를 단순 insert동적 매핑이나 조건 분기 없음각 방식으로 동일한 데이터를 동일 조건으로 insert 테스트성능 기준: 실행 시간(ms) 기본 구조 공통적으로 사용하는 Entity는 다음과 같다.@Entity@Data@NoArgsConstructor@AllArgsConstructorpublic class BookRating..

IT 2025.06.27

[Spring Boot] Spring Security 추가 후 CORS/401/403 오류 해결

멀쩡하던 서비스에서 SpringSecurity 의존성을 추가하면 갑자기 프론트 요청이 막힌다.❌ fetch 요청 시 CORS 에러 발생 ❌ 응답은 갔는데도 403 Forbidden ❌ 로그인하지 않았는데 401 Unauthorized 이번 글에서는 Spring Security 추가 이후 발생하는 대표적인 API 통신 문제들을 왜 발생하는지, 그리고 어떻게 해결할 수 있는지 정리해보겠습니다. 문제 상황Spring Security를 추가한 직후, 아래와 같은 문제가 발생 증상 설명 CORS 오류브라우저에서 요청 자체가 막힘 (preflight 실패)401 UnauthorizedSpring Security가 로그인 안 했다고 거부403 Forbidden응답은 갔지만 CORS 헤더 누락으로 브라우저가 거부..

IT 2025.06.27

[뉴스 요약] 요청 제한 + 로그 기록 (Redis + Kafka)

뉴스 요약 기능을 혼자 만들면서, 나중에 사용자에게 공개했을 때를 대비해 OpenAI API 호출에 제한을 둘 필요가 있다고 판단했다. 처음에는 프론트엔드에서 쿠키 기반으로 하루 5회 제한을 두는 식으로 간단하게 처리했지만, 브라우저나 기기를 바꾸면 무력화되는 구조라 한계가 뚜렷했다.그래서 이번에 요청 제한을 백엔드 Redis로 이전하고, 동시에 요청 이력을 Kafka를 통해 비동기로 DB에 저장하는 구조를 추가했다. 아직 나 혼자만 사용하는 서비스이긴 하지만, 구조를 미리 잘 설계해두면 나중에 트래픽이 생겼을 때 대응하기 수월할 것 같았다. 전체 구조요청이 들어오면 Redis에서 하루 5회 제한을 검사하고, 통과한 경우 GPT 요약 처리를 진행한다. 요약 결과는 DB에 저장하고, 동시에 요청 이력을..

[뉴스 요약] REST API 예외 응답 처리

왜 지금? 기능 구현에 집중하다 보니 예외 처리는 항상 뒷전으로 밀리곤 했다.그러다 보니 코드 곳곳에서 쓸데없는 분기 처리나 중복 조건문이 생기고, 전체 흐름이 점점 복잡해지기 시작했다.이런 구조가 쌓이면 결국 나중에 대대적인 리팩터링이 불가피해질 것 같다는 생각이 들어, 이번에는 예외 처리 구조부터 먼저 정리하고 들어가기로 했다. 구조 전체적인 예외 처리 흐름은 복잡하지 않다.핵심은 전역 예외 핸들러에서 원하는 형식으로 에러 응답을 통일해주고, 각 에러 상황에 맞는 에러 코드를 enum으로 정의해서 재사용하는 구조다.이렇게 구성하면 컨트롤러나 서비스 레이어에서는 `throw new CustomException(...)` 한 줄로 예외를 던질 수 있고, 핸들러에서는 이를 받아 `status`, `co..

[뉴스 요약] AI 중복 요청 분기 처리 (Database 구성)

뉴스 요약 결과 재사용을 위한 캐싱 설계 OpenAI API를 연동해 뉴스를 요약해주는 기능을 구현하다 보니, 같은 기사를 반복 요청하는 경우가 자주 발생했다. 처음엔 단순하게 매 요청마다 API를 호출했지만, 비용과 응답 속도 측면에서 비효율이 느껴졌다.“같은 기사에 같은 프롬프트로 요청했다면, 이전에 요약했던 결과를 재사용할 수 없을까?” 이런 고민에서 시작된 캐싱 구조를 정리해본다. 문제 인식 OpenAI API는 호출 횟수에 따라 비용이 발생한다.또, 뉴스 요약은 길이에 따라 평균 3초 이상의 응답 지연이 발생하는 경우도 많다.같은 기사에 대해 여러 번 요약을 요청하는 구조는 비효율적이었고,결국 캐싱을 고려하게 되었다. 설계 방향 요약 결과를 캐싱하려면, “어떤 기사”에 “어떤 프롬프트로” ..

[뉴스 요약] Swagger, REST Docs 적용

이번 프로젝트에서는 API 문서를 자동화하고 공유하기 위해 Swagger와 Spring REST Docs를 모두 적용해봤다. 둘 다 장단점이 명확했지만, 결론적으로는 REST Docs를 중심으로 사용하게 되었다. 이 글에서는 두 방식의 차이와 실제 적용 후 느낀 점, 그리고 각각의 사용법을 간단히 정리한다. 두 방식의 차이 비교 항목 Spring REST Docs Swagger (Springdoc/OpenAPI) 문서 생성 방식테스트 기반 (MockMvc 등)코드 기반 애너테이션정확성실제 응답을 기반으로 생성됨애너테이션 기반 → 실제 응답과 다를 수 있음의존성Asciidoctor + restdocs 필요springdoc-openapi 또는 springfox목적배포용 정적 문서개발자 UI 테스트용..

top