[우아한테크코스 백엔드 4기] 레벨1 - "체스" STEP 2 회고
상여자는 커멘드로 간다^^
🔗 관련 링크
⚙️ 구현 추가 사항
(웹) 입력
- 방 이름을 입력받고 시작버튼을 누른다
- 이동하고 싶은 말과 칸을 커멘드로 입력한다
- 예)
move a2 a3
- 예)
- 종료 버튼을 누른다
- 재시작 버튼을 누른다
DB
- 각 방 이름별로 현재 진행 턴, 보드 상태를 저장한다.
- 방이름과 턴은
board 테이블
에 String으로, 보드 상태는squares 테이블
에 저장한다
- 방이름과 턴은
- 새로운 방을 생성한다.
- 해당 방의 정보가 있는지 확인하고, 있을 시 게임 진행상태를 반환한다.
- 방 이름을 인자로 받아, 해당 방의 상태를 저장한다.
- 게임 종료 시,
board 테이블``squares 테이블
에서 해당 방 관련 정보를 삭제한다.
⛳ 피드백
@Docker
- 애플리케이션 실행환경을 손쉽게 만들어주는 소프트웨어 플랫폼
- 사용법
도커 실행법
- 도커 어플리케이션 실행 후 터미널->
cd docker
fps
- 도커 연결됐는지, 이름 등 확인
docker exec -it chess-db-1 bash
mysql -u root -proot
- mysql 실행
show databases;
- 내부 데이터베이스 상태 확인
use chess;
- 기존에 만든 체스 데이터베이스 사용
show tables;
- 현재 생성된 테이블들 확인
desc 테이블이름;
- 해당 테이블 확인
@SQL
CREATE TABLE board (
name VARCHAR(100) NOT NULL primary key,
turn VARCHAR(10) NOT NULL
);
CREATE TABLE squares (
board_name VARCHAR(100) NOT NULL,
foreign key(board_name) references board(name),
position VARCHAR(5) NOT NULL,
piece VARCHAR(10) NOT NULL
);
- 체스에 사용된 초기 DB 세팅
- init.sql에 작성해야 함
값 추가
INSERT into board (name, turn) VALUES (?, ?);
INSERT into squares (board_name, position, piece) VALUES (?, ?, ?);
-테이블에서 VALUES
뒤의 데이터 차례로 추가
값 검색
SELECT * FROM board WHERE name = ?;
SELECT piece FROM squares WHERE board_name = ? AND position = ?;
- 테이블에서
WHERE
뒤 조건에 맞는 데이터를 추출
값 변경
UPDATE board SET turn = ? WHERE name = ?;
UPDATE squares SET piece = ? WHERE board_name = ? AND position = ?;
- 테이블에서
WHERE
뒤 조건에 맞는 데이터를SET
뒤의 값으로 변경
값 제거
DELETE FROM squares WHERE board_name = ?;
DELETE FROM board WHERE name = ?;
- 테이블에서
WHERE
뒤 조건에 맞는 데이터를 제거
복잡한 값 검색
- 많은 돈을 지출한 순으로 고객 리스트를 구해주세요.(SQL 강의 퀴즈)
- 참고 사이트
- 많은 돈을 지출한 순으로 고객 리스트를 구해주세요.(SQL 강의 퀴즈)
SELECT c.CustomerID, c.CustomerName, SUM(od.Quantity*p.Price) AS TotalPrice
FROM Customers as c
JOIN orders as o on o.CustomerID = c.CustomerID
JOIN orderdetails as od on o.OrderID = od.OrderID
JOIN products as p on od.ProductID = p.ProductID
GROUP BY c.CustomerID
ORDER BY TotalPrice DESC
JOIN
: 여러 테이블 참조SUM
,GROUP BY
: 값을 특정 방식(합계)로 묶어 추출ORDER BY
: 내림차순 정렬(DESC)
DB 연결 방법
private static final String URL = "jdbc:mysql://localhost:3306/chess";
private static final String USER = "user";
private static final String PASSWORD = "password";
public Connection getConnection() {
loadDriver();
Connection connection = null;
try {
connection = DriverManager.getConnection(URL, USER, PASSWORD);
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
private void loadDriver() {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (final Exception e) {
e.printStackTrace();
}
}
- getConnection()을 통해 DB 연결 가능
- USER, PASSWORD
private PreparedStatement getStatement(Connection connection, String sql, List<String> data) throws SQLException {
PreparedStatement statement = connection.prepareStatement(sql);
for (int i = 0; i < data.size(); i++) {
statement.setString(i + 1, data.get(i));
}
return statement;
}
connection
과SQL
문,SQL
문에 들어갈 데이터를 인자로 받음- 해당 데이터를
SQL
문에 추가해PreparedStatement
를 제공
@DB에 값을 바로 저장하고 꺼내자
- 처음엔 컨트롤러 내부에서 따로 도메인을 저장함
- 그러나
1. 여러 플레이어가 동시에 게임을 진행하지 못함- 도중에 값이 저장되는데에 어려움을 겪음
- 컨트롤러 내부 메서드에서 인자값이 늘어남
- 이에 DAO를 통해 DB에서 바로 값을 꺼내 쓰는 방식으로 변경
🖋 소감
막막했지만, 구동되는 웹을 보며 뿌듯했다
추후 작성예정
Author And Source
이 문제에 관하여([우아한테크코스 백엔드 4기] 레벨1 - "체스" STEP 2 회고), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@betterfuture4/우아한테크코스-백엔드-4기-레벨1-체스-STEP-2-회고저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)