분류 전체보기

· Error 정리
최근에 Swagger를 붙여서 API 문서화를 할 일이 있었다. 예전에도 별 일 없이 한 번에 잘 되었기에 이번에도 바로 되겠거니 했지만.. http://localhost:8080/swagger-ui/index.html 페이지에 들어가자마자 500 상태코드와 함께 "Failed to load API definition" 이라는 에러를 만나게 되었다. 프로젝트 환경은 다음과 같다. 버전Java21Spring Boot3.5.6BuildGradleorg.springdoc:springdoc-openapi-starter-webmvc-ui2.8.9 에러 메시지는 다음과 같다. NoSuchMethodError 라는 에러 타입이 나오는데, 이 오류는 Spring Boot 3.x.x 환경에서 springdoc-op..
· TIL
@Transactional을 사용할 때, 일반적으로 두 가지 정도를 임포트 할 수 있다.바로 jakarta.transaction.Transactional와 org.springframework.transaction.annotation.Transactional이다. 두 @Transactional 어노테이션은 모두 트랜잭션 처리를 위해 사용되지만, 그 표준과 제공하는 기능에 큰 차이가 있다. 본 포스팅에서는 두 어노테이션의 차이와 역할을 알아보고자 한다. 일반적으로 트랜잭션은 데이터베이스에서 여러 작업을 하나의 묶음으로 처리하는 것을 의미한다. 이 묶음 안의 작업들은 모두 성공하거나(Commit), 아니면 모두 실패하고 되돌려져야(Rollback) 한다는 특성을 가지고 있다. jakarta.transactio..
· TIL
Layered Architecture Layered Architecture(계층형 아키텍처)는 소프트웨어 디자인 패턴 중 가장 일반적이고 주로 쓰이는 방식 중 하나이다. 말 그대로 소프트웨어 시스템의 구성 요소들을 수직적인 계층(Layer)으로 나누어 구조화한 형태인데, 각 Layer(계층)가 특정한 역할/책임만 담당하도록 분리하는 것이 핵심이다. (관심사를 분리하기 위해서이다.) 또 다른 핵심적인 원칙은 상위 계층은 바로 아래 계층에만 의존하며, 아래 계층은 절대 위 계층에 대해 몰라야 한다는 점이다. (아래 방향으로만 의존한다.) 이러한 원칙에 의해 각 계층은 자신의 역할에만 집중할 수 있고, 코드 변경 시에도 다른 계층에 미치는 영향을 최소화할 수 있다. 일반적인 Layered Architectur..
· Project
앱스토어에 앱을 배포한 이후, 테스트를 해보는 중에 해변별 기상 정보들을 불러오는 부분에서 필요 이상으로 시간이 오래 걸리기에 이를 해결하기로 하였다. 문제점 저번에도 꽤 걸렸었지만 이번에는 엄청 오래 걸린다.. 대략 13.30 s 정도..?현재 도시에 있는 해변 별로 기상청 API를 3가지 정도(해양 정보, 파주기, 수온) 불러오고 있는데 이를 순차적으로 불러오다보니 속도가 저하되는 것으로 의심하고 있다. 아마 말로만 듣던 순차적 API 호출로 인한 성능 저하로 의심되는데.. 이를 확인하기 위해 로그를 출력해보았다. 4번 도시에는 3개의 해변이 등록되어 있고, 각 해변 당 BeachForecast, WaterTemp, WavePeriod 기상청 API를 호출하고 있는데 이들 모두를 불러오는데 걸린..
· TIL
구현하기 바빠서 넘어간 부분들을 조금이라도 정리해보고자 쓰는 TIL 시리즈입니다 토스트 가게에 3명의 사람이 각각 햄치즈 토스트, 불갈비 토스트, 햄 토스트를 주문했다.토스트 가게 사장님은 어떻게 해야 가장 효율적으로 빠른 시간 내에 3개의 토스트를 제조할 수 있을까?하나씩 토스트를 완성하고 나서 손님에게 서빙한 다음, 그 다음 토스트를 만들기 시작하지는 않을 것이다.대신 식빵 6개를 동시에 불판 위에 올려두고, 각각의 토핑을 동시에 올려서 가장 먼저 완성되는 순서대로 손님들에게 내어줄 것이다. 이것이 바로 우리가 일상에서 자연스럽게 사용하는 '병렬 처리'의 개념이다. 서로 독립적인 작업들을 동시에 진행함으로써 전체 작업 시간을 획기적으로 단축시키는 것이다. 최근 우리 팀에서 개발한 해변 정보 조회 A..
· TIL
구현하기 바빠서 넘어간 부분들을 조금이라도 정리해보고자 쓰는 TIL 시리즈입니다 Spring Boot에서 스케줄링을 구현하는 주요 방식들에 대해 정리해보자. Spring Boot에서 스케줄링을 구현하는 방법은 여러 가지가 있지만, 실제로 가장 많이 사용되는 것은 @Scheduled 어노테이션과 Quartz Scheduler다. @Scheduled Spring Boot에서 흔히 쓰이는 Scheduled 어노테이션이다. Spring Boot에 내장되어 별도 의존성이 불필요하고, 간단한 설정으로 인해 스케줄링 시 가장 자주 쓰인다. 그러나 크론식 표현이나 fixedRate이라는 설정을 보면 동적으로 스케줄링이 불가하다는 점을 알 수 있다. @Component public class ScheduledTa..
· TIL
구현하기 바빠서 그냥 대충 훑고 넘어간 부분들을 조금이라도 정리해보고자 쓰는 TIL 시리즈입니다. ResponseEntity는? 보통 프로젝트를 할 때, RestController의 엔드포인트에서는 보통 ResponseEntity 객체로 반환하는 경우가 많다.이 ResponseEntity는 왜 쓰게 되었고, 어떤 기능이 있는지 이번 기회에 뜯어보게 되었다.public class ResponseEntity extends HttpEntity { private final HttpStatusCode status; public ResponseEntity(HttpStatusCode status) { this((Object)null, (MultiValueMap)null, status); ..
· TIL
DispatcherServlet이란? DispatcherServlet은 Spring MVC에서 프론트 컨트롤러 역할을 하는 핵심 서블릿이다. 프론트 컨트롤러란, 모든 웹 요청을 가장 먼저 받아서 적절한 컨트롤러에게 요청을 위임하는 역할을 하는 객체이다. 예를 들면 공항의 관제탑처럼, 들어오는 모든 비행기(요청)를 받아서 적절한 게이트(컨트롤러)로 안내하는 역할을 하는 것과 같다. 왜 Spring은 DispatcherServlet을 만들었나?Spring이 DispatcherServlet을 만든 이유는 모든 웹 요청을 중앙에서 처리하는 단일 진입점을 제공하여, 개발자가 복잡한 서블릿 코드 대신 비즈니스 로직에만 집중할 수 있게 하기 위해서이다. DispatcherServlet의 동작 방식 Dispatch..
빵판 AKA 브레드보드
'분류 전체보기' 카테고리의 글 목록