[Java] 메서드 추출(Extract Method)로 복잡한 비즈니스 로직 개선하기
·
Spring/Spring에서 Java 활용하기
안녕하세요. 자바 스프링 백엔드 개발자 stark입니다!실무에서 개발한 코드를 보면 비즈니스 로직이 엄청 긴 경우가 있습니다. 이 경우 내가 이렇게 열심히 작성했구나! 이런 뿌듯함을 느낄 수는 있지만 '근데 이거 뭘 작성한 거지?' 이런 생각이 들기도 합니다. 만약 작성한 코드 중간에 비즈니스가 추가되어 수정해야 하거나 개발 중에 잠깐 쉬다 와서 흐름을 잃었다면 '대체 내가 위에 어떤 비즈니스 코드를 작성했지?' 이런 생각이 들면서 모든 코드를 한 줄씩 다 천천히 읽어가며 이해해야 하는 상황이 발생합니다. 심지어 실무에선 내가 작성한 코드가 아닌데 수정해야 하는 경우도 정말 많기에 코드를 작성할 때부터 이해하기 쉽게 작성할 필요성이 있습니다. 그럼 어떻게 해야 우리가 작성한 코드가 읽기 쉬워질까요? 여러..
[Spring] JPA 엔티티에 왜 기본 생성자가 필수일까?
·
Spring/JPA
안녕하세요. 글 쓰는 개발자 stark입니다! 오늘은 JPA를 사용하면서 "왜 엔티티에 기본 생성자가 필수적일까? 하는 궁금증을 해결하기 위해 공부한 내용을 정리해보려고 합니다. 어느 날, 제가 작성한 코드를 리뷰하며 피드백하던 중 엔티티 클래스가 너무 지저분하게 작성된 것이 아닌지 생각해 보게 되었습니다. 그래서 어떻게 해야 코드가 깔끔해질지 고민하며 매개변수가 없는 기본 생성자를 제거해 보았습니다.@AllArgsConstructor(access = AccessLevel.PRIVATE)@NoArgsConstructor // 이 코드를 제거했습니다.@Getter@Entity@Table(name = "member")public class MemberEntity { @Id @Genera..
[Spring] ApplicationRunner 활용하기
·
Spring/Spring 기초 지식
스프링의 ApplicationRunner를 활용해 보자.📌 서론스프링 부트(Spring Boot) 애플리케이션에서 ApplicationRunner를 사용하면 애플리케이션이 시작될 때 특정 로직을 실행할 수 있다. 특히 @Configuration 클래스 내에서 @Bean으로 등록하면 필요한 빈들을 주입받아 유연하게 사용할 수 있다. 이번 포스팅에서는 실무에서 바로 적용할 수 있는 몇 가지 예제와 함께 ApplicationRunner의 활용 방법을 자세히 알아보도록 하자. 1. ApplicationRunner란 무엇인가?ApplicationRunner는 스프링 부트 애플리케이션(서버)이 완전히 초기화된 후 실행되는 콜백 인터페이스다. 이를 구현하면 애플리케이션 시작 시점에 필요한 작업을 수행할 수 있다. ..
[Spring] 빈 스코프란?
·
Spring/Spring 기초 지식
스프링의 빈 스코프를 알아보자📌 서론스프링으로 개발을 하다 보면 스프링 빈을 정말 많이 사용하게 된다. 요즘은 "모 개발자(영한쌤)의 강의"를 잘 듣는다면 스프링 빈에 대한 개념을 정말 잘 배울 수 있다고 생각한다. 나도 영한쌤의 강의를 들어가며 성장했고 덕분에 스프링에 대해 단단하게 기초를 잡고 현업에 적응할 수 있었다. 이렇게 무럭무럭 성장하는 주니어 시절을 보내던 와중 스프링의 빈 등록 원리를 더 자세히 알고 싶다는 생각이 들어 겁도 없이 공식 가이드 자료를 살펴보기 시작했다.나는 가끔 스프링의 공식 업데이트 내용을 보고 싶어서 가이드 정보를 구경하러 들어갔기에 처음 확인한 것은 아니지만 이 정도로 자세히 살펴본 적은 없었다. 이번에 가이드를 자세히 읽으면서 계속해서 놀랐다. 왜냐하면 영어로 되어..
[Spring] 스프링 시큐리티 설정이 @Bean 기반 구성으로 바뀐 이유
·
Spring/Spring Security
Spring Security에서 WebSecurityConfigurerAdapter를 @Bean 기반 구성으로 변경한 이유📌 서론Spring Security는 스프링 서버를 구성하면서 보안을 적용하는 데 많이 사용된다. 특히, 요즘처럼 클라이언트 측 렌더링(Client-Side Rendering, CSR)을 많이 사용하는 환경에서 JWT(JSON Web Token)를 사용하여 인증 및 인가를 구현하는 애플리케이션에서 Spring Security는 매우 중요한 역할을 한다. Spring Security 5.7부터는 시큐리티의 클래스 구성 방식이 기존과는 상당히 달라졌다. 이 글에서는 그 변화를 간단히 설명하고, 새로운 보안 구성 클래스의 작성 방법을 간단히 알아보도록 하자. 1. WebSecurityCo..
[Spring] 스프링 빈 설정의 진화: XML에서 자바, 그리고 컴포넌트 기반으로
·
Spring/Spring 설정
스프링에서는 빈 등록 과정이 어떻게 발전되어 왔을까?📌 서론Spring Framework에서의 빈(bean) 설정 방식은 시간이 지나면서 점차 발전해 왔다.초기에는 XML 기반 설정이 주로 사용되었으나, 자바 기반 설정이 도입되면서 설정 관리가 더욱 간편해졌다.이후, 컴포넌트 기반 설정이 등장하면서 빈 관리의 자동화와 모듈화가 크게 개선되었다. 이번 글에서는 이러한 빈 설정 방식의 발전 과정을 예시와 함께 단계별로 알아보자. 참고로 저는 구버전의 springFramework로 개발할 일이 있었는데 xml로 빈 등록하는 과정은 생각보다 복잡했습니다. ㅠㅠ 그래서 이렇게 발전된 것이 너무나도 감사합니다. 1. XML 기반 설정초기 스프링의 빈 설정 방식Spring Framework의 초기 버전에서는 애플..
[Spring] 단위테스트 @InjectMocks 사용방법
·
Spring/테스트 코드
단위테스트에서 @InjectMocks, @Mock, @Spy에 대한 것을 알아봤다.📌 서론요즘 개발하면서 단위 테스트를 많이 작성하는데 갑작스레 궁금증이 생겼다.단위 테스트에서는 주로 @SpringBootTest가 아니라 @InjectMocks를 사용하는데 이 애노테이션의 이름만 보면 "Inject + Mocks = 목 객체들을 주입한다." 이렇게 해석되는데 이것도 객체에 Mock을 주입하는 거니까 스프링의 의존성 주입과는 뭐가 다를지 알아보고 싶었다. 이렇게 시작된 궁금증으로 직접 단위 테스트를 작성해 보면서 주로 보게 되는 @InjectMocks, @Mock, @Spy 이것들의 관계성을 알아봤다. 또한 테스트 과정에서 인터페이스는 @Mock을 사용해야 했는데 왜 @Spy는 사용할 수 없는지 이것에 ..
[Spring] 스프링 순환참조
·
Spring/Spring 기초 지식
스프링의 순환참조 상황을 알아보자📌 서론스프링으로 개발을 하다 보면 정말 가끔씩 발생하는 오류가 있다. 바로 circular references (순환참조)다.스프링 빈을 등록하면서 2가지의 클래스가 서로를 의존하면 이러한 문제가 발생한다. 서버가 실행되면 스프링 컨테이너가 빈을 등록하는 과정에서 의존성 주입을 하는데 이 과정에서 서로 의존하는 두 빈이 서로를 기다리며 무한루프에 빠지게 되는 것이다.순환참조라는 이름만 봐도 순환해서 참조한다는 의미이므로 생각해 보면 간단하게 한쪽의 참조만 끊어주면 해결될 것으로 보인다. 그러나 가끔은 서로의 로직을 사용해야 하는 경우가 있을 수도 있다. 이때는 어떻게 문제를 해결해야 할까?  이런 상황에 문제를 해결하는 여러 가지 방법이 존재한다. 1. @Lazy 어노..