본문 바로가기

JAVA

(133)
API 테스트 API 테스트 세팅 package com.example.projectorderservice; import io.restassured.RestAssured; import org.junit.jupiter.api.BeforeEach; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.boot.test.web.server.LocalServerPort; @SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT) publi..
테스트 코드 테스트 코드 예시 package org.example; import java.util.stream.Stream; import org.junit.jupiter.api.DisplayName; import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Asserti..
FactoryBean 사용 FactoryBean 사용 new 연산자로 생성할 수 없는 의존성을 어떻게 생성해 주입할때, 어댑터인 FactoryBean 인터페이스를 제공하여 사용한다. 정적 팩터리 클래스로 접근해야 하는 객체처럼 new 연산자로 생성할수 없는 객체를 생성할때는 일반적으로 FactoryBean을 사용한다. FactoryBean은 다른 빈을 생성하는 팩터리 역할을 담당 FactoryBean은 일반적인 빈과 마찬가지로 ApplicationContext에서 구성되지만 스프링이 FactoryBean 인터페이스를 사용해 의존성 요청이나 검색 요청에 응답할때는 일반적인 빈과 달리 FactoryBean 인스턴스를 반환하지 않는다. 대신 스프링이 FactoryBean.getObject() 메서드를 호출해 반환받는 결과를 반환한다. ..
빈 라이프 사이클 관리 빈 라이플 사이클 관리 스프링을 포함한 IoC 컨테이너가 제공하는 주요 기능 중 하나는 생성이나 소멸 같은 빈 라이프사이클의 특정 시점에 통지를 받을 수 있게 빈을 생성하는 것이다. 빈이 라이프 사이클 이벤트 통지를 받을 수 있게 설정하면 빈은 이벤트 발생 시점에 관련 처리를 할수 있다. 초기화 이후(post-initialization)와 소멸이전(pre-destruction) 이벤트 3가지 방법으로 인터페이스기반, 메서드 기반, 애너테이션 기반 인터페이스 기반은 콜백을 사용해 해당빈을 통지 메서드 기반은 빈이 초기화될때, 소멸될때 호출할 메서드 이름을 ApplicationContext 구성에 지정 애너테이션 기반은 빈을 초기화한 후나 소멸 전에 호출해야 할 메서드를 JSR-250에 정의된 애너테이션으로..
디자인 패턴의 아름다움 #코드 설계 디자인 패턴의 아름다움 코드 설계를 배우는 이유 코드 설계에 대한 지식은 확장성과 가독성이 높아 유지보수가 용이한 고품질의 코드를 작성할때 필요하다. 고품질의 코드 작성 먼저 코드 설계에 대한 이론적인 지식을 갖춰야 한다. 복잡한 코드 개발 다루기 소프트웨어를 개발할때 만나는 어려움 2가지 매우 높은 수준의 기술이 필요한 경우 (자율주행, 비디오 인식, 높은 성능 등) 높은 수준의 기술이나 최신의 기술이 필요하지는 않지만 복잡한 비즈니스를 갖춘 대규모의 프로젝트 (물류, 금융, ERP 시스템등 개발에 많은 사람이 참여하는 경우) 대부분의 소프트웨어 엔지니어는 프로그래밍 언어, 개발도구, 그리고 개발 프레임워크에 익숙하며 프레임워크를 사용하여 비즈니스 요구사항에 따라 코드를 채우는 것이 일반적인 업무 비즈..
애플리케이션 설정 웹 애플리케이션 설정 웹 애플리케이션을 설정하는 방법은 크게 3가지로 분류 스프링 웹 프레임워크에서 제공하는 확장 인터페이스를 사용하여 필요한 기능을 추가하거나 교체하는 방법 WebMvcConfigurer 인터페이스에 제공하는 콜백메서드를 개발자가 설정할 부분만 구현하는 것이다. 애플리케이션을 실행하면 개발자가 구현한 메서드가 실행되고 설정된다. 스프링 프레임워크에 기본 설정으로 만들어진 스프링 빈을 재설정하는 방법 @Primary 사용하여 스프링 빈을 덮어 정의한다. 스프링 웹 MVC 프레임워크에서 미리 정의한 스프링 빈 이름과 타입으로 사용자가 생성하는 방법 애플리케이션을 실행하면 스프링 프레임워크는 미리 정의된 이름의 스프링 빈이 있는지 확인하고 있으면 로딩한다. DispatcherServlet은 ..
스프링 시큐리티 Basic 인증 재구성 기본구성 재정의 UserDetailsService @Configuration public class ProjectConfig { @Bean public UserDetailsService userDetailsService() { var userDetailsService = new InMemoryUserDetailsManager(); var user = User.withUsername("john") .password("12345") .authorities("read") .build(); userDetailsService.createUser(user); return userDetailsService; } @Bean public PasswordEncoder passwordEncoder() { return NoO..
스프링 시큐리티 Basic 인증 기본 HTTP Basic 인증 스프링 시큐리티가 적용된 기본 프로젝트 구성 $ curl http://localhost:8080/hello | jq { "timestamp": "2022-10-13T13:09:15.808+00:00", "status": 401, "error": "Unauthorized", "message": "", "path": "/hello" } 스프링 시큐리티가 적용되어 인증이 필요하다. 스프링 시큐리티를 기본으로 되어있는경우, 스프링 초기에 패스워드가 콘솔로그에 나타난다. $ curl -u user:a9f19c33-17d9-47e8-9993-94809545cff6 http://localhost:8080/hello Hello! username : user password : a9f19c..