일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- hibernate
- 링커
- 컴퓨터시스템
- String
- 토비의스프링
- 링킹
- DesignPattern
- java
- 클린코드
- Spring
- exception
- 프록시
- beanfactory
- JPA
- 메이븐
- DispatcherServlet
- ApplicationContext
- 토비의스프링3.1
- 빌드툴
- springboot
- AutoConfiguration
- 자바
- Kotlin for Java Developers
- Immutable
- FunctionalInterfaces
- IOC
- lambda
- gradle
- springwebmvc
- ORM
- Today
- Total
목록Spring (12)
엔지니어로 가는 길
* HttpMessageConverter가 무엇인지에 대해서는 다음 기회에 다루기로 한다. WebMvcConfigurer Spring은 `WebMvcConfigurer`라는 인터페이스를 통해 웹과 관련된 설정을 커스터마이징 할 수 있도록 돕는다. WebMvcConfigurer Defines callback methods to customize the Java-based configuration for Spring MVC enabled via @EnableWebMvc. @EnableWebMvc-annotated configuration classes may implement this interface to be called back and given a chance to customize the defau..
@EnableWebMvc - Spring에서 제공하는 어노테이션 - `@Configuration`이 붙은 자바 클래스 설정 파일에 사용될 수 있다 - 이 어노테이션이 붙을 경우 `WebMvcConfigurationSupport` 클래스로부터 Spring MVC 설정을 import 한다 (`HandlerMapping`, `HandlerAdapter`, `ConversionService` 등 웹과 관련된 빈들이 등록된다) @WebMvcAutoConfiguration - Spring Boot에서 제공하는 어노테이션 - 웹과 관련된 자동설정이 이루어진다 - spring-boot-starter-web 의존성을 추가하면 별도의 작업을 해주지 않아도 말 그대로 자동으로 설정된다 Spring Boot 자동설정과 관련해..
1. Introduction 2. 실생활 속 어댑터 패턴 3. Spring 속 어댑터 패턴 4. Reference 1. Introduction 어댑터 패턴은 현실의 어댑터를 코드로 표현한 것이다. 서로 호환되지 않는 두 클래스를 호환되도록 만들어준다. 찾아보면 어댑터 패턴에 대한 글들이 굉장히 많은데, 각각의 글마다 어댑터 패턴에 대해 *약간씩 다르게 설명하는 부분이 있다. 하지만 어댑터 패턴이라는 건, 디자인 패턴이라는 건 자주 쓰이는 구조에 편의를 위해, 의사소통을 위해 이름을 붙인 것 뿐 깐깐한 기준이 있는 것은 아닐 것이다. 어댑터 패턴을 적용해야 하는 상황은 100번 있으면 100번 모두 디테일이 다를 것이므로 설명 역시 완전히 일치할 수 없는 것 아닐까? 어댑터 패턴을 엄밀하게 정의하려고 하지..
문제 상황 로그인 정보를 제대로 입력했음에도 기대한 응답이 나오지 않았다. 분명 DB에 사용자 정보를 저장하였고, 저장된 정보를 POST 메소드에 담아 보냈는데 말이다. 정상적으로 코드가 동작한다면 응답 본문에 어떤 정보가 나와야 하는데, 위와 같이 응답 본문에 아무것도 뜨지 않았다. ('어떤 정보'라는 것은 BadCredentialException과 관련 없으므로 무시한다.) 로그에 에러가 보이지 않아서 디버거를 통해 따라가보았다. CustomAuthenticationFilter.class (extends UsernamePasswordAuthenticationFilter) attemptAuthentication 메소드를 수행하는 중에 BadCredentialException이 발생하였다. 원인 왜 Ba..
많은 경우 component scan을 통해서 자동으로 빈 등록이 이루어지지만 때로는 직접 @Bean 어노테이션을 통해 빈으로 등록해야할 때가 있다. @Bean 어노테이션을 통해 빈으로 등록할 때 주의해야 할 점에 대해 살펴본다. @Configuration 클래스와 @Bean 먼저 @Configuration 어노테이션이 붙은 설정 전용 클래스 안에서 @Bean 어노테이션을 통해 빈으로 등록하는 경우이다. @Bean이 붙은 메소드는 기본적으로 싱글톤이기 때문에 여러 번 호출돼도 하나의 객체만 리턴되는 것이 보장된다. 보통의 클래스라면 메소드가 이렇게 동작하지 않는다. 정직하게 작성된 대로 동작한다. 코드가 new MyBean()이라고 적혀 있으면, 호출될 때마다 객체가 생성된다. 따라서 @Configura..
@InitBinder @Controller나 @ControllerAdvice가 붙은 클래스는 @InitBinder가 붙은 메소드를 가질 수 있다. 이는 WebDataBinder라는 인스턴스를 초기화하는 메소드이다. WebDataBinder 1. 요청 매개변수(form 또는 query 데이터)를 모델 객체에 바인딩한다. Thymeleaf는 익숙하지 않기 때문에 다 이해할 수는 없지만 확실한 것은 owner와 관련된 정보를 input 태그를 이용하여 사용자로부터 입력받고 있다는 것이다. 사용자가 입력을 마치고 submit을 누르면 post 요청이 될 것이고 이걸 아래의 OwnerController의 메소드에서 잡을 것이다. processCreationForm 메소드에 Owner 타입의 인자가 있다. Owne..
빈을 생성하는 방법: 리플렉션 + 디폴트 생성자 스프링의 빈은 기본적으로 클래스 이름과 프로퍼티로 정의된다. 스프링은 내부적으로 리플렉션 API를 이용해서 빈 정의에 나오는 클래스 이름을 가지고 디폴트 생성자를 통해 빈 오브젝트를 생성한다. 클래스의 이름만 알고 있어도 다음과 같이 리플렉션을 통해 오브젝트를 생성할 수 있다. 이외에도 빈을 만들 수 있는 여러 방법이 있는데 그중 하나인 FactoryBean에 대해 살펴보자. 빈을 생성하는 방법: FactoryBean FactoryBean이란 스프링을 대신해서 오브젝트의 생성 로직을 담당하도록 만들어진 특별한 빈이다. FactoryBean을 통해 빈을 생성하는 방법을 살펴보기 전에 어떤 경우에 FactoryBean을 써야 하는지 생각해보자. 클래스 정보를 ..
결론 axios post의 두 번째 인자를 null로 주고, 세 번째 인자에 매개변수를 주어야 한다. (아니면 jquery를 사용해도 된다. 참고: github.com/axios/axios/issues/1281) 문제상황과 해결 방법 백엔드(Spring boot) /users/register로 오는 POST 요청을 담당하는 핸들러이다. (컨트롤러에 @RequestMapping("/users")가 붙어있는 상황이다.) User는 userId와 password라는 필드를 갖고 있어서 요청하는 쪽에서 매개변수로 userId, password를 넘겨주면 User라는 객체로 바인딩되어 핸들러에게 전달된다. 핸들러는 이 객체를 데이터베이스에 저장한다. 프론트(React) 결과 User에 아무것도 바인딩되지 않았다...
위와 같은 클래스가 있을 때, 이런 Handler를 작성하고, 이런 테스트 코드를 작성한다면 어떻게 될까? 익숙한 예외가 발생한다. path variable로 들어온 "test"라는 문자열을 ToDo 클래스로 변환할 수 없다는 것이다. 이 경우 Formatter를 등록해야 하는데 오늘 우연히 다른 방법을 알게되었다. 위와 같이 String 타입 매개변수를 하나 갖는 생성자가 있는 경우 Formatter 없이도 conversion이 이루어진다. 굳이 String 타입 매개변수를 갖는 생성자를 추가하기 보다는 Formatter를 등록하는 편이 명시적이고 좋을 것 같다. 필요에 의해 그런 생성자를 만들어둔 경우라 하더라도 Formatter를 등록하는 게 좋을 것 같다. p.s. spring boot
스프링 애플리케이션의 동작 방식 스프링 IoC 컨테이너는 빈(Bean) 설정 메타정보를 이용하여 빈 객체(Object)를 만들고 DI(Dependency Injection) 작업을 수행한다. 하지만 이것만으로는 애플리케이션 동작하지 않는다. 자바 애플리케이션의 main() 메소드처럼 어디에선가 특정 빈 오브젝트의 메소드를 호출함으로써 애플리케이션을 동작시켜야 한다. 즉, 적어도 한 번은 위의 예와 같이 IoC 컨테이너에게 요청하여 빈 객체를 가져와야 하는데, 이때는 반드시 getBean()이라는 메소드를 사용해야 한다. 그러나 그 이후로는 다시 getBean()으로 빈 객체를 가져올 필요가 없다. 빈 객체들끼리 DI로 서로 연결되어 있으므로 의존관계를 타고 필요한 객체가 호출되면서 애플리케이션이 동작하기..