๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • ์žฅ์›์ต ๊ธฐ์ˆ ๋ธ”๋กœ๊ทธ
๐Ÿ’Š Java & Kotlin & Spring/- spring framework +

[Spring & Springboot-JPA] JPA๋ฅผ ์ด์šฉํ•œ CRUD ๋ฉ”์„œ๋“œ ์ž‘์„ฑํ•˜๊ธฐ - 2 (create ๋ฉ”์„œ๋“œ๋กœ ํšŒ์›๊ฐ€์ž… ์„œ๋น„์Šค ๋งŒ๋“ค๊ธฐ)

by Wonit 2020. 1. 27.

ํ•ด๋‹น ํฌ์ŠคํŠธ๋Š” ์—ฌ๋Ÿฌ ํŽธ์œผ๋กœ ๋‚˜๋ˆ„์–ด์ ธ ํ•˜๋‚˜์˜ ๊ฐœ๋…์„ ์ด๋ฃจ๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ๋ณด๋‹ค ์ž์„ธํ•œ ํ•™์Šต๊ณผ ์ดํ•ด๋ฅผ ์œ„ํ•ด ๋‹ค๋ฅธ ํฌ์ŠคํŠธ๋„ ์ฐธ๊ณ ํ•ด์ฃผ์„ธ์š” :)


์ „ ์‹œ๊ฐ„์— ์šฐ๋ฆฌ๋Š” CRUD๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ ์„ค์ •์„ ํ•˜์˜€๋‹ค. ์ด์ œ ์‹ค์ œ Controller์„ ์ด์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ณด์ž!
ํ•™์Šต์€ ํ…Œ์ŠคํŠธ์ฝ”๋“œ๋ฅผ ๋จผ์ € ์ž‘์„ฑํ•˜๊ณ  ์„œ๋น„์Šค๋ฅผ ๋“ฑ๋กํ•˜๋Š” ์ˆœ์„œ๋กœ ์ด๋ฃจ์–ด์งˆ ์˜ˆ์ •์ด๋‹ค.

CRUD๋ฅผ ์œ„ํ•œ Controller์™€ ํ…Œ์ŠคํŠธ๋ฅผ ์ค€๋น„ํ•ด๋ณด์ž.

์ „์— User์— ๋Œ€ํ•œ Entity์™€ Repository๋ฅผ ๋งŒ๋“ค์—ˆ์œผ๋ฏ€๋กœ ์ด์ œ ์„œ๋น„์Šค๋ฅผ ์œ„ํ•œ Controller๋ฅผ ๋งŒ๋“ค์ž.

 

  1. controller ํŒจํ‚ค์ง€๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค. ๊ทธ๋ฆฌ๊ณ  UserController์„ ๋งŒ๋“ ๋‹ค.

 

 

  1. ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด test ๋””๋ ‰ํ† ๋ฆฌ ํ•˜์œ„์— repository ๋””๋ ‰ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ค๊ณ  UserRepositoryTests ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค์–ด ๋ ˆํฌ์ง€ํ† ๋ฆฌ ํ…Œ์ŠคํŠธ ์ค€๋น„๋ฅผ ๋งˆ์นœ๋‹ค.

 

 

Test First!!

User์˜ Create Test

 

UserRepositoryTests ํด๋ž˜์Šค์—์„œ JpatestApplicationTests๋ฅผ ์ƒ์†๋ฐ›์•„์ค€๋‹ค.

public class UserRepositoryTests extends JpatestApplicationTests {
    @Autowired
    private UserRepository userRepository;
}
  • @Autowired ์–ด๋…ธํ…Œ์ด์…˜์œผ๋กœ Spring์˜ IOC๊ฐ€ Bean์˜ ์˜์กด์„ฑ์„ ์•Œ์•„์„œ ์ฃผ์ž…ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ค€๋‹ค.

 

Test method ๋งŒ๋“ค๊ธฐ

Create์˜ ํ…Œ์ŠคํŠธ๋ฅผ ์œ„ํ•ด์„œ @Test ์–ด๋…ธํ…Œ์ด์…˜์„ ๋ถ™ํžŒ ๋ฉ”์„œ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

 

๊ทธ๋ฆฌ๊ณ ์„œ ์•„๊นŒ @Data๋กœ ๋กฌ๋ณต์„ ์‚ฌ์šฉํ•ด์„œ Getter/Setter์„ ๋งŒ๋“ค์—ˆ๋Š”๋ฐ set ์†์„ฑ์„ ์ด์šฉํ•ด์„œ ํ•ด๋‹น ๊ฐ’์„ ์ณ์ฃผ์ž.

 

 

