마신사 프로젝트 15일차 - 2022.12.12(월)
멘토님이 조언해주신대로 마스크와 회원 같은 핵심 데이터와 관련된 DELETE 메소드들을 PUT을 이용하여 상태만 바꾸는 방식으로 변경하기로 결정하였고 일부 테이블에 데이터 삭제와 관련된 deletion이라는 컬럼을 추가하며 DB를 수정하였다.
DB 수정으로 인하여 기존에 작성하였던 DTO와 Entity 그리고 이들과 관련 메소드들에 대한 코드 역시도 수정해야 하다보니 오늘은 아직 정의하지 못한 메소드들의 코드를 작성하는 것이 아닌 기존 코드들을 수정하는 작업으로 대부분의 시간을 보냈다.
작업 진행중 deletion 컬럼 정의시 데이터 값이 2개(Y/N) 밖에 존재하지 않도록 정했기에 해당 컬럼은 Enum을 이용하여 Entity와 DTO에 정의했는데 작업중에 DataConversionException으로 인하여 서버 에러가 발생하는 문제에 직면하였다.
원인을 찾아보니 깜빡하고 해당 컬럼에 @Enumerated(EnumType.STRING)을 적용하지 않았던 것이 문제였고 이를 적용하고 나니 서버가 정상적으로 실행되며 문제가 해결했다.
마신사 프로젝트 16일차 - 2022.12.13(화)
오전에는 DB의 테이블들 중에서 핵심 테이블 중 하나인 Member 테이블에 관한 메소드 구현 작업에 들어가 네이버 API 연동과 관련된 회원가입 관련 메소드를 제외하고 모든 Member 테이블 관련 메소드 구현을 완료하였다.
그리고 지난 멘토링 당시 멘토님께서 모든 메소드에서 최종적으로 반환하는 ResponseEntity 객체에 대한 조언으로 메소드 실행 결과값 이외에 Status code와 실행 결과 메세지에 대한 데이터도 추가되면 좋다고 하셔서 ResponseEntity 객체에 담을 Message라는 데이터 객체를 생성할 수 있도록 클래스를 따로 정의한 뒤
Status code에 대한 데이터도 Enum으로 따로 정의하여 최종적으로 모든 메소드들이 message 객체들을 담은 ResponseEntity를 반환할 수 있도록 수정하였다.
마신사 프로젝트 17일차 - 2022.12.14(수)
대부분의 조회 메소드에서는 Pagination 기능이 필수였는데 일단 Pagination 기능을 제외한 상태로만 구현한 상태라 Pagination을 어떻게 구현할지에서 막혀있다가 다른 팀원이 MyBatis로 Pagination을 구현한 것을 참고하여 나도 내가 구현했던 조회 메소드에 MyBatis를 이용한 pagination 구현을 시도하였지만 MyBatis mapper.xml 파일에서 TypeException이 발생했다.
분명 MySQL Workbench에서는 잘 실행되는 쿼리문이라 문제점을 찾아보니 Like문에 대한 조건 입력시에 '%#{변수}%'으로 입력한 것이 원인이었는데 #{}으로 변수값을 불러올 경우 ${}처럼 자동으로 따옴표('')가 앞뒤로 붙지 않기 때문이었다.
결국 #을 $으로 수정함으로써 문제를 해결하였는데 ${}으로 변수값을 불러올 경우 자동으로 해당 값을 String 형태로 쿼리에 넣기 때문이었다. 추가적으로 이 둘의 차이점을 구글링해보니 ${}은 #{}보다 편리하지만 SQL 인젝션을 예방할 수 없어 보안적인 측면에 있어서 더 취약하다는 점을 알 수 있었다.
이외에도 프론트 측에서 필터링 기능을 구현한 메소드에서 IllegalArgumentException이 발생한다고 연락이 왔는데 알고보니 Y와 N만 입력할 수 있도록 JPA에서 Emum으로 정의한 컬럼에 팀원들 중 한 명이 DB에 테스트 데이터를 입력할 때 Y나 N이 아닌 test라는 문자열 데이터를 DB에 저장해놔서 발생한 오류였고 해당 데이터 test를 N으로 수정하니 정상적으로 해결되었다.
또 다른 문제로 한 조회 메소드 구현할 때 MyBatis에서 Select문 정의시 collection과 association을 이용한 외래키 데이터 출력 문제가 있어서 이를 붙잡고 있었지만 문제 해결에 실패하였고 결국 JPA를 이용하여 메소드를 구현하였는데 그날 밤에 개발자 친구를 통하여 해당 문제를 해결할 수 있었다.
바로 해당 메소드의 select 쿼리문에서 *를 입력하여 정의한 resultmap으로 외래키 컬럼 데이터를 반환 받는 것이 아닌 inner join을 이용하여 쿼리문에서 외래키 데이터를 반환받도록 설정하는 것이 었다. 추가적으로 resultType도 resultMap을 사용할 필요없이 entity 객체로 받도록 설정하였더니 데이터가 반환되지 않아 HashMap으로 결과값을 반환받도록 설정하니 드디어 원하는 결과값이 정상적으로 출력됨을 확인할 수 있었다.
마신사 프로젝트 18일차 - 2022.12.15(목)
어제 개발자 친구의 도움 덕분에 MyBatis를 어떻게 활용해야하는 지에 대한 감각을 확실히 느껴 메소드 구현이 이전보다 빠른 속도로 진행될 수 있었고 다행히 작업 진행중에 에러 문제도 발생하지 않아 드디어 API 명세서에서 정의했던 모든 CRUD 기능들의 코드들을 구현하는데 성공하였다!
찜기능 작업시 동일한 회원 ID와 마스크ID에 대해서 찜 데이터가 DB에 중복으로 INSERT되지 않도록 구현하기 위해서 INSERT IGNORE INTO를 사용하였으나 중복값이 입력되는 문제를 겪었는데
구글링을 통해 INSERT INTO ~ SELECT ~ FROM DUAL WHERE NOT EXISTS 구문을 이용한 방법을 찾아 적용하여 해당 문제를 해결할 수 있었다.
마신사 프로젝트 19일차 - 2022.12.16(금)
전날에 API 명세서에서 정의했던 모든 CRUD 기능들의 코드들을 구현하는데 성공했지만 아직 프론트에서의 테스트가 남았고 프론트의 작업량이 워낙 많았기 때문에 오늘 메소드 작동 테스트는 어려울 것으로 판단되어 먼저 작업이 끝난 백엔드 2명이서 데이터 입력 작업을 진행하였다.
아주 단순하지만 오래걸리는 작업을 진행했는데 마스크 테이블의 데이터와 이미지 테이블의 데이터를 수동으로 입력하는 것이었다. 마스크 테이블의 경우에는 레코드 수가 20개 밖에 되지않아 굳이 전처리 코드를 짜지않고 진행하는 것이 나을 것 같아 2명이서 수동으로 전처리하여 DB에 입력하였다.
오후에는 나의 경우에는 이전에 팀원과 함께 크롤링 했던 이미지 데이터를 DB에 입력하는 작업을 진행했는데 100개정도의 데이터라 파이썬으로 크롤링 코드를 짜기에는 데이터들이 너무 제각각이라 복잡하고 시간도 넉넉하지 않기 때문에 마스크 테이블과 같이 수동으로 입력하였다.
문제는 크롤링이 잘못되어 중간중간 에러가 뜨는 이미지 데이터들이 있어서 해당 상황에는 해당 마스크와 관련된 이미지를 다시 크롤링을 한뒤 DB에 입력하였기 때문에 거의 오후에는 이 작업만 진행하며 저녁이 되서야 작업이 마무리되었다...
추가적으로 밤에 프로젝트 발표 전 심사위원에게 제출해야할 보고서에 대안 초안을 간략하게 작성하였다.
마신사 프로젝트 20~21일차 & 정기 멘토링 - 2022.12.17(토) ~ 2022.12.18(일)
전체적인 작업들이 슬슬 끝이 보여갔기 때문에 오늘 멘토링때는 작업에 대한 것이 아닌 취업에 대한 멘토링이 주로 이뤄졌다. 확실히 이전보다 개발자를 목표로 공부하는 사람들이 많아졌고 요즘 경제 상황이 좋지 않기 때문에 신입 채용에 대한 기회가 점점 줄어드는 추세라
부트캠프 수료 후에는 최대한 빠르게 취업하여 현업을 경험하는 것도 물론 중요하지만 개발자 스스로도 기업을 평가하는 눈을 길러 나 자신이 개발자로서 성장할 수 있는 기업에 취업하는 것이 매우 중요해진 상황이라 하셨다.
우리의 경우에는 회원가입을 소셜 로그인인 네이버 아이디로 로그인하기(네아로)로 구현하고 최종적으로 완성한 웹사이트를 배포할 생각이기 때문에 네이버 로그인 API, GCP, Docker에 관한 코칭을 들을 수 있었고
현재 이 작업을 할 수 있는 사람은 왠만한 작업이 완료된 나를 포함한 백엔드 파트가 맡아야 했기에 이미 GCP를 사용하고 있었던 다른 백엔드 팀원이 배포를 맡고 나는 네이버 로그인 기능 구현을 맡기로 하였다.
네이버 로그인의 경우 우리가 처한 상황에서는 프론트와 백을 모두 작업해야 하는 상황이라 프론트 작업이 너무나도 오랜만이었던 나에게는 너무 큰 부담이어서 유튜브와 구글링을 통하여 조사를 해봤지만 그동안 쉬지않고 작업을 진행해서 그런지 머리가 잘 돌아가지 않아 진행하지 못하고 헤매기만하여 걱정이 커졌다..
'빅데이터 부트캠프 > 팀 프로젝트' 카테고리의 다른 글
마신사 프로젝트 4주차 (빅데이터 부트캠프 116~120일차) (0) | 2022.12.24 |
---|---|
마신사 프로젝트 2주차 (빅데이터 부트캠프 106~110일차) (0) | 2022.12.10 |
마신사 프로젝트 1주차 (빅데이터 부트캠프 100~105일차) (0) | 2022.12.03 |
웹페이지 페이징 및 파일 다운로드 구현 미니 프로젝트 (빅데이터 부트캠프 98~99일차) (0) | 2022.11.25 |
기본 웹페이지 구현 미니 프로젝트 (빅데이터 부트캠프 86~89일차) (0) | 2022.11.12 |
댓글