1. 스프링 부트 소개 스프링부트는 스프링의 단점을 보완하고자 개발된 프로젝트이다. 스프링부트는 필요한 환경 설정을 최소화하고 개발자가 비즈니스 로직에 집중할 수 있도록 도와줘 생산성을 크게 향상 시킨다. ( 기존 스프링의 단점 ) 웹 개발을 하려면 톰캣,제티,언더토
_*스프링부트 프로젝트는 gradle기반과 maven기반 프로젝트로 구성할 수 있다. 이번 장에서는 gradle과 maven의 정확한 차이점을 알아보고자 한다._ Maven이란? 아파치 메이븐은 자바용 프로젝트 관리 도구. 아파치 앤트의 대안으로 만들어짐. 아파치 라
_* 지금 까지 스프링 부트 프로젝트를 진행하면서 starter는 아무 생각 없이 gradle이나 maven에 의존성을 추가해줘야 한다길래 가져다 쓴 경우가 많았다. 이번장에서는 spring-boot-starter에 대해서 더 자세히 알아보고자 한다._ 스타터 : 특
이번 장에서는 스프링부트 프로젝트를 생성하는 방법과 인텔리제이 환경에서 임포트한 후 간단하게 Hello World를 출력해보려고 한다. 1. 스프링 이니셜라이즈로 생성. 1) spring.io접속 한다. 2) 아래 항목을 클릭한다. 3) 환경설정하기 ![](ht
_ 이번 장에서는 유효성 검사와 유효성 검사에 사용되는 다양한 어노테이션들을 알아 보려고 한다._ 유효성 검사란? >요청한 데이터가 어떤 조건에 충족하는지 확인하는 작업. 예를 들어서, 회원가입을 할때 생년월일을 작성하는 상황이라고 하자. 클라이언트가 서버로 요청을
이번 장에서는 프로그램의 무결성을 보장하고 코드 품질을 향상시키는데 중요한 테스트 코드 관련 어노테이션을 알아 보고자 한다. 스프링 부트에서는 기본적인 테스트 스타터를 제공한다 각종 테스트를 위한 어노테이션 기반 기능을 제공하여 특정 주제에 맞게 테스트를 구현하고 관
_나는 지금까지 컨트롤러 클래스 위에 Rest API를 사용하기 때문에 @RestController 어노테이션을 아무생각 없이 사용해 왔다. 이번 장에서는 @RestController 어노테이션과 @Controller 어노테이션의 정확한 차이가 궁금하여 자세히 알아 보
이번 장에서는 @WebMvcTest를 알아 보려고 한다. @WebMvcTest MVC를 위한 테스트. 웹에서 테스트하기 힘든 컨트롤러를 테스트하는 데 적합. 웹상에서 요청과 응답에 대해 테스트할 수 있음. 시큐리티, 필터까지 자동으로 테스트하며, 수동으로 추가/삭제
이번장에서는 @DataJpaTest 어노테이션에 대해서 알아보고자 한다.JPA 관련 테스트 설정만 로드.데이터소스의 설정이 정상적인지 테스트.JPA를 사용하여 데이터를 제대로 생성, 수정 삭제하는지 등의 테스트.내장형 데이터베이스를 사용하여 실제 데이터베이스를 사용하지
이번 장에서는 스프링에서 중요한 개념인 의존성 주입(DI)에 대해 알아보고,의존성을 주입하는 세가지 방법, 스프링 IoC 컨테이너, 빈의 의미와 등록방법 에 대해 알아보고자 한다.의존 관계 주입(Dependency Injection)이라고도 하며, 어떤 객체가 사용하는
이번 장에서는 JPA Paging(페이지 나누기)에 대해서 알아보고자 한다.Pageable 객체를 사용하면 간단하게 구현할 수 있다.프론트에서 전체 사용자 정보를 조회하는 요청이 들어왔다고 가정하자.Repository에서 findAll() 메서드를 통하여 해당 데이터를
이번 장에서는 스프링부트 시큐리티와 소셜미디어(구글,페이스북,카카오등)를 사용해 편리하게 인증하는 OAuth2 인증 방식을 알아 보고자 한다. 스프링부트 시큐리티 인증(authentication) : 사용자(클라이언트)가 애플리케이션의 특정 동작에 관하여 허락(인증
기존의 Spring MVC에서는 xml을 활용하여 Bean을 등록하였는데, 프로젝트 규모가 커짐에 따라 xml으로 빈을 관리하는 것이 상당히 번거로워져서 어노테이션을 활용하여 Bean을 등록하게 된다. 이번 장에서는 빈을 등록하는 어노테이션 @Bean, @Config
이번 장에서는 프로젝트를 진행하면서 사용했던 스프링 시큐리티 설정들을 정리해보려고 한다. 스프링부트를 공부하면서 가장 낯설게 느껴진 내용이 스프링 시큐리티 부분인거 같다.아래 코드는 내가 프로젝트를 진행하면서 설정했던 Config 파일이다.
프로젝트를 진행하면서 인가에 대한 처리를 필터로 사용했었는데, 이번장에서는스프링부트의 필터와 필터의 동작 방법, 인터셉터와이 차이, 필터를 등록하는 방법에 대해 알아 보고자 한다HTTP 요청과 응답을 변경할 수 있는 재사용 가능한 코드이며, 필터는 객체의 형태로 존재하
이번 장에서는 스프링 AOP의 정의와 주요용어, 특징에 대해서 알아보고자 한다. 관점 지향 프로그래밍 : 어떤 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어서 보고 그 관점을 기준으로 각각 모듈화 하는 것.\*모듈화 : 어떤 공통된 로직이나 기능을 하나의 단
이번 장에서는 쿼리 dsl 환경설정 잡는 코드를 정리해 보려고 한다.gradle : 6.6.1 version스프링 부트 : 2.3.5 version위와 같이 환경 설정을 잡아준후 빌드하면 "src/main/generated"경로에 큐클래스가 있는 파일이 생성된 것을 볼
이번 장에서는 파라미터로 AOP를 구현하는 데에 스프링의 전략 인터페이스 중 하나인 HandlerMethodArgumentResolver에 대해서 알아보고자 한다. > 전략 패턴의 일종으로 컨트롤러 메서드에서 특정 조건에 해당하는 파라미터가 있으면 생성한 로직을 처리
이번 장에서는 현재 웹에서 사용하는 대부분의 데이터 통신인 REST API에 대해서 알아 보고자 한다.웹과 같은 분산 하이퍼미디어 시스템에서 사용하는 통신 네트워크 아키텍처, 네트워크 아키텍처의 원리 모음웹은 전송 방식으로 HTTP를, 식별 방법으로 URI를 사용.UR
이번장에서는 쿼리dsl을 사용하여 디비에서 데이터를 얻은 후 페이징처리를 위하여 Page 객체를 생성하는 방법에 대해 기록해두려고 한다.나는 프로젝트를 진행하면서 공지사항 전체 조회 API를 구현하다가 쿼리dsl에서 얻은 데이터를 페이징 처리해야하는 경우가 있었다.요구
이번 장에서는 프로젝트를 진행하면서 기능 구현한 코드를 정리해 보려고 한다.식당 예약 프로그램, 스케줄 관리 등 새로 추가하는 데이터가 기존 데이터의 시간대와 겹치는 지 확인하는 기능은 빠져서는 안될 기능이다.나는 프로젝트를 진행하면서 강사가 학생 수업을 배정할때 쓰이
JPA를 사용할 때 가장 중요한게 객체와 관계형 데이터베이스를 매핑하는 것(ORM)과 영속성 컨텍스트를 이해하는 것이다.이번 장에서는 JPA의 영속성 컨텍스트에 대해서 알아보고자 한다.JPA는 스레드가 하나 생성될 때 마다(매 요청마다) EntityManagerFact
이번 장에서는 그동안 Service Layer에 대한 오해와 객체지향적 개발에 대해 알아보고자 한다. Web Layer흔히 사용하는 컨트롤러(@Controller)와 JSP/Freemarker 등의 뷰 템플릿 영역.이외에도 필터(@Filter), 인터셉터, 컨트롤러 어
하나의 논리적 작업 단위로 수행되는 일련의 작업.일련의 작업이 모두 하나의 논리적 작업으로 취급되기 때문에 논리적 작업을 취소하면, 그 내부에 포함된 일련의 작업들이 모두 취소된다.논리적 작업을 완료하면 내부에 포함된 일련의 작업들이 모두 완료되게 된다.원자성(Atom
SOLID 원칙들은 자기 자신 클래스 안에 응집도는 내부적으로 높이고, 타 클래스들 간 결합도는 낮추는 객체 지향의 관점에서 도입.클래스의 역할과 책임을 너무 많이 주지 마라.클래스를 설계할 때 어플리케이션의 경계를 정하고, 추상화를 통해 어플리케이션 경계 안에서 필요
이번장에서는 스프링 트라이앵글 개념중 제어 역전(IoC, Inversion of Control)에 대해서 알아 보고자 한다.아래와 같이, 자바에서는 일반적으로 자기(OwnerController)가 사용할 의존성을 자기가 만들어 사용한다.하지만 스프링의 제어 역전에서는
아래의 코드를 보면 AOP가 무엇을 나타내는 지 쉽게 이해할 수 있다.소스 코드상에서 다른 부분에 계속 반복해서 쓰는 코드들을 발견할 수 있는데 이것을 흩어진 관심사(Crosscutting Concerns)라 부른다.이런 코드는 AAAA - > aaa로 고치거나, BB
아래 스프링 Web MVC 코드만 보면, @Controller 어노테이션이 붙은 클래스에서 @GetMapping, @PostMapping과 같은 어노테이션을 사용해서 요청을 매핑하고 있다.스프링 Web MVC도 서블릿 기반 위에서 만들어진 프레임워크이기 때문에 기존의
JPA 영속성을 공부하면서 EntityManager를 통해 entityManager를 통해 entity CRUD를 했는데, 프로젝트를 진행하면서는 EntityManager이라는 코드는 1도 보이지 않아서 개념을 이해 하는데 혼란을 가지게 되었다.이 블로그 를 통해 개념
클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트html을 사용하여 요청에 응답한다.Java 쓰레드를 이용하여 동작한다.MVC 패턴에서
클라이언트가 URL로 접근하여 정보를 요청한다.요청이 DispatcherServlet으로 전달되고 DispatcherServlet은 HandlerMapping을 통해 해당 요청 (URL)을 매핑한 컨트롤러가 있는지 검색한다. (@Controller로 등록한 클래스 스캔
JPA를 사용한다면 N + 1 문제를 고려하면서 사용해야 한다. N + 1 문제 발생 시 성능에 큰 영향을 줄 수 있기 때문에 N + 1 문제가 무엇인지, 어떤 상황에서 발생되는지, 어떻게 해결하면 되는지에 대해 알아보고자 한다.N + 1 문제를 알아 보기전에 지연(L
빈을 등록하는 방법으로는 1\. @Component 어노테이션2\. @Configuration, @Bean 어노테이션 을 사용하여 빈을 등록하는 방법이 존재한다. 이 둘의 차이점은 1번 경우는 개발자가 직접 개발한 클래스를 Bean으로 등록하고자 하는 경우, 2번 경우
컨트롤러에서 @RequestBody 어노테이션을 사용하면 JSON -> 자바객체로 반환해주고, 다시 @ResponseBody를 사용해서 자바객체 -> JSON으로 간편하게 반환할 수 있다.이러한 편리한 기능은 어떤 방식의 동작으로 이루어질까?김영한님의 스프링 MVC를