์œ„์—์„œ ๋ดค์„ ๋•Œ ๋ถ„๋ช…ํžˆ ์šฐ๋ฆฌ๋Š” 4๊ฐœ์˜ ํ…Œ์ด๋ธ”์ด ์žˆ์—ˆ๋‹ค. Id, Account, Password, name ๊ทผ๋ฐ 3๊ฐœ๋งŒ set์„ ํ•ด์ฃผ๋Š” ์ด์œ ๊ฐ€ ์•„๊นŒ ์šฐ๋ฆฌ๊ฐ€ MYsql์—์„œ ์†์„ฑ ์„ค์ •ํ•  ๋•Œ AutoIncrement๋ฅผ ์„ค์ •ํ•ด ์คฌ๊ธฐ ๋•Œ๋ฌธ์— ๋„ฃ์–ด์ฃผ์ง€ ์•Š์•„๋„ ์“ธ ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋Ÿฌ๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™์ด Mysql Workbench์— ์ž˜ ๋“ค์–ด์˜ค๋Š” ๊ฒƒ์„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.

User์˜ ํšŒ์›๊ฐ€์ž… ์„œ๋น„์Šค

์ด์ œ ํ…Œ์ŠคํŠธ๊ฐ€ ๋๋‚ฌ์œผ๋‹ˆ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด๋ณด์ž!

 

์•„๊นŒ ๋งŒ๋“ค์—ˆ๋˜ controller ํด๋ž˜์Šค๋กœ ์ด๋™ํ•ด์„œ UserController์„ ๋งŒ๋“ค์–ด ์ฃผ์ž.

์˜ˆ์ƒ ๊ฒฐ๊ณผ : http://localhost:8080/index/join์˜ ๊ฒฝ๋กœ์—์„œ join ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋œ๋‹ค๋ฉด "OO๋‹˜์˜ ํšŒ์›๊ฐ€์ž…์ด ์„ฑ๊ณต์ ์œผ๋กœ ์ด๋ฃจ์–ด ์กŒ์Šต๋‹ˆ๋‹ค." ๋ผ๋Š” ๋ฉ”์„ธ์ง€๋ฅผ ๋„์šด๋‹ค.

 

๊ทธ๋Ÿผ ์ฒซ ๋ฒˆ์งธ๋กœ ํ…Œ์ŠคํŠธํ™˜๊ฒฝ๊ณผ ๋™์ผํ•˜๊ฒŒ @Autowired๋กœ ์˜์กด์„ฑ์„ ์ฃผ์ž…์‹œ์ผœ์ฃผ๊ณ  ์‹œ์ž‘ํ•œ๋‹ค.

 

 

@PostMapping

 

์ •๋ณด์˜ ์ „์†ก ๋ฐ ๊ฐ€๊ณต์€ PostBody์— ํฌํ•จ์‹œ์ผœ์„œ ๋ณด๋‚ด์•ผ ํ•œ๋‹ค๋Š” REST ๊ทœ๊ฒฉ์— ๋”ฐ๋ฅด๊ณ  ๋˜ํ•œ ๋งŒ์•ฝ ํšŒ์›๊ฐ€์ž… ์ •๋ณด๊ฐ€ 30๊ฐ€์ง€๊ฐ€ ์ž…๋ ฅ์œผ๋กœ ๋“ค์–ด์˜จ๋‹ค๋ฉด Get ์œผ๋กœ ๋ฐ›๊ธฐ์—” URL์˜ ๊ธธ์ด๋ฅผ ์ดˆ๊ณผํ•˜๋ฏ€๋กœ, ํšŒ์›๊ฐ€์ž…์€ Post๋กœ ๋ฐ›๋Š”๋‹ค.

User newUser = userRepository.save(user);

RequestBody์— ๊ฐ์‹ธ์ ธ์„œ ๋“ค์–ด์˜ฌ User๊ฐ์ฒด๋ฅผ UserRepository๋กœ Create๋ฅผ ํ•ด์ค€๋‹ค.

API Tester๋กœ Post ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ๋‚ ๋ ค๋ณด์ž.

๋ฉ”์„œ๋“œ๋Š” Post๋กœ ํ•˜๊ณ  ํ•ด๋‹น URL๋กœ Body์— JSON ํƒ€์ž…์œผ๋กœ ๋ณด๋‚ด์ฃผ๋ฉด ์ •ํ™•ํ•œ ๊ฒฐ๊ณผ๊ฐ€ ์ถœ๋ ฅ๋œ๋‹ค.

 

๋˜ํ•œ Mysql Workbench ์—๋„ ์šฐ๋ฆฌ๊ฐ€ ๋ณด๋‚ธ Request์™€ ๋ถ€ํ•ฉํ•˜๋Š” ๊ฒฐ๊ณผ๊ฐ€ ์ €์žฅ๋œ๋‹ค.

 

๋‹ค์Œ์‹œ๊ฐ„์€ Read ๋ฉ”์„œ๋“œ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด์ž.

๋Œ“๊ธ€