먼저 테스트는 버거킹 사이트를 사용했습니다. 필요한 정보는 메뉴의 이름, 메뉴 이미지 주소입니다. 1. build.gradle에 의존성 추가 https://mvnrepository.com/에서 selenium-java를 찾아서 받으셔도 됩니다. implementation group: 'org.seleniumhq.selenium', name: 'selenium-java', version: '4.8.0' 2. 크롬 드라이버 다운로드 사용할 브라우저에 맞춰 받으면 됩니다. 아래 링크에서 확인하실 수 있습니다. https://www.selenium.dev/downloads/ 저는 크롬을 사용할 예정이라, 크롬 기준으로 진행하겠습니다. 먼저 크롬의 버전을 확인합니다. 아래 링크에서 크롬 버전에 맞는 드라이버를 다..
토이 프로젝트를 진행하던 중, 동시성 이슈를 해결해야 할 필요가 생겼습니다. 이 내용을 문서화 할 필요도 있어 해당 내용을 정리한 내용을 블로그에다가도 옮겨 보았습니다. Objective 현재 우리 서비스에서는 하나의 책에 2개 이상의 스레드가 접근해 주문을 시도하면 데이터의 정합성이 깨지는 문제가 있음. 우리 서비스와 같은 다중 사용자 환경에서 둘 이상의 트랜잭션이 동시에 수행될 때, 데이터의 정합성을 해치지 않도록 트랜잭션의 데이터 접근을 제어할 필요가 있음. 이러한 동시성 이슈를 해결하기 위해 lock을 이용한 동시성 제어를 사용하고자 함. Proposal redisson 사용 redis의 pub-sub 기반 message broker 기능을 이용하여 락을 구현하는 방법이다. 락을 해제하는 측이 락..
클라이언트에서 위와 같은 에러가 날 수 있을때 원인으로 생각해 볼 수 있는 것은 보통 매핑된 url이 틀렸거나, 서버에서의 권한과 관련된 문제일 것이다. 문제가 되는 것이 오탈자가 아닌 경우일텐데, 나의 경우에는 spring security를 적용하고 webSecurityConfig에서 http.formLogin().loginPage("/api/members/login").permitAll(); 이라는 코드를 추가했었다. 이것이 원인이었는데 폼 로그인을 사용하지 않는데 이런 코드를 집어넣다보니 에러가 난 듯하다.
@Component를 통해 자동으로 등록한 Bean 수동으로 등록한 Bean 테스트코드 결과! (일단 에러가 남 ㅎㅎ) 수동 빈이 자동 빈을 오버라이딩 해버린다. 즉, 수동 빈이 우선권을 가진다! 하지만 대다수의 경우 이렇게 빈이 겹치는 상황을 의도하지는 않을 것이다. 의도치 않은 상황에서 이렇게 빈이 오버라이딩 되는 경우 생각보다 문제가 훨씬 더 심각해 질 수 있다. (어디가 문제인지 짐작도 못할테니까!) 그렇기 때문에 최근 스프링부트에서는 이렇게 자동 빈과 수동 빈의 충돌이 일어나면 아래와 같은 에러를 띄운다. 하지만 꼭 수동 빈이 자동 빈을 오버라이딩해야 하는 상황이라면 application properties에 아래 코드를 추가하자! (스프링에서도 친절하게 알려줌) spring.main.allow..
위 에러는 빈 이름이 동일할 때 발생하는 에러이다. 만일 실수로 이름이 같게 설정된 것이라면 필요없는 것을 지우고, 필요한데 이름이 겹치게 된 상황이라면 필요에 따라 한 객체의 이름을 바꾸는 것을 고려하자. 다만 되도록이면 @bean 에서 name 옵션을 쓰는 것 보다는 헷갈릴 여지가 없도록 기본 이름을 사용하되, 겹치지 않도록 하는 게 나을 것 같다.
@ComponantScan은 @Componant가 붙은 모든 클래스를 스프링 빈으로 등록한다. 아래처럼 @ComponantScan을 붙이면, 로그를 통해 빈으로 등록되는 것을 확인할 수 있다. 이렇게 따로 클래스를 만들어 모아두지 않고 컴포넌트 스캔을 이용해 자동으로 하는 건 알겠는데, 그럼 의존관계 주입은 어떻게? @AutoWired 사용! 생성자에 @AutoWired를 지정하면 스프링 컨테이너가 자동으로 해당 되는 빈을 찾아서 주입한다. 이때 기본적으로 조회하는 방식은 타입이 같은 빈을 찾는 것이다. (위 이미지에서는 memberRepository와 같은 타입을 찾겠지!) (타입이 중복되거나 하는 경우의 처리는 @AutoWired 게시글에서!) 그럼 탐색 위치는 어떻게? basePackages 옵션으..
ApplicationContext applicationContext = AnnotationConfigApplicationContext(AppConfig.class) AppConfig 클래스를 생성할 때, @Configuration 어노테이션과 함께 사용되는 위의 구문이 있다. 위의 구문에서 ApplicationContext를 스프링 컨테이너라고 한다. 스프링 컨테이너는 스프링에서 사용하는 DI컨테이너로 보면 된다. 객체를 생성하고 관리하면서 의존관계를 연결해 주는 것이다. 또한 스프링 컨테이너를 싱글톤 레지스트리 라고도 하는데 싱글톤 레지스트리는 싱글톤 객체를 생성하고 관리하는 것을 싱글톤 레지스트리라고 한다. 스프링 컨테이너는 @Configuration이 붙은 것을(위에서는 AppConfig.class..
- Total
- Today
- Yesterday
- Lock
- 프로그래머스
- 대규모더미데이터
- Redisson
- 인덱스
- Redis
- jmeter로그인
- 자바
- CorrectnessAndTheLoopInvariant
- index
- CheckedException
- 스프링faker
- Java
- jmeter세션
- EC2
- bankersRounding
- Spring
- hackerrank
- pessimisticlock
- 부하테스트시나리오
- jmeter토큰
- 항해
- jmeter시나리오
- jmeter부하테스트
- 동적크롤링
- jwt
- Python
- jmeter쿠키
- jmeter테스트
- 토큰
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |