백엔드 7

유비쿼터스 언어(보편 언어)의 중요성을 느끼며

유비쿼터스 언어(Ubiquitous Language, 보편 언어)는 도메인 주도 설계에서 중요한 개념으로,  프로젝트의 모든 이해관계자들이 공통으로 사용하는 언어를 의미한다. 도메인에서 사용하는 용어를 코드에 반영하지 않으면 코드의 의미를 해석해야하는 부담을 준다. 개발 도메인이 명확한 직장에서 근무하며 여러 프로젝트를 진행하다 보니, 유비쿼터스 언어의 중요성을 점점 더 깊이 체감하게 되었다. 디자이너, 분석가, PM 등 다양한 분야의 동료들과 소통하고 협업하는 과정에서, 이 보편 언어의 필요성이 더욱 두드러졌다. 프로젝트를 진행하면서 유비쿼터스 원어의 중요성을 깨닫게 된 주요 이유들은 다음과 같다. 1. 의사소통의 오해와 실수'혼잡도' 와 '밀집도' 처럼 비슷하지만 다른 의미를 가진 용어들로 인해 오해..

[자동매매, SpringBoot] 3. 매도, 매수

2024.05.11 - [프로젝트/SpringBoot 업비트 자동매매 프로젝트] - [자동매매, SpringBoot] 2. 계좌 조회 이전 글에서 계좌 조회 기능을 만들었고, 매도 매수 기능을 추가 할 것이다. 업비트 개발자센터에서 API Reference를 보면  https://api.upbit.com/v1/orders 로 POST 요청을 보내 매도, 매수요청을 할 수 있고 Request Parameter 중 side 파라미터로 매수/매도 를 구분 한다. 나는 직관적으로 매수 / 매도 함수를 나눠서 만들것이다. 1. Util Class매수 / 매도 요청을 보낼 때 필요한 Jwt Token에는 클레임에 query_hash, query_hash_alg 를 포함해야 한다. 기존에 만든 Util Class에 ..

[Spring] Spring Security 5.7.0 이상 Config, desprecated

Spring Boot 3.0 이상 부터는 Spring Security 6.0 이상 버전이 적용된다. 이 전 버전들고 동일하게 SecurityConfig를 작성하고 나니 desprecated 된 (더 이상 사용하지 않는)함수들이 많아서 기록 하고자 함 extends WebSecurtyConfigurerAdapter -> SecurityFilterChain @Bean 등록 람다식 사용 EnableGlobalMethodSecurity -> EnableMethodSecurity authorizeRequests -> authorizeHttpRequests access("hasAnyRole('ROLE_ADMIN', 'ROLE_MANAGER')") -> .hasAnyRole("ADMIN", "MANAGER") any..

[JPA] 순환 참조, API 호출 시 순환 참조가 발생하는 이유

JPA의 순환 참조란 객체 간의 상호 참조가 무한 반복되는 경우를 말한다. 객체 그래프에서 한 객체가 다른 객체를 참조하고, 그 다른 객체가 다시 처음 객체를 참조하는 상황이고 스택 오버 플로우가 발생할 수 있다. 사이드 프로젝트 진행 하던 도중 Service 단 개발을 끝내고 API를 만들다가 스택 오버 플로우가 발생 하였다. 순환 참조를 미쳐 신경쓰지 못하고 있었음.. 순환 참조를 잘 예방해야겠다고 다시 한 번 생각함 Service를 테스트 할 때 까지만 해도 발생하지 않았던 문제인데 REST API를 구현하면서 문제가 발생한 이유는 ResponseBody를 구현할 시 Object 형태의 값을 직렬화를 이용해 JSON 형태로 변환하는데 이 때 순환 참조가 발생하기 때문이다. public class O..

프로그래밍/JPA 2024.03.01

[MyBatis] 우연히 알게된 마이바티스의 캐시 Cache

MyBatis를 사용하여 만든 프로젝트를 Jdbc Template으로 변경하고 있는 와중에 잘 성공하던 테스트 하나가 실패했다. 대충 시나리오를 설명하자면 MemberService.findById 는 1. MemberRepository.findById 를 호출하여 Member를 찾고 2. ReserveRepository.findByMemberId 를 호출 하여 List를 찾고 3. Member의 List를 채워서 반환해준다. 그런데 테스트에서 MemberService.findById 를 호출 후, 다른 함수에서 MemberRepository.findById 를 호출하고 Member.getReserve로 List를 조회하고 있었다. 당연히 MemberRepository.findById는 Member에 Li..

[IntelliJ] import 자동 정리 설정

단축기로 사용하지 않는 import를 정리하는 방법도 있지만, 파일마다 정리를 해주어야 하고 (프로젝트 전체 정리가 안됨) 깜빡하고 정리를 안하고 넘어가는 경우가 많아서 import 자동 정리 설정을 해놓는 편이다. 설정 방법은 : Settings -> Editor -> General -> Auto Import -> Optimize imports on the fly (import 문 즉시 최적화) 적용 버튼을 눌러서 적용을 하게 되면 import 문들이 바로 삭제가 안되어서 잘 적용 안되었다고 생각할 수 있는데 문서를 편집하는 순간 자동으로 사용하지 않는 import 들을 정리 해준다.

[Spring] 빈 생명주기(Bean LifeCycle) 콜백 개념 및 방식

애플리케이션 시작시점 및 종료시점에 작업이 필요한 경우가 있습니다. ex) 데이터베이스 커넥션 풀이나, 네트워크 소켓처럼 애플리케이션 시작 시점에 필요한 연결 ex) 종료 시점에 연결 종료 스프링을 통해 초기화 작업 및 종료작업을 어떻게 진행하는지 알아보겠습니다. 스프링 빈의 생명주기 스프링 빈은 다음과 같은 생명주기를 가집니다. 객체생성 -> 의존관계 주입 스프링 빈은 객체를 생성하고 의존관계 주입이 다 끝난 다음에야 필요한 데이터를 사용할 수 있는 준비가 완료 되는데 개발자가 의존관계 주입이 끝난 시점을 어떻게 알 수 있을까요? 스프링 빈의 이벤트 라이프 사이클 스프링 컨테이너 생성 -> 스프링 빈 생성 -> 의존관계 주입 -> 초기화 콜백 -> 사용 -> 소멸전 콜백 -> 스프링 종료 스프링은 의존..