From 84a290f08dfdd885e2f10515e82fbba446c97f27 Mon Sep 17 00:00:00 2001 From: MyungJune Shin <64180930+go-the-extra-mile@users.noreply.github.com> Date: Wed, 19 Jul 2023 16:19:32 +0900 Subject: [PATCH] =?UTF-8?q?=EC=84=B9=EC=85=985=20=ED=9A=8C=EC=9B=90=20?= =?UTF-8?q?=EA=B4=80=EB=A6=AC=20=EC=98=88=EC=A0=9C,=20=EC=84=B9=EC=85=986?= =?UTF-8?q?=20=EC=8A=A4=ED=94=84=EB=A7=81=20DB=20=EC=A0=91=EA=B7=BC=20?= =?UTF-8?q?=EA=B8=B0=EC=88=A0=20=EC=A4=91=20~H2=20=EB=8D=B0=EC=9D=B4?= =?UTF-8?q?=ED=84=B0=EB=B2=A0=EC=9D=B4=EC=8A=A4=20=EC=84=A4=EC=B9=98=20?= =?UTF-8?q?=EB=85=B8=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...0\354\204\240\354\210\234\354\234\204.png" | Bin 0 -> 53280 bytes ...4\233\271 MVC \352\260\234\353\260\234.md" | 155 ++++++++++++++++++ ...1\352\267\274 \352\270\260\354\210\240.md" | 47 ++++++ 3 files changed, 202 insertions(+) create mode 100644 "resources/\354\273\250\355\212\270\353\241\244\353\237\254-\354\212\244\355\203\234\355\213\261 \354\232\260\354\204\240\354\210\234\354\234\204.png" create mode 100644 "\354\204\271\354\205\2305 \355\232\214\354\233\220 \352\264\200\353\246\254 \354\230\210\354\240\234 - \354\233\271 MVC \352\260\234\353\260\234.md" create mode 100644 "\354\204\271\354\205\2306 \354\212\244\355\224\204\353\247\201 DB \354\240\221\352\267\274 \352\270\260\354\210\240.md" diff --git "a/resources/\354\273\250\355\212\270\353\241\244\353\237\254-\354\212\244\355\203\234\355\213\261 \354\232\260\354\204\240\354\210\234\354\234\204.png" "b/resources/\354\273\250\355\212\270\353\241\244\353\237\254-\354\212\244\355\203\234\355\213\261 \354\232\260\354\204\240\354\210\234\354\234\204.png" new file mode 100644 index 0000000000000000000000000000000000000000..bb6d5566a1e8224c7e09f0382c32ae7844ba8bc6 GIT binary patch literal 53280 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 z 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 f*ER1 + + +
+
+

Hello Spring

+

회원 기능

+

+ 회원 가입 + 회원 목록 +

+
+
+ + +``` + +이제부터 `/`로 오는 GET 요청은 기존의 `resources/static/index.html`이 아닌 `home.html`이 반환되기 시작한다. 그 이유는 스프링이 먼저 스프링 컨테이너에서 관련된 컨트롤러를 찾고, 없으면 static 파일을 찾기 때문이다. + +![컨트롤러-스태틱 우선순위](resources/컨트롤러-스태틱%20우선순위.png) + +# 회원 등록 + +MemberController에 `/members/new` GET, POST 요청에 응답하는 메소드와 html 파일을 만든다. HTML 파일의 form 태그 내부 input 태그의 name property가 핵심이다. name property의 값과 폼으로 쓰는 자바 클래스의 멤버 변수와 이름이 일치해야 한다. + +```java +@Controller +public class MemberController { +... + @GetMapping("/members/new") + public String createForm() { + return "members/createMemberForm"; + } + + @PostMapping("/members/new") + public String create(MemberForm form) { + Member member = new Member(); + member.setName(form.getName()); + + memberService.join(member); + + return "redirect:/"; + } +``` + +```html + + + +
+
+
+ + + +
+ +
+
+ + +``` + +```java +package hello.hellospring.controller; + +public class MemberForm { + // 단순 자바 클래스로 HTML 폼 내용을 자바로 받기 위함 + private String name; + + public String getName() { + // ^ 존재해야 함 + return name; + } + + public void setName(String name) { + this.name = name; + } +} +``` + +스프링은 HTML form input 태그의 `name="variable"`을 보고 폼 객체의 setter인 `setVariable()`을 찾아 호출하여 PostMapping된 메소드의 argument로 넘겨준다. Setter가 반드시 있어야 한다. + +# 회원 리스트 조회 + +회원 컨트롤러에 `/members` GET 요청을 처리하는 메소드를 정의한다. + +```java +@Controller +public class MemberController { + ... + @GetMapping("/members") + public String list(Model model) { + List members = memberService.findMembers(); + + model.addAttribute("members", members); + return "members/memberList"; + } + ... +} +``` + +```html + + + +
+
+ + + + + + + + + + + + + +
#이름
+
+
+ + +``` + +자바의 for-each 문법과 닮은 문법이 Thymeleaf에 있다. member.id는 member 객체의 getId 메소드를 호출해 값을 알아내는 방식으로 작동한다. + +이는 장고 템플릿 언어의 `{% for member in members %} {{ member.id }}`와 매우 유사하다. \ No newline at end of file diff --git "a/\354\204\271\354\205\2306 \354\212\244\355\224\204\353\247\201 DB \354\240\221\352\267\274 \352\270\260\354\210\240.md" "b/\354\204\271\354\205\2306 \354\212\244\355\224\204\353\247\201 DB \354\240\221\352\267\274 \352\270\260\354\210\240.md" new file mode 100644 index 0000000..27837be --- /dev/null +++ "b/\354\204\271\354\205\2306 \354\212\244\355\224\204\353\247\201 DB \354\240\221\352\267\274 \352\270\260\354\210\240.md" @@ -0,0 +1,47 @@ +# 섹션6. 스프링 DB 접근 기술 + +# 소개 + +- 순수 JDBC로 개발 체험 + - JDBC: 애플리케이션 서버와 DB를 SQL로 연결하는 기술 + +- 스프링 제공 JdbcTemplate으로 편한 JDBC 개발 체험 + +- JPA 체험: SQL을 생성해주는 기술 + +- 스프링 데이터 JPA 체험: JPA를 편하게 쓸 수 있게 감싼 기술 + +# H2 데이터베이스 설치 + +교육용으로 좋은 가볍고, 어드민 제공하는 데이터베이스 + +1. H2 설치 +2. H2 콘솔 - 연결 클릭 + + 데이터베이스 파일 있는지 확인 + + `~/test.mv.db` + +3. 파일을 직접 접근 시 동시접근 안되는 문제 있으므로 동시접근 위해 소켓 통해 접근 + + `JDBC URL`: `jdbc:h2:tcp://localhost/~/test` + + +## 테이블 생성 + +```sql +drop table if exists member CASCADE; +create table member +( + id bigint generated by default as identity, + name varchar(255), + primary key (id) +); +``` + +`generated by default as identity` : 값 없이 추가하면 DB가 자동으로 채운다 + +## SQL 관리 + +버전 컨트롤에 반영되도록 `프로젝트 폴더/sql/ddl.sql`에 테이블 생성 SQL을 작성한다. +