▣ Framework

    [Selenium] 페이지 로딩 될 때까지 기다리기 [WebDriverWait, Java 셀레늄 페이지 로딩 대기하기]

    - 페이지 로딩 될 때까지 기다리기동적 페이지를 스크랩핑 할 때는 페이지 로딩을 기다려야 할 때가 있다.가장 간단한 방법으로는 Thread.sleep(1000);을 사용하면 된다.Thread.sleep(1000); // milliseconds, 1초 대기 이 구문은 Java의 Thread.sleep 메서드를 사용하여 현재 스레드를 일정 시간 동안 일시적으로 중지한다.그러나 이 방법은 정확한 대기 시간을 보장하지 않을 수 있으며, 대기 시간이 고정되어 있기 때문에 페이지 로드가 끝나는 시점을 고려하지 않는다.Selenium에서 페이지 로드를 기다리기 위해서는 WebDriverWait를 사용하는 것이 좋다.- WebDriverWait import java.time.Duration;import org.open..

    [Spring] @Autowired 옵션 처리 방법 [주입할 스프링 빈이 없어도 동작해야 할 때]

    - 주입할 스프링 빈이 없어도 동작해야 할 때 주입할 스프링 빈이 없어도 동작해야 할 때가 있다. 자동 주입 대상이 없는 상태로 @Autowired만 사용하면 required의 기본값이 true라 오류가 발생한다. - @Autowired 옵션 처리 방법 @Autowired(required=false) : 자동 주입할 대상이 없으면 수정자 메서드 자체가 호출 안됨 @Nullable : 자동 주입할 대상이 없으면 null이 입력됨 Optional : 자동 주입할 대상이 없으면 Optional.empty 가 입력됨 //호출 안됨 @Autowired(required = false) public void setNoBean1(Member member) { System.out.println("setNoBean1 = ..

    [Spring] 싱글톤, 무상태(stateless)로 설계하라! [Singleton 패턴 주의사항]

    - 싱글톤, 무상태(stateless)로 설계하라! 객체 인스턴스를 하나만 생성해서 공유하는 싱글톤 방식은 여러 클라이언트가 하나의 같은 객체 인스턴스를 공유하기 때문에 싱글톤 객체는 상태를 유지(stateful)하게 설계하면 안된다. - 잘못된 설계 : 상태가 유지되는 경우 - StateFulService.java public class StateFulService { private int price; // 상태를 유지하는 필드 public void order(String name, int price) { System.out.println("name = " + name + " price = " + price); this.price = price; // 여기가 문제! } public int getPric..

    [Spring] Object 타입으로 Bean을 조회하면 어떻게 될까? [스프링 빈 조회 시 상속 관계]

    - Object 타입으로 Bean을 조회하면 어떻게 될까? 스프링에서는 부모 타입으로 빈을 조회하면, 자식 타입도 함께 조회한다. 즉, 모든 자바 객체의 최고 부모인 Object 타입으로 빈을 조회하면 모든 스프링 빈을 조회한다. - ApplicationContextExtendsFindTest.java import hello.core.discount.DiscountPolicy; import hello.core.discount.FixDiscountPolicy; import hello.core.discount.RateDiscountPolicy; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.spri..

    [Spring] 컨테이너에 등록된 스프링 Bean 조회하기 [getBean() 메서드를 활용한 스프링 빈 조회]

    - 컨테이너에 등록된 스프링 Bean 조회하기 AnnotationConfigApplicationContext ac = new AnnotationConfigApplicationContext(AppConfig.class); // 스프링 컨테이너에서 스프링 빈을 찾는 가장 기본적인 조회 방법 ac.getBean("memberService", MemberService.class); // 타입만으로도 빈 조회가 가능하다. ac.getBean(MemberService.class); // 스프링에 등록된 모든 빈 이름을 조회한다. ac.getBeanDefinitionNames(); // 해당 타입의 모든 빈을 조회한다. Map 형태로 반환 ac.getBeansOfType(); - ApplicationContextIn..