Development

Study/이펙티브 자바

[Effective Java 3E] 생성자 대신 정적 팩터리 메서드를 고려하라

💥 개요 보통 개발시 public 생성자를 자주 사용하는데, 이펙티브 자바에서 조슈아 형님이 정적 팩터리 메서드를 사용하면 아주 행복한 상황들이 일어난다고 합니다. 아래에서 계속 얘기해 볼 텐데 정적 팩터리 메서드는 그 클래스의 인스턴스를 반환하는 생성자와 동일한 역할을 하는 단순 static method를 제공하는 것을 정적 팩터리 메서드라고 합니다. ❤️ 장점 1. 이름을 가질 수 있다. 위와 같은 단순한 생성자를 생각해보면, 생성자를 넘기는 매개변수와 생성자 자체만으로 반환되는 객체의 특성을 정확하게 설명하지 못합니다. 하지만 정적 팩터리는 이름만 잘 지어주게 된다면 특성을 제대로 설명이 가능합니다. 클이언트는 컴퓨터를 얻고 싶다면 compuer를 얻는 정적 팩터리 메서드를 호출하면 되고, 책을 얻..

Error/트러블슈팅

[Trouble Shooting - CORS] Spring Boot CORS 와일드카드(*) 설정방법

💥 개요 사이드 프로젝트 진행 시 항상 문제가 되던건, CORS였습니다. CORS란 CORS(Cross-Origin Resource Sharing)는 클라이언트(웹 브라우저)에 의해 제어되는 HTTP 기반 보안 메커니즘입니다. 이를 통해 서비스(API)는 클라이언트가 요청할 수 있는 오리진 이외에 요청할 수 없는 오리진도 표시할 수 있습니다. 한 오리진에서 로드한 웹사이트(HTML 문서 또는 JS 스크립트)가 다른 오리진의 리소스와 상호 작용할 수 없게하는 SOP(Same-origin policy)와 함께 설계되었습니다. CORS는 일부 크로스 오리진 요청을 명시적으로 허용하고 다른 요청은 거부하는데 사용됩니다. CORS는 기본적으로 웹 브라우저에서 구현되지만 API 클라이언트에서도 옵션으로 사용할 수 ..

Error/트러블슈팅

[Trouble Shooting - Transaction과 DB Session] DB 특정 테이블 (row) 업데이트 안되는 문제

💥 개요 각자 개발된 프로젝트를 병합(리펙토링)하는 과정에서 요구사항에 포함된 신규 API를 구현하는 도중, DB 특정 테이블의 Row에서 Update가 Excution time만 증가하고 update는 실행되지 문제가 발생함 ❓ 문제 원인 레거시 프로젝트 어플레케이션 로직에서 트랜잭션을 실행하고, update를 하는데 성공시 1이 return되고 실패시 -1이 반환되는 코드 개발 중간 테스트하던 도중 아래 코드와 같이 문제가 발생함. public class JdbcActorDao implements ActorDao { private JdbcTemplate jdbcTemplate; public void setDataSource(DataSource dataSource) { this.jdbcTemplate ..

Error/개발환경

SourceTree 무반응, 안켜짐, 실행안될때

C\user\{user}\AppData\Local\Atlassian\SourceTree.exe_url~~~~~\3.4.7.0(버전) 폴더 아래에 Composition.cache를 삭제 후 소스트리 실행시 정상 동작

Error/트러블슈팅

[Trouble Shooting - RequestBody와 생성자] 스프링부트 LocalDateTime JsonFormat 안됨

개발 중 있었던 일, 통합 API 테스트 코드 작성 중 특정 도메인의 생성 테스트 코드가 동작하지 않고 아래와 같이 오류가 발생했다. com.fasterxml.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `java.time.LocalDateTime` from String "2023-05-19 16:51:32230519 16:51:32": Failed to deserialize java.time.LocalDateTime: (java.time.format.DateTimeParseException) Text '2023-05-19 16:51:32230519 16:51:32' could not be parsed at i..

Languege/Java & Spring

RestAssured session 사용시 default value 저장

RestAssured로 api 테스트시 로그인 session을 매번 Cookie를 요청마다 실어주어야 하는지, 다른 방법은 없는지 궁금증이 생겼다. 그렇게 RestAssured 공식 문서와 구글링을 통해 알아낸 방법은 아래와 같다. .cookie("JSESSIONID", sessionId) 🎈 RestAssured 세션 기본값 설정하는 방법 방법은 아주 간단하다. RestAssured.sessionId = 설정할 세션id 와 같이 지정하면 끝이다. var response = 로그인요청(request); RestAssured.sessionId = response.cookies().get("JSESSIONID"); ✨ RestAssured JWT(Oauth2) 기본값 설정하는 방법 현재 프로젝트는 폐쇄망에서..

Languege/Java & Spring

Junit5 상속관계에서 BeforeEach 순서

최근 TDD와 테스트 코드에 사랑에 빠져 사내 프로젝트에 테스트 커버리지를 높이고 있는데 Api 테스트를 할때 보통 로그인이 전제가 되어야 하는데, 도메인 별 테스트를 만들때마다 계속 반복되는 로그인을 하는 로직을 넣는 바보같은 행동을 하고 싶지 않아서 ApiTest를 만들어두고 이곳에 로그인 로직을 두고 Domain 별 테스트에서는 API만 테스트하려 하는데 이때 beforeEach의 순서를 정해야 하는 일이 발생했습니다. Junit5 상속관계에서 BeforeEach 순서는 어떻게 될까? 아래 코드에서 보면 ApiTest의 setUp이 먼저 실행되는걸 확인할 수 있습니다. public class DomainTest extends ApiTest { @BeforeEach void setUp1() { Sys..

Error/트러블슈팅

[Trouble Shooting] Spring boot 중복 파일 업로드시 file not found에러 발생

오늘은 프로젝트를 진행하며 겪었던 파일 업로드 관련 에러를 말해보려고 한다. 프론트단에서 아래와 같은 여러개의 파일을 업로드를 구현했을때, 백엔드에서 동일한 파일 저장시 file not found에러가 발생하는 문제가 생겼다. (왜 저장이 안되는거지?) 파일1 파일2 파일3 파일4 const fileInput = document.querySelector('input[name="uploadFile"]'); const uploadButton = document.querySelector('#uploadButton'); uploadButton.addEventListener('click', function() { const files = fileInput.files; const formData = new Form..

mntdev
'분류 전체보기' 카테고리의 글 목록 (8 Page)