분류 전체보기 42

Content-Type 'application/octet-stream' is not supported 원인 및 해결 방법

[2025-02-03 22:48:44.371] [http-nio-8080-exec-8] [8706cf15-ff91-49be-98c7-236cb49d64c6] ERROR [.error.GlobalExceptionHandler.handleException:25 ] - Content-Type 'application/octet-stream' is not supported[2025-02-03 22:48:44.372] [http-nio-8080-exec-8] [8706cf15-ff91-49be-98c7-236cb49d64c6] ERROR [.error.GlobalExceptionHandler.handleException:26 ] - Exception : org.springframework.web.HttpMediaT..

Springboot 2025.02.05

스프링부트 통합 테스트 코드 작성법 및 예시( TestRestTemplate , MockMVC , WebTestClient 차이점 및 선택 방법) given-when-then

당연하겠지만, 모든 코드는 작성 후 의도에 맞게 정상 작동하는지 확인하는 과정을 거쳐야만 한다.정말 간단한 코드라도 예상치 못 한 부분에서 문제가 발생할 수 있기에 이를 확인해주는 것이 정말 중요한데Swagger 나, Postman 등을 활용하여 직접 값을 입력해 확인해보는 과정을 거쳐도 되지만 가능하면 테스트 코드를 통해 확인하는 것이 효율적이다.테스트 코드를 작성하기 전, 어떠한 환경에서 어떠한 목적을 갖고 이를 작성할지 정해야만 한다.기본적으로 코드의 전체적인 테스트를 한다는 목적은 변하지 않지만, 예를 들어빠른 시간 내에 최소한의 테스트만을 위해 , 시간이 소요되더라도 완벽한 테스트를 위해 등상세한 목적에 맞춰 작성법이 달라지기에 이를 확실히 하고 작성을 시작하면 되겠다.이번 통합 테스트는,하나의..

Springboot 2025.01.28

embedded redis 의존성 및 사용법 ( 맥 환경에서 오류 나는 이유 ) springboot

테스트 코드를 작성하던 중, 하나의 Redis로 테스트 코드와 개발을 함께 진행하고 있다는 것을 뒤늦게 발견하였다.테스트 환경에서는 mysql이 아닌 h2를 이용하기에 redis 또한 분리해야 된다는 것을 잊고 있었고 현재까지 큰 문제는 없었지만, 이후 정확한 테스트를 위해 DB를 분리하기로 하였다.현재는 아래와 같은 순서로 서버에 배포되기에, 서버와 로컬 환경에서는 내부적으로 redis를 띄워 사용할 수 있으나, gitAction 환경에서는 별도로 처리해주어야했기에 어떤 환경에서든 사용할 수 있도록 스프링부트 내부에서 redis를 띄우기로 하였다.로컬 → gitAction → server 처음 떠올렸던 방법은 3가지였는데,gitAction 환경에서 테스트 전용 redis를 구동embedded redis..

Redis 2025.01.07

gitAction springboot build 실패 오류 메세지 ( index.html ) github 에서 로그로 띄워 확인 하기

github를 이용하는 개발자들이라면 gitAction이라는 단어를 들어본 적이 있을 것이고 , 아마 많은 분들이 CI/CD 등을 위해 실제 사용해본 경험 또한 있을 것이라 생각한다.gitAction은 jenkins와 같이 직접 서버를 띄워 설정 하지 않아도 간편하게 이를 활용할 수 있기에 더욱 접근성이 좋고 편리하다는 강점이 있는데, 이러한 장점이 단점으로 다가오는 경우도 분명 존재한다.현재 진행 중인 프로젝트에서는 gitAction을 이용해 ./gradlew build 명령어를 실행하고 이를 성공하면 서버에 배포하는 과정을 거치고 있는데, 이상하게 local에서는 성공하는 케이스가 gitAction에서는 실패하는 문제가 발생하였다.때문에 무엇이 문제인지 파악하기 위해 로그를 확인하려 했으나, gitA..

GitAction 2024.12.23

서버(AWS) ssh 접근 키 .pem 분실시 서버 접근 및 복구 방법

특별한 상황이 아닌 이상, 보안을 위해 서버에 접근하기 위한 .pem 을 생성하곤 한다.이러한 Key는 분실시 더이상 ssh 로 서버에 접근할 수가 없기에 많은 이들이 모든 데이터를 버리고 새롭게 서버를 생성하거나, 혹은 기존 서버의 볼륨 (디스크) 만을 추출하여 새로운 서버에 적용하는 등의 방법을 선택한다.다만, 어떠한 방식으로든 서버에 접근할 수만 있다면 이러한 과정을 거치지 않고도 간편하게 키를 복구할 수 있는데 ( 정확하게는 새로 생성하는 과정이다 )정말 다행히도 AWS 에서는 이러한 서버를 ssh 이외의 방법으로 접근할 수 있도록 지원하고 있다.  위와 같은 과정을 거쳐 서버에 접근하였다면, 기존 분실한 Key 를 삭제하고 새로운 Key로 교체하는 과정을 거치기 위해 우선 로컬 환경으로 돌아와 ..

