์ „์ฒด ๊ธ€ 68

[SpringBoot] 6.6_์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA

์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๋ฅผ ์“ฐ๋ฉด ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์— ๊ตฌํ˜„ ํด๋ž˜์Šค ์—†์ด ์ธํ„ฐํŽ˜์ด์Šค๋งŒ์œผ๋กœ ๊ฐœ๋ฐœ์„ ์™„๋ฃŒํ•  ์ˆ˜ ์žˆ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ๋ฐ˜๋ณต ๊ฐœ๋ฐœํ•ด์˜จ ๊ธฐ๋ณธ CRUD ๊ธฐ๋Šฅ๋„ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA๊ฐ€ ๋ชจ๋‘ ์ œ๊ณตํ•จ. ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‚ฌ์šฉํ•  ๊ฒฝ์šฐ ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค. (์„ค์ •์€ ์•ž์˜ JPA ์„ค์ •๊ณผ ๋™์ผ) ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ์ œ๊ณต ๊ธฐ๋Šฅ- ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ํ†ตํ•œ ๊ธฐ๋ณธ์ ์ธ CRUD - findByName() , findByEmail() ์ฒ˜๋Ÿผ ๋ฉ”์„œ๋“œ ์ด๋ฆ„ ๋งŒ์œผ๋กœ ์กฐํšŒ ๊ธฐ๋Šฅ ์ œ๊ณต - ํŽ˜์ด์ง• ๊ธฐ๋Šฅ ์ž๋™ ์ œ๊ณต ์Šคํ”„๋ง ๋ฐ์ดํ„ฐ JPA ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ (์ธํ„ฐํŽ˜์ด์Šค)package hello.hello_spring.repository;import hello.hello_spring.domain.Member;import org.springframewo..

[SpringBoot] 6.5_JPA

JPA(์ž๋ฐ” ํผ์‹œ์Šคํ„ด์Šค API) vs MyBatis JPA (์ž๋ฐ” ํผ์‹œ์Šคํ„ด์Šค API) MyBatis (๋งˆ์ด๋ฐ”ํ‹ฐ์Šค)๊ณตํ†ต์ Java ๊ธฐ๋ฐ˜์˜ Spring ๋˜๋Š” SpringBoot์—์„œ ์‚ฌ์šฉDB์—ฐ๋™ ๊ธฐ์ˆ DB๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๋ฒˆ๊ฑฐ๋กœ์šด ๋ฐ˜๋ณต์ž‘์—…์„ ์—†์• ์คŒ์ฐจ์ด์ ORM(Object Relation Mapping) ๊ธฐ์ˆ : ๊ฐ์ฒด์™€ DB์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž๋™์œผ๋กœ ๋งคํ•‘SQL๋ฌธ๊นŒ์ง€ ์ž๋™์œผ๋กœ ์ƒ์„ฑ,DB ๋ฐ์ดํ„ฐ์™€ Java ๊ฐ์ฒด๋ฅผ ๋งคํ•‘์‹œ์ผœ์คŒ์œผ๋กœ์จ MyBatis๋ณด๋‹ค ํŽธ๋ฆฌํ•˜์ง€๋งŒ ๋ฐฐ์šฐ๊ธฐ ์–ด๋ ค๊ฐ์ฒด ์ง€ํ–ฅ์  ๊ฐœ๋ฐœ์— ์ค‘์ ๊ฐ„๋‹จํ•œ ๋งคํ•‘ ๋ฐ ๊ฐ์ฒด ์ง€ํ–ฅ์ ์ธ ์ ‘๊ทผ์ด ํ•„์š”ํ•œ ๊ฒฝ์šฐ ์„ ํƒSQL Mapper ๊ธฐ์ˆ : ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ SQL ์‹คํ–‰ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ฒด์— ๋งคํ•‘XML ํŒŒ์ผ๋กœ SQL๋ฌธ Java์™€ ๋ถ„๋ฆฌSQL๊ฐœ๋ฐœ๊ณผ ์œ ์ง€๋ณด์ˆ˜์— ์šฉ์ด๋™์  SQL ์ƒ์„ฑ ๊ธฐ๋Šฅ์ „์ž์ •๋ถ€ ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์‚ฌ์šฉ๋ณต..

