@Where Deprecated되고 새로 쓰이는 @SQLRestriction
·
Spring/JPA
Soft Delete 방식으로 데이터를 관리중이던 나는 @Where 메서드가 Deprecated된 것을 발견하였다...!이제 뭘 써야 고민하던 중에 Cursor AI 툴로 리팩터링을 참고하며 진행하던중 @SQLRestriction 이라는 어노테이션을 발견할 수 있었다.보자마자 이건 누가봐도 동일한 방식으로 사용하 수 있겠다 싶어서 내부 소스코드에 대한 설명을 읽어보았다. Specifies a restriction written in native SQL to add to the generated SQL for entities or collections. For example, @SQLRestriction could be used to hide entity instances which have been so..
레이어드 아키텍처의 문제점과 해결방안
·
Spring/프로젝트 리팩토링 회고록
2024.11.30 - [Spring/프로젝트 리팩토링 회고록] - 레이어 아키텍처 구조 개선하기모든 테스트가  h2를 필요로 한다?설계가 잘못되었을 수 있다. 테스트는 외부 객체의 주입을 받지 않은 상태에서도 동작할 수 있는 유닛 테스트가 필요한 경우가 있기 때문이다.또한 작성한 테스트가 실제로 테스트가 필요한 본질적인 책임을 갖고있는 객체가 아닐 수 있다. 레이어드 아키텍처의 구조레이어드 아키텍처는 유사한 기능들을 하나의 계층으로 묶어서 각각의 책임을 지게하는 구조이다.가장 쉽고 눈으로 봤을때 한 눈에 보인다는 장점이 있어 가장 많이 쓰이기도 한다. 하지만 이 아키텍처는 여러가지 단점이 있다.아래 이유를 적어놨지만 한 마디로 말해서 절차지향적인 코드를 작성하게된다. 우리는 자바를 객체지향적인 특징이 ..
테스트 코드의 기본 이론
·
Spring
테스트 코드를 작성하게 된 계기Swagger로 테스트를 해오던 나에게 더 이상 Swagger만으로는 테스트에 한계가 있다는 것을 깨달았다.그 이유는 이것저것 여러가지가 있었지만 요약해서 세가지이다.첫 째, 모든 상황은 가정하고 코드를 작성했는지 별도의 문서가 필요했다. 어떤 상황에 어떤 예외가 발생해야하는지 상황에 대한 제어를 내가 최대한 꼼꼼하게 해야하지만 스웨거만으로는 그 부분을 체크하기 어려웠다.둘 째, 어떤 메서드가 어떤 용도로 쓰이는지 별도의 문서가 필요했다. 테스트 코드를 작성함으로써 내가 의도하고 작성한 부분들을 바로바로 찾아가기가 어려웠다.셋 째, 내 프로젝트가 유연하고 확장에 용이한 코드인지 확인하기 어려웠다. 레이어드 아키텍처의 고질적인 문제인 의존성 문제를 해결해야 테스트 코드 작업이..
[Spring/ 환경변수 설정] 로컬에서 IntelliJ 환경변수 설정하기
·
Spring
로컬에서 사용하더라도 내 환경변수들을 안전하게 사용하고 싶을 때가 있다. 어찌됐든 yml에 내 중요한 정보들을 적게되면 실수로 github에 내 yml을 그대로 push하는 실수를 범할 수 있기 때문에 차라리 로컬의 환경변수에 적용항 안전하게 사용하는 것이 더 안전할것 같다는 내 주관적인 생각이다.  설정하는법Run - Edit Configurations 클릭 - Enviroment variable에 원하는 변수를 등록해주면된다.하지만 초기 화면에 보이지 않는경우에는 아래 그림처럼 직접 클릭해서 해당 기능을 추가해준다.
[Spring- LogBack] LogBack과 Log4j2 중 어떤걸 사용할까?
·
Spring
로깅의 필요성로깅이란, 시스템의 상태 및 동작 정보를 시간 경과에 따라 기록하는 것을 의미한다.로깅을 통해 개발자는 개발 과정 혹은 개발 후에 발생할 수 있는 애플리케이션의 문제를 진단하고 추적할 수 있다.로깅 과정에서 결정해야 할 사항 중 하나는 로그 수준을 어느정도로 제한하는가? 이다. 애플리케이션의 세부 내용까지 로깅하면 상세한 로그들이 지나치게 많이 출력되어 가독성도 떨어지고 처리도 어렵다.로깅 메시지는 대부분 파일 혹은 콘솔에 기록되기 대문에 I/O의 메모리를 잡아먹는다. 이러한 부분을 고려하여 수준을 정해야 한다.스프링에서의 로깅스프링의 강력한 장점중 하나인 PSA(Portable Service Abstraction)을 사용하여 JCL(Jakarta Commons Logging)을 사용해서 로..
[Lombok] Builder란? toBuilder를 사용해서 DB 내용 수정하기
·
Spring
toBuilder를 사용하기 전까지는 따로 method를 사용해서 기존 내용을 수정하고 Dirth Checking을 통해 DB내용을 수정하는 방식을 사용하였다.하지만 이 방식은 Setter메서드를 사용하는 방식이기 때문에 누군가 이 setter를 사용해서 값을 변경할 수도 있고, 안전하다고 느껴지지 않았다. 그래서 다른 방식을 찾아보고 @Builder에서 toBuilder를 속성으로 설정하면 해당 엔티티의 값을 편하게 수정 할 수 있다는 것을 찾아냈다! 우선 Builder 어노테이션에 대한 개념과 특징을 살펴보고 toBuilder 사용 방법을 알아보자.  Builder란?우선 우리가 자주 사용하는 보일러 플레이트 메서드(직접 코드를 작성하지 않아도 대신 작성해주는 메서드)인 Getter,Setter,Co..