BackEnd/Spring

BackEnd/Spring

[Spring / Java] @PostConstruct, Static Block, Instance Block 초기화 시점 차이

자바 스프링 기술로 개발을 해봤다면 @PostConstruct 과 Static block, Instance block 을 사용해본 경험이 있을 것이다. 이는 객체 초기화를 위한 콜백(callback) 함수를 선언하기 위한 기술이다. 콜백(Callback) 함수란? 콜백 함수는 다음과 같은 의미를 가진다. 다른 함수 인자로서 사용되는 함수 어떠한 이벤트에 의해 호출되는 함수 이 글에서의 설명은 2번째 의미인 '어떠한 이벤트에 의해 호출되는 함수' 에 가깝다. 본인또한 이 3가지를 종종 다루긴 했지만, @PostConstruct 와 Static block 중 어떤 것을 사용할 지 고민하던 중 이 두 가지의 초기화 시점 차이에 대해 정확히 인지하지 못한 채로 사용하고 있었다는 것을 깨닫게 되었다. 때문에 이를..

BackEnd/Spring

[Spring] 의존성 주입 시, 같은 Type의 빈이 2개 이상일 경우

우리는 스프링을 사용할 때, 생성자 주입을 통해 의존성을 주입하곤 한다. 그런데 의존성을 주입하는 경우, 2개의 의존성 중 하나를 주입해야하는 경우가 있을 것이다. public interface DiscountPolicy {} @Component public class FixDiscountPolicy implements DiscountPolicy {} @Component public class RateDiscountPolicy implements DiscountPolicy {} @Autowired private DiscountPolicy discountPolicy 만약 위와 같이 FixDiscountPolicy와 RateDiscountPolicy가 스프링 빈으로 존재할 때, 다음과 같이 @Autowire..

BackEnd/Spring

[Spring] 컴포넌트 스캔(ComponentScan)

이전 글을 통해 @Configuration 애노테이션을 통한 스프링 빈 등록에 대해 알아보았다. [Spring] @Configuration과 싱글톤 (with. CGLIB) @Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean p pgmjun.tistory.com 하지만 꼭 빈을 등록할 때, @Configur..

BackEnd/Spring

[Spring] @Configuration과 싱글톤 (with. CGLIB)

@Configuration public class AppConfig { @Bean public MemberService memberService() { return new MemberServiceImpl(memberRepository()); } @Bean public OrderService orderService() { return new OrderServiceImpl(memberRepository(), discountPolicy()); } @Bean public MemberRepository memberRepository() { return new MemoryMemberRepository(); } } 해당 코드는 OrderService, MemberService, MemberRepository 빈(Be..

BackEnd/Spring

[SpringBoot] 멀티모듈 환경 JPA 접근 오류 해결

🚨 오류 발생 지점 API모듈에서 Domain모듈을 implementation하여 사용하는 상황에서 API모듈에서 Domain모듈의 의존성에 추가된 JPA 사용 시, 아래와 같은 오류가 발생했다. Cannot access 'org.springframework.data.jpa.repository.JpaRepository' which is a supertype of 'com.th.plu.domain.domain.member.repository.MemberRepository'. Check your module classpath for missing or conflicting dependencies 현재 의존성은 다음과 같이 연결된 상태이다. API모듈 -> Domain 모듈 implementation, Dom..

BackEnd/Spring

[Java/SpringBoot] 스프링부트 서버 배포 시, 한국 시간(KTC)으로 배포하는 가장 확실한 방법

스프링부트 서버 한국 시간(KTC)으로 배포하는 방법 문제 상황 🔥 라이온하트의 챌린지 기능요소 중, 출석체크 기능이 존재하기 때문에 DB에 출석 시간을 저장하는 로직이 존재한다. 때문에 EC2 인스턴스에서 timedatectl 설정과 localtime 설정(아래)을 통해 인스턴스의 시간을 한국 시간으로 맞춰놓았다. # ubuntu22.04 localtime 설정 sudo rm /etc/localtime sudo ln -s /usr/share/zoneinfo/Asia/Seoul /etc/localtime 이렇게 설정하니 Database에 시간 값을 입력할 때, 한국 기준 시간이 제대로 입력되는 것을 확인할 수 있었다. 하지만 출석 체크 시간 필드가 존재하는 레코드를 자바의 엔티티 객체와 매핑하는 과정에서..

BackEnd/Spring

[SpringBoot] LogBack을 통한 로깅 설정

스프링부트 LogBack 🔥 문제 의식 로그 관리를 효율적으로 해야겠다는 생각이 든 건 라이온하트 서버를 개발하는 과정에서였다. 서버 로직을 개발할 땐 크게 문제될 상황이 없었지만, 클라이언트 측에서 API를 연결하는 과정에서 로그를 확인해야하는 경우가 많이 발생했는데 로그 파일 하나에 모든 로그를 전부 기록하여 관리하다보니 1. 원하는 정보를 찾기 굉장히 어려웠고 2. 정리되지 않은 로그는 이해하기 굉장히 어려웠다. 이러한 이유에 의해 로그를 체계적으로, 그리고 효율적으로 관리하기 위한 방법을 생각했고 서버팀원인 혁준이형의 의견으로 LogBack이라는 것을 알게 되어 학습 및 적용해보았다. 그리고 미래의 나를 위해 그 과정을 간단히 기록해보고자 한다. 📝 로깅을 하는 이유 로깅이란 시스템이 동작할 때 ..

BackEnd/Spring

[SpringBoot] 스프링부트 예외 발생 시, Slack으로 알림 보내기 (feat. Slack WebHooks)

스프링부트 with Slack슬랙 WebHooks 사용하여 에러 로깅해보기 서버를 개발하다보면 미처 처리하지 못한 알 수 없는 에러가 발생하는 경우가 종종 발생한다. 이런 경우 로컬 환경이라면 금방 디버깅이 가능하지만, 서버를 배포해놓은 상황이라면 서버의 로그 파일을 통해 발생한 예외를 확인하거나, 모니터링 기능을 추가하여 해결하는 등 다양한 방법을 통해 해결해야한다. 이와 마찬가지로 슬랙을 통해서도 문제에 대한 해결책을 던져볼 수 있다. 예외가 발생하면 슬랙의 채널에 에러 로그가 전달되어 환경에 구분없이 빠른 조치와 해결이 가능하다! 꼭 한번 사용해보는 것을 추천한다. 패키지 구조 플로우 🌊SlackTestController에서 요청을 받아 Exception을 발생시킨다.ControllerExcepti..

PgmJUN
'BackEnd/Spring' 카테고리의 글 목록