hello-spring/
├─ src/main/java/hello/hellospring/
│ ├─ HelloSpringApplication.java // 스프링 부트 시작점
│ ├─ domain/ // 순수 데이터(엔티티)
│ │ └─ Member.java
│ ├─ repository/ // 저장소(메모리/JDBC/JPA 등)
│ │ ├─ MemberRepository.java
│ │ ├─ MemoryMemberRepository.java
│ │ ├─ JdbcTemplateMemberRepository.java
│ │ ├─ JpaMemberRepository.java
│ │ └─ SpringDataJpaMemberRepository.java
│ ├─ service/ // 핵심 로직
│ │ └─ MemberService.java
│ ├─ controller/ // 웹(컨트롤러)
│ │ ├─ HelloController.java
│ │ ├─ HomeController.java
│ │ └─ MemberController.java
│ ├─ aop/ // 공통 관심사(시간 측정...)
│ │ └─ TimeTraceAop.java
│ └─ SpringConfig.java // 수동 빈 등록(선택)
└─ src/main/resources/
├─ static/hello-static.html // 정적 페이지
├─ templates/
│ ├─ hello-template.html // MVC 템플릿
│ ├─ home.html // 홈
│ └─ members/
│ ├─ createMemberForm.html // 등록 폼
│ └─ memberList.html // 목록
├─ application.properties // DB/JPA/H2 설정
└─ sql/ddl.sql // 테이블 생성 스크립트
Controller가 데이터를 Model에 담고, View를 반환하면, 템플릿 엔진이 렌더링해서 브라우저에 보여준다.
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
View(Html)를 사용하지 않고, Http 응답 바디에 직접 데이터를 넣어서 보낸다.
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
http://localhost:8080/hello-string?name=spring 실행하면 “hello spring” 내용이 나온다.
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; }
}
단순히 id, name만 가진 순수 자바 객체이다.
DB, JPA로 넘어가면 여기에 @Entity 등이 붙음.
<MemberRepository.java>