[SpringBoot] 6.4_์Šคํ”„๋ง JdbcTemplate

JdbcTemplate์€ ์ˆœ์ˆ˜ Jdbc์™€ ๋™์ผํ•œ ํ™˜๊ฒฝ์„ค์ •์„ ํ•˜๋ฉด ๋จ. ์Šคํ”„๋ง JdbcTemplate ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌpackage hello.hello_spring.repository;import hello.hello_spring.domain.Member;import org.springframework.jdbc.core.JdbcTemplate;import org.springframework.jdbc.core.RowMapper;import org.springframework.jdbc.core.namedparam.MapSqlParameterSource;import org.springframework.jdbc.core.simple.SimpleJdbcInsert;import javax.sql.DataSource;..

[SpringBoot] 6.3_์Šคํ”„๋ง ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ (DB์—ฐ๊ฒฐ)

์Šคํ”„๋ง ์ปจํ…Œ์ด๋„ˆ์™€ DB๊นŒ์ง€ ์—ฐ๊ฒฐํ•˜๋Š” ํ†ตํ•ฉ ํ…Œ์ŠคํŠธ ์ง„ํ–‰ํ•ด๋ณด๊ธฐ!package hello.hello_spring.service;import hello.hello_spring.domain.Member;import hello.hello_spring.repository.MemberRepository;import hello.hello_spring.repository.MemoryMemberRepository;import org.junit.jupiter.api.AfterEach;import org.junit.jupiter.api.BeforeEach;import org.junit.jupiter.api.Test;import org.springframework.beans.factory.annotation.Autowired;i..

[SpringBoot] 6.2_์ˆœ์ˆ˜ JDBC

ํ™˜๊ฒฝ ์„ค์ • * build.gradle ํŒŒ์ผ์— jdbc, h2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๊ด€๋ จ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์ถ”๊ฐ€ dependencies { implementation 'org.springframework.boot:spring-boot-starter-thymeleaf' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.boot:spring-boot-starter-jdbc' runtimeOnly 'com.h2database:h2' testImplementation 'org.springframework.boot:spring-boot-starter-test' test..

[SpringBoot] 6.1_์Šคํ”„๋ง DB ์ ‘๊ทผ ๊ธฐ์ˆ (H2)

H2 ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค์น˜ H2 DB : ๊ฐœ๋ฐœ์ด๋‚˜ ํ…Œ์ŠคํŠธ ์šฉ๋„๋กœ ๊ฐ€๋ณ๊ณ  ํŽธ๋ฆฌํ•œ DB, ์›น ํ™”๋ฉด ์ œ๊ณตhttps://www.h2database.com/html/main.html H2 Database EngineH2 Database Engine Welcome to H2, the Java SQL database. The main features of H2 are: Very fast, open source, JDBC API Embedded and server modes; in-memory databases Browser based Console application Small footprint: around 2.5 MB jar file size     Suppwww.h2database.com - ์„ค์น˜ ํ›„ h2.sh ..

[SpringBoot] 5_ํšŒ์›๊ด€๋ฆฌ-์›น MVC ๊ฐœ๋ฐœ

ํšŒ์› ์›น ๊ธฐ๋Šฅ - ํ™ˆ ํ™”๋ฉด ์ถ”๊ฐ€ํ™ˆ ์ปจํŠธ๋กค๋Ÿฌpackage hello.hello_spring.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;@Controllerpublic class HomeController { @GetMapping("/") public String home() { return "home"; }} ํšŒ์› ๊ด€๋ฆฌ ํผ HTML Hello Spring ํšŒ์› ๊ธฐ๋Šฅ ํšŒ์›๊ฐ€์ž… ํšŒ์›์กฐํšŒ  ์ฐธ๊ณ ) ์ปจํŠธ๋กค๋Ÿฌ๊ฐ€ ์ •์  ํŒŒ์ผ๋ณด๋‹ค ์šฐ์„ ์ˆœ์œ„๊ฐ€ ๋†’์•„์„œ ๋จผ์ € ์ปจํŠธ๋กค๋Ÿฌ๋ถ€ํ„ฐ ์ฐพ๊ณ , ์—†์œผ๋ฉด..

