목록Java (116)
오늘은 몰랐으면 내일은 알면 된다
먼저 HomeController를 만들고, 다음과 같이 메인화면 호출 메서드를 만들어준다. @Controller public class HomeController { @GetMapping("/") public String home() { return "home"; } } 그 다음, resources/templates/home.html 을 만들어준다. Hello Spring 회원 기능 회원 가입 회원 목록 그러면 아래와 같은 메인화면이 생긴다. spring 은 요청이 들어왔을 시 controller에서 먼저 찾아본 다음, 없는 경우에 static 파일을 찾기 때문에, 현재 "/" 라고 요청을 처리하는 메서드가 controller에 생겼으므로 static 의 index.html은 뜨지 않는다.
먼저 9.에서 등록해놓았던 @Service 와 @Repository 어노테이션을 모두 지우고, SpringApplication 이 있는 곳에 SpringConfig를 생성한다. 그리고 @Configuration 어노테이션을 붙인다. @Configuration public class SpringConfig { @Bean 어노테이션을 붙여서 memberService 를 리턴하는 메서드를 작성해본다. @Bean public MemberService memberService() { return new MemberService(); } MemberService 같은 경우에는 생성자에 Repository가 필요하다. 따라서 Repository 메서드도 만들어준다. @Bean public MemberRepositor..
@Controller 라는 어노테이션이 붙으면, spring container에서는 해당 컨트롤러 객체를 만들고, spring에서 관리하게 된다. 이것을 spring container 에서 bean 을 관리한다고 말한다. MemberService를 MemberController 안에서 이렇게 선언할 수도 있지만, @Controller public class MemberController { private final MemberService memberService = new MemberService(); } 이렇게 되면 문제가 생긴다. service는 모든 컨트롤러에서 똑같은 역할을 수행하기 때문에 각각의 controller에서 일일이 새로운 service 객체를 만들어서 사용할 필요가 없다. 그래서 해..
먼저 다음과 같이 service 패키지 아래에 memberService 클래스를 만든다 그 다음, repository를 불러온다. 아직 db가 정해져있지 않기 때문에, 앞서 MemoryMemberRepository를 만들어 두었다. private final MemberRepository memberRepository = new MemoryMemberRepository(); 단순히 저장만 하려면 repo 의 save 메서드를 불러주면 되겠다. public Long join(Member member) { memberRepository.save(member); return member.getId(); } 그러나 만약 같은 이름을 가진 회원은 가입을 못하게 하려면 어떻게 해야할까? 이름으로 검색했을 때 그 결과..
구조는 다음과 같이 만든다. package hello.hellospring.domain; public class Member { private Long id; private String name; public String getName() { return name; } public Long getId() { return id; } public void setName(String name) { this.name = name; } public void setId(Long id) { this.id = id; } } package hello.hellospring.repository; import hello.hellospring.domain.Member; import java.util.List; import ja..
데이터: 회원ID, 이름 기능: 회원 등록, 조회 데이터 저장소 X 위와 같이 간단한 구조로 진행한다. 컨트롤러: 웹 MVC의 컨트롤러 역할 서비스: 도메인을 활용한 핵심 비즈니스 로직 구현 리포지토리: 데이터베이스에 접근, 도메인 객체를 DB에 저장하고 관리 도메인: 비즈니스 도메인 객체, 예) 회원, 주문, 쿠폰 등등 주로 데이터베이스에 저장하고 관리되는 비스니스 도메인 객체 인터페이스로 구현 클래스를 변경할 수 있도록 설계 개발을 진행하기 위해서 초기 개발 단계에서는 구현체로 가벼운 메모리 기반의 데이터 저장소 사용
자세한건 추후 MVC 강의를 들을 때 정리하도록 하고, 지금은 개괄적인 것만 이해하도록 해보자. 정적 컨텐츠는 말 그대로 '정적' 인 컨텐츠를 의미하는데, 단순히 html 파일을 제공한다는 뜻이다. 1. 톰캣이 요청을 받아서 스프링에 넘겨주면, 해당 컨트롤러가 있는지 먼저 확인한다. 2. 해당되는 컨트롤러가 없는 경우, resource에서 찾아서 해당 파일을 넘긴다. MVC: Model, View, Controller 의 줄임말이다. 화면은 화면을 표시하는 역할에 충실해야한다. 그리고 서버쪽은 비스니스 로직을 처리하고 데이터를 주고받는 역할에 충실해야한다. 즉 각각이 자신의 역할 하나에 집중되어야 한다는 뜻이다. 먼저 간단한 view 와 컨트롤러를 작성해보자. 아래는 name 이라는 매개변수를 model..
현재는 메인페이지가 없기 때문에 localhost:8080 으로 들어가면 에러페이지가 뜨게 된다. 메인페이지를 만들어보자. src/main/resources/static/index.html 을 생성한다. 부트에서는 welcome page 기능이 있어서, static 아래에 index.html을 생성하면 해당 파일을 welcome Page로 인식하게 된다. 해당 내용은 spring.io 의 web 메뉴로 들어가면 확인할 수 있다. 개발일을 하면서 느끼는건.. 서칭 능력이 곧 실력이라는 것이다. 어차피 모든 것을 다 알 수는 없다. 그럴 짬바도 안되고 레벨도 안되고... 지금 단계에서 중요한건 찾아보는 습관인듯 하다. 영어라 읽기 까다롭지만 눈에 익히는 연습을 하도록 하자. https://spring.io/..
build.gradle 에서 확인해보면, 다음과 같이 라이브러리들이 등록되어있다. 그런데 실제로 라이브러리들을 살펴보면 3가지가 아니라 뭔가 많이 들어있는 것을 확인할 수 있다. Gradle은 의존성이 있는 라이브러리를 함께 다운로드하기 때문이다. alt를 두번 누르면 좌우로 메뉴들이 뜨는데, 거기서 gradle을 클릭해서 라이브러리를 더 살펴보도록 하자. gradle 은 창의 가장 오른쪽에 있다. 그러면 이렇게 의존관계를 확인할 수 있다. (*) 표시는 위에서 이미 불러온 라이브러리이며 중복을 제거했다는 표시라고 한다. 쭉 살펴보다보면 tomcat 이 내장되어있는 것도 확인할 수 있다. 과거에는 WAS를 직접 설정을 해줬어야 했지만, 이제는 라이브러리를 가져오기만 하면 간단히 쓸 수 있다고 한다. lo..
먼저 Java 11과 IntelliJ를 준비한다. (생략) 아래의 사이트로 이동해서 프로젝트를 생성한다. https://start.spring.io/ 레거시 프로젝트에서는 Maven을 썼는데, Gradle로 변경되었다는 모양이다. Ant->Maven->Gradle 순으로 시대가 변해온 것 같다. ant 와 maven은 써봤는데 gradle은 좀 생소하니 이번참에 알아두는 게 좋겠다. 각각의 tool에 관해서는 차후에 자세히 포스팅해보도록 하자. 심플하게 정리만 해놓자면 gradle은 버전을 설정하고, 라이브러리를 관리해주는 프로그램이다. 이제 본격적으로 프로젝트를 만들어 보자. 홈페이지상에서 아래와 같이 세팅한다. dependency는 다음의 두가지를 추가한다. Spring Web Thymeleaf 그리..