Spring

    REST 서비스 사용

    스프링 애플리케이션은 아래와 같은 방법을 통해 REST API를 사용할 수 있다. RestTemplate: 스프링 프레임워크에서 제공하는 간단하고 동기화된 REST 클라이언트 Traverson: 스프링 HATEOAS에서 제공하는 하이퍼링크를 인식하는 동기화 REST 클라이언트 WebClient: 반응형 비동기 REST 클라이언트 RestTemplate 클라이언트 입장에서 REST 리소스와 상호작용하려면, 클라이언트 인스턴스와 요청 객체를 생성하고, 해당 요청을 실행하고, 응답을 분석하여 관련 도메인 객체와 연관시켜 처리하면서, 도중에 발생할 수 있는 예외까지 처리해야 한다. 이러한 장황한 코드를 피하기 위해 스프링은 RestTemplate을 제공하며, RestTemplate은 REST 리소스를 사용하는 ..

    스프링 데이터 REST

    스프링 데이터 REST 스프링 데이터는 코드에 정의한 인터페이스를 기반으로 Repository를 자동으로 생성하고 필요한 기능을 수행한다. 스프링 데이터 REST는 스프링 데이터의 모듈 중 하나로, 스프링 데이터가 생성하는 Repository의 REST API를 자동으로 생성한다. 따라서, 스프링 데이터 REST를 빌드에 추가하면 정의한 각 리포지토리 인터페이스를 사용하는 API를 얻을 수 있다. 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-data-rest' 빌드에 해당 의존성만 지정해주면 이미 스프링 데이터를 사용 중인 프로젝트에서 REST API를 노출시킬 수 있다. 스프링 데이터 REST가 생성하는 REST 엔드포인트를 ..

    REST 엔드포인트 정의

    SPA 스프링 MVC를 사용해서 전통적인 MPA(Multi-Page Application)로 개발했던 것들을 앵귤러 기반의 SPA로 대체해보자! SPA에서는 프레젠테이션 계층이 백엔드 처리와 거의 독립적이므로, 백엔드 기능은 같으면서 사용자 인터페이스만 다르게 개발할 수 있다. 또한, 이런 API를 사용할 수 있는 다른 애플리케이션과 통합할 수 있는 기회를 제공한다. REST 컨트롤러 @RestController @RequiredArgsConstructor @RequestMapping(path = "/orders", produces = "application/json") @CrossOrigin(origins = "*") // 서로 다른 도메인 간의 요청 허용 public class MemberContro..

    @Bean과 @Component

    @Bean 개발자가 컨트롤 불가능한 외부 라이브러리들을 Bean으로 등록하고 싶을 때 사용 메서드 레벨에 선언하며, 반환되는 객체를 수동으로 빈으로 등록하는 방법 @Configuration public class SecurityConfig { @Bean public PasswordEncoder passwordEncoder(){ return new BCryptPasswordEncoder(); } } @Target({ElementType.METHOD, ElementType.ANNOTATION_TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Bean { ... } @Configuration 해당 클래스에 1개 이상의 @Bean을..

    @Valid 유효성 검사

    Form 유효성 검사가 필요한 필드에 검증 어노테이션을 지정한다. @Getter @Setter public class PersonForm { @NotNull @Size(min=2, max=30) private String name; @NotNull @Min(18) private Integer age; } 검증 어노테이션 @NotNull Null 불가 @Null Null만 입력 가능 @NotEmpty Null, 빈 문자열 불가 @NotBlank Null, 빈 문자열, 스페이스만 있는 문자열 불가 @Size(min=, max=) 문자열, 배열등의 크기의 허용 범위 안에 있는지 @Patten(regex=) 정규식을 만족하는지 @Max(), @Min() 지정된 값보다 작은지, 큰지 @Future, @Future..

    스프링 시큐리티 설정과 로그인 구현

    스프링 시큐리티 자동-구성 build.gradle 의존성 추가 implementation 'org.springframework.boot:spring-boot-starter-security' // 스프링 부트 보안 스타터 의존성 implementation 'org.springframework.security:spring-security-test' // 보안 테스트 의존성 스프링 부트 보안 스타터 애플리케이션이 시작되면 스프링이 프로젝트의 classpath에 있는 라이브러리를 찾아 기본적인 보안 구성을 설정해 준다. 이 후, 웹 브라우저에서 홈페이지에 접속하면 스프링 시큐리티에서 제공하는 HTTP 기본 인증 대화상자가 나타난다. Username: user를 입력 Password: 무작위로 자동 생성되어 애플..

    스프링 데이터 JPA

    Spring Data 스프링 데이터 프로젝트는 여러 개의 하위 프로젝트로 구성되는 다소 규모가 큰 프로젝트로, 대부분의 하위 프로젝트는 다양한 데이터베이스 유형을 사용한 데이터 퍼시스턴스에 초점을 둔다. 스프링 데이터에서는 repository 인터페이스를 기반으로 이 인터페이스를 구현하는 repository를 자동 생성해 준다. 스프링 데이터 JPA 관계형 데이터베이스 JPA 퍼시스턴스 스프링 데이터 MongoDB 몽고 문서형 데이터베이스의 퍼시스턴스 스프링 데이터 Neo4 Neo4j 그래프 데이터베이스의 퍼시스턴스 스프링 데이터 레디스 레디스 키-값 스토어의 퍼시스턴스 스프링 데이터 카산드라 카산드라 데이터베이스의 퍼시스턴스 Spring Data JPA 스프링 데이터 JPA는 스프링 프레임워크에서 JP..

    JDBC와 JdbcTemplate

    JDBC 자바에서 데이터베이스에 접속할 수 있도록 하는 자바 API로, JDBC는 데이터베이스에서 자료를 쿼리하거나 업데이터하는 방법을 제공한다. 스프링은 더 쉽게 JDBC를 사용할 수 있도록 JdbcTemplate 클래스를 제공하며, JdbcTemplate은 JDBC를 사용할 때 요구되는 반복되는 코드없이도 개발자가 관계형 데이터베이스에 대한 SQL 연산을 수행할 수 있는 방법을 제공한다. JdbcTemplate이 없다면 데이터베이스 연결(connection), 명령문(statement) 생성과 쿼리 수행, 결과(result set) 처리, 사용한 자원들을 닫고 클린업하는 코드를 전부 작성해야 한다. 또한, 연결이나 명령문 등의 객체를 생성할 때 또는 쿼리를 수행할 때 반드시 SQLException 예..

    스프링 MVC 구조

    스프링 MVC 전체 구조 클라이언트로부터 HTTP 요청 디스패처 서블릿이 핸들러 매핑을 통해 요청 URL에 매핑된 핸들러(컨트롤러) 조회 찾은 핸들러를 처리할 수 있는 핸들러 어댑터 실행 핸들러 어댑터는 핸들러가 반환하는 정보를 ModelAndView로 변환해서 반환 뷰 리졸버를 실행하면 뷰의 논리 이름을 물리 이름으로 바꿔서 뷰를 찾고 반환 뷰를 통해서 뷰 렌더링 디스패처 서블릿 서블릿으로 동작하는 스프링 MVC의 프론트 컨트롤러로, 부모 클래스에서 HttpServlet을 상속받아서 사용한다. 부모 클래스인 FrameworkSerlvet에서 doService()를 오버라이딩 해두고, doServie()를 시작으로 여러 메서드들과 함께 doDispatch()가 호출된다. doDispatch() 메서드는 ..