[SpringBoot] 4_์Šคํ”„๋ง ๋นˆ๊ณผ ์˜์กด๊ด€๊ณ„

์Šคํ”„๋ง ๋นˆ์„ ๋“ฑ๋กํ•˜๊ณ , ์˜์กด๊ด€๊ณ„ ์„ค์ •ํ•˜๊ธฐ * ํšŒ์› ์ปจํŠธ๋กค๋Ÿฌ์— ์˜์กด๊ด€๊ณ„ ์ถ”๊ฐ€package hello.hello_spring.controller;import hello.hello_spring.service.MemberService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;@Controllerpublic class MemberController { private final MemberService memberService; //์ƒ์„ฑ์ž ์ƒ์„ฑ ๋‹จ์ถ•ํ‚ค : alt + Insertํ‚ค @Autowired // ์˜์กด๊ด€๊ณ„ ์ฃผ์ž… public Memb..

[SpringBoot] 3.3_ํšŒ์› ์„œ๋น„์Šค ๊ฐœ๋ฐœ ๋ฐ ํ…Œ์ŠคํŠธ

ํšŒ์› ๊ฐ€์ž… & ํšŒ์› ์กฐํšŒpackage hello.hello_spring.service;import hello.hello_spring.domain.Member;import hello.hello_spring.repository.MemberRepository;import hello.hello_spring.repository.MemoryMemberRepository;import java.util.List;import java.util.Optional;public class MemberService { // private final MemberRepository memberRepository = new MemoryMemberRepository(); // DI (์˜์กด์„ฑ ์ฃผ์ž…) ํŒจํ„ด์œผ๋กœ ๋ฐ”๊พธ๊ธฐ pri..

[SpringBoot] 3.2_ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ผ€์ด์Šค ์ž‘์„ฑ

๊ฐœ๋ฐœํ•œ ๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•  ๋•Œ ์ž๋ฐ”์˜ main ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด์„œ ์‹คํ–‰ํ•˜๊ฑฐ๋‚˜, ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ปจํŠธ๋กค๋Ÿฌ๋ฅผ ํ†ตํ•ด์„œ ํ•ด๋‹น๊ธฐ๋Šฅ์„ ์‹คํ–‰ํ•œ๋‹ค. ์ด๋Ÿฌํ•œ ๋ฐฉ๋ฒ•์€ ์ค€๋น„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”๋ฐ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๊ณ , ๋ฐ˜๋ณต ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๊ณ  ์—ฌ๋Ÿฌ ํ…Œ์ŠคํŠธ๋ฅผ ํ•œ๋ฒˆ์— ์‹คํ–‰ํ•˜๊ธฐ ์–ด๋ ต๋‹ค๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค. ์ž๋ฐ”๋Š” JUnit์ด๋ผ๋Š” ํ”„๋ ˆ์ž„์›Œํฌ๋กœ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•ด์„œ ์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•œ๋‹ค.  * ํšŒ์› ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ฉ”๋ชจ๋ฆฌ ๊ตฌํ˜„์ฒด ํ…Œ์ŠคํŠธ (src/test/java ํ•˜์œ„ ํด๋”์— ์ƒ์„ฑ) package hello.hello_spring.repository;import hello.hello_spring.domain.Member;import org.assertj.core.api.Assertions;import org.junit.jupiter.api.AfterEach;i..