반응형

스프링 21

[Spring] Spring Boot + Shedlock 이용한 API 응답 캐싱 폴링

우리 팀 API가 아닌 타 팀(또는 타사) API를 호출하여 응답을 이용하긴 하는데, 응답이 너무 반복적으로 같은 경우가 있다.예를 들어 국가 별 수도 목록을 구하는 api를 매번 호출한다고 하자. 수도는 웬만해서는 변하지 않기 때문에, 이런 경우에는 응답을 캐싱해두면 좋아보인다. 하지만 가끔 캐싱만으로는 걱정되는 경우가 존재한다.이번에 나는 캐싱 뿐 아니라, 폴링 로직을 추가하는 경험을 해보았는데 처음 경험해보는 것이어서 기록용으로 포스팅에 남겨두려고 한다. 포스팅 작성 시점 기준으로, 사내 개발환경에만 도입해보았고 실제 운영환경에 작성되지 않아 틀린점이 존재할 수 있습니다. 틀린 점 및 보완할 점은 댓글로 남겨주세요!폴링을 고려하게 된 계기응답을 캐싱해두면, 그 다음번부터는 api를 호출할 필요 없이..

[240406] GDSC Konkuk KPrintf 행사 참여 후기

아는 지인 중 샤인(https://github.com/zbqmgldjfh)이랑 수지누나(https://github.com/sujileelea)가 발표한다고 해서 참여한 행사. GDSC Konkuk 리더이신 현우님(https://github.com/l2hyunwoo) 이 준비하신 걸로 알고 있다. (맞나?) 샤인이 발표하는 헥사고날 아키텍처는 우리 팀의 일부 프로젝트에서 사용하기도 하고, 샤인이 발표하기도 해서 들어보려고 하고, Vision Pro로 접해보는 공간 컴퓨팅도 수지누나가 발표하고, 아예 새로운 분야여서 들어보기로 했다. 그리고 CS와 함께하는 BE 이야기 세션은 흥미로워보여서 중간에 2시부터라도 들어보려 했다. 일정 상 12시부터 3시까지만 참여하긴 했지만 이에 대해 후기를 적어보려 한다. ..

[Spring] @Configuration vs @Component

스프링은 IoC 컨테이너를 통해 적재적소에 빈 객체를 반환해준다. @Configuration, @Component 어노테이션을 붙여주면 해당 클래스는 스프링 관리 대상이 된다는 점을 보면 크게 차이는 없어보일 수 있다. 어떠한 상황에 @Configuration을 쓰고 어떠한 상황에 @Component를 쓰는 것이 좋을까? 1. @Configuration은 @Component를 포함하고 있다 둘의 차이점을 비교하기 전에, @Configuration이 @Component를 포함하고 있다는 것을 확인하자. 그렇기 때문에 @Configuration 어노테이션이 붙여진 클래스도 @Component 어노테이션이 붙여진 클래스처럼 스프링 컨테이너 관리 대상이다. 참고로 @Component는 아래와 같이 소개돼있다. ..

[220928] 우아한테크코스 레벨4 - MVC 구현하기 미션 후기

이전에 진행됐던 `톰캣 구현하기` 미션에 이어 `MVC 구현하기` 미션이 시작됐다. 여기에서 1번은 HandlerMapping, 2번은 HandlerAdapter이다. 이번 미션에서는 위를 구현해보고 리팩터링하여 컨트롤러가 어떻게 찾아와지는지, 해당 메서드를 어떻게 실행시키고 ModelAndView로 반환시키는지 확인해보는 미션이다. 환경은 JSP 파일을 렌더링한 응답을 보내줘야 하는 SSR 환경이라고 가정한다. 1단계 - @MVC 프레임워크 구현하기 요구사항 AnnotationHandlerMappingTest가 정상 동작한다. DispatcherServlet에서 HandlerMapping 인터페이스를 활용하여 AnnotationHandlerMapping과 ManualHandlerMapping 둘다 처리..

[Spring] @MockBean VS @SpyBean

Spring Boot 환경에서 여러 협력 객체들이 존재하는 통합테스트는 빈을 호출하기 위해 @SpringBootTest를 사용하는 경우가 많다. 그리고 협력 객체들이 많을 때에는 테스트를 위한 기대 행위 전처리 작업을 mockito를 이용하여 stub을 통해 test double을 만들어주는 경우들이 존재한다. @SpringBootTest와 함께 사용한다면 @Mock, @InjectMocks 대신 @MockBean을 주로 사용할 것이다. 그런데 테스트 코드를 작성하는 방법에 대해 공부하던 도중 @SpyBean이라는 어노테이션을 알게 됐다. 이 어노테이션은 뭐하는 애일까? 그리고 어떻게 사용하는게 좋을까? @MockBean 개인적으로 나는 웬만해선 @MockBean 대신 실제 객체를 사용하는 방식을 사용하..

[JPA] Spring Data JPA로 생성일자, 수정일자 컬럼을 간단히 추가하자

Spring Data JPA에는 Auditing 기능을 편하게 다룰 수 있도록 @CreatedDate, @LastModifiedDate 어노테이션을 제공해준다. 그리고 생성일자, 수정일자 컬럼은 웬만한 모든 도메인에 있으면 로깅 및 사용자 입장에서도 간편하다. 따라서 보통 BaseEntity라는 생성일자, 수정일자가 들어있는 상위 엔티티를 만들고 상속 구조를 이용하는 방법을 진행한다. 이번 포스팅에서는 이 방법에 대해 기록해보려 한다. 개발환경 Spring Boot 2 버전 Spring Data JPA lombok 프로덕션 코드 BaseEntity @EntityListeners(AuditingEntityListener.class) @MappedSuperclass @Getter abstract public..

[우아한테크코스] 레벨2 레벨로그 인터뷰 후기

우테코에서는 각 레벨이 끝날 때마다, 그 레벨에서 배웠던 내용을 기록하여 제출한다. 그리고 이 내용을 바탕으로 20분동안 크루 4~6명과 함께 코치님 또는 캡틴과 자유롭게 얘기를 나누는 시간을 가진다. 모의 면접이라고 생각하면 된다. 담당코치님은 랜덤으로 배정된다. 나의 경우는 레벨3를 시작하자마자 바로 다음 날에 레벨로그 인터뷰를 진행됐다. 나의 레벨로그 인터뷰를 맡아줄 코치님은 코치님이 아닌, 캡틴 포비였다. 포비와 인터뷰라니... 한 편으론 설레면서 한 편으론 두렵고 긴장되는 마음으로 입장하였다. 내 레벨 로그는 여기서 확인할 수 있다. https://clean-nutria-44b.notion.site/2-42fb806797cf4486bc141fc55e0b7461 레벨2 학습로그 테스트 clean-..

[AWS][Spring] Aws 우분투 인스턴스 웹 애플리케이션 자동 배포 스크립트 만들기

지난 포스팅에서 github에 올린 웹 애플리케이션을 aws 인스턴스에 배포하는 방법을 알아보았다. https://kth990303.tistory.com/329 [AWS] AWS EC2를 이용하여 스프링 웹 애플리케이션 배포해보기 AWS는 아마존에서 개발한 클라우드 서비스 플랫폼이다. 여기서 클라우드 서비스란, IT 리소스(CPU, 메모리 등의 자원)를 인터넷으로 빌려주고 사용한 만큼의 비용을 받는 것을 의미한다. EC2는 Elasti kth990303.tistory.com 이번 포스팅에서는 터미널에서 특정 sh 파일을 실행하기만 하면 위 과정이 자동으로 이루어지는 작업을 기록해보려 한다. aws ec2 인스턴스는 이미 생성이 돼있다는 가정 하에 포스팅을 작성한다. 1. 셸 스크립트 (deploy.sh)..

Infra/Aws 2022.06.08

[AWS] AWS EC2를 이용하여 스프링 웹 애플리케이션 배포해보기

AWS는 아마존에서 개발한 클라우드 서비스 플랫폼이다. 여기서 클라우드 서비스란, IT 리소스(CPU, 메모리 등의 자원)를 인터넷으로 빌려주고 사용한 만큼의 비용을 받는 것을 의미한다. EC2는 Elastic Computer Cloud → ECC → EC2로, 클라우드에서 컴퓨팅 파워의 규모를 자유자재로 변경할 수 있는 웹서비스이다. EC2는 탄력적인 특성을 갖고 있어 개발자들이 트래픽의 스파이크 또는 수요에 맞춰 즉시 용량을 조정할 수 있다. EC2에 대해 궁금하다면 아래 FAQ를 확인해보자. https://aws.amazon.com/ko/ec2/faqs/ Amazon EC2 FAQ – Amazon Web Services aws.amazon.com AWS EC2를 이용하면 로컬에서뿐만 아니라, 다른 ..

Infra/Aws 2022.06.01

[ERROR] Required request body is missing 해결

Required request body is missing 이 에러를 본 적 있는가? 해석해보자면 요청의 body에 존재해야될 것이 존재하지 않는다는 것이다. 보통 400 Bad Request, 415 Unsupported Media Type 에러와 함께 발생할 확률이 높다. 해당 api를 사용할 때 요청에 들어있는 객체를 이용해서 처리하는데, 정작 요청 body에 값이 없는 것이다. 주로 POST, PUT http method API를 사용할 때 많이 발생한다. 해결 방법은 어떻게 될까? 1. (가장 높은 확률로) 요청 body에 담긴 값이 JSON이 아닐 때 400 Bad Request, 415 Unsupported Media Type 에러와 함께 postman을 이용하여 간접적으로 api 호출을 할..

반응형