Java 28

[Spring 스프링] 외부 파일을 이용한 Configuration 그런데 이제 @PropertySource와 @Value를 곁들인

[Spring 스프링] Java기반 Configuration Java 기반으로 빈을 등록할 수 있다. // Java-based Configuration을 하기 위한 클래스로 지정 @Configuration public class AuthenticationPrincipalConfig { // AuthService 빈을 등록 @Bean public AuthService authService() { return new Aut finger-ineedyourhelp.tistory.com 지난번에 Java기반 Configuration을 하는 방법을 포스팅 했다. 하지만 여기에 추가로 properties 파일에 있는 값이 필요할 때가 있을 수도 있다. 예를 들면 다음 사진에서 security-jwt-token-sec..

[Spring 스프링] Java기반 Configuration

Java 기반으로 빈을 등록할 수 있다. // Java-based Configuration을 하기 위한 클래스로 지정 @Configuration public class AuthenticationPrincipalConfig { // AuthService 빈을 등록 @Bean public AuthService authService() { return new AuthService(); } // AuthenticationPrincipalArgumentResolver를 빈 등록하고 authService에 대한 의존성을 주입 @Bean public AuthenticationPrincipalArgumentResolver authenticationPrincipalArgumentResolver() { return new..

[Spring 스프링] xml기반 Configuration

