백엔드/Spring

    [ 스프링 / Spring ] 4.x Controller Dto파라미터 매핑 안되는 현상 처리

    작업을 하던 중 해결하는데 시간이 걸려 적게 되었다. 1. 문제 기존 시스템 컨트롤러 - > 새 시스템 컨트롤러에 이관하는 작업을 진행했다. 화면상에 form태그(post)로 해당 컨트롤러에 값을 전달한다. dateFrom, dateTo라는 두개의 값을 전달하는데 컨트롤러에 해당 dto에는 값이 매핑되지 않는 현상이 발생하였다. 기존 시스템에서는 dto에 값이 매핑이 됐고, 새 시스템에는 dto에 값이 매핑되지 않았다. 두 시스템은 같은 소스를 옮겨놓은 상태여서 소스는 동일했다. 2. 작업 과정 아래와 같이 문제들이 될만한 요소를 생각해 봤다. 1. 필터(Filter), 인터셉터(interceptor)에서 문제 발생 2. 설정(Config) 관련 문제 2.1. 필터(Filter), 인터셉터(interce..

    [ Spring / 스프링 ] 프로퍼티(.properties) 읽는 방법

    토비의 스프링을 보다가 다음에 원리를 설명해 줄 때 필요할 것 같아, 글을 적어 정리를 한다. 스프링에선 설정을 할때 대표적인 파일형태로 properties파일과 최근엔 yaml파일을 사용한다. properties파일은 .properties파일로 키=값으로 설정 후 꺼내서 쓰면 된다. db.driverClass=com.mysql.jdbc.Driver db.url=jdbc:mysql://localhost:3306/testdb?serverTimezone=UTC db.username=root db.password=root 정의한 properties파일은 @PropertySource 어노테이션을 이용하여 사용할 수 있다. @PropertySource("/properties/database.properties")..

    [ Spring / 스프링 ] 컨테이너 빈 등록 정보 확인

    스프링 컨테이너는 모두 BeanFactory라는 인터페이스를 구현하고 있다. BeanFactory의 구현 클래스 중에 DefaultListableBeanFactory이 존재한다. DefaultListableBeanFactory는 거의 대부분의 스프링 컨테이너는 이 클래스를 이용해 빈의 등록하고 관리하고 있다. 스프링에서는 DefaultListableBeanFactory 오브젝트를 @Autowired로 주입받아서 이용하게 해준다. 이 객체에서 getBeanDefinitionNames() 메소드가 있어 등록된 모든 빈 이름을 가져올 수 있다. 빈 이름을 이용해서 실제 빈과 빈 클래스 정보 등도 조회할 수 있다. @ExtendWith(SpringExtension.class) public class BeanTe..

    [ Spring / 스프링 ] Annotation(어노테이션) 공부 - 4 [ Validation ]

    @Size : 문자 길이 측정 @NotNull : null 불가 @NotEmpty : null, "" 불가 @NotBlank : null, "", " " 불가 @Past : 과거 날짜 @PastOrPresent : 오늘이거나 과거 날짜 @Future : 미래 날짜 @FutureOrPresent : 오늘이거나 미래 날짜 @Pattern : 정규식 적용 @Max : 최대값 @Min : 최소값 @AssertTrue / False : 별도 Logic 적용 @Valid : 해당 object validation 실행

    [ Spring / 스프링 ] Annotation(어노테이션) 공부 - 3 [ junit ]

    @Runwith (junit4에서 사용) @RunWith는 jUnit 프레임워크의 테스트 실행방법을 확장할 때 사용하는 어노테이션이다. @RunWith(SpringJUnit4ClassRunner.class) class UserDaoTest { ..... @ExtendWith (junit5에서 사용) @ExtendWith를 사용해야 하지만, 이미 스프링 부트가 제공하는 모든 테스트용 애노테이션에 메타 애노테이션으로 적용되어 있기 때문에 @ExtendWith(SpringExtension.class)를 생략할 수 있다. @ExtendWith(SpringExtension.class) class UserDaoTest { ..... @ContextConfiguration -> 테스트코드에서 테스트용 DI 정보를 어..

    [ Spring / 스프링 ] Annotation(어노테이션) 공부 - 2 [ AOP ]

    [ AOP 어노테이션 ] @Aspect -> AOP 적용시 사용 @Before -> AOP 메소드 이전 호출 지정 @After -> AOP 메소드 호출 이후 지정 예외 발생 포함 @Around -> AOP 이전/이후 모두 포함 예외 발생 포함 @AfterReturning -> AOP 메소드의 호출이 정상일 때 실행 @AfterThrowing -> AOP시 해당 메소드가 예외 발생시 지정

    [ Spring / 스프링 ] Annotation(어노테이션) 공부 - 1

    @Component : 스프링에서 해당 java파일을 관리할 수 있도록 지정하는 어노테이션 -> Component를 지정한 파일은 @Autowired로 객체를 주입 받을 수 있다. -> @Component를 사용해서 주입받을 수 있지만, 페이지 역활에 따라 @Controller, @Service, @Repository로 구분하는 것을 권장한다고 한다. @Component public class UserDaoJdbc implements UserDao{ ... } @ComponentScan: 프로젝트 내의 특정 패키지 아래에서 @Component 어노테이션이 달린 클래스를 찾는다. -> basePackages 엘리먼트는 @Component가 붙은 클래스를 스캔할 기준 패키지를 지정할때 사용된다. @Compo..