등등 2024.12.03

Exception Handler ( 커스텀 익셉션 ) 사용 이유 및 작성 방법

코드를 작성하다보면 에러를 발견하는 것은 너무나 당연한 수순이다.이러한 에러를 발견했을 때 이를 해결하기 위해 로그를 확인하고, 문제가 되는 부분을 추적해 해결해야만 한다.하지만, 로그를 한 번이라도 확인해봤으면 알겠지만 이러한 로그는 길이가 짧지 않아 이를 읽고 파악하는데 생각보다 많은 시간이 소요되게 된다.또한, 이러한 로그는 보안상 local 환경에서만 확인할 수 있도록 하여 별도의 처리가 없는 한 API를 가져다 쓰는 프론트 쪽에서는 오류가 발생해도 어떤 것이 문제인지 파악할 수 없는 경우가 빈번히 발생하게 된다.예시를 들어보겠다.아래 코드는 Integer a 를 전달 받고, 해당 값에 +3 을 더한 값을 반환하는 코드이다. @PostMapping("/post") public int po..

Springboot 2024.11.25

Java Faker 랜덤 값 생성

테스트 코드 작성에 활용하기 위해 랜덤 값 생성과 관련된 라이브러리를 찾아보다 Java Faker 를 찾게 되었다.다만, Java Faker은 다양한 언어의 정해진 형식 , 예를 들어 주소나 이름 등의 데이터를 생성해주는 것에 강점이 있는 라이브러리이기에 테스트 코드보다는 더미 데이터를 생성하는 과정에서 더 효과적으로 사용할 수 있을 것같다.해당 라이브러리가 워낙 방대해 모든 것을 정리할 순 없지만, 자주 사용할 법한 것들을 위주로 작성하였다.사용법이 정말 직관적이라 않아 굳이 공식 문서를 보지 않고도 사용할 수는 있겠지만, 필요할 경우 공식 문서를 찾아보자.// Gradleimplementation 'com.github.javafaker:javafaker:1.0.2'최신 업데이트가 2020년을 마지막으..

Java 2024.11.09

메타데이터를 이용한 객체 값 자동 생성 ( DatabaseMetaData )

테스트 코드 작성 중 객체 내부의 값을 랜덤으로 생성해주는 과정이 반복되어 이를 해결하고자 FixtureMonkey를 사용하게 되었다.다만 FixtureMonkey를 사용하기 위해서는 엔티티 내부에 어노테이션으로 @Size 등의 제약사항을 작성해주어야 했는데, 작성 중인 프로젝트에서는 Mybatis를 사용해 코드를 작성하는 만큼 @Size와 같은 어노테이션을 오직 FixtureMonkey 만을 위해 엔티티에 작성해야할 이유가 없다고 느껴졌다.또한 테스트 코드를 작성을 위해 기존 코드에 영향을 주는 것은 좋지 않다 판단하였기에, Mybatis에서 별도의 설정 없이 랜덤한 값을 생성할 수 있도록 직접 코드를 작성하기로 하였다.코드를 작성하기 전 중요하게 생각한 포인트는 아래와 같았다.기존 코드에 영향이 가지..

기술적 고민 2024.10.08

fixtureMonkey, JakartaValidationPlugin 제약 조건 설정

공식 문서https://naver.github.io/fixture-monkey/v1-0-0-kor/docs/plugins/jakarta-validation-plugin/features/fixtureMonkey를 사용하여 실제 테스트 코드를 작성하다보면 무조건 한 번씩 발생하는 오류 중 하나가 필드별 제약 조건이다.분명 닉네임 값은 필수 값이며, 최대 20자 까지 밖에 입력이 되지 않아야하지만, fixtureMonkey는 이를 무시하고 null 값을 반환하거나 최대 자리수를 초과하는 값을 생성하곤 한다.이러한 문제는 JakartaValidationPlugin 를 사용하여 해결할 수 있다.사용 가능한 어노테이션은 해당 글 하단에 작성해두었다. 공식 문서에서 가져온 내용이니 시간이 여유롭다면 공식 문서를 참고..

Springboot 2024.10.06

fixtureMonkey 객체 값 자동 생성 / springboot 테스트 코드

공식 문서https://naver.github.io/fixture-monkey/v1-0-0-kor/테스트 코드를 작성하다보면 객체, 보통 엔티티에 무작위한 값을 넣고 이를 테스트해야하는 경우가 많다.다만 이러한 과정을 위해 시간을 소요하고 동일한 과정을 반복하는 것이 번거롭기에 이를 간단하게 해결 하기 위해 나온 것이 Fixture Monkey이다.사용법은 정말 간단하다.의존성// GradletestRuntimeOnly("org.junit.platform:junit-platform-launcher:{version}")testImplementation("com.navercorp.fixturemonkey:fixture-monkey-starter:1.0.23")// Maven com.navercorp.f..

Springboot 2024.10.04