UMC 서버 컨퍼런스에서 현직 개발자분이 벡엔드 기준 퀼리티 있는 프로젝트에 대해 말씀해 주셨다. 첫번째로 직관적인 API 명세서로 커뮤니케이션 비용을 줄여야한다. 혼자서 개발할 때는 api endpoint, property 이름, dto 이름 등의 명확함 보다는 당장의 구현에 초점을 뒀었다. 하지만 이번 프로젝트도 그렇고 앞으로도 커뮤니케이션 스킬이 요구되기 때문에 당장 개선하고 도전해야 한다고 느꼈다. 두번째로는 DB 설계다. DB 구조상 불가능하면 굉장히 돌아가야 하는 경우가 생기고 API 저해의 근본적인 원인이 된다. 내 ERD 설계가 채택되어 DB 설계를 담당하는 입장에서 부담이 느껴지는 부분이었다. 아직 뭐가 맞는지 확실히 모르겠어서 팀원들의 의견을 적극적으로 물어보고 반영하기로 했다.
의견을 물어볼때 먼저 상황 설명을 구체적으로 해주는게 중요하다고 느꼈다. 모든 서버 파트원들이 ERD 설계를 봤고 정한거니까 당연히 이해했겠지 생각했지만 아닌 상황이 사진속 대화 뿐만 아니라 여러번 있었다. "당연히 이해했겠지"라는 생각은 정말 위험한 것 같다. 본론에 들어가기 전 상대방이 이해한 상태인지 확인해야한다고 느꼈다.
API 명세서를 작성하면서 어떻게 하면 직관적이고 프론트 파트와의 커뮤니케이션 비용을 절감할 수 있을 지 고민을 많이 했다. 그래서 팀 노션 컴시트에 확실한 양식을 준비하고 작성했다.
Header
파라미터 | 타입 | 필수 | 설명 |
---|---|---|---|
Content-Type | String | O | application/json |
Parameters
파라미터 | 타입 | 필수 | 설명 |
---|---|---|---|
userId | String | O | 사용자 ID |
password | String | O | 사용자 비밀번호 |
confirmPassword | String | O | 비밀번호 재확인 |
firstName | String | O | 이름 |
lastName | String | O | 성 |
birthYear | String | O | 생년 |
birthMonth | String | O | 생월 |
birthDate | String | O | 생일 |
nickname | String | O | 닉네임 |
nationality | String | O | 국적 |
hostCountry | String | O | 유학국 |
hostUniversity | String | O | 유학중인 대학 |
Body
{
"userId": "globalstudents"
"password": "qwer1234"
"confirmPassword": "qwer1234"
"firstName": "Bob"
"lastName": "Hume"
"birthYear": "2000"
"birthMonth": "3"
"birthDate": "2"
"nickname": "globalstudent"
"nationality": "미국"
"hostCountry": "대한민국"
"hostUniversity": "00 대학교"
}
Path Parameter
없음
Query Parameter
없음
Header
파라미터 | 타입 | 필수 | 설명 |
---|---|---|---|
Content-Type | String | O | application/json |
Response Code & Message
code | message | 설명 |
---|---|---|
JOIN201_1 | 기본 정보 입력 성공 | 기본 정보 입력 성공 |
JOIN400_1 | 아이디는 8자 이상의 영문 대소문자/숫자/특수문자입니다 | id 파라미터 형식이 잘못된 경우 |
JOIN400_2 | 비밀번호는 8자 이상의 영문 대소문자/숫자/특수문자입니다 | password 파라미터 형식이 잘못된 경우 |
JOIN400_3 | 비밀번호가 일치하지 않습니다 | confirmPassword와 password 파라미터가 일치하지 않은 경우 |
JOIN400_4 | 입력하지 않은 필수 정보가 존재합니다 | 필수 정보가 누락된 경우 |
JOIN403_1 | 접근이 거부되었습니다 | 접근 권한이 없는 경우 |
COMMON500 | 서버 에러 | 서버에 문제가 생긴 경우 |
COMMON503 | 일시적인 서버 오류 | 서버에 일시적인 문제가 생긴 경우 |
Body
{
"isSuccess" : True
"code" : "JOIN201_1"
"message" : "기본 정보 입력 성공"
"result" : {}
}
생각했던 것 보다 API 명세서를 작성하는데 많은 시간이 걸렸다. 서버 파트 회의때 서로의 API 명세서를 리뷰하고 불명확한 부분을 개선했다. 작성할 때는 몰랐던 부분을 팀원들을 통해 알게 되었고 정말 많이 수정했다. 최대한 프론트가 직관적으로 볼 수 있게 노력했다.
공용으로 사용할 mysql 서버를 어떻게 구축할지 고민하다가 AWS RDS 프리티어를 사용하기로 했다. 한 팀원이 mysql 서버를 호스팅 하자는 의견을 냈는데 그 팀원 노트북이 꺼지면 접근할 수 없다고 설명했다. 그래서 AWS를 사용하자고 했고 ERD도 관리하는겸 내가 구축하고 싶다고 어필했다.
사실 AWS RDS를 구축 해본 적은 없다. 예전에 AWS EC2에서 과금이 발생해서 AWS 관련해서 다소 소극적이었는데 이번 기회로 꼼꼼히 배우고 극복하고 싶어서 지원했다.
기획안과 피그마가 계속 바뀌지만 진행 해야해서 바뀔 확률이 작은 코어 기능들을 우선적으로 개발 시작하기로 했다.
앞으로 회원가입과 로그인에 필요한 Entity를 작성할 것이다.
user 폴더에 Entity 7개 추가