xml 파일로 빈을 등록할 수 있다. 태그 빈 객체를 만들 때 사용 id 속성: 해당 빈 객체를 식별하기 위한 고유 식별자 class 속성: 해당 빈 객체의 클래스 경로 태그 해당 빈 객체의 프로퍼티를 설정하는 데 사용 name 속성: 해당 클래스 내에 선언된 맴버 변수 중, 의존성 주입을 할 변수 이름 ref 속성: 의존하는 빈의 id public class UserService { private UserRepository userRepository; public void setUserRepository(UserRepository userRepository) { this.userRepository = userRepository; } public String sayHello() { return "hell..

[Spring 스프링] HandlerInterceptor 알아보기

인터셉터는 전체 path, 또는 특정 path에 대하여 컨트롤러가 실행되기 전 후로, 요청과 응답을 가로채서 적절한 전/후 처리를 하도록 도와준다. 핸들러에 사용자 인증과 같은 중복 코드가 존재할 때, 이를 인터셉터로 옮기면 핸들러의 중복코드를 줄일 수 있다. 다음은 인터셉터를 구현할 때 사용하는 HandlerInterceptor 인터페이스이다. public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { return true; } default void postHandle(HttpSer..

[Spring 스프링] Spring Core - IoC(Inversion of Control), DI(Dependency Injection)

IoC(Inversion of Control, 제어의 역전) IoC는 말그대로 제어가 역전되었다, 제어의 흐름을 바꾼다는 뜻이다. 제어가 역전이 안된 상태부터 생각해보자. 처음 프로그래밍을 하던 시절을 생각해보면, 보통 프로그램은 main 메서드가 실행되고, 다음에 사용할 객체를 결정, 생성하고, 객체에 있는 메소드를 호출한다. 그리고 이 오브젝트 또한 자신이 사용할 객체를 스스로 생성하고 사용한다. 자신에 관련된 작업은 자신이 제어한다. 제어가 역전이 되었다는 것은 지금까지의 능동적인 과정이 수동적으로 바뀌는 것을 말한다. 객체가 자신이 사용할 오브젝트를 스스로 결정하지도 않고, 생성하지도 않는다. 다른 누군가가 외부에서 객체를 만들어서 자신에게 넘기면 그것을 사용한다. 스프링에서는 애플리케이션 컨텍스..

[Spring 스프링] POJO란?

우테코 레벨1때, 도메인에다가 DB를 연결하는 로직을 집어넣어서 다음과 같은 리뷰을 받았던 적이 있다. 이 때는 POJO를 외부 기술을 적용하지 않는 순수한 자바 오브젝트 라고 한문장으로만 이해하고 남어갔다. 이번에 스프링을 공부하면서 POJO라는 단어가 꽤 나오길래 이번에 토비의 스프링을 읽으면서 한번 정리해보았다. POJO POJO(Plain Old Java Object)란? 객체지향적인 원리에 충실하면서, 환경과 기술에 종속되지 않고 필요에 따라 재활용될 수 있는 방식으로 설계된 오브젝트 매우 쉽게 말하면, 간단한 자바 오브젝트를 사용하는 것이다. 하지만 단지 자바의 문법을 지키고, 순수하게 Java API만을 사용했다고 해서 그 코드를 POJO라고 할 순 없다. 위의 정의에서 볼 수 있듯이 객체지..

[Spring 스프링] Spring MVC - ControllerAdvice(@ControllerAdvice와 @ExceptionHandler를 이용한 예외처리)

ControllerAdvice 예외처리를 하기 위한 @ExceptionHandler 어노테이션은 일반적으로 @Controller 또는 @RestController 어노테이션이 달린 클래스에 있는 메서드에 달 수 있다. 하지만 @ControllerAdvice, @RestControllerAdvice(@ControllerAdvice + @ResponseBody) 클래스 안에도 달 수 있다. 여기다가 달면 모든 컨트롤러에 적용된다. 이 점을 이용해서 예외처리 부분을 별도의 컨트롤러로 빼낼 수 있다. @RestControllerAdvice public class ExceptionController { @ExceptionHandler({IllegalArgumentException.class, NullPointer..

[Spring 스프링] JdbcTemplate 써보기

스프링 공식문서를 참조해서 JdbcTemplate 사용법을 정리해보았다. JdbcTemplate 생성 스프링 공식문서에 따르면 JdbcTemplate을 생성하는 방법은 두가지가 있다. 1. DAO 구현체가 DataSource를 통해 JdbcTemplate를 직접 인스턴스화 2. 스프링 IoC 컨테이너에서 DAO에게 빈 참조로 제공 하지만 프로젝트의 의존성에 spring-boot-starter-jdbc 모듈을 추가한다면 스프링 부트가 DataSource와 JdbcTemplate 객체를 자동으로 IoC 컨테이너에 설정해준다. dependencies { implementation 'org.springframework.boot:spring-boot-starter-jdbc' } 그러니까 우리는 IoC 컨테이너에 ..

[Spring 스프링] JDBC, JDBC 드라이버, JDBCTemplate

용어들이 다 비슷하게 생겨서 헷갈렸는데, 이참에 한번 정리해보았다. JDBC JDBC(Java Database Connectivity)는 자바에서 데이터베이스에 연결할 때 사용하는 API이다. 일반적으로 데이터베이스에서 데이터를 가져오는 과정은 다음과 같이 이루어진다. 1. 데이터베이스로 커넥션 연결 2. 데이터베이스에 SQL 전달 3. 데이터베이스가 결과를 응답 하지만 데이터베이스의 종류는 MySQL DB, Oracle DB 등 매우 많다. 큰 과정은 동일할지라도 각각 사용법이 다르다. 데이터베이스를 변경할 때마다 애플리케이션의 데이터베이스 접근 코드도 변경해야한다고 생각해보자. 너무 끔찍하다. 그래서 JDBC는 위 3가지 공통적인 기능을 표준 인터페이스로 정의해서 제공한다. java.sql.Conne..

[Spring 스프링] @Component, @Repository, @Service, @Controller 는 뭐가 다를까

프로그램을 짜면서 @Component를 달아보기도 하고, @Repository로 바꿔서 달아보기도 했다. 근데 둘 다 프로그램이 잘 돌아간다. 궁금해져서 차이점을 찾아봤다. 🐣 컴포넌트 스캐닝 @ComponentScan 어노테이션을 달고있는 어플리케이션이 위치하는 패키지 내에서 이루어진다. 컴포넌트 스캐닝을 통해 @Component 어노테이션이 달린 클래스들을 빈으로 만든다. 🐣 @Component 스프링에서는 @Component을 사용하여 빈을 선택하고 등록한다. 🐣 @Repository, @Service, @Controller 각각의 어노테이션을 까고 들어가보면 @Component라는 어노테이션을 달고 있음을 확인할 수 있다. @Component가 일반화된 어노테이션이라고 생각하면 된다. 대충 코드를..

1 2 3