스프링 입문-코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 스터디를 위한 정리하는 글입니다. welcome 페이지(홈 화면) hello-spring\src\main\resources\static\index.html 도메인만 넣었을 때 보여주는 페이지 >
데이터: 회원 아이디, 이름기능: 회원 등록, 조회아직 DB가 정해지지 않았다는 가상의 시나리오📌 웹 애플리케이션 계층 구조컨트롤러: 웹 MVC의 컨트롤러 역할서비스: 핵심 비즈니스 로직 구현리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리도메인:
회원 서비스 💻 회원 서비스 작성 문제가 하나가 발생하는데, 멤버 서비스에 있는 레포지토리랑 테스트에 있는거랑 다른 인스턴스이다. 우리는 MemberService 객체를 생성할 때 외부에서 선언된 memberRepository 객체를 주입받아 사용할 수 있게 바
스프링 입문-코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 스터디를 위한 정리하는 글입니다.📌 IOC(Inversion of Control)?스프링 프레임워크에는 객체를 생성하고 관리하고 책임지고 의존성까지 관리해주는 컨테이너가 있는데 이를 IoC 컨테이너
GET API는 웹 애플리케이션 서버에서 값을 가져올 때 사용하는 API이다. GET API를 작성하는 방법은 다양하며, 이번 장에서는 애플리케이션으로 들어오는 여러 요청에 대한 처리 방법의 하나로서 소개한다.실무에서는 HTTP 메서드에 따라 컨트롤러 클래스를 구분하지
POST API는 웹 애플리케이션을 통해 데이터베이스 등의 저장소에 리소스를 저장할 때 사용되는 API이다. 앞에서 살펴본 GET API에서는 URL의 경로나 파라미터에 변수를 넣어 요청을 보냈지만 POST API에서는 저장하고자 하는 리소스나 값을 HTTP 바디(bo
PUT API는 웹 애플리케이션 서버를 통해 데이터베이스 같은 저장소에 존재하는 리소스 값을 업데이트하는 데 사용한다. POST API와 비교하면 요청을 받아 실제 데이터베이스에 반영하는 과정(서비스 로직)에서 차이가 있지만 컨트롤러 클래스를 구현하는 방법은 POST
DELETE API는 웹 애플리케이션 서버를 거쳐 데이터베이스 등의 저장소에 있는 리소스를 삭제할 때 사용한다. 서버에서는 클라이언트로부터 리소르를 식별할 수 있는 값을 받아 데이터베이스나 캐시에 있는 리소스를 조회하고 삭제하는 역할을 수행한다. 이때 컨트롤러를 통해
ORM은 Object Relational Mapping의 줄인말로 객체 관계 매핑을 의미한다. 자바와 같은 객체지향 언어에서의 의미하는 객체와 RDB(Relational Database)의 테이블을 자동으로 매핑하는 방법이다. 지금 이야기하는 객체지향 언어에서의 객체는
JPA(Java Persistence API)는 자바 진영의 ORM 기술 표준으로 채택된 인터페이스의 모음이다. ORM이 큰 개념이라면 JPA는 더 구체화된 스펙을 포함한다. 즉, JPA 또한 실제로 동작하는 것이 아니고 어떻게 동작해야 하는지 메커니즘을 정리한 표준
하이버네이트는 자바의 ORM 프레임워크로, JPA가 정의하는 인터페이스를 구현하고 있는 JPA 구현체 중 하나이다. 이 책은 하이버네이트의 기능을 더욱 편하게 사용하도록 모듈화된 Spring Data JPA를 활용하기 때문에 JPA 자체를 직접 사용할 일은 거의 없다.
영속성 컨텍스트(Persistence Context)는 애플리케이션과 데이터베이스 사이에서 엔티티와 레코드의 괴리를 해소하는 기능과 객체를 보관하는 기능을 수행한다. 엔티티 객체가 영속성 컨텍스트에 들어오면 JPA는 엔티티 객체의 매핑 정보를 데이터베이스에 반영하는 작
책에서는 마리아DB를 사용하지만 스터디에서 MySQL를 사용하기로 했으므로 설정 부분을 수정을 했습니다.로컬 환경에서 돌릴 MySQL DB가 필요한데요, 이번 코스에서는 로컬에서 진행합니다. 아직 설치가 안되었다면 MySQL DB를 아래 링크에서 설치하시면 됩니다중요!
Spring Data JPA를 사용하면 데이터베이스에 테이블을 생성하기 위해 직접 쿼리를 작성할 필요가 없다. 이 기능을 가능하게 하는 것이 엔티티이다. JPA에서 엔티티는 데이터베이스의 테이블에 대응하는 클래스이다. 엔티티에는 데이터베이스에 쓰일 테이블과 칼럼을 정의
Spring Data JPA는 JpaRepository를 기반으로 거욱 쉽게 데이터베이스를 사용할 수 있는 아키텍처를 제공한다. 스프링 부트로 JpaRepository를 상속하는 인터페이스를 생성하면 Spring Data JPA가 제공하는 다양한 메서드를 손쉽게 활용할
DAO(Data Access Object)는 데이터베이스에 접근하기 위한 로직을 관리하기 위한 객체이다. 비즈니스 로직의 동작 과정에서 데이터를 조작하는 기능은 DAO 객체가 수행한다. 다만 스프링 데이터 JPA에서 DAO의 개념은 리포지토리가 대체하고 있다.규모가 작
앞에서 설계한 구성 요소들을 클라이언트의 요청과 연결하려면 컨트롤러와 서비스를 생성해야 한다.이를 위해 먼저 DAO의 메서드를 호출하고 그 외 비즈니스 로직을 수행하는 서비스 레이어를 생성한 후 컨트롤러를 생성하겠다.서비스 레이어에서는 도메인 모델(Domain Mode
롬복(Lombok)은 데이터(모델) 클래스를 생성할 때 반복적으로 사용하는 getter/setter 같은 메서드를 어노테이션으로 대체하는 기능을 제공하는 라이브러리이다. 자바에서 데이터 클래스를 작성하면 대개 많은 멤버 변수를 선언하고, 각 멤버 변수별로 getter/
개발 단계에서 테스트 코드를 작성하는 이유는 정말 다양하다. 대표적으로는 다음과 같은 이유가 있다.개발 과정에서 문제를 미리 발견할 수 있다.리팩토링의 리스크가 줄어든다.애플리케이션을 가동해서 직접 테스트하는 것보다 테스트를 빠르게 진행할 수 있다.하나의 명세 문서로의
테스트 방법은 여러 기준으로 분류할 수 있다. 그중 테스트 대상 범위를 기준으로 구분하면 크게 단위 테스트(Unit Test)와 통합 테스트(Integration Test)로 구분된다.단위 테스트 : 애플리케이션의 개별 모듈을 독립적으로 테스트하는 방식이다.통합 테스트
테스트 코드를 작성하는 방법은 다양하다. 이 책에서는 그중 많은 사람들이 사용하는 ‘Given-When-Then’ 패턴과 ‘F.I.R.S.T’ 전략을 소개한다.Given-When-Then 패던은 테스트 코드를 표현하는 방식 중 하나이다. 단어에서 유추할 수 있듯이 다음
JUnit은 자바 언어에서 사용되는 대표적인 테스트 프레임워크로서 단위 테스트를 위한 도구를 제공한다. 또한 단위 테스트뿐만 아니라 통합 테스트를 할 수 있는 기능도 제공한다. JUnit의 가장 큰 특징은 어노테이션 기반의 테스트 방식을 지원한다는 것이다. 즉, JUn
TDD란 ‘Test-Driven Development’ 의 줄임말로 ‘테스트 주도 개발’이라는 의미를 가지고 있다. 테스트 주도 개발은 반복 테스트를 이용한 소프트웨어 개발 방법론으로서 테스트 코드를 먼저 작성한 후 테스트를 통과하는 코드를 작성하는 과정을 반복하는 소
JPQL은 JPA Query Language의 줄임말로 JPA 에서 사용할 수 있는 쿼리를 의미한다. JPQL의 문법은 SQL과 매우 비슷해서 데이터베이사 쿼리에 익숙한 분들이라면 어렵지 않게 사용할 수 있다. SQL과 차이점은 SQL에서는 테이블이나 칼럼의 이름을 사
리포지토리는 JpaRepository를 상속받는 것만으로도 다양한 CRUD 메서드를 제공한다. 하지만 이러한 기본 메서드들은 식별자 기반으로 생성되기 때문에 결국 별도의 메서드를 정의해서 사용하는 경우가 많다. 이때 간단한 쿼리문을 작성하기 위해 사용되는 것이 쿼리 메
애플리케이션에서 자주 사용되는 정렬과 페이징 처리는 앞서 소개한 쿼리 메서드를 작성하는 방법을 기반으로 수행할 수 있다. 물론 기본 쿼리 메서드인 이름을 통한 정렬과 페이징 처리도 가능하지만 다른 방법들도 많이 쓰인다. 이번 장에서는 기본적으로 정렬과 페이징 처리 방법
앞에서는 @Query 어노테이션을 사용해 직접 JPQL의 쿼리를 작성하는 방법을 알아봤다. 메서드의 이름을 기반으로 생성하는 JPQL의 한계는 @Query 어노테이션을 통해 대부분 해소할 수 있지만 직접 문자열을 입력하기 때문에 컴파일 시점에 에러를 잡지 못하고 런타임
JPA에서 ‘Audit’ 이란 ‘감시하다’라는 뜻으로, 각 데이터마다 ‘누가’’, ‘언제’ 데이터를 생성했고 변경했는지 감시한다는 의미로 사용된다. 앞에서 작성한 코드를 보면 알 수 있듯이 엔티티 클래스에는 공통적으로 들어가는 필드가 있다. 예를 들면 ‘생성 일자’와
RDBMS를 사용할 때는 테이블 하나만 사용해서 애플리케이션의 모든 기능을 구현하기란 불가능하다. 대체로 설계가 복잡해지면 각 도메인에 맞는 테이블을 설계하고 연관관계를 설정해서 조인(join) 등의 기능을 활용한다. JPA를 사용하는 애플리케이션에서도 테이블의 연관관
애플리케이션의 비즈니스 로직이 올바르게 동작하려면 데이터를 사전 검증하는 작업이 필요하다. 이것을 유효성 검사 또는 데이터 검증이라 부른다. 유효성 검사의 예로는 여러 계층에서 들어오는 데이터에 대해 의도대로 값이 들어오는지 체크하는 과정이 있다. 이 같은 유효성 검사
애플리케이션을 개발하는 단계를 지나 운영 단계에 접어들면 애플리케이션이 정상적으로 동작하는지 모니터링하는 환경을 구축하는 것이 매우 중요해진다. 스프링 부트 액추에이터는 HTTP 엔드포인트나 JMX를 활용해 애플리케이션을 모니터링하고 관리할 수 있는 기능을 제공한다.