이번에는 @Autowired말고 하나하나 직접 스프링 빈에 등록해보자. HelloController를 제외하고 MemberService, MemberRepository의 @Service, @Repository, @Autowired를 모두 지운다. 이 상태로 실행하면 당연히 스프링이 올라올때 컴포넌트 스캔이 안되서 스프링빈에 등록되지 않는다. 따라서 hellospring 패키지에 SpringConfig 클래스를 하나만들고 @Configuration 애노테이션을 붙인다. 그 다음 memberService와 memberRepository 메서드를 만들고 @Bean 애노테이션으로 스프링 빈 등록한다. 이때 MemberService 생성자로 MemberRepository 파라미터가 필요하므로 밑에 선언한 Memb..
이제 우리가 만든것을 화면에 붙이고 싶다. 그럼 컨트롤러와 뷰 템플릿이 필요하다. 회원가입하고 회원가입된것을 html로 뿌려주는 것들을 할거다. 이런걸 하려면 멤버 컨트롤러를 만들어야하는데, 이 멤버컨트롤러가, 멤버서비스를 통해서 회원가입하고, 멤버서비스를 통해서 데이터를 조회할 수 있어야 한다. 이거를 서로 의존관계가 있다고 한다. (멤버 컨트롤러가 멤버 서비스를 의존한다고 표현한다.) 이 작업을 스프링스럽게 해보자. 우선 멤버 컨트롤러를 만든다. 이렇게만 하면, 내용은 없지만 스프링이 처음 실행될때, 스프링 컨테이너라는 통이 생기는데, 거기에 @Controller 애노테이션이 붙으면 이 멤버 컨트롤러를 객체로 생성해서 스프링에 넣어두고 스프링이 관리를 한다. 우리가 앞시간에 실습했던 HelloCont..
전에는 test 폴더의 hellospring에 repository 패키지를 직접만들어서 클래스파일을 만들었는데, 단축키를 사용하면 쉽게할 수 있다. 테스트하고자하는 클래스에서 ctrl + shift + t 누르면 바로 테스트 파일을 만들 수있다. MemberService뒤에 Test가 자동적으로 붙는다. 밑에 체크박스 3개만 체크해서 OK누르면 자동적으로 똑같은 패키지의 폴더와 파일이 생성된다. 테스트코드는 사실 한글로 과감하게 바꿔도 된다. 프로덕션 코드가 나가는것은, (실제 테스트코드를 제외한) 한글로 이름적기가 되게 애매한데 (관례상으로도 한글로 쓰기 애매함) 뭐 우리가 영어권 사람들과 일하는게 아니면 바로바로 직관적으로 쉽게 알아들을 수 있으니까 한글도 많이 쓴다. 그리고 빌드 될때 이 테스트 코..
멤버서비스 클래스는 회원 리포지토리와 도메인을 이용해서 실제 비즈니스 로직을 작성하는 부분이다. 우선 회원가입을 만들자. package hello.hellospring.service; import hello.hellospring.domain.Member; import hello.hellospring.repository.MemberRepository; import hello.hellospring.repository.MemoryMemberRepository; import java.util.Optional; public class MemberService { //! 우선 서비스를 만들기 위해 회원 리포지토리가 필요하다. private final MemberRepository memberRepository = ..
test 폴더에 똑같은 repository 패키지를 만들고 MemoryMemberRepositoryTest 클래스를 만드는게 일반적이다. hello.hellospring.repository의 MemoryMemberRepositoryTest 클래스 package hello.hellospring.repository; import hello.hellospring.domain.Member; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; class MemoryMemberRepositoryTest { // 얘는 굳이 public으로 안해도 된다. 다른데서 쓸게 아니니까 MemberRepository repository = ne..
우선 domain 패키지에 Member 클래스를 만들자. [hello.hellospring.domain의 Member클래스] package hello.hellospring.domain; public class Member { private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } } 그리고 repository 패키지에 MemberRepository 인터페이스를 만들자. package..
데이터: 회원ID, 이름 기능: 회원 등록, 조회 아직 데이터 저장소가 선정되지 않음 (가상 시나리오) 컨트롤러 : 웹 MVC의 컨트롤러 역할 서비스 : 핵심 비즈니스 로직 구현 리포지토리 : 데티어베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인 : 비즈니스 도메인 객체, ex) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리됨 클래스 의존 관계 아직 데이터 저장소가 선정되지 않았으니 우선 인터페이스로 구현 클래스를 변경할 수 있도록 설계한다. 이때 데이터 저장소는 RDB, NoSQL 등등 다양한 저장소를 고민중인 상황으로 가정함. 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소를 사용한다. (이때 나중에 JDBC 데이터베이스를 사용하게 될 ..
API 정적 컨텐츠를 제외하고 2가지만 기억하면 된다. html을 변환해서 줄것인가, 데이터형식으로 바로 보내줄것인가!! 컨트롤러에 하나 더 추가했다. 이때 가장 중요한게 @ResponseBody 이다. 이게 뭐냐면 html에 나오는 바디 태그를 얘기하는게 아니라 HTTP에서 헤더와 바디부분이 있다. (HTTP 통신 프로토콜 부분이 그렇게 되어 있음) 그 BODY부분에 이 data를 내가 직접 넣어주겠다는 뜻이다. (응답 바디 부분에 직접 넣어주겠다는 것임) 여기서 name에 spring을 줬다면? hello spring 이라는 문자로 바뀌고 이 문자가 요청한 클라이언트에게 그대로 내려간다. 이게 템플릿 엔진과의 차이가 뭐냐면 View 이런게 없고 그냥 문자가 그대로 내려간다. 뭔가 느낌적으로 폰트가 달..
MVC와 템플릿 엔진 MVC : Model, View, Controller Controller @Controller public class HelloController { @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model) { model.addAttribute("name", name); return "hello-template"; } } View (resources/template/hello-template.html) hello! empty 과거에는 컨트롤러와 뷰가 따로 분리되어있지 않았음. 뷰에서 모든걸 다했다 (JSP기반에서 ← 소위 모델 1 방식이라고 부름) 지금은 MVC 스타일로..
정적 컨텐츠 정적 컨텐츠는 그냥 그대로 반환된다. 대신 여기서 어떤 프로그래밍을 할 순없다. 그대로 반영된다. 웹브라우저에서 hello-static.html을 치면 제일처음 내장 톰켓 서버가 요청을 받고 스프링에게 넘긴다. 스프링은 먼저 hello-static이란게 컨트롤러에있는지 먼저 찾아본다. (컨트롤러가 우선순위를 가진다는 의미다) hello라는 컨트롤러는 있었지만 hello-static 컨트롤러는 없다. 그다음에 스프링 내부적으로 resources의 static에 hello-satic을 찾는다. 그래서 그게 있으면 그대로 반환한다! 출처 : 인프런의 김영한 선생님 강의를 정리한 글입니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%..
빌드하고 실행하기 배포할 때 이 파일만 복사해서 서버에 넣고 자바에서 jar를 딱 실행시켜주면 된다. 그럼 서버에도 동작한다. 과거에는 톰캣을 서버에 다설치하고 특정폴더에다가 jar 설치하고 복잡헀는데 지금은 위와같이만 하면 된다! ./gradlew clean하면 build 파일 삭제! 출처 : 인프런의 김영한 선생님 강의를 정리한 글입니다. https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard
View 환경설정 Welcome Page 만들기 Welcome Page란 domain으로 들어 왔을때의 첫 화면이다. Hello hello 스프링 부트가 제공하는 Welcome Page 기능 static/index.html을 올려두면 Welcome page 기능을 제공한다. https://docs.spring.io/spring-boot/docs/2.3.1.RELEASE/reference/html/spring-boot-features.html#boot-features-spring-mvc-welcome-page(이렇게 검색, 공식문서를 보는 습관을 들이자.) thymeleaf 템플릿 엔진 템플릿 엔진이란 내가 원하는 대로 모양을 바꿀 수 있다. @Controller // Web application의 첫번째..
* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.