๊ตฌํ ํ
์คํธ๋ก ์งํํ ๋ฉ๋ชจ์ฅ ํ๋ก์ ํธ๋ฅผ Flask์์ Spring์ผ๋ก ์ฎ๊ธฐ๋ ์์
์ ๋ง๋ฌด๋ฆฌํ๋ค.
์ด์ ์ ์ฃผ์ ์ด์๋ Flask์์ Spring์ผ๋ก ์ฎ๊ธฐ๋ ๊ฒ ์ด์๊ณ ์ค๋์ NoSQL์์ RDBMS์๋ค.
์ค๋์ ๊ตฌํ ์ด์ ํ๋๋ฅผ ์ ๋ฆฌํด๋ณด์.
๋ฌธ์ ๋ ์ํฐํฐ๋ฅผ ๊ทธ๋๋ก ๋ฐํํ๋๋ฐ ์๋ค.
Fetch type์ Lazy๋ก ์ค์ ํ๊ฒ ๋๋ฉด User๋ฅผ ์ง์ ์กฐํํ์ง ์๋ ์ด์ Memo์ User๋ ํ๋ก์ ๊ฐ์ฒด๋ก ์ด๊ธฐํ๋๋ค. ์ผ๋จ ์ฌ๊ธฐ์๋ ํ๋ก์ ๊ฐ์ฒด๋ฅผ NULL์ ํผํ๊ธฐ ์ํ ๋น ๊ฐ์ฒด๋ก ์ดํดํด๋ ๋ ๊ฒ ๊ฐ๋ค.
์ด๋ ๊ฒ ํ๋ก์๋ก ์ด๊ธฐํ๋ User๋ฅผ Jsonํํ๋ก ๋ฆฌํดํ๋ ค๊ณ ํ๋ ์๋ฌ๋ฅผ ๋ฐ์์ํจ ๊ฒ์ด๋ค.
2๊ฐ์ง ํด๊ฒฐ๋ฐฉ๋ฒ์ด ์๋ค.
์ฒซ๋ฒ์งธ ๋ฐฉ๋ฒ์ User์ ์๋ฌด ํ๋์ Getter๋ฅผ ํธ์ถํด์ ํ๋ก์๋ฅผ ๊ฐ์ ๋ก ์ด๊ธฐํ์ํค๋ ๋ฐฉ๋ฒ์ด๋ค.
๋๋ Getter๋ก ํ๋ก์๋ฅผ ์ฐ๋ฌ์ ๊นจ์ด๋ค ๋ผ๊ณ ์ดํดํ๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ์กฐํ๋ ์ํฐํฐ์ ํ์ํ ๋ถ๋ถ๋ง DTO๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด๋ค.
์ด ๋ฐฉ๋ฒ์ Lazy ๋ก๋ฉ์์ ํ๋ก์ ์ด๊ธฐํ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ๋ ๋์์ ํ์ํ ํ๋๋ง์ API ์คํ์ ๋ฑ ๋ง๊ฒ ๋ฆฌํดํ ์ ์๋ค๋ ์ฅ์ ์ด ์๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ์ฉํด๋ดค๋ค.
์กฐํํ Memo๋ฅผ ์๋ DTO๋ก ๋ณํํด์ ํด๋ผ์ด์ธํธ๋ก ๋ด๋ ค์คฌ๋ค.
์ด ๋ ์กฐํ๋ Memo๊ฐ Pageํ์
์ด์ฌ์ ์ด์ง ๊ณ ๋ฏผ์ ํ๋๋ฐ ๊ทธ๋ฅ DTO์ ํ์ฌ ํ์ด์ง์ ํ์ํ ํ๋๋ฅผ ์ถ๊ฐํด์ฃผ๋ ๋ฐฉ์์ผ๋ก ๊ตฌํํ๋ค.
@NoArgsConstructor
@Builder
@Data
@AllArgsConstructor
public class MemoListDto {
private List<MemoDto> memos;
private int page;
private int size;
private int totalPages;
}
@Builder
@AllArgsConstructor
@Data
public class MemoDto {
private Long id;
private String title;
private String contents;
private Long clickCount;
private String username;
private LocalDateTime createdAt;
private List<String> comments = new ArrayList<>();
}
Entity -> DTO
List<MemoDto> memoDtos = memos.stream().map(m -> {
return MemoDto.builder()
.id(m.getId())
.title(m.getTitle())
.contents(m.getContents())
.clickCount(m.getClickCount())
.username(m.getIsAnonymous() ? "๋นํ์" : m.getUser().getUsername())
.createdAt(m.getCreatedAt()).build();
}).collect(Collectors.toList());
MemoListDto memoList = MemoListDto.builder()
.memos(memoDtos)
.page(memos.getNumber())
.size(memos.getSize())
.totalPages(memos.getTotalPages()).build();
return memoList;
์ฌ์ค ์ด ๋ถ๋ถ์ด JPA์์ ๊ต์ฅํ ์ค์ํ๊ณ ์ฝ๊ฒ ๋ง์ฃผํ๋ ์๋ฌ๋ผ๊ณ ํด์ ์์ ์ ๊ณต๋ถํ์๋๋ฐ ๋ฐ๋ก ๊น๋จน์๋ค ใ ์ด๋ ๊ฒ ์ค์ ์ผ๋ก ๋ณต์ต์ ํด์ ๋คํ์ด๋ค...