스프링 공부/인프런 김영한 스프링 입문 노트정리 28

5-2. 회원 웹 기능 - 등록

홈 화면에 하이퍼링크만 만들어놨던 이 '회원 가입', '회원 목록' 두 페이지 중에서 '회원 가입' 즉 /members/new 페이지를 만들어볼 것이다. 이 페이지는 회원 등록을 하는, 즉 사용자가 데이터를 서버에 제출하는 페이지이기 때문에 @GetMapping 만 쓰는 것이 아니라 @PostMapping도 써야 하고 form도 써야 한다. @GetMapping 메소드 만들기 MemberController를 열어서 다음과 같은 메소드를 추가한다. @GetMapping("/members/new") -> /members/new 의 경로로 GET 요청이 들어왔을 때 실행된다. return "members/createMemberForm"; -> templates 디렉토리 하위의 members 디렉토리 안에 있는..

5-1. 회원 웹 기능 - 홈 화면 추가

홈 화면을 추가할 것이다. 홈 화면용 컨트롤러 만들기 controller 패키지 안에 HomeController를 새로 만든다. 클래스 머리에 @Controller 어노테이션을 붙여주고 아래와 같이 간단한 메소드 하나를 만들어준다. @GetMapping()은 특정 URL 주소로 GET 요청이 들어왔을 때 이 메소드가 실행되도록 매핑해주는 역할을 한다. "/" 즉 웹 어플리케이션의 기본 URL과 home() 메소드가 연결되었다. 그러므로 이 코드는 홈 화면 주소를 치고 들어가면 "home.html"이라는 이름의 html 파일의 내용을 바탕으로 한 화면을 띄우라는 코드이다. home.html 만들기 이제 이 메소드에 의해 읽힐 html 파일을 만들어준다. html 작성은 프론트엔드의 몫이므로, 대충 강의자료..

화면 구성을 시작하기 전 중간점검

회원 관리 예제에서 지금까지 만든 부분을 살펴보자. 1. 도메인 도메인은 관리될 정보의 구조를 정의한다. 우리가 관리하는 정보는 회원 정보이다. 회원 정보에 무엇이 포함되는지(필드)와 그 정보를 넣고 빼는 데 필요한 메소드(getter와 setter)가 들어있는 도메인을 만들었다. 2. 리포지토리 리포지토리는 DB에 직접 접근하여, 도메인 객체를 저장하고 관리하는 역할을 한다. 내부 핵심 부품이라고 할 수 있다. 리포지토리는 인터페이스 하나, 구현체 하나를 만들었다. 구현체는 개발 과정에서 임시로 쓰기 위해 만든 것이고, 나중에 제대로 된 DB를 결정하면 인터페이스에 맞추어 새로운 구현체를 짠 뒤 갈아끼울 것이다. 3. 서비스 서비스는 리포지토리가 갖춘 기능을 활용하여 좀 더 사용자 친화적인 관점에서 웹..

4-2. 자바 코드로 직접 스프링 빈 등록하기

저번 시간에 어노테이션을 이용하여 콩 아주머니가 알아서 콩 설계도를 긁어모으도록 하는 법을 배웠다면, 이번엔 우리가 직접 콩 설계도 목록을 별도의 코드 파일로 마련하는 법을 배울 것이다. 그러므로 저번 시간에 넣어줬던 @Service, @Repository, @Autowired를 모두 지워준다. 단, 컨트롤러에 있는 어노테이션들은 지우지 말고 둬야 한다! 여기 있는 @Controller와 @Autowired는 가만히 둬야 한다! 어노테이션들을 싹 지우고 어플리케이션을 실행해보면 필요한 bean이 정의되어있지 않다는 메시지와 함께 빌드가 실패한다. 그럼 준비 끝이다. SpringConfig 파일 작성하기 여기다 SpringConfig라는 이름의 새 java class를 하나 만든다. 이 클래스에는 @Con..

4-1. 컴포넌트 스캔과 자동 의존관계 설정

이제 웹 브라우저에서 실제로 결과물이 보이도록 하는 과정을 시작해볼 것이다. MVC를 사용할 것이다. 그런데 본격적으로 시작하기 전에 해야 할 일이 있다. 콩 아주머니가 콩들을 콩 바구니에 담을 수 있게 해줘야 한다. 이걸 하는 방법에는 어노테이션을 활용한 컴포넌트 스캔과 자동 의존관계 설정 그리고 자바 코드로 직접 콩 설계도를 넘겨주는 방법 이렇게 두 가지가 있다. 이번 회차는 첫 번째 방법을 알아보는 회차이다. 컴포넌트 스캔이란? 스프링 앱을 실행시키는 순간, 스프링은 앱이 속한 패키지의 내용물들을 싹 훑는다. @Component를 찾는다. @Component가 붙은 클래스를 바탕으로 그 클래스의 객체를 하나씩 다 만들어서 스프링 컨테이너에 잘 담는다. 그리고 객체들을 알아서 관리해준다. 이렇게 스프..

