목록Java/Spring (24)
오늘은 몰랐으면 내일은 알면 된다
MemberController에서 다음과 같이 메서드를 만들어준다. @GetMapping("/members") public String list(Model model) { List members = memberService.findMembers(); model.addAttribute("members", members); return "members/memberList"; } 해당 위치에 html을 만들어준다. # 이름 model 에 attribute로 등록된 members 를 템플릿 엔진이 읽어들인다. 그리고 member 클래스의 getId 와 getName에 접근하여 값을 가지고 온다.
등록 화면 및 기능을 만들어보도록 하자. MemberController에 다음과 같이 메서드를 만든다. @Controller public class MemberController { private final MemberService memberService; @Autowired public MemberController(MemberService memberService) { this.memberService = memberService; } @GetMapping("/members/new") public String createForm() { return "members/createMemberForm"; } } 그리고 template 아래에 members 폴더를 만들고, 반환되는 String과 이름이 같은..
먼저 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/..