본문 바로가기
반응형

분류 전체보기203

[Spring] @TestConfiguration Controller 테스트할 때 @SpringBootTest 보다는 @WebMvcTest 를 사용하면 조금 더 가벼운 테스트를 할 수 있다. 하지만 @WebMvcTest 는 @Component @Service @Repository 는 Scan 하지 않는다. 즉, 빈으로 등록되지 않는다는 것이다. 그렇기 때문에 Controller 테스트를 할 때 빈 등록이 안된다고 오류가 나거나 빈이 null 로 나오는 상황을 마주칠 수 있다. 이럴 때 사용할 수 있는 어노테이션이 @TestConfiguration 이다. 테스트 환경에서 필요한 빈들을 등록할 수 있도록 도와주는 어노테이션이다. 사용방법을 알아보도록 하겠다. 아래와같이 TestConfig.class 를 만들고 @TestConfiguration 어노테이션을 .. 2021. 4. 9.
[Spring Security] @WebMvcTest Error creating bean with name 'securityConfig' defined 필자의 사이드프로젝트에 Spring Security가 적용되어 있었다. Spring Security의 구조를 리팩토링 한 후에 테스트 케이스를 돌려보았는데 @WebMvcTest 가 붙어있는 테스트케이스들이 깨지기 시작하였다. SecurityConfig 를 생성하지 못한다는 에러를 뿜었다. 이번 리팩토링에서 변화한 것은 필드가 추가되었고 그에따른 생성자가 추가되었다는 것이다. @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { private final LoginAuthenticationProvider loginAuthenticationProvider; private final J.. 2021. 4. 5.
[Class101] 현직 대기업 개발자 푸와 함께하는 진짜 백엔드 시스템 실무! 강의 제목 : 현직 대기업 개발자 푸와 함께하는 진짜 백엔드 시스템 실무! (푸님) 강의를 듣는 목적 Message Queue 학습 Elasticsearch 학습 강의 후기 요즈음 Message Queue와 Elasticsearch를 경험해본 사람을 우대하는 채용공고가 많이 보인다. 그래서 필자는 경험을 해보고 싶었으나 시작을 어떻게 해야할지 감이 잘 잡히지 않았다. 그러던 중 이 강의를 만나게 발견하게 되었고 결제를 하였다. 강의에서는 Message Queue, Elasticsearch 뿐만 아니라 nginx, git, 무중단 배포등 실무에서 필요한 개념들을 많이 다룬다. 강의에서는 각각의 기술들을 깊이있게 학습하려면 방대한 양이기에 기본 또는 중요한 요소만 짚고 넘어간다. 비록 각각의 기술들을 깊게 .. 2021. 4. 4.
[Spring Security] Login 이 성공했을 때 후처리를 어떻게 할 수 있을까? Spring Security를 쓰면 Login이 손쉽게 구현할 수 있다. 하지만 우리는 Login이 성공했을 때 추가로 작업을 해줘야 하는 상황들이 많이 있다. 대표적인 예가 토큰을 발급해서 내려준다든지 쿠키나 헤더에 어떠한 값들을 세팅을 해줘야 할 때가 종종 있다. 어떻게 할 수 있는지 알아보도록 하겠다. 방법은 매우 간단하다. Spring Security에 존재하는 AuthenticationSuccessHandler 인터페이스를 구현하기만 하면 된다. AuthenticationSuccessHandler 은 총 2개의 메소드로 이루어져 있고 그 중 하나는 default 메소드이다. 이 인터페이스를 구현한 Handler 클래스를 하나 생성한다. public class LoginAuthHandler imp.. 2021. 4. 3.
[Spring Security] Spring Security Login 테스트코드 만들기 요즈음 Spring Boot와 Spring Security를 이용하여 개인프로젝트를 진행중에 있다. 목표는 테스트코드를 작성하자이다. Login은 굉장히 중요한 기능이고 테스트코드가 필수라고 생각했다. 그래서 Spring Security의 Login은 어떤식으로 테스트하는지 공부해보았다. @SpringBootTest class SecurityConfigTest { @Autowired private WebApplicationContext context; @Autowired private MemberRepository memberRepository; @Autowired PasswordEncoder passwordEncoder; private MockMvc mvc; @BeforeEach public void .. 2021. 3. 26.
[Spring Security] Cannot pass a null GrantedAuthority collection 오랜만에 Spring Boot와 Spring Security를 이용하여 간단한 개인 프로젝트를 진행하고 있었다. 코딩할 때 정말 필요한 코드만 작성하는것이 목적이었다. 엔티티를 만들때도 필요한 컬럼만을 작성하기 위하여 아래의 컬럼만 가지고 있었다. @Entity public class Member extends BaseTimeEntity { @Id private String id; private String password; private String name; private Boolean isVerified; } Spring Security를 연동한 후 회원가입이 정상적으로 되는것까지 확인했다. 하지만 정보를 맞게 입력했지만 Login이 되지않는 오류가 나타났다. 로그인에 필요한 UserDetailsS.. 2021. 3. 26.
[Spring] controller unit test with csrf 개인프로젝트를 할 때 테스트케이스를 작성해가며 진행했다. 정상적으로 동작하던 테스트케이스들이 Security를 추가하면서 깨지기 시작했다. 원인을 알아보다 csrf 때문에 그랬다는걸 알게 됐다. Spring Security csrf를 적용하여 controller unit test를 작성하는 법을 알아보겠다. 방법은 굉장히 간단하다. 1. security-test 의존성 추가 org.springframework.security spring-security-test 5.4.5 test 2. MockMvc.perform 부분에 with() 로 csrf 추가 @Test @DisplayName("회원가입 정상 테스트") public void signup() throws Exception { // given Mem.. 2021. 3. 17.
[PostgreSQL] postgresql replication slot does not exist backup을 통해 받으면 안생길 수 있다. 다시 생성해주면 정상적으로 replication 이 된다. 2021. 3. 15.
[Spring] @DataJpaTest 사이드 프로젝트를 시작하려고 했다. 사이드 프로젝트의 목표는 아래 두가지 기술 학습이었다. TDD JPA TDD를 적용하려고 했는데 Service 객체의 테스트를 어떻게 해야할지 감이 잡히지 않았다. 최대한 가볍게 테스트케이스를 작성하고 싶었다. @SpringBootTest를 쓴다면 너무 무겁게 되고 @Mock 객체를 사용하자니 실제 DB를 사용하는것과는 환경이 다르다고 생각했다. 개인적인 취향으로는 실제 DB 환경과 비슷한 인메모리 DB를 이용하여 테스트 하는것을 좋아한다. 그러다 @DataJpaTest 어노테이션을 알게됐다. @DataJpaTest는 JPA를 다루는데 필요한 Bean만 가져온다. Mock보다는 무겁겠지만 @SpringBootTest 보다는 가볍다고 생각하여 @DataJpaTest로 진.. 2021. 3. 14.
Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-200] Mybatis, JUnit, H2를 이용하여 예제파일을 만들다가 Database may be already in use: null. Possible solutions: close all other connection(s); use the server mode [90020-200] 이런 오류를 만났다. 원인은 포트가 중복으로 떳다는 것이고 이미 실행중인 포트를 죽이면 해결된다고 한다. h2 실행을 중지시키고 다시 test하니 정상적으로 실행됐다. 2021. 3. 7.
[nginx] error code 별로 error page 보여주기 에러코드별로 별도의 에러페이지를 보여줘야 할 때가 많다. nginx 를 이용하여 간편하게 처리할 수 있다. http { include /etc/nginx/mime.types; default_type application/octet-stream; log_format main '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"'; access_log /var/log/nginx/access.log main; sendfile on; #tcp_nopush on; keepalive_timeout 65; #gzip.. 2021. 2. 28.
[nginx] worker_processes 란 ? nginx에는 worker_processes 라는 지시어가 있습니다. 이 지시어는 워커 프로세스의 개수를 정의하는데 사용됩니다. worker_processes 1로 정의를 하면 프로세스는 1개만 뜨게 됩니다. 이 옵션을 수정하고 재시작 해보겠습니다. 최적의 값은 사용 가능한 CPU 코어의 수라고 합니다. 현재 제가 실행하고 있는 인스턴스는 2 Core이므로 worker_processes를 2로 설정해보겠습니다. 재시작 후 프로세스 수의 변화를 살펴 보겠습니다. 프로세스가 2개 뜬것을 볼 수 있습니다. 출처 : nginx.org/en/docs/ngx_core_module.html#worker_processes Core functionality Core functionality Example Configur.. 2021. 2. 27.