AWS 계정을 새로 만들어서 서버 구축을 진행함. 인스턴스 만들고 탄력적 IP 연결함. RDS 생성 후 프로젝트의 .yml파일에 엔드포인트를 추가해서 프로젝트와 디비 연결 완료함. puTTY로 인스턴스에 접속해서 nginx, jdk 설치 완료함. 프로젝트 파일을 깃 클론을 통해 원격 서버에도 올림. nginx 서버 프록시 설정을 함.
가비아에서 도메인 구입해서 서버에 도메인 적용 및 SSL 인증서 발급함. HTTPS 리다이렉션 설정함. dev와 prod 서브도메인을 nginx 설정 파일에 추가하는 방식에 대해 궁금한 점이 생겨서 개발 팀장님께 문의함.
문의 내용 답변 받아서 서브도메인 적용을 완료함. 서브도메인에도 SSL 인증서 발급 및 HTTPS 리다이렉션 설정함. IP to Domain 리다이렉션을 설정함.
ERD 설계 90% 완료함. 대부분 설계했으나 차후에 추가/변경 가능성 있음. 멤버십 관련해서 기획서 작성할 때 확실히 정하지 않은 부분이 있어서 프론트분들과 상의함 → 멤버십 설정 및 간소화된 결제 정보 설정 구현하기로 결정함. API 명세서 리스트업 완료했으나 변경 가능성 있음. 우선 회원가입/로그인 등 우선순위가 높은 API 부터 개발할 예정임.
자바 정규식 표현 공부 후 멤버십 종류 선택 요청 형식적 밸리데이션 처리함. 멤버십 만료를 어떻게 처리할지 고민이 많았는데 MySQL의 TRIGGER 기능이 있다는 것을 구글링을 통해 알게됨. 멤버십 테이블에 삽입이 일어나기 전에 멤버십 만료 시간 컬럼을 현재시간 + 1달로 세팅하는 트리거 만듦. 막상 트리거를 실행하니 권한 때문에 에러가 났음. (에러메세지: You do not have the SUPER privilege and binary logging is enabled (you might want to use the less safe log_bin_trust_function_creators variable)) 구글링해보니 아마존 aws 공식 문서에 트리거를 활성화하는 방법이 나와있었음. 파라미터 그룹의log_bin_trust_function_creators를 1로 수정하면 되었음. 수정 후 재부팅하니 트리거를 적용할 수 있었음.
원래는 멤버십 해지를 해도 남은 기간 동안은 계속 사용할 수 있는데, 우리는 한달 후를 확인할 수가 없으므로, 멤버십 해지를 요청하면 즉시 해지되는 것으로 정해도 될지 개발 팀장님께 문의드려야함.
넷플릭스의 멤버십 프로세스를 구현함. 1.) 회원가입할 때는 무조건 멤버십에 가입해야함. 2.) 로그인할 때는 로그인에 성공해도 멤버십이 해지된 상태라면 멤버십을 등록해야 서비스 사용 가능. 위의 규칙을 고려하여 회원가입 / 로그인을 구현함.
팀원들 모두 '한 계정당 만들수있는 프로필 개수 = 멤버십별 동시접속가능자수' 라고 잘못 알고있었는데 세영님이 프로필 개수는 멤버십에 상관없이 무조건 5개까지 만들 수 있다고 알려주셔서 관련 부분에 대해 상의 후 반영함. 현재까지 유저 회원가입 / 로그인 API, 멤버십과 결제 정보 관련 API 까지 구현 완료한 상태임.
유저 도메인 구현 완료한 후 포스트맨으로 테스트하는 과정에서 몇가지 오류 잡음.
- 회원가입은 잘 되지만, 멤버십 타입이 제대로 인식이 안되고 있음(유저의 요청과 상관없이 무조건 P로 됨) → Java에서 String 비교시 ==은 주소값을 비교하고 .equals()는 값자체를 비교해서 생기는 문제였음. ==를 .equals()로 변경하자 제대로 작동함.
- 로그인시 Internal Server Error가 뜸 → Dao에서 컬럼이름에 오타가 있던게 문제였음. 고치니까 잘작동됨.
API 명세서 모두 작성함. 서버 구축 관련 에러 해결 필요함.
- 서버 구축 관련 에러 해결함. 메인 서버 및 서브도메인 서버 모두 정상적으로 접속됨.
- 프론트분들이 회원가입 API에서 멤버십 선택이 같이 진행되던 기존 API가 수정되어야함을 알려주심. 결제 카드 등록시 멤버십 선택이 최종적으로 이루어지도록 API를 변경해야 함을 알게되어서 해당 사항을 반영해 API를 수정할 계획임. 현재 프로필 도메인의 API들을 구현 완료한 상태임. 프론트분들이 메인화면 레이아웃 구성을 위한 데이터가 있으면 좋을 것 같다고 하셔서 일부 데이터를 구해야함.
- FE분들과 상의한대로 유저 API 수정 완료함.
- 프로필 도메인 테스트 완료후 명세서 및 서버에 반영함.
- FE분들과 페이징 처리에 대해서 상의함.
- Cors 설정 후 FE분들이 API 사용 가능함을 확인함.
- 메인컨텐츠 화면 API 구현중임.
- Top 10 컨텐츠 선정 알고리즘은 좋아요 개수를 기반으로 정해서 구현함, 공개 예정 컨텐츠는 실제로 현재 날짜와 공개 날짜를 비교해서 선택하도록 구현함.
- 여러 한방 쿼리들을 작성함, 날짜 포맷 등을 실제 넷플릭스와 같게 작성함.
- 영화/시리즈 페이지 및 NEW! 요즘 대세 컨텐츠 페이지 API 구현중임.
- 마우스 오버시에 보이는 화면들이 영화/시리즈/공개예정컨텐츠 등등 각 종류별로 다 달라서 응답에 줄 정보들을 꼼꼼하게 구성해야 했음.
- FE분들이 API 연동할 때 헷갈리는 부분들 질문 주셔서 사용법 알려드림, 프로필 선택 API 및 컨텐츠 공개 날짜 포맷 관련 상의함.
- FE분들이 기존에 가입되어있는 이메일인지 확인하는 API 필요하다고 하셔서 만듦.
- mysql에서 timestampdiff 함수의 매개 변수 순서 실수때문에 발생한 오류 잡음.
- FE분들과 회원가입/로그인 프로세스에서 발생할 수 있는 모든 경우에 대해서 상의함.
- 메인콘텐츠 화면 및 영화/시리즈 화면 API 구현 완료 후 서버 반영 완료함.
- 콘텐츠 찜 관련 CRUD API 구현 완료함.
- DB에 데이터 일부 입력함. 데이터를 차후에 더 추가할 필요 있음.
- Content 테이블에 String 타입의 Title뿐만 아니라 로고 이미지도 필요해서 해당 컬럼 추가함.
- 데이터 개수가 생각보다 많아서 FE분들과 회의를 통해 데이터의 양 조정함.
- 로고 이미지 Url이 "N"이 아닌것들 중 랜덤으로 뽑히도록 메인콘텐츠(화면상단) 조회 API 수정함.
- 좋아요 및 싫어요 CRUD API 작업중임.
- 검색 기능 API 구현함. 사용자의 검색 키워드를 포함하는 제목의 컨텐츠를 반환하도록 MySQL의 LIKE CONCAT('%',?,'%') 기능 사용함.
- 그 컨텐츠 개수가 부족할 시 모자른 개수를 DAO에 매개변수로 넘겨주어 관련된 컨텐츠까지 불러와서 함께 반환하도록 DAO를 한번 더 호출하는 방식으로 구현함.
- GET 메소드에 @RequestBody를 사용하는 것이 2014년 이후 나온 스펙을 보았을 때 문제가 없지만, 캐싱이나 프록시나 Client의 환경에 따라 사용 가능 여부가 달라질 수 있다고 함. FE분이 포스트맨 상에서는 해당 API가 잘 작동하는데 브라우저에서는 잘 안된다고 하셔서 @RequestParam으로 모두 변경했더니 잘되었음.
- 상세정보 화면 구현에 앞서서 디비의 이미지 데이터와 관련해서 FE분들과 상의한 후 구현 구상중임.
- FE분들이 상세정보 화면 및 메인컨텐츠 화면에서 쓸 메인이미지Url도 필요하다고 하셔서 Content 테이블에 MainImgUrl 칼럼 및 데이터 추가함.
- 상세정보 조회 API 리스트에서 한번에 추출할 수 있는 정보는 최대한 묶어서 드릴 수 있도록 구현함. 감독 리스트, 출연자 리스트, 장르 리스트, 특징 리스트를 MYSQL의 GROUP_CONCAT 과 INNER_JOIN 을 사용해서 묶음.
- 컨텐츠에 대한 행위 관련 API(찜, 좋아요, 싫어요 등)와 시즌 개수 조회 API에서 validation 처리에 신경 씀. 중복 행위 요청이거나 대상 컨텐츠가 존재하지 않거나 공개날짜가 current_timestamp 보다 나중인 컨텐츠에 대한 요청이거나 시리즈물이 아닌 컨텐츠에 대해 시즌 개수를 조회하는 요청이 오는 경우 등에 대한 의미적 validation 처리함.
- 상세정보 화면 API 구현 90% 완료함. 소셜로그인 / 본인인증 등의 API 구상중임.
- 디테일 화면 API 구현 완료 및 서버 반영함. 비슷한 콘텐츠 추천시 feature(특징)이 비슷한 콘텐츠들을 불러옴. 이때 비슷한 콘텐츠는 누르면 바로 콘텐츠를 시청할 수 있으므로 DB에 있는 콘텐츠들 중 공개예정 콘텐츠(releaseDate이 current_timestamp보다 큰 것)들은 제외시킴.
- 소셜로그인 구현중임.
- FE분들과 추가할 API가 있는지 상의함. 프로필 이름 수정 API 추가하기로 결정함.
- 카카오톡 소셜 로그인 구현 및 서버 반영 완료함. FE분들은 소셜로그인까지 하기에는 무리가 있을 것 같다고 하셔서 백엔드에서 인가코드로 액세스 토큰을 발급받는 과정까지 포함해서 구현함.
- 프로필 이름 수정 API 추가함.
- 밸리데이션 처리가 추가로 필요한 부분이 없는지 검토함.