[Back-End] 1. REST API(1)

Jiyeahhh·2021년 7월 27일

크게 안드, iOS, 서버로 나눠서 프로젝트를 진행하게 됐는데 난 공부도 할 겸 서버를 한다고..했다..!

...화이팅! 💪



📃 테이블

우선, 급하게 관련 강의를 듣고(spring 포스트 참고) 테이블 관계를 그려보았다.

지금은 이 정도만 구현함 (사용자 정보, ox 퀴즈, ox 오답 정보)
1. 사용자 정보에 프로필 사진, 배경 음악 정보 추가될 예정
2. 지금 서버를 나 포함 2명이서 하고 있는데 나처럼 외래키를 사용한 버전과 외래키를 없앤 버전이 있다.
3. 외래키를 잘 쓰면 좋을 거 같은데, 아직 내 수준에서는 DB관리가 어려워질 거 같아서 고민이다..

💻 구축

  • JPA 사용

📌 User 테이블

  • 기본키 : userId

🔎 User.java

📌 GameOXQuiz 테이블

  • 복합키는 @IdClass 사용
  • 원래는 @EmbeddedId를 사용했었는데, 특정 column 참조가 어려워서 @IdClass로 변경
  • 복합키 : stageNum + quizNum

🔎 GameOXQuiz.java

🔎 GameOXQuizKeys.java

📌 WrongQuiz 테이블

  • 기본키 : serialId -> 자동으로 증가
  • User 테이블의 userId 참조
  • GameOxQuiz의 복합키 stageNum, quizNum 참조

📃 REST API

📝 API Reference

  • users - 로그인 시 해당 유저의 오답 정보 가져옴
기능MethodURLRequestResponse
회원가입POSTapi/users/signup{
"user_id":"123abc",
"password":"abcd1234"
}
succes { "code" : 200, "message" : "Success" }
fail { "code" : 500, "message" : "Fail" }
로그인POSTapi/users/login{
"user_id":"123abc",
"password":"abcd1234"
}
succes
{
 "serial_id": 1,
 "user_id": {
  "user_id": "123abc",
  "password": "abcd1234",
  "nickname": "도드리"
 },
 "gameOXQuiz": {
  "stageNum": 1,
  "quizNum": 1,
  "quiz": "가야금은 12줄이다."
  "answer": 1
 }
}

fail { "code" : 500, "message" : "Fail" }
닉네임 입력/수정PUTapi/users{
"user_id":"123abc",
"nickname":"도드리"
}
123abc
회원 정보 조회GETapi/users{
"user_id":"123abc",
"password":"abcd1234",
"nickname":"도드리"
}

  • game-ox - 오답노트 가져올때 게임 관련 column만 가져오도록 수정해야함 / 오답노트 문제 제거 아직 구현 x
기능MethodURLRequestResponse
ox문제 목록GETapi/ox-game/questions{
"stageNum":1,
"quizNum":1,
"quiz":"가야금은 12줄이다.",
"answer":1
}
오답노트 가져오기GETapi/ox-game/wrong-questions{
 "serial_id": 1,
 "user_id": {
  "user_id": "123abc",
  "password": "abcd1234",
  "nickname": "도드리"
 },
 "gameOXQuiz": {
  "stageNum": 1,
  "quizNum": 1,
  "quiz": "가야금은 12줄이다."
  "answer": 1
 }
}
오답노트에 문제 추가POSTapi/ox-game/wrong-questions{
 "user_id": {
  "user_id":"123abc"
 },
 "quiz":{
  "stageNum":"1",
  "quizNum":"1"
 }
}
{
 "serial_id": 1,
 "user_id": {
  "user_id": "123abc",
  "password": null,
  "nickname": null
 },
 "gameOXQuiz": {
  "stageNum": 1,
  "quizNum": 1,
  "quiz": null
  "answer": 0
 }
}
오답노트에서 문제 제거DELETEapi/ox-game/wrong-questions/{id}{
"id":"13"
}
succes { "code" : 200, "message" : "Success" }
fail { "code" : 500, "message" : "Fail" }
  • 아직 많이 부족하지만 우선 이렇게 생각해놓고 구현함
  • 피그마에서는 회원가입에서 아이디, 패스워드만 받고 나중에 따로 닉네임을 설정하도록 했는데 수정해야할 거 같음

💻 구현

📌 User

🔎 UserController.java

  • 전체 회원정보 조회 : GET
  • 회원가입 : POST
  • 닉네임 입력 / 수정 : PUT
  • 로그인 : POST

🔎 LoginCheck

: 입력한 정보가 user 테이블의 정보와 일치하는지 확인

  • 뭔가 야매로 한 거 같아서 로그인 체크 (아이디, 비밀번호 확인) 부분은 수정해야할 거 같다.

🔎 findByUserId

: userId에 맞는 해당 유저의 오답 정보 가져옴

  • 원래 아래 주석 처리한 부분처럼 했었는데 WrongQuiz 테이블의 userIdString 타입으로 선언이 안 되어있고, User 테이블의 기본키를 참조하는 형식으로 되어 있어서 그런가 자꾸 에러가 났음
  • Querydsl 방법도 찾아보고 하루종일 구글링만 한듯
    -> 여기서 @EmbeddedId로 설정한 복합키는 Querydsl가 어렵다는 글을 보고 @IdClass로 갈아탄 것도 있음..
  • But, Querydsl이 내 생각처럼 안 돼서,, 결국 SQL 쿼리 사용
  • 전체 column을 가져오는 게 아니라 퀴즈 정보만 가져오도록 수정해야 함
    -> 이게 현재 가장 큰 문제...! 따로 class를 만들어야하나 싶은.. 그치만 굳이인거 같고, 다른 좋은 방법이 있을 거 같은데..

📌 GameOXQuiz

🔎 GameOXQuizController.java

  • OX 문제 정보 가져오기 : GET
  • 'OX 문제 추가' 기능 추가해야 함 : PUT

📌 WrongQuiz

🔎 WrongQuizController.java

  • 전체 오답 노트 목록 가져오기 : GET
  • 오답 노트 추가 : POST
  • 지금 적으면서 갑자기 생각난건데 굳이 '전체 오답 노트 목록 가져오는 기능'이 필요한가?
  • '오답 노트에서 문제 제거'는 아직 애매해서 구현 못 함

🤔 해야할 것

  1. 오늘 회의 전 외래키를 사용해야할 지, 말아야할 지, 아니면 더 좋은 방안이 있을지 고민해보기
  2. 전체적으로 필요없는 부분 삭제하거나 수정하기
  3. User 테이블에 프로필 사진, 배경 음악 정보 추가하기
  4. DB 연결하기.. 지금 임시로 H2 Database 쓰면서 테스트하고 있는데 할 때마다 정보 입력하는 거 너무 귀찮다..
  5. AWS 공부하기
  6. 깃 공부하기.. 깃허브랑 깃랩에 같이 올리려다가 아침 내내 헤맴.. 또 다 날릴 뻔한 거 어찌저찌 살리긴했지만 공부해보자..ㅠ
  7. 화이팅!!💪
profile
람차람차

0개의 댓글