스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다. 이번에 다룰 주제는 테스트에서의 @Transactional 사용이다. 평소에도 테스트 코드를 작성하며 @Transactional 사용에 대해서 생각을 가지고 있었지만, 이렇
스프링에 대해서 여러가지 공부를 하던중, 기록 해놓으면 좋을 것 같은 주제를 기록하려고 한다.이번에 다를 주제는 국제화이다.사실 국제화에 대해서는 다른 블로그에 잘 정리 되어있기 때문에 굳이 기록해놓을 필요가 없다. 하지만 이번 게시글을 작성하게 된 이유는 fallba
스프링에 대해서 여러가지 공부를 하던중, 기록 해놓으면 좋을 것 같은 주제를 기록하려고 한다. 이번에 다를 주제는 백엔드 개발자라면 알아놓아야할 HTTP Status Code이다. # 1. 첫 번째 숫자 첫 번째 숫자는 HTTP 응답의 종류를 구분하는 데 사용한다
스프링에 대해서 여러가지 공부를 하던중, 기록 해놓으면 좋을 것 같은 주제를 기록하려고 한다. 이번에 다를 주제는 POST vs PUT이다. # 1. POST vs PUT POST vs PUT에 대해서 간단히 설명하자면 아래와 같다. > 새 자원을 생성한다는 점에서
스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다. 이번에 다를 주제는 @Secured(),@PreAuthorize, @PostAuthorize이다. 해당 주제에 대해서 작성을 하게 된 이유는 인가처리 때문이다. 인가 처리
스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다. 이번에 다를 주제는 토큰 만료에 대한 반환 처리이다. 해당 주제에 대해서 작성을 하게 된 이유는 프로젝트를 구현하며, 발생한 문제 때문이다. 문제에 대한 내용을 간단히 설명
스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다. 이번에 다를 주제는 RestTemplate list 반환 방법이다. 해당 주제만을 들으면 이게 무슨소리지라고 생각할 것이 분명하다. 해당 주제를 다루게 된 이유는 정말 간단하
스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다. 이번에 다를 주제는 OncePerRequestFilter vs GenericFilterBean이다. 해당 주제를 다루게 된 이유는 Filter에 대해서 공부하던 중에 Ge
스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다.이번에 다를 주제는 Swagger이다. 해당 주제를 공부하게 된 이유는 굉장히 간단하다. 연구실 과제를 진행중에 외주를 맡긴 스프링 서버의 API 명세서를 보게되었다. 해당 명
스프링에 대해서 여러가지 공부를 하던중, 정리 해놓으면 좋을 것 같은 주제를 정리하려고 한다. 이번에 다를 주제는 @OnDelete(action = OnDeleteAction.CASCADE)이다. 해당 주제를 공부하게 된 이유는 어떠한 의문에서 부터 시작했다. Casc
스프링을 공부하며, 프로젝트의 실제 배포를 위해 클라우드 서버 구축의 필요성을 깨달았다. 이 과정에서 AWS를 선택하게 되었고, AWS를 효율적으로 사용하기 위해 IAM 계정 생성에 대한 이해가 필수적이라는 것을 알게 되었다. 이번 포스트에서는 IAM의 핵심과 그 생성
스프링을 공부하며 프로젝트의 실제 배포를 위해 클라우드 서버 구축의 필요성을 느꼈다. 이 과정에서 AWS를 선택하게 되었고, EC2 및 RDS 인스턴스를 성공적으로 구축해보았다. 이번 포스트에서는 그 과정을 정리하여 공유하려 한다.EC2와 RDS 인스턴스 생성 및 연동
도커 사용 중에 마주친 어려운 오류를 겪었다. 처음에는 간단해 보였지만, 해결하기까지 많은 시간을 소비했다. 이 문제를 해결한 후, 같은 문제로 고통 받는 다른 사람들을 위해 이 해결 방법을 공유하기로 했다. 특히 해당 글 글을 보고 많은 사람들이 같은 문제로 어려움을
AWS의 RDS를 사용하면서 마주친 어려운 오류를 경험했다. 처음엔 단순해 보였지만, 해결까지 많은 시간이 들었다. 이 문제를 해결한 후, 같은 문제로 고생하는 다른 사람들을 위해 이 해결 방법을 공유하기로 했다. 특히 이 글을 보고 많은 사람들이 같은 문제로 어려움을
AWS EC2에서 Docker를 사용하여 Spring Boot 애플리케이션을 배포하는 과정을 안내한다. 이 과정은 Spring Boot 애플리케이션을 Docker 이미지로 빌드하고, Docker Hub에 이미지를 공유한 후, EC2 인스턴스에서 이미지를 pull하여 실
AWS EC2에서 HTTPS를 적용하는 과정을 소개한다. 많은 자료들이 있음에도 불구하고, 보안상의 이슈를 발견하고 이를 해결한 경험을 공유하고자 한다. 본 글에서는 다른 자료들과의 차이점에 초점을 둘 예정이다.
테스트 코드를 작성하며 내가 테스트 코드를 잘 작성하고있는지에 대한 의구심이 생겼다. 또한 테스트 케이스를 얼마나 작성해야하는지 궁금하게 되었다. 해당 문제를 해결하기 위해서 검색을 하던중 Jacoco라는 도구를 발견하였다. 해당 도구를 현재 진행중인 프로젝트에 적용하
깃허브 액션을 이용한 CI 구축 중에 어이없는 오류가 발생하였고, 해당 오류를 해결하며 배우게 된 것을 정리하려고 한다.
지난번 글에서 Jacoco를 이용해서 코드 커버리지를 검증해보는 시간을 가졌는데, 이번 글에서는 GitHub Actions를 사용해 CI 기능을 구축한 과정을 기록한다. 참고로 아래 CI 코드는 후에 Sonar Cloud를 적용하며 리팩토링 된다. 프로젝트 진행 중 G
이번 글에서는 프로젝트에 정적 코드 분석을 적용하기 위해 SonarCloud를 활용해 본다. 정적 코드 분석은 소스 코드를 실행하지 않고 분석하는 과정이다. 이 과정을 통해 소스 코드의 품질을 높이고 잠재적
이번 게시글에서는 깃허브 액션을 이용한 CI 구축과정에 대한 내용을 기록하겠다. 이전 글에서 CI 구축을 하였지만, 카카오: 워크서버개발팀의 GitHub Actions 적용기를 보고 CI의 리팩토링을 필요성을 깨달았고, 해당 글에서는 해당 내용에 대해서 중점적으로 기록
이번 게시글에서는 AWS S3를 이용하여 새 파일을 저장하는 과정을 기술하겠다. 본래에는 도커를 이용하여 파일을 관리할 생각이었으나, S3를 사용하면 얻는 장점이 많기도 하고 CloudFront를 적용하여 Cash에 대한 장점도 얻을 수 있어서 S3를 적용하기로 하였다
저번 글에 이어서 이번 게시글에서는 AWS CloudFront를 활용해 S3에 저장된 파일들을 캐싱하여 제공하는 방법을 소개한다. 또한, CloudFront만을 통해 S3 파일에 접근하도록 설정하여 보안도 강화할 예정이다
이번 프로젝트를 진행하면서 깃허브에 올리지 못하는 중요 정보를 담은 파일을 관리하는 방법으로 Git Submodule을 적용해본 과정을 설명하려고 한다.
이번 게시글에서는 Docker를 이용한 Jenkins 설치 및 CI/CD 구축과정을 기술할 것이다. 구축방법에 대해서는 다른 좋은 게시글이 많으니, 해당 게시글에서는 오류해결 방법과 코드에 관련된 내용에 대해서 중점적으로 다룰 예정이다.
Linux 시스템을 업데이트하거나 소프트웨어를 설치하는 도중에 "E:dpkg was interrupted, you must manually run 'sudo dpkg --configure -a' to correct the problem."라는 오류 메시지가 발생하였다.
이번에 다룰 주제는 Nginx를 이용한 무중단 배포이다. Nginx 구축방법에 대해서는 다른 좋은 게시글이 많으니, 해당 게시글에서는 코드에 관련된 내용에 대해서 중점적으로 다룰 예정이다.먼저 무중단 배포에 대해서 간단히 설명하자면, 무중단 배포는 사용자 경험을 방해하
이번 주제는 DTO가 어디에서 변환되어야 적절한지에 관한 생각 정리이다. 정답이 없는 주제이지만, 생각을 정리하며 고민을 해결할 수 있다는 장점 때문에 논의를 진행하겠다. 마치 아이패드병처럼, 해결책을 찾으려는 노력이 필요한 상태이다.
이번에 작성할 주제는 Spring Security의 PasswordEncoder를 공부하며 생긴 Bcrypt와 salt에 대한 궁금증을 해소하며 공부한 내용을 정리할 것이다.
이번에 작성할 주제는 Spring Actuator를 이용하여 모니터링이나 매트릭(metric)과 같은 기능을 HTTP와 JMX 엔드포인트를 통해 사용하는 방법을 작성하겠다.
요즘 Spring Cloud 공부를 하며 OpenFeign를 알게되었다. 그래서 이참에 HTTP 통신 방식 3가지인 RestTemplate, WebClient, OpenFeign에 대해 공부해보도록 하고, 각각 어디에 적용하면 좋을지에 대한 간단한 생각을 정리할 것이다
... 작성중
... 작성중
이번 게시글에서는 Kafka Connect의 특징과 설정 중 발생할 수 있는 오류, 데이터 통합 환경을 구축하는 과정들에 대한 해결 방법을 작성할 것이다. window 환경에서 Kafka Connect를 직접 설치하는 과정은 복잡하니 해당 과정을 직접 작성하도록 하겠다
Kafka를 사용하면서 Topic의 이름을 짓는 것에 고통을 느끼고 있다. 그래서 해당 주제에 대해서 생각을 정리하고 넘어가면 좋을 것 같아 해당 게시글을 작성하게 되었다. 기본적인 Naming에 대한 기술들은 코딩을 하면서 자연스럽게 터득하게 되므로 해당 내용에서는
이번에 작성할 주제는 저번 [공부정리] Spring Actuator 사용하기의 이어서 Spring Actuator를 이용하여 bus-refresh를 구현하는 방법에 대해서 다룰 예정이다.
지속 성장 가능한 코드를 만들어가는 방법
... 작성중
기본적으로 스프링의 Validation는 다양한 어노테이션을 제공하여 입력값을 검증하지만, MultipartFile 객체에 대한 검증 어노테이션은 제공하지 않는다. 따라서 MultipartFile을 검증하기 위해서는 사용자 정의 제약 조건(Custom Constrain
이번에 작성할 내용은 SpringCloudGateway에서 평소 사용하는 @ExceptionHandler 방식이 아닌 WebExceptionHandler를 이용하여 예외를 처리하는 방법에 대해서 정리할 것이다.
JWT 토큰 시스템에서는 일반적으로 Access Token과 Refresh Token이 사용된다. Access Token은 짧은 유효 시간을 가지며, 만료 시 Refresh Token을 통해 재발급 받는 방식이다. 이 과정에서 발생할 수 있는 문제점과 해결 방안을 프로
Flask 환경에서 eureka, kafka, logging 기술들을 사용하였는데, 이러한 내용을 다루는 자료는 많지 않아서 해당 경험을 공유하고자 한다. 이 기술들에 대해 더 깊이 이해하고, 또한 같은 기술 스택을 사용하려는 다른 개발자들에게 도움이 되고자 하는 목적
이 오류는 람다 표현식 내에서 사용되는 변수는 반드시 최종(final)이거나 사실상 최종(effectively final)이어야 함을 알려준다.
... 작성중
이 글이 비슷한 고민을 가진 개발자들에게 도움이 되길 바란다. 개발자 유미님의 말처럼, 이제는 상태를 저장하는 것에 대한 큰 고민을 덜게 되었다. 왜냐하면, 결국 JWT의 본질적 목적이 Stateless가 아니기 때문이다.
JWT의 Stateless한 특성에 집착하지 않기로 했다. 이 결정을 바탕으로, 프로젝트에 Redis를 활용한 Refresh Token Rotation 방식을 도입하였다. 또한 프로젝트 토큰 관리 전략도 개선 하였다. 이번 글에서 해당 내용들을 소개하도록 하겠다.
... 작성중
하지만 redis의 사용도 비용이라는 생각이 들었고, 이번 게시글에서 생각을 정리하고자 한다. 기술을 선택할 때 그 이유를 항상 고민하고, 그 선택이 정말 필요한지를 평가하는 것은 매우 중요하다.
... 작성중
... 작성중
...작성중
이러한 수정을 통해, Refresh Token의 관리 로직이 더욱 객체지향적이고 유지보수가 용이한 코드로 발전했다. 또한 RDB를 사용한 토큰 관리 방식으로의 전환으로 휘발성과 비용 문제, 그리고 관리의 복잡성의 문제들을 해결하였다.
...작성중
... 작성중
... 작성중
결제 시스템 과정을 다루는 대부분의 게시글들은 (구)카카오 페이 API를 이용하여 구현한 내용들이고 온라인결제 API를 이용한 글은 찾아보기 어려웠다. 그래서 이번에 카카오페이 개발자센터를 기반으로 구현한 경험을 바탕으로 이번 게시글에서 소개하여 온라인결제 API를 사
... 작성중
세션과 토큰을 비교할 때는 클라이언트로 무엇을 쓰는지 비교하기 보다는 인증 정보를 세션(저장소)에서 관리할지, 암호화해서 토큰에 넣어 관리할지를 비교하는 것이 더 올바르다.
이번게시글에 다룰 내용은 redirect_uri를 처리할 수 있는 Controller 또는 AuthenticationFilter를 직접 구현하여 서비스측의 인가 처리를 하는 과정이다.
깃허브에서 풀 리퀘스트(Pull Request, PR)를 생성할 때 "No newline at end of file"라는 경고 메시지를 본 적이 있을 것이다. 이 메시지는 파일의 마지막에 새 줄 문자(newline character)가 없을 때 나타난다.
... 작성중
이번 게시글에서는 Quartz 스케줄러를 활용한 경험을 공유하려고 한다. Quartz를 도입하면서 필요했던 기본 설정 과정이 예상외로 복잡했기 때문에, 이에 대한 상세한 설명과 함께 Quartz를 이해하기 쉽도록 도와주는 예제를 제공할 예정이다. ... 작성중
이에 대해 깊게 고민해보았고, 현재의 결론은 조금 이상한 방향으로 바뀌었다. 아직 학습 단계에 있는 나는, 번거로움을 이유로 외래키 사용을 기피하는 것이 적절하지 않다고 생각한다. 마치 기본기가 튼튼한 예술가만이 진정한 예술을 창조할 수 있는 것처럼 말이다.
이번 게시글에서는 location_tracking_module 프로젝트를 진행 중에 만난 Syntax error in SQL statement [*] 오류에 대해 다루고자 한다.
@DynamicUpdate는 특정 상황에서 성능 최적화에 도움이 될 수 있지만, 모든 경우에 도움이 되는건 아니다. 따라서 도입 전 충분한 테스트를 통해 실제 애플리케이션에서의 영향을 검토하고, 적용 여부를 결정하는 것이 중요하다고 생각한다.
이번 게시글에서는 헷갈리는 개념인 Authentication, Security Context, Security Context Holder, Session를 간단히 정리 해보도록 하겠다.
Jackson2ExecutionContextStringSerializer는 ExecutionContext를 Jackson2 라이브러리를 사용하여 직렬화한다. 많은 사람들이 이를 기본 설정으로 알고 있지만, Spring Batch 5 버전으로 넘어오면서 DefaultEx
Quartz만으로는 정기결제 기능의 구현이 부족하다고 판단되어, Spring Batch 학습을 진행 중이다. 처음에는 Quartz로 구현을 시도하며 코드 작성이 버거웠으나, Spring Batch를 학습하면서 점점 구현 방향이 명확해지고 있다.
Spring Batch 코드를 수정할 때 참고하려고 한다.
이번 게시글에서는 위치추적모듈 프로젝트의 결제를 위한 Batch로직을 구현중, Reader에서 페이징이 깨지는 문제를 발견하고 해당 문제의 해결과정을 작성하겠다. 흔히 볼 수 있는 문제인 만큼 게시글로 작성해 기록해놓으려고 한다.
이번 게시글에서는 Quartz의 Cron 표현식을 이용하여 스케줄링 작업을 수행하는 과정에서 작성한 Cron 표현식을 생성하고 검증할 수 있는 유용한 사이트를 추천하겠다.
"모던 자바 인 액션"에서는 `Optional<T>`를 활용하여 예외를 발생시키지 않고도 연산의 성공 여부를 표현할 수 있다고 언급한다. 즉, 호출자는 메서드 호출 결과로 빈 `Optional`이 반환되는지를 확인함으로써 연산의 성공 또는 실패를 알 수 있다. 이러한
진행중인 프로젝트 협업이 끝나면 작성할 예정.. 이런 생각들이 현시점에서 협업 프로젝트에서 정말 중요한 것 아닐까,,
이번 게시글에서는 ECS 배포중에 발생한 ResourceInitializationError: unable to pull secrets or registry auth... 오류를 해결한 과정을 작성하겠다. 1. 발생한 오류 발생한 오류이다. 이 오류는 Privat
이번 게시글에서는 SCDF를 이용하여 Batch Job의 실행 결과에 대한 모니터링 기능을 구현해보겠다. 이번 위치추적모듈 프로젝트에서 정기 결제 기능을 구현하며, 결제 실행에 대해서 여러번 실행되는 상황을 방지하기 위해서 결제를 Batch Job을 이용하여 실행하도록
이번 게시글에서는 Method Security를 이용한 인가와 관련된 검사에서 open-in-view와 영속성 컨텍스트가 어떠한 영향을 미치는지에 대해서 작성하도록 하겠다. 생각해보아야할 점이 몇가지 있는데 Method Security를 이용하여 인가를 검증할때는 영
이번 게시글에서는 GitHub Actions를 이용한 AWS ECS 배포 내용을 기술하겠다. AWS의 ECR, ECS, Load Balancer에 대해서는 구현 되어있다고 가정하고 진행하겠다.
이번에 위치추적모듈 프로젝트를 진행하면서, api와 Batch의 로직들을 단일 모듈에서 운영하면서, 리소스 관리의 어려움과 테스트 코드 작성의 어려움 등 여러가지 문제가 발생하였다. 그래서 멀티 모듈로 전환하게 되었다. 이번 게시글에서는 멀티 모듈로 전환하며
이번에 위치추적모듈 프로젝트를 진행하며 정기결제 기능을 구현을 위해 Spring Batch를 사용하였다. Spring Batch를 이용하다보니 아래 사진과 같이 하나의 데이터베이스에 Domain Data와 Meta Data가 저장되어있게 되었다.이렇게 Quartz와 B
최근 Spring Batch 5로 버전이 올라가면서 많은 변화가 생기게 되었다. Spring Batch 5에서 테스트 코드를 작성하고자 하는 사람에게 도움이 되면 좋겠다는 마음에 이번 게시글에서는 Spring Batch 5 에서 Job에 대한 테스트 코드를 작성한 내용
이번 게시글에서는 ECS 환경에서 Filebeat, Logstash, ElasticSearch, Kibana를 이용하여 로그를 수집해본 프로젝트를 구축한 경험에 대해서 기술하겠다. Filebeat, Logstash, ElasticSearch, Kibana 환경 구축에
상점 시스템과 객체 인식 시스템을 직접 통합하기보다는, 객체 인식을 위한 서버에는 비교적 가벼운 프레임워크인 Flask를 선택하고, 상점의 기능을 담당할 서비스 서버는 별도의 Spring 프레임워크를 사용하는 것이 적절하다고 판단 했다.
나는 실제 프로젝트를 들어가기전 간단하게 데모 프로젝트를 제작해서 연습해보는 것을 좋아한다. 이번에도 간단하게 데모 프로젝트를 제작해 볼 생각이다. 먼저 플라스크 서버에서 사용할 간단한 모델을 선정하였다. 프로젝트에서 사용할 모델로 KoBART-news를 선정했다.이
일단 로컬 환경 기준으로 코드를 구현한 뒤 테스트를 해보자!일단 내가 선정한 모델이 잘 수행 되는지 확인할 필요가 있었다. 간단하게 텍스트를 요약해주는 플라스크 코드를 구현한 뒤 테스트 해보았다.굉장히 잘 수행되는 모습을 볼 수 있다.사용자의 요청을 받고 플라스크 서버
도커는 애플리케이션을 컨테이너화하여 배포, 실행을 용이하게 하는 플랫폼이다. 컨테이너는 애플리케이션과 그 의존성을 패키지화하여 어느 환경에서든 동일하게 동작할 수 있도록 도와준다.프로젝트에 적용하면 좋은 점 \- 환경 일관성: 개발, 테스트, 배포 환경이 동일하므로
앞에서 도커를 이용한 로컬 환경에서의 실행을 완료했으니 이제 클라우드 타입에서 데이터베이스 서버와 플라스크 서버를 배포한 후 해당 서버들을 스프링에서 dev 환경에 등록한 후 dev 환경에 돌려볼 것이다.클라우드 타입에서 MariaDB를 배포 하는 방법은 괴장히 간단하
사진과 같이 나의 깃 저장소를 지정한다.그리고 환경변수에 prod 프로필에 맞는 변수를 저장해준다. 여기서 중요한 점이있다.스프링에서 application-prod.yml 을 설정해줄때 dev 환경과는 다르게 import: classpath:application-db.
앞에 데모 프로젝트를 통해서 인공지능 모델을 돌리기에는 클라우드 타입의 성능으로는 부족하다는 것을 알게되었다. 해당 내용을 반영해서 시스템 구성도를 그려보았다.데모 프로젝트를 통해 알게 된 바로는, 클라우드 서비스의 성능만으로는 인공지능 모델을 운영하기에 부족함을 확인
Spring Boot를 활용하여 사용자에게 상품의 종류와 위치 정보를 반환하는 API 서버를 구축했다. 이 서버는 "/api/snacks/analyze" 엔드포인트를 통해 사용자가 이미지를 전송하면, Flask 서버로부터 처리된 데이터를 받아 반환한다. Sevice 계
스프링에 대한 집중적인 학습을 통해, 초기에 레거시 방식으로 구현되었던 서버 응답 방식을 개선할 수 있었다. 이제, 클라이언트에게 더 상세한 응답을 제공할 수 있는 response 클래스를 활용하며, 예외 처리는 핸들러를 통해 관리하도록 하였다. 또한, 국제화 기능을
이번 게시글에서는 Spring Framework를 사용하여 서버를 개선하는 과정에서 RestTemplate에서 WebClient로의 전환과 관련된 리팩토링 작업을 설명한다.
이번 게시글에서는 [일단 박죠] O2O Object Detection 스프링 서버 webClient 적용에서 언급하였던 Store Management 서버를 소개하고자 한다.
프로젝트를 시작한 때와 지금을 비교해보니, 개인적으로도 프로젝트 수준도 많은 발전을 이루었다. 프로젝트를 시작하기 전의 코드들과 비교해 현재 작성 중인 코드들의 질적인 차이를 느낄 수 있다. 스프링에 대한 이해와 함께 개발자로서의 성숙도가 크게 향상되었음을 느낀다.
백엔드 개발자로서 배포 과정은 직접적인 역할이 아닐 수 있다. 하지만 프라이빗 정보 관리, 저장소 인터페이스 분리, 스프링 프로파일 구분 등은 배포에 대한 이해 없이는 개발 과정에서 불리한 상황에 처하기 쉽다고 생각한다. 따라서 배포의 경험은 필수적이라고 생각하고있다
메시지 큐 도입이 올바른 방향인지에 대한 의문이 드는 상황이다. 그래서 이번 게시글에서 현재 구조의 문제점을 분석하고, 이 문제들을 해결하기 위해 메시지 큐를 어떻게 활용할 수 있을지에 대한 계획을 세우기로 했다.
결론적으로, Spring Cloud를 이용한 구조 변화는 비동기 방식과 서버 간 결합도를 낮추는 Message Queue의 장점을 유지하면서도, 서버의 본연의 역할에 집중할 수 있게 해준다.
분리된 서비스 구조를 가진 시스템에서 세션 기반 인증방식의 문제점을 해결하기 위해서 토큰 기반 인증 방식을 선정하였다. 하지만 토큰 기반 인증 방식은 토큰이 탈취 당했을 경우, 무효화가 어렵다.
Redis 사용이 비용이라는 생각이 들었다. 그래서 Redis를 사용함으로써 얻을 수 있는 장점과 단점을 분석하는 시간을 가졌다. 결론적으로, 리프레시 토큰만을 위해 Redis를 사용하는 것은 과도한 비용이라는 결론에 도달했다.
이번 게시글에서는 Jenkins의 Docker In Docker 문제를 해결하는 방법을 기술하겠다. 이미 이전에 해결 방법을 다룬 적 있었으나, docker 컨테이너를 실행할 때마다 다시 설정해주어야 하는 점이 귀찮았기 때문에 이번에는 Docker Compose
테스트 코드에서 롤백을 위한 @Transactional과 스레드의 @Transactional이 다르다는 것을 알 수 있었다. 테스트 코드와 @Transactional이 다르기 때문에 1차 캐시도 다를 것이며, 테스트 코드에서 저장했던 사용자 정보에 접근이 불가능하였다
Spring Cloud Data Flow는 Batch 모니터링 도구로는 오버헤드가 크다고 생각하여 이번 프로젝트에서는 Jenkins를 사용하여 Batch 실행 및 모니터링을 하였다. Jenkins 하나로 Quartz와 Spring Cloud Data Flow를 대체할
Auto Scaling Group EC2의 모니터링을 위한 Prometheus 설정 방법에 대해 기술하겠다. 해당 프로젝트는 실제로 사용자의 트래픽을 받기 위해 AWS ECS 환경으로 구성하였으며, Auto Scaling 되는 EC2 상에서 작동되는 Spring WAS
만약 동일하게 절단해야 하는 여러 장의 종이를 절단하는 작업을 한다고 할 때, 하나씩 절단할 것인가? 아니다. 여러 장의 종이를 한 번에 절단하고자 노력할 것이다. 여러 장의 종이를 한 번에 절단하면 종이의 양에 따라 소요시간이 증가하지 않을 것이다.
이번 게시글에서는 저번 게시글에 이어서 동시성 문제를 해결하기 위한 과정에 대해서 기술하겠다. 챗봇 서비스를 개발하는 프로젝트에서 사용자가 네이버 웹툰 쿠키와 같은 배터리를 구매하고, 이를 이용하여 챗봇을 구매하는 기능을 구현하고 있다. 아래는 해당 코드이다.
토스 결제 승인 API는 이미 처리된 결제인 경우에는 예외 메세지를 반환한다. 즉, Optimistic Lock을 이용하여 재시도를 수행할 경우, 토스 결제 승인 API에서 예외 메세지를 반환하기 때문에 사용자의 결제 요청이 반영되지 않을 것이다.
이번 게시글에서는 AWS PostgreSQL RDS에서 Slow Query 로그를 확인하는 방법에 대해 기술하고자 한다. 대나무 숲 프로젝트 진행 중 성능 개선을 위해 서비스에 이슈가 될 만한 쿼리를 분석하고자 로그를 확인할 필요가 있었다. MySQL을 기준으로 관련
작성중...
더 나아가 threads.min-spare, connection-timeout 까지 다루어 보도록 하겠다. 작성중..
이러한 문제를 겪으면서, 컨벤션의 중요성을 새삼 깨닫게 되었다. 사실 나는 다른 사람의 코드를 존중하는 성격이기 때문에, 컨벤션의 필요성에 대해 깊이 고민하지 않았던 것이 사실이다. 결국, 이러한 고민과 경험은 협업 과정에서 얻을 수 있는 중요한 교훈이라고 생각한다.
@Builder를 사용하면 인스턴스 생성이 유연하지만, 이는 때때로 개발자의 실수를 유발할 수 있다. 또한, 가독성은 IDE의 도움을 받으면 충분히 해결될 수 있다. 따라서, @Builder보다는 생성자를 이용하는 방식을 선호하게 되었다. 역시 튜닝의 끝은 순정인가 보
이번 게시글에서는 Docker를 단순히 활용하는 것에 만족하지 않고, 이를 실전에서 효율적으로 최적화하고 활용하는 다양한 방법에 대해 정리하려고 한다.
이번 게시글에서는 [공부정리] Docker 실전 활용 팁을 기반으로, 프로젝트에 적용하여 성능을 개선한 내용을 다루고자 한다. 특히, AWS ECS 기반의 CI/CD에서 배포 속도를 개선한 과정을 중점적으로 작성하겠다.
이번 프로젝트를 통해 평소 자주 사용하는 오픈 소스들의 제작과 관리가 얼마나 많은 고민과 노력을 요구하는지 다시 한 번 느낄 수 있었다. 나도 사용자들이 최대한 편리하게 사용할 수 있도록 라이브러리의 기능과 구조를 고민하는 과정에서, 개발자로서의 성장을 경험할 수
결론을 이야기 하자면 테스트 코드는 프로젝트의 신뢰성을 확보하는 중요한 도구다. 하지만 프로젝트 구조의 변경을 막는 걸림돌이 된다면, 그 테스트 코드는 오히려 프로젝트의 발전을 저해하는 요소가 될 수 있다. 따라서, 테스트 코드를 작성할 때는 지속 가능성을 염두에
솔직히 코드를 리뷰하고 싶지 않게 생긴 코드였음을 인정해야겠다. 내 코드가 나만을 위해 작성된 코드였다는 걸 깨달았다. 다른 사람이 쉽게 이해할 수 있도록 배려하는 코드보다는 내 능력을 과시하려는 데 중점을 둔, 이기적인 코드였다고 생각한다.
이번 게시글에서는 MySQL과 PostgreSQL을 공부하며 흥미롭게 접한 내용을 정리하고자 한다. 흔히 볼 수 있는 내용보다는 흥미로운 사실들만 모아 작성했으므로, 다소 가독성이 떨어질 수 있다.
이번 게시글에서는 MongoDB를 공부하며 흥미롭게 접한 내용을 정리하고자 한다. 흔히 볼 수 있는 내용보다는 흥미로운 사실들만 모아 작성했으므로, 다소 가독성이 떨어질 수 있다.
이번 게시글에서는 JVM을 공부하며 흥미롭게 접한 내용을 정리하고자 한다. 흔히 볼 수 있는 내용보다는 흥미로운 사실들만 모아 작성했으므로, 다소 가독성이 떨어질 수 있다.
이번 미션에서 나름 여러가지로 노력을 했지만 저번과 비슷한 결과라 실망스러웠다. 그래도 코드 리뷰가 재미있고 많은 도움이 된다는 사실을 직접 느껴보고 좋았다. 노력한다고 알아주지는 않는다. 하지만 결국 내가 할 수 있는 것은 노력하는 것뿐이다.
이번 게시글에서는 Docker를 공부하며 흥미롭게 접한 내용을 정리하고자 한다. 흔히 볼 수 있는 내용보다는 흥미로운 사실들만 모아 작성했으므로, 다소 가독성이 떨어질 수 있다.