-
Notifications
You must be signed in to change notification settings - Fork 3
Q & A ๐โโ
- backend ์๋ฒ ์คํ ํ frontend ์๋ฒ๋ฅผ ๋์ ๋๋ฐ backend ๋ก ์์ฒญ์ด ์๋์ด ๊ฐ๋ ๊ฒ ๊ฐ๋ค.
- ์์ธ: mock server๋ฅผ ์ฌ์ฉํ๊ณ ์์ด์์
.env.developemnt
์์REACT_APP_USE_API_SERVER
๊ฐ์ true ๋ก ๋ณ๊ฒฝํ๋ฉด ์ค์ backend ์๋ฒ๋ก ์์ฒญ ๊ฐ
- java5 ๋ถํฐ ๋์
- ๋ฐฐ์ด or ๋ฆฌ์คํธ๋ง ์ฌ์ฉ๊ฐ๋ฅ
- ์ฝ๊ธฐ์ ์ฉ
List<Room> rooms = roomService.getRooms();
for (Room room : rooms) {
RoomResponse roomResponse = new RoomResponse();
roomResponse.setId(room.getId());
roomResponse.setTitle((room.getTitle()));
roomResponseList.add(roomResponse);
}
- java8 ๋ถํฐ ๋์
- List ์ธํฐํ์ด์ค > Collection ์ธํฐํ์ด์ค > Iterable ์ธํฐํ์ด์ค (forEach)
List<Room> rooms = roomService.getRooms();
rooms.forEach(room -> {
RoomResponse roomResponse = new RoomResponse();
roomResponse.setId(room.getId());
roomResponse.setTitle(room.getTitle());
roomResponseList.add(roomResponse);
});
- collection ์ stream์ผ๋ก ๋ณํํ ๋ค stream ์ ๋ฉ์๋ ์ฌ์ฉ๊ฐ๋ฅ(forEach, map, filter ๋ฑ)
List<Room> rooms = roomService.getRooms();
List<RoomResponse> roomResponses = rooms.stream()
.map(room -> {
RoomResponse roomResponse = new RoomResponse();
roomResponse.setId(room.getId());
roomResponse.setTitle(room.getTitle());
return roomResponse;
})
.collect(Collectors.toList());
List<Room> rooms = roomService.getRooms();
List<RoomResponse> roomResponses = rooms.stream()
.map(RoomResponse::create) // method reference
.collect(Collectors.toList());
//---------------------
@Getter
@Setter
public class RoomResponse {
private Long id;
private String title;
public static RoomResponse create(Room room) {
RoomResponse roomResponse = new RoomResponse();
roomResponse.setId(room.getId());
roomResponse.setTitle(room.getTitle());
return roomResponse;
}
}
- https://github.com/LandvibeDev/web-chat-backend/pull/12
- Ways to Iterate Over a List in Java | Baeldung
- Introduction to Java Streams | Baeldung
- Method References in Java | Baeldung
-
๋ฐฑ์๋ ์๋ฒ ํ๋ก์ ํธ์์
Controller
์Request/Response ๊ฐ์ฒด
์ ์ญํ ์ ๋ฌด์์ธ๊ฐ?์์ฒญ, ์๋ต body๊ฐ ํญ์ ์ํฐํฐ์ ์ผ์นํ์ง ์๋๋ค.
์์ฒญ, ์๋ต์ผ๋ก ์ธํด ์ํฐํฐ์ ๋ชจ๋ธ๋ง์ด ๊นจ์ง๋ฏ๋ก Side Effect๊ฐ ๋ฐ์ํ ์ ์๋ค.
์ํฐํฐ๋ Service ๋ก์ง์์๋ง ์ฌ์ฉ๋๋ค.
JSON ์ ํํํ๊ธฐ ์ํ Object๋ก
Request/Response ๊ฐ์ฒด
๋ฅผ ์ฌ์ฉํ๋ค.๋ฌผ๋ก
Map<key, value>
๋ฅผ ์ฌ์ฉํ ์ ์์ง๋ง, ์ํฐ ํจํด์ด๋ค.Map์ ๋ฌด๋ถ๋ณํ๊ฒ ์ฌ์ฉํ๊ฒ ๋๋ฉด, ์ ์ง ๋ณด์ ์ด๋ ค์ ๊ฒช๊ฒ ๋๋ค.
์ํฐํฐ๋ฅผ ์๋ต ๋ฐ์ดํฐ๋ก ์ฌ์ฉํ๋ฉด, ์๋ต ๋ฐ์ดํฐ์ ๋ณ๊ฒฝ์ด ๋ฐ์ดํฐ๋ฒ ์ด์ค๊น์ง ์ํฅ์ ๋ฏธ์น๊ฒ ๋๋ค.
์ํฐํฐ์ ๋ถ๋ฆฌํ๋ฉด, Request/Response ๊ฐ์ฒด๋ ์ญํ ์ ๋ง๊ฒ **์์ฒญ/์๋ต ๋ฐ์ดํฐ ๊ฒ์ฆ(Validation)**์ด ๊ฐ๋ฅํ๋ค.
-
์ํ ๋ฏน ๋์์ธ ์ชผ๊ฐ๋ ๊ธฐ์ค?
components ๋๋ ํ ๋ฆฌ๋ ์ต๋ํ ์ฌ์ฌ์ฉ์ฑ์ ๊ณ ๋ คํด์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ๋ฉด ์ข๋ค.
๋ํ components ์์์๋ atoms, molecules, organisms ๋ก ๋๋๋๋ฐ, atoms โ molecules โ organisms ์์ผ๋ก ํ์ ์ปดํฌ๋ํธ๋ค์ ์ด์ฉํด์ ์ปดํฌ๋ํธ๋ฅผ ๊ตฌ์ฑํ๋ค.
์๋ฅผ ๋ค์ด, molecules ์ Message ์ปดํฌ๋ํธ๋ atoms ์ Text ์ปดํฌ๋ํธ ๊ทธ๋ฃน์ผ๋ก '๋ด์ฉ'๊ณผ '๋ฑ๋ก ๋ ์ง'๋ฅผ ๊ตฌ์ฑํ ์ ์๋ค.
<StyledMessage who={who}> <TextMessage> <Text text={contents} size="md" boxModel="sm" /> <Text text={createdAt} size="sm" boxModel="sm" /> </TextMessage> </StyledMessage>
-
Mock ๋ฐ์ดํฐ ์ฌ์ฉ ๋ฐฉ์์ด ๋ฌด์์ธ๊ฐ?
ํ๋ก ํธ์ Mock ๋ฐ์ดํฐ๋ ์ค์ ๋ก Mock Server๋ฅผ ์ด์ฉํ๊ณ ์๋ ๊ฒ์ ์๋๋ค.
์๋ฒ์ชฝ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ์์ง ์ด๋ฃจ์ด์ง์ง ์์ ์ํฉ์์, ํ๋ก ํธ์์๋ ์ ํด ๋์ API ์คํ ๊ธฐ๋ฐ์ผ๋ก ๋ ๋ฆฝ์ ์ผ๋ก ๊ธฐ๋ฅ ๊ฐ๋ฐ์ ํ๊ธฐ ์ํด์ Mock ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ๋ค.
Axios ๋ชจ๋์ ์๋ฒ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ HTTP Client ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค.
ํ์ง๋ง ์์ง ์๋ฒ์ ๊ธฐ๋ฅ ๊ฐ๋ฐ์ด ๋์ง ์์๊ธฐ ๋๋ฌธ์, ์๋ฒ๋ก์ ์์ฒญ์ ๊ฐ๋ก์ฑ์ Mock(์์/๋์ฒด) ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํด์ผ๋ง ํ๋ค.
์ด๋, Axios ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํตํ ์์ฒญ์
axios-mock-adapter
์ด์ฉํด์ ์์(Mock) ๋ฐ์ดํฐ๋ก ์๋ตํด์ค ์ ์๋ค.function getRooms(mock) { mock.onGet('/api/rooms') .reply(200, { rooms: [{ id: 1, text: 'hello world' }, { id: 2, text: 'hi' }] }); } function createRooms(mock) { mock.onPost('/api/rooms') .reply(201, { id: 23, text: 'good' }); } export default { getRooms, createRooms };
์์ ๊ฐ์ด, ์ธ์๋ฅผ ์ ๋ฌ๋ฐ์ mock ๊ฐ์ฒด๋ฅผ ์ด์ฉํด์ ์์ฒญ์ ๋ํ ์๋ต์ ๊ฐ๋ฐ์๊ฐ ์์๋ก ์ง์ ํ ์ ์๋ค.
-
Response ๊ฐ์ฒด๋ก์ ๋ณํ์ Controller, Service ์ค ์ด๋์ ํ๋๊ฒ ๋ง์๊น?
Controller์์ ์ฒ๋ฆฌํ๋ฉด ์ปจํธ๋กค๋ฌ๊ฐ ์ํฐํฐ์ ๋ํ ์์กด์ฑ์ด ์๊ธฐ๊ณ , Service์์ ์ฒ๋ฆฌํ๋ฉด ์๋น์ค๊ฐ Response์ ๋ํ ์์กด์ฑ์ด ์๊ธด๋ค.
ํ์ง๋ง, ์์ฒญ/์๋ต์ ๋ํ ์ฒ๋ฆฌ๋ ์ปจํธ๋กค๋ฌ์ ์ฑ ์์ด๊ธฐ ๋๋ฌธ์ Contoller์์ ์ฒ๋ฆฌํ๋ ๊ฒ ๋ง์ ๊ฑฐ ๊ฐ๋ค.
๋ํ, Message โ MessageResponse ๋ก์ ๋ณํ์ MessageResponse ๋ด๋ถ์์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด ์ปจํธ๋กค๋ฌ์์ ์ข ๋ ๊น๋ํ ์ฝ๋๋ฅผ ์ ์งํ ์ ์์ ๊ฒ ๊ฐ๋ค. (๋ฌผ๋ก ์ํฉ์ ๋ฐ๋ผ ๋ค๋ฅผ ์ ์๊ณ , ๊ฐ๋ฐ ์คํ์ผ์ ๋ค๋ฅผ ์ ์๋ค.)
-
์ผ๋๋ค ๊ด๊ณ์์ ์ฐ๊ด ๊ด๊ณ๋ฅผ ์ด๋์ ์ค์ ํ๋ ๊ฒ์ด ์ ํฉํ ๊น?
-