ID)๋ฅผ ๊ฐ์ง3 Layer Architecture์ ๋ฐ๋ผ ๊ฐ ๊ณ์ธต์ ์ญํ ์ ๋ง์ถฐ ๊ฐ๋ฐCookie/Session ๋ฐฉ์์ผ๋ก ์ฒ๋ฆฌ@Entity : ํ
์ด๋ธ๊ณผ ๋งคํ๋๋ ํด๋์ค์ ์ฌ์ฉ@Id : ๊ธฐ๋ณธ ํค ํ๋ ์ง์ @GeneratedValue : ๊ธฐ๋ณธ ํค ์๋ ์์ฑ ์ ๋ต ์ค์ @Repository : DAO ํด๋์ค์์ ๋ช
์@ManyToOne / @OneToMany : ํ
์ด๋ธ ๊ฐ ์ฐ๊ด๊ด๊ณ ์ค์ @JoinColumn : join ๋์ ์ปฌ๋ผ ์ง์ ๐ Git Hub ๋งํฌ & ReadMe / API ๋ช ์ธ์
| ํ์๊ธฐ๋ฅ | ๋จ๊ณ๋ณ | ์๊ตฌ์ฌํญ |
|---|---|---|
| โ | Level 0 | API ๋ช
์ธ์ ์์ฑํ๊ธฐ ERD ์์ฑํ๊ธฐ SQL ์์ฑํ๊ธฐ |
| โ | Level 1 | ์ผ์ ์์ฑ (์์ฑ์๋ช
, ์ ๋ชฉ, ๋ด์ฉ, ์์ฑ์ผ, ์์ ์ผ) ์ ์ฒด ์ผ์ ์กฐํ ์ผ์ ์์ ์ผ์ ์ญ์ |
| โ | Level 2 | ์ ์ ์์ฑ (์ ์ ๋ช
, ์ด๋ฉ์ผ, ์์ฑ์ผ, ์์ ์ผ) ์ ์ ์กฐํ ์ ์ ์์ ์ ์ ์ญ์ ์ผ์ ์ ์ ์ ์๋ณ์๋ก ์ฐ๊ด๊ด๊ณ ์ค์ |
| โ | Level 3 | ํ์๊ฐ์ ์ ๋น๋ฐ๋ฒํธ ํ๋ ์ถ๊ฐ |
| โ | Level 4 | ๋ก๊ทธ์ธ ๊ธฐ๋ฅ ๊ตฌํ (Cookie/Session ํ์ฉ) ๋ก๊ทธ์ธ ํํฐ ๋ฑ๋ก, ํํฐ๋ก ์ธ์ฆ ํ์๊ฐ์ /๋ก๊ทธ์ธ์ ์ธ์ฆ ์ ์ธ ๋ก๊ทธ์ธ ์คํจ ์ HTTP 401 ์๋ต, ์์ธ ์ฒ๋ฆฌ |
https://sungwookoo.tistory.com/1
https://dev-allday.tistory.com/77
https://beaniejoy.tistory.com/93
https://congsong.tistory.com/38
PATCH ์์ฒญ์ ๋ณด๋๋๋ฐ, ์๋ต์ด ์ ์์ ๋ฌธ์ ๊ฐ ์๋ ์ค ์์๋ค!Repository์ save() ๋๋ฌธ์ด์๋ค. insert/update๋ฅผ ์๋์ผ๋ก ์ฒ๋ฆฌํด์ค๊ฑฐ๋ผ ์๊ฐํ๋๋ฐ, ๋ด ์ฝ๋์์๋ ์ผ๋ถ ์์ ์ ๊ธฐ์กด ์ํฐํฐ๊ฐ ์๋ ๊ฒ์ผ๋ก ํ๋จํด์์ธ์ง INSERT๋ง ํ๊ณ ์์๋คโ ๋ฌธ์ ์ฝ๋
Schedule schedule = new Schedule(title, description); Schedule updatedSchedule = scheduleRepository.save(schedule);
โ ํด๊ฒฐ ์ฝ๋
![]()
Save๋ Insert์ Update๋ฅผ ์ด๋ป๊ฒ ๊ตฌ๋ถํ ๊น? / JPA ๋ณ๊ฒฝ ๊ฐ์ง
๊ตฌ๊ธ๋ง ํ ๊ฒฐ๊ณผ @DynamicUpdate ๋ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒ ๊ฐ์์ผ๋,,
๋๋ ์ผ๋จ @Transactional์ ์ถ๊ฐํ๊ณ update ๋ฅผ ์ฌ์ฉํ๋ค
PATCH ํ๋๋,โ ํด๊ฒฐ ์ฝ๋
![]()
์กฐ๊ฑด๋ฌธ์ผ๋ก ๊ธฐ์กด ๋ฐ์ดํฐ๊ฐ ์กด์ฌํ๋์ง ์ฐพ์๋๊ณ
์๋ก ๋ฐ์ ์์ฒญ์ด null์ด๋ฉด ๊ธฐ์กด ๊ฐ์ ์ ์ง, null์ด ์๋๋ฉด ๊ทธ ๊ฐ์ผ๋ก ์
๋ฐ์ดํธ ํ๋๋ก ํ๋ค
WhiteList ๋ฅผ ์ค์ URI ๊ฒฝ๋ก์ ๋ง๊ฒ ์์ ํ๋ค
ํญ์ URI๋ฅผ ํ์ธํ๊ณ ์์ฑํด์ผ ํ๋ค..!
username์ request๋ก ๋ฐ์์ ์ฐ๊ณ ์์๋๋ฐ,username์ ๋ ๋ฐ์ ํ์๊ฐ ์์ด์ก๋ค.โ ๊ธฐ์กด ์ฝ๋
// 1. ์ค์ผ์ค ์์ฑ @PostMapping public ResponseEntity<ScheduleResponseDto> save( @RequestBody ScheduleRequestDto requestDto ){ ScheduleResponseDto scheduleResponseDto = scheduleService.save(requestDto.getTitle(), requestDto.getDescription(), requestDto.getUsername()); return new ResponseEntity<>(scheduleResponseDto, HttpStatus.CREATED);
โ ํด๊ฒฐ ์ฝ๋
![]()
request.getSession().getAttribute("username") ์์ฑ,
๊ทธ๋ฆฌ๊ณ ScheduleResopnseDto ์์๋ username ํ๋๋ฅผ ์์ ์์ ๋ฒ๋ ธ๋ค
errorCode.USER_NOT_FOUND๋ฅผ ์ฌ์ฉํ๋๋ฐ, ์๊พธ๋ง ์ธ์คํด์ค ์ค๋ฅ ๋ฐ์,,โ ์๋ฌ ๋ฉ์ธ์ง
Static member 'com. example. schedulerproject. exception. ErrorCode. USER_NOT_FOUND' accessed via instance referenceโ ์๋ฌ ์ฝ๋
public class UserNotFoundException extends CustomException{ public UserNotFoundException(ErrorCode errorCode) { super(errorCode.USER_NOT_FOUND); } }
ErrorCode์์ enum์ static์ผ๋ก ์ ์ธ๋ ๊ฒ๋ค์ ์ธ์คํด์ค ์ฌ์ฉํ๋ฏ ์ฌ์ฉํด์ ๋ฌธ์ ๊ฐ ์์๋ค!super(ErrorCode.USER_NOT_FOUND); ํ๊ธ์์ฉ๋ง ๋ฐ๊พธ๋ ํด๊ฒฐ๐