-
Notifications
You must be signed in to change notification settings - Fork 178
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[1, 2단계 - Spring 적용하기] 배럴(김나은) 미션 제출합니다. #245
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
안녕하세요 배럴. 이번 미션을 함께할 미립입니다 :)
큰 변화 없이 스프링을 잘 적용해주신것 같아요.
다만, HTTP 메소드가 각각 어떤 상황에서 활용되는지 학습해보면 좋을 것 같아요.
미션 진행하면서 궁금하거나 어려운점 있으면 편하게 DM 주세요.
this.springChessService = springChessService; | ||
} | ||
|
||
@GetMapping(value = "/startNewGame", produces = MediaType.APPLICATION_JSON_VALUE) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
https://javaplant.tistory.com/18
각각 상황에 맞는 HTTP 메소드를 활용해보는 것은 어떤가요 ?
produces 가 하는 역할을 설명해주실 수 있나요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
[Spring] GetMapping, PostMapping - 4
내용
@PostMapping(path="/home", consumes="application/json")
- consumes 는
Content-Type
헤더에 기반한다. @GetMapping(path = "/pets/{petId}", produces = "application/json")
- produces 는
Accept
헤더에 기반한다. Content-Type
은 해당 바디의 타입이 무엇인지를 나타내며Accept
는 받을 수 있는 타입을 나타낸다.- 명시하지 않으면 기본적으로 json 타입이 적용되는 듯 하다.
- MediaType 클래스의 상수인
APPLICATION_JSON_VALUE
,APPLICATION_XML_VALUE
를 많이 사용한다.
링크
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이렇게 이해하고 있는데 맞을까요?~!
http 관련해서는 DM으로 질문드릴게요 :)
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
consumes나 produces는 굳이 명시하진 않나요~~??
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
저는 개인적으로 명시할 이유가 없다면 생략하는 편입니다.
개발자마다 취향 차이가 있는것 같아요.
|
||
private ChessGame generateChessGame(final Team blackTeam, final Team whiteTeam) { | ||
final String chessGameQuery = "SELECT * FROM chess_game"; | ||
final ChessGameTableDto chessGameTableDto = this.jdbcTemplate.queryForObject(chessGameQuery, actorRowMapper); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
검색 되는 게임이 없으면 어떻게 동작하나요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
해당 내용은 status 코드를 통해서 클라이언트단에서 alert 창을 띄워주게 만들었어요! 자바로직이나 Dao 측에서 처리해줄 수 있는 방법이 떠오르지 않아서요ㅠㅠ 혹시 방법이 있나요..?🙏
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
아 컨트롤러에서 DAO 에서 발생하는 버그를 직접 컨트롤하고 있나요?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
네 지금SQL exception을 잡아서 예외처리해서 INTERNAL_SERVER_EXCEPTION status code를 반환해주고 있어요!:) 혹시 다른데서 처리하는 방안이 있나요??
private final Map<String, Map<String, String>> piecePositionByTeam; | ||
private final String currentTurnTeam; | ||
private final Map<String, Double> teamScore; | ||
private final boolean isPlaying; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
맵을 활용하신 이유가 있으실까요 ?
ScoreDto 등을 활용하는것은 어떻게 생각하시나요 ?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
적용해 보았어요!ㅎㅎㅎ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Map<String(Position),String(Piece)> 으로 여러개 들어가는 경우는 어떻게 해야하나요..? 2개만 있는 경우에는 하나씩 정의해주었는데.. 여러개가 들어가게 되면 List 형식으로 관리해야하는 건지 잘 모르겠습니다ㅠㅠ
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
설계자체가 너무 중복되게 설계되지 않았나 고민 해볼 필요가 있을 것 같아요
팀별 리스트로 각각가지고 있으면 어떤가요?
예를들어 List balckTeam
List whiteTeam 두가지를 가지는 경우요
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
수정해보려고 했는데.. 유지하면서 수정하는 방안은 잘 모르겠어요ㅠㅠㅠ 테이블 구조나 도메인과 연결하여 통신하는 방법에 대해서 다시 고민을 해볼게요!
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
몇시간 더 시도해보았는데.. 역시 안 되네요ㅠㅠ
안녕하세요 미립! 테이블 구조를 변경해 보았어요ㅎㅎ 기존에 사용하던 테이블을 지우고 board 하나의 테이블로 관리하게 해보았는데 어떨까요? 이벤트소싱?! 방식이란걸 알게되서 적용해 보았습니다 😀 DDL
|
학습로그 1-2[Spring]
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
피드백 반영 잘 해주셨네요 👍
저는 체스 미션에 이벤트소싱 방식이 잘 어울리는 구조인지 의문인데
배럴은 어떤 관점에서 이벤트소싱에 어울린다고 생각하는지 궁금해요.
해당 부분에 대한 답변을 다시 PR 혹은 DM 주시면, 해당 미션은 마무리 할 수 있도록 할께요.
안녕하세요! 미립 드디어 다시 PR을 보내네요! 더불어 Dto도 정리한다고 정리해봤는데,,, 너무 어렵네요.ㅎㅎ dto 패키지 안에 converter 패키지를 만들고, 여기서 조립해주려고 해보았어요. Service 레이어에서는 만드는 역할이 아니라고 하는데..어디서 Dto를 만들어 줘야하는건지 잘 모르겠네요ㅠㅠ Dto가 많아서 헷갈려서 Dto 안에 view, dao 등으로 패키지를 나눠서 관리해보았습니다. 피드백 부탁드릴게요. 🙏 DDLCREATE TABLE room (
room_id BIGINT NOT NULL,
turn CHAR(5) NOT NULL,
is_playing BOOLEAN NOT NULL,
name VARCHAR(25) NOT NULL,
password VARCHAR(16),
create_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(room_id)
)
CREATE TABLE board (
board_id BIGINT NOT NULL AUTO_INCREMENT,
team VARCHAR(10) NOT NULL,
position VARCHAR(10) NOT NULL,
piece VARCHAR(10) NOT NULL,
is_first_moved BOOLEAN NOT NULL,
room_id BIGINT NOT NULL,
PRIMARY KEY(board_id),
FOREIGN KEY (room_id) REFERENCES room (room_id)
) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
이전 구조에 비해 다소 코드를 이해하기 어려워 진 것 같아요.
개인적인 생각이지만 소프트웨어는 멋진 구조를 가지기보단 쉬운 구조를 먼저 생각하는게 좋다고 생각해요.
불필요한 클래스가 없는지 살펴보고 해당 클래스들을 삭제해보면 좋을 것 같네요.
학습로그 1-3[DB] 데이터 모델링 - 5내용태그
[Architecture] Layered Architecture, Dto - 4내용
링크태그
학습로그 1-4[Architecture] 추상화 - 4내용
태그
|
한글 저장이 안되는 부분이 있어서 데이터베이스 만들때 DDL 수정하였습니다. 피드백 주신 내용 반영해보았어요~ 혹시 더 부족한 부분이 있다면 언제든지 알려주세요~~!!😁 DDLDROP DATABASE if exists chess_db;
CREATE DATABASE chess_db DEFAULT character set utf8 collate utf8_general_ci;
USE chess_db;
CREATE TABLE room (
room_id BIGINT NOT NULL,
turn VARCHAR(16) NOT NULL,
is_playing BOOLEAN NOT NULL,
name VARCHAR(16) NOT NULL,
password VARCHAR(16),
create_at DATETIME DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(room_id)
);
CREATE TABLE board (
board_id BIGINT NOT NULL AUTO_INCREMENT,
team VARCHAR(16) NOT NULL,
position VARCHAR(16) NOT NULL,
piece VARCHAR(16) NOT NULL,
is_first_moved BOOLEAN NOT NULL,
room_id BIGINT NOT NULL,
PRIMARY KEY(board_id),
FOREIGN KEY (room_id) REFERENCES room (room_id)
);
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
제가 다소 많은 피드백는데 잘 반영해주셨네요 ;-;
이번 미션은 여기서 마무리하도록 할게요.
이어서 다음 미션 진행해주세요.
안녕하세요! 미립 :) 배럴입니다.
이번 스프링을 처음 접하게 되었습니다. 페어의 코드로 같이 스프링으로 옮기는 작업을 진행하였습니다 :) 페어가 조엘이었는데, 리뷰어가 미립이었다고 하더라구요 :) (미립에게 조금은 친숙한 코드나 UI일거라는 생각이 드네요..ㅎㅎ)
아직 레이어 구조나 Spring에 대한 이해가 많이 없어서ㅠㅠ 어떻게 공부해야하는지도 많이 모르는 상태입니다..ㅎㅎㅎ
많은 피드백을 줄수록 제가 학습할 수 있는 내용들이 많을 것 같아요!
잘 부탁드립니다! 😃
DB 테이블