3-5. 회원 서비스 테스트

저번 시간에 만든 서비스를 테스트해보는 회차이다. 테스트 코드의 틀을 짜주는 단축키 이번 회차에도 역시 IntelliJ의 편리한 기능이 하나 더 등장했다. 클래스의 구조 및 위치를 바탕으로, 이 클래스를 테스트하기 위한 테스트 코드의 기초적인 틀을 생성해주는 기능이다. 우리가 테스트할 MemberService 클래스에 이름에 커서를 위치시키고 단축키를 누른다. Windows 기준으로 ctrl+shift+T이다. 그럼 이런 것이 뜨는데, Create New Test를 선택한다. 그러면 새로 만들어질 테스트에 대한 설정 창이 뜬다. 이름은 기본적으로 테스트 대상 클래스의 이름 뒤에 Test를 붙인 것으로 생성되어있다. Testing library는 JUnit5로 해주고 클래스 내의 모든 메소드를 테스트할 것..

3-4. 회원 서비스 개발

컨트롤러, 서비스, 도메인, 리포지토리, DB 중에서 컨트롤러, 도메인, 리포지토리를 지금까지 배웠다. 오늘은 서비스를 만들어보는 실습이다. 리포지토리와 서비스의 차이점 리포지토리를 만들 때 새로운 회원 정보를 저장하기, 이름을 기준으로 탐색하기, ID를 기준으로 탐색하기 등 어떤 기계의 기본적인 기능을 하나하나 만들듯이 코드를 짰다면, 서비스를 만들 때는 조금 더 비즈니스와 맞닿은 형태로 만들어야 한다. 고객이 쓸 기능이 무엇무엇인가를 고민해서 그걸 구현하는 것이다! 리포지토리에서 만들었던 기본 기능들을 조각조각 합하고, 더 필요한 것이 있다면 덧붙여서 서비스를 완성한다. 준비하기 main에 service용 패키지를 만들고 그 안에 MemberService 클래스를 만든다. 회원가입 기능 만들기 먼저 ..

3-3. 회원 리포지토리 테스트 케이스 작성

저번 시간에 만든 리포지토리가 잘 돌아가나 시험해보기 위해 테스트 케이스를 작성하고 테스트를 해보는 회차이다. 준비 test > java > hello.hellospring 패키지 안에 repository라는 패키지를 새로 만들고, 그 안에 클래스를 하나 만든다. MemoryMemberRepository의 테스트케이스이므로, 관례에 따라 MemoryMemberRepository 뒤에 Test만 붙인 것을 클래스의 이름으로 사용한다. 만들어준 다음에 패키지 구성을 살펴보면 main에서 테스트의 대상이 될 MemoryMemberRepository의 위치와 우리가 방금 test 하위에 만든 MemoryMemberRepositoryTest의 위치가 쌍둥이처럼 비슷한 것을 확인할 수 있다. 테스트용 클래스는 다른..

3-2. 회원 도메인과 리포지토리 만들기

이번 강의에서는 도메인(domain)과 리포지토리(repository)를 만든다. 이것들의 역할은 직전 강의에서 배웠으니 까먹으면 돌아가서 살펴보자. 도메인용 패키지를 만들어서 그 안에 Member 클래스를 만들어준다. 그리고 리포지토리용 패키지를 만들어서 그 안에 Member 객체들을 다루는 관리 툴들을 만들어준다. 도메인 만들기 이 위치에 domain이라는 패키지를 만든다. 그리고 domain 내에 Member라는 클래스를 만든다. 클래스 내부는 이렇게 필드와 getter, setter로 간단하게 채워준다. 근데 이제 보니까 각 변수들이 클래스 안에서 몇 번 사용되었는지까지 IntelliJ가 알려준다... 정말 편리하다. 리포지토리 만들기 이번엔 domain 레포지토리와 동일한 레벨에 reposito..

3-1. 비즈니스 요구사항 정리

다음 강의부터 실제 예제를 만들어보는 과정이 시작된다. 이번 강의에서는 앞으로 만들 예제에 대해서 간단하게 설명해주셨다. 예제에 대하여 우리가 만들 프로그램은 매우 단순하다. 프로그램의 기능: 회원 등록, 조회 다룰 데이터: 회원ID, 이름 그리고 어떤 종류의 DB(데이터 저장소)를 사용할지 정해지지 않은 상황이라고 가정하고 개발을 진행할 것이다. 일반적인 웹 애플리케이션의 계층 구조 웹 애플리케이션은 일반적으로 컨트롤러, 서비스, 리포지토리, 도메인으로 구성된다고 한다. 컨트롤러: 방금 전까지 여러 번 사용했던 그 컨트롤러 서비스: 핵심 비즈니스 로직 구현 도메인: 비즈니스 도메인 객체. 회원, 주문, 쿠폰 등의 정보를 예로 들 수 있다. 주로 데이터베이스에 저장되고 관리된다. 리포지토리: 데이터베이스..