spring boot31 [Spring] @RequestBody를 Controller에서 받기 전 변환하기 - Interceptor(HttpServletRequestWrapper), RequestBodyAdvice 사용하기 이번 글은 컨트롤러에서 @RequestBody에 붙은 Dto를 받기 전에 컨트롤러에 타입을 변환해서 넘겨줘야 되는 문제를 해결하기 위해 작성하게 되었습니다. 1. 문제 상황프론트에서는 타임 관련된 필드를 long 타입의 Unix Timestamp를 요청하고 응답받아 클라이언트의 타임존에 맞게 시간을 보여주고 있다.기존 DB의 데이터 타입은 Unix Timestamp으로 저장 -> 가독성을 위해 백엔드에서는 DB에 Date 타입으로 조회 및 저장, 수정을 해야 된다.위와 같은 상황에서 이미 개발 된 코드를 일일이 찾아 Unix Timestamp값으로 넘어오는 필드를 수정하는 것보다는 컨트롤러가 받기 전에 변환을 해서 처리하면 괜찮겠다는 생각을 했습니다. 그래서 첫번째 ArgumentResolver(아.. Spring Boot 2024. 5. 18. [GitHub Actions + Spring Boot + Nginx + Slack Notification] 무중단 배포 CI/CD 구축하기 우리가 로컬에서 개발하고 이제 실제 운영환경에 배포해야 할 상황이 온다면 어떻게 해야 할까? 일단 앱을 테스트하고 빌드하고 패키징 된 jar파일을 배포를 해야 된다. 이러한 과정을 파이프라인으로 관리하며 자동화할 수 있다면 얼마나 편할까 라는 생각에서 시작하여 글을 작성하게 되었습니다. 모든 코드는 GitHub에 있습니다. 1. CI/CD 란 무엇인가? CI/CD는 앱 개발 과정에서 자동화를 도입하여 고객에게 앱을 자주 제공하는 방법이다. 주요 개념은 지속적인 통합, 지속적인 전달 및 지속적인 배포입니다. CI/CD는 통합 및 테스트 단계부터 제공 및 배포에 이르기까지 앱 수명주기를 전반에 걸쳐 지속적인 자동화 및 모니터링을 합니다. 이러한 연결된 방식을 종합하면 CI/CD 파이프라인이라고도 합니다. 2.. Spring Boot 2023. 11. 22. 네이버 핀포인트란? 연관글 1. 네이버 핀포인트란? 2. 핀포인트 설치하기 네이버 핀포인트를 설치 및 도입하기 전에 APM과 핀포인트에 대해서 알아보겠습니다. APM 목차 APM이란? 애플리케이션 성능이란? APM을 사용하는 다양한 목적 Pinpoint 목차 Pinpoint란? Pinpoint의 특징 Pinpoint의 기능 Pinpoint 아키텍쳐 1.APM이란? Application Performance Management Application Performance Monitoring 애플리케이션의 성능 관리 성능-기계따위가지닌성질이나기능 고객에게 정상적으로 서비스 중인지 관리 메트릭, 이벤트, 로그 및 트랜잭션(MELT)을 모니터링 위와 같이 정의할 수 있는데 단어 그 자체로 우리가 고객에게 제공하는 애플리케이션 성능을.. Spring Boot/모니터링 2023. 4. 1. [JPA] @ManyToMany, 다대다 관계 풀기, 연관 관계 주인 Member 엔티티와 GroupTab 엔티티가 있습니다. 멤버와 모임으로 칭하겠습니다. (GroupTable인데 group이 예약어라서 table을 줄여서 엔티티를 생성하였습니다.) 1. 글 작성 이유 @ManyToMany의 문제점과 이 관계를 일대다 다대일 관계로 풀며 중간 테이블을 추가하는 과정과 그리고 멤버가 모임을 만들면 모임안에는 만든 멤버가 바로 들어가는 로직을 구현하면서 만난 에러를 해결 하게 되어 글을 쓰게 되었습니다. 멤버와 모임은 OneToMany, ManyToOne 관계입니다. 하나의 멤버는 여러 그룹을 생성할 수 있습니다. 그러면 당연히 연관관계의 주인은 FK를 가지고 있는 그룹이 됩니다. @Getter @Entity @NoArgsConstructor(access = AccessLe.. JPA 2022. 8. 19. [Spring Security] @AuthenticationPrincipal 어노테이션 사용하기 https://techjisu.tistory.com/97 저번글과 이어지는 내용입니다. 일반로그인 테스트까지는 성공하였는데 뷰에서 OAuth2로그인을 하여서 모임을 만들려고 하니 PrincipalDetails를 member로 캐스트 할수없다는 에러가나면서안되었습니다. 이제 진짜 어떻게 해야되나..하... 그래서 security를 처음부터 공부하자는 마음으로 전체코드를 처음부터 다시 쭉 보고 있었는데 저번글의 마지막에 썼던내용이 생각났습니다. 스프링 시큐리티는 SecurityContext에 인증된 Authentication 객체를 넣어두고 현재 스레드 내에서 공유되도록 관리하고 있는데요. 그래서 스프링 시큐리티가 가지고 있는 UsernamePasswordAuthenticationToken을 이용하여 어댑터.. Spring Boot/Spring Security 2022. 8. 17. [Batch] Execution 데이터 공유 스프링 배치에서는 데이터를 공유할 수 있습니다. BATCH_JOB_EXECUTION Job이 실행되는 동안 시작/종료 시간, job 상태 등을 관리 BATCH_JOB_EXECUTION_CONTEXT Job이 실행되며 공유해야할 데이터를 직렬 화해 저장 BATCH_STEP_EXECUTION Step이 실행되는 동안 필요한 데이터 또는 실행된 결과 저장 BATCH_STEP_EXECUTION_CONTEXT Step이 실행되며 공유해야할 데이터를 직렬 화해 저장 저번 글에서 적은 내용입니다. 위와같이 Job과 Step 에는 EXECUTION과 EXECUTION_CONTEXT 가 있습니다. 두 개가 데이터를 저장하는 역할을 합니다. 여기서 BATCH_JOB_EXECUTION_CONTEXT와 BATCH_STEP_E.. Spring Boot/Batch 2022. 7. 28. [Batch] 메타데이터, 메타 테이블 이전글에서 간단하게 Spring Batch가 수행되게 구현해보았습니다. JobRepositoy db또는 메모리에 스프링배치가 실행할 수 있도록 배치 메타데이터로 관리하는 클래스입니다. 메타데이터는 나중에 더 자세히 알아보겠습니다. 여기에 이어지는 글입니다. 메타 데이터란, 데이터를 설명하는 데이터라고 보시면 됩니다. 위키피디아보다 나무위키가 더 설명이 잘되어있어 나무위키 링크를 첨부합니다 Spring Batch의 메타 데이터는 다음과 같은 내용들을 담고 있습니다. 이전에 실행한 Job이 어떤 것들이 있는지 최근 실패한 Batch Parameter가 어떤것들이 있고, 성공한 Job은 어떤것들이 있는지 다시 실행한다면 어디서 부터 시작하면 될지 어떤 Job에 어떤 Step들이 있었고, Step들 중 성공한 .. Spring Boot/Batch 2022. 7. 28. [Batch] 스프링 배치 시작하기 배치란? 배치작업은, 데이터를 실시간으로 처리하는게 아니라, 일괄적으로 모아서 처리하는 작업을 의미한다. 가령, 하루동안 쌓인 데이터를 배치작업을 통해 특정 시간에 한꺼번에 처리하는 경우가 이에 해당한다. 은행의 정산작업과 같은 업무에서 이런 일괄처리를 수행하게 되며 사용자에게 빠른 응답이 필요하지 않은 서비스에 적용할 수 있다. 특정 시간이후에는 자원을 거의 소비하지 않는 것이 특징이다. 큰 단위의 작업을 일괄 처리 대부분 처리량이 많고 비 실시간성 처리에 사용 - 대용량 데이터 계산, 정산, 통계, 데이터베이스, 변환 등 컴퓨터 자원을 최대로 활용 - 컴퓨터 자원 사용이 낮은 시간대에 배치를 처리하거나 - 배치만 처리하기 위해 사용자가 사용하지 않는 또 다른 컴퓨터 자원을 사용 사용자 상호 작용으로 .. Spring Boot/Batch 2022. 7. 28. [JUnit5] 마이그레이션 기본적으로 스프링 부트로 프로젝트를 만들면 spring boot-starter-test 에 JUnit5 가 포함되어 있고 junit-vintage-engine은 빠져있습니다. 지금은 공부를 하고 있으니깐 추가해줍니다. // https://mvnrepository.com/artifact/org.junit.vintage/junit-vintage-engine testImplementation group: 'org.junit.vintage', name: 'junit-vintage-engine' 이러면 jupiter가 아닌 그냥 junit @Test 어노테이션이 생깁니다. package me.jisu.javatest; import org.junit.Before; import org.junit.Test; publi.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] JUnit 5: 확장 모델 JUnit 4의 확장 모델은 @RunWith(Runner), TestRule, MethodRule 이 있는데 JUnit 5의 확장 모델은 단 하나, Extension 이다. 등록방법에는 3가지가 있다. 등록 방법 선언적인 등록 @ExtendWith 프로그래밍 등록 @RegisterExtension 자동 등록 자바 ServiceLoader 이용 @ExtendWith package me.jisu.javatest; import jdk.jfr.Threshold; import org.junit.jupiter.api.extension.AfterTestExecutionCallback; import org.junit.jupiter.api.extension.BeforeTestExecutionCallback; import.. Spring Boot/JUnit5 2022. 7. 22. [Junit5] junit-platform.properties 위와 같이 test/resources/ 밑의 파일을 만들어 주면된다. junit.jupiter.testinstance.lifecycle.default = per_class junit.jupiter.conditions.deactivate = org.junit.*DisabledCondition junit.jupiter.displayname.generator.default = \ org.junit.jupiter.api.DisplayNameGenerator$ReplaceUnderscores junit.jupiter.testinstance.lifecycle.default = per_class 인스턴스를 하나로 공유하겠다. junit.jupiter.conditions.deactivate = org.junit.*Di.. Spring Boot/JUnit5 2022. 7. 22. [JUnit5] 테스트 순서 테스트의 순서는 정해져 있지 않습니다. 하지만 작성한 순서대로 결과 값이 뜨기 떄문에 순서가 적은 순서대로 나오는것처럼 보이는데 이것을 믿고 작성한 순서대로 테스트가 실행된다! 이렇게 믿으면 안됩니다. 왜냐하면 저번글에 작성했던 테스트 클래스의 인스턴스는 기본전략이 테스트메소드마다 생성하기때문에 그런데요. 이것의 이유가 의존성을 낮추고 다른 테스트의 영향을 안 미치게 하기위해서, 즉 각각의 테스트 메소드는 독립적으로 실행되어야 테스트가 잘되는지 알수있기 때문입니다. 하지만 내가 원하는 순서대로 테스트를 작성하고 싶을 때도 있습니다. 시라니오 테스트, 회원가입을 하고 로그인을하고 글을작성하고 닉네임을 변경하고 등등 유스케이스를 테스트하는경우 이 모든 것들이 스테이트 풀하고 상태정보가 유지되게 데이터를 공유.. Spring Boot/JUnit5 2022. 7. 22. 이전 1 2 3 다음