ABeeC 서버 구축

문상훈·2022년 2월 13일
1

AbeeC

목록 보기
1/1

이미지 영단어 학습 어플인 ABeeC 어플의 개발 일지를 기록한다. spring framework을 이용한 서버구축을 맡았으며 개발 순서를 작성할 것이다.

요청 Url이나 요청 방식, 요청 데이터형식은 Controller부분에 작성해 놨습니다.

1. 데이터베이스 구축

MySql을 이용한 데이터베이스를 구축하고자 하였으며, user,my_voca,voca 테이블을 생성하였다.

User

id,name,password,age,phone,words_count,level 필드

my_voca

user_id,voca_id,image 필드

voca

english,korea 필드

  • 이미지넷 파일 db에 저장 필요 [ ]

2. 서버 구축

엔티티 생성

User , MyVoca , Voca 엔티티를 생성하였다.

1] User

primary key : id
name,password,age,phone,wordsCount,level로 구성된다.

2] MyVoca

primary key 인id 와 user_id,voca_id,image 로 구성된다.
user_id는 user entity 를 참조하는 외래키 이다. ( N대1)
voca_id는 voca entity 를 참조하는 외래키 이다. (N대1)

3] Voca

primary key 인 id 와 english , korean 으로 구성된다.


서비스

1] JoinService

회원 가입시 id에 대한 중복 검사와 회원정보를 등록,로그인하는 서비스 기능을 제공하는 클래스이다. @Service 어노테이션은 해당 클래스가 서비스로서 빈으로 등록되게 한다.

idCheck 메소드
넘어온 id 값을 user table에서 찾은 후 값이 없는 경우 1을 값이 중복되는 경우 -1을 전송한다.

saveUser 메소드
넘어온 userDto 를 데이터베이스에 저장해주기 위하여 entity로 변경해준다. 해당 엔티티를 User 테이블에 저장한다. 반환은 Dto타입으로 해주기 위하여 entity를 다시 dto 로 변경한뒤 반환해준다.

loginCheck 메소드
넘어온 id값으로 가져온 user 객체의 password 값과 넘어온 password 값이 일치하는지 검사하여 일치하는 경우 1을 일치하지 않는 경우 -1을 반환한다.

2] 단어찾기

<기존 회의 내용>

  • 이미지 촬영 데이터 -> 서버DB -> 이미지 분류 -> (서버) 단어 -> 단어 리턴
  • 촬영 사진 pytorch로 넘겨주기 -> Flask로 구현하여 spring으로 주고받을 예정

    20.02.14 회의 논의 사항

  1. 사진 촬영
    "해당 이미지를 사용하시겠습니까?"
    (0) 클라이언트에서 바로 서버로 전송 / DB에 저장
  2. 이미지를 서버에 올릴 때 처리하는 방식
    (0) 갤러리에서 사진을 가져오기
    -> 사용자가 안드로이드 앱에서 앨범의 이미지를 선택하면 서버로 선택한 이미지를 전송하여 서버측 폴더에 저장한다.
    안드로이드 스튜디오에서 이미지를 Base64 형식으로 인코딩한 문자열을 서버측에 전달하고, 서버는 문자열을 디코딩하여 이미지를 얻도록 한다. 참고
    안드랑 처리해야하나?
    참고2
    참고3
    참고4

-> 안드로이드 스튜디오의 OKHttp 라이브러리 사용

  1. 이미지 데이터를 pytorch로 넘겨줌
    어떤 타입으로 전송해야하나?
    (1) BYTE로 저장·전송 -> 잘 안 씀
    (2) 내부 cache에 폴더에 저장해서 관리
    -> 본인 앱에서만 접근 가능, 유저에게 보이지 않음, 앱 삭제 시 같이 삭제
    -> cache : 자주 쓸 때 / 메모리 크기 작음 (1000개 담는다고 하면 사진 하나 당 크기는 얼마일지) spring cache 구현원리
  2. 이미지 분류 결과 받아 오기
    -> 데이터셋을 받아 오기
    (1) 없는 단어일 경우
    -> 단어를 새로 등록 할/말 이건 우리가 새로 학습시키는건가. 가능할까?!?
    (2) resnet50 이 틀렸을 경우
    -> 찾는 단어가 맞는 지 확인 할/말
  3. (분류 결과가 맞을 시) 해당 단어 리턴
    -> 해당 단어가 찾는 단어인지 되물어 볼/말

<관련 사항>

  • '카메라호출 -> 사진 파일 체크 -> 서버 전송' 형식

3] 단어장

4] 일일 미션

5] 친구 목록

6] 게임


컨트롤러

1] JoinController

회원가입과 아이디 중복검사,로그인의 컨트롤러를 제공하는 클래스이다.

idCheck 메소드 : localhost:8080/abeec/join/{id} 의 get요청
id 의 중복을 검사한다.

  • request : String 형태의 id - path variable

  • response : 중복시 "another id is required", 중복이 아닐시 id
    join 메소드 : localhost:8080/abeec/join 의 post요청
    회원가입 기능을 수행한다.

  • request : json - user 정보 ( id,password,age,phone,name)

  • response : 유효검사(validation)통과시 - user 정보 (id,password,age,phone,name,level,words_count)

유효검사 미통과시 - 400에러와 해당 에러 field명,에러메세지

해당 유효검사 항목은 밑의 user dto 부분에서 확인 가능하다.

login 메소드 : localhost:8080/abeec/login?id=""&password="" 의 get 요청
로그인 기능을 수행한다.

  • request : String 형태의 id와 String 형태의 password - query parameter
  • response : login 완료시 1 , login 실패시 -1 을 전송

2] 단어찾기


DTO

엔티티를 직접 교환하는 것이 아닌 클라이언트 단에서 사용할 데이터를 dto 로 구성한다.

1] user dto

사용자 dto이다.

id : not blank로 null,공백이 불가하다.
name : not blank
password : not blank , 글자수 : min 4~max 11
age : not blank, max 값이 100살
phone : 000-1234-1234 또는 01012341234 정규식 표현 -> @Pattern(regexp = "^01([0|1|6|7|8|9])-?([0-9]{3,4})-?([0-9]{4})$")
wordsCount : 맞힌 단어 개수
level : 레벨

에러모음

1] cannot resolve symbol

참고자료

profile
내가 왜 개발잔거지

0개의 댓글