본문 바로가기

개발일지

(102)
[230806] Wrapper 클래스 비교 문제 Wrapper 클래스 비교 문제 💬 equals와 "=="의 비교는 정확히 알고 있다고 생각하고 있었습니다. 그런데 이번에 "== " 비교로 인해 문제가 발생하고 있는 코드를 마주하게 되었습니다. ✔ 문제 💢 아이디어에 대한 권한을 체크하기 위해 현재 유저 ID와 아이디어 작성 유저 ID를 비교를 했습니다. 근데 두 타입은 Long인데 비교를 "=="를 사용했습니다. "==" 비교는 참조 타입의 경우 주소를 비교하기 때문에 실제 값을 비교해야 하는 경우 문제가 발생합니다. userId == idae.getUser().getId(); ✔ 해결 ✅ Long 타입의 eqauls는 실제 값을 비교한다는 것을 확인했습니다. 그래서 "=="을 equals로 변경해서 해결했습니다. 1. Long equals 메서드 ..
[ 230806 ] 34주차 회고 일주일 간 진행한 내용 1. 기획 및 S.A 작성 완료 2. 기능 개발 및 테스트 코드 작성 3. 코드 리뷰 및 피드백 적용 기획 및 S.A 작성 완료 [진행] 저번 주에 진행한 기획과 S.A에 대한 피드백을 멘토님에게 받았다. 스코프를 늘려야 한다. ERD를 작성할 때 테이블의 유연성과 유지보수성을 고려해야 한다. Git 브랜치 전략은 Git, Github flow을 참고해서 작성을 해야 한다. feature 브랜치의 경우 이슈 번호를 사용하는 것이 좋다. 이런 멘토님의 피드백에 따라 채팅 기능을 추가했다. ERD로 합쳐도 되는 테이블은 하나로 만들었다. Git 브랜치 전략은 Git Flow을 선택해 develop 브랜치만 추가했다. 이슈 번호는 Jira에서 부여한 것을 사용해서 해보기로 했다. 피드..
[230805] [파이널] 프로젝트 진행 (4) S3 기능 구현 💬 아이디어 등록과 수정할 때 이미지를 S3에 업로드 및 삭제하는 기능이 필요했다. 내가 맡아서 S3를 사용하는 기능을 만들기 이전에 구현을 하기로 했다. ✔ S3 Config 코드 @Configuration public class S3Config { @Value("${cloud.aws.credentials.access-key}") private String accessKey; @Value("${cloud.aws.credentials.secret-key}") private String secretKey; @Value("${cloud.aws.region.static}") private String region; @Bean public AmazonS3Client amazonS3Client()..
[230804] [파이널] 프로젝트 진행 (3) 코드 리뷰 💬 각자 API를 작성하고 Pull Request를 날렸고 코드를 리뷰하는 시간을 가졌다. 자신의 코드에 매몰되지 않고 서로의 코드를 보면서 배울 수 있는 시간을 갖게 해 주기 때문이다. 그리고 보지 못한 내 코드의 문제점들도 알 수 있는 시간이다. ✔ 이미지 파일 검증 💢 아이디어를 업데이트할 때 이미지 파일이 처리된다. 이때 악성 파일(exe)이 들어올 수 있기 때문에 이미지가 맞는지 확인하는 코드가 필요하다는 피드백이 있었다. ✅ ContentType을 통해 이미지인지 확인하는 코드를 작성했다. ➡ 파일에서 내용을 추출해서 어떤 포맷의 파일인지 확인할 수 있는 Apach Tika 이후에 적용해 볼 수 있겠다. private boolean validateImage(MultipartFile ..
[230803] [파이널] 프로젝트 진행 (2) 테스트 코드 ✔ 테스트 코드 적용 이유 💬 CI에는 자동 테스트가 있을 때 더 빛을 발한다고 생각한다. 테스트 코드는 합칠 때 작성한 코드들이 문제가 없음을 보여줄 수 있는 근거이기 때문이다. 팀원들과 논의를 거쳐 이러한 이점을 위해 각 기능을 구현할 때 비즈니스 로직은 테스트 코드를 작성하기로 했다. ✔ 테스트 코드 이점 💬 테스트 코드는 비즈니스 로직을 짤 때 가장 이점이 많은 것 같다. 중요한 로직에서 발생할 수 있는 버그를 사전에 예방할 수 있다. 코드에서 빼먹은 로직을 확인하고 보충할 수도 있다. ✔ Mock의 사용 💬 실제로 테스트 코드를 짜다 보니 Service에 들어가는 비즈니스 로직에는 DB 통신 부분이 대부분 들어간다는 것을 알았다. 통신 부분을 그대로 유지한 체 테스트를 한다면 우리가..
[230802] [파이널] 프로젝트 진행 (1) 환경 설정 ✔ local 전용 application.yaml 설정 💬 중요한 정보가 들어있는 application.yaml를 보안 처리를 하기 위해 GitHub의 Private Repository에 저장을 하고 Sub Module로 사용을 했다. 빌드를 할 때마다 Sub Module에 있는 application.yaml를 resource에 복사를 해서 사용하도록 설정을 했다. 💢 로컬 DB 정보를 입력해서 사용하려고 하면 Sub Module에 있는 application.yaml 내용을 바꿔야 하는 문제가 발생했다. ✅ resource에 application-local.yaml 파일을 하나 만들어 로컬 환경 정보를 사용하도록 만들었다. ➡ application-local.yaml에 정보가 없는 경우 app..
[230801] [파이널] 기획 및 S.A 작성 (5) CI/CD 스펙 선정 ✔ Git Action 💬 코드가 저장된 곳에서 CI/CD를 한 번에 처리할 수 있다. 제한된 자원을 가지고 있는 우리에겐 비용이 들지 않는다는 것도 큰 장점으로 다가왔다. 프로젝트 개발과 성능을 개선하는 데에 집중을 하는 것이 목표였기에 빠른 구축도 중요하게 작용했다. ✔ Docker 💬 Docker는 다양한 환경에서 동일한 동작을 보장하는 것이 큰 장점이라고 생각한다. AWS Freetier부터 사용을 해서 상황에 따라 Scale-up을 통한 성능 향상을 생각하고 있었다. 그러다 보니 매번 환경설정을 다시 해주는 것보다 Docker 이미지를 사용해 컨테이너에서 동일하게 동작할 수 있도록 하려고 한다. ✔ ECR 💬 Git Action과 EC2 사이에서 Docker 이미지의 공유 ..
[230731] [파이널] 기획 및 S.A 작성 (4) S.A 피드백 적용 ✔ 스코프 추가 💬 현재 스코프가 4명이서 하기에는 다소 적다는 피드백이 있었다. 팀원들과 추가 기능들에 대해서 논의를 했다. 후보군을 먼저 선정을 했다. 후보군 중에서 결정을 했다. 아이디어 경매에 얼마나 어울리는가를 기준으로 삼았다. ➡ 채팅 기능 ( 아이디어 토론장 ) ➡ 아이디어 경매 예약하기 ✔ ERD 피드백 💬 나누어져 있는 테이블을 단일 테이블로 합치는 것을 피드백으로 주셨다. 확장 가능성이나 성능면에서 장점이 있다고 하셨다. 하지만 우리는 테이블 분리했을 때 검색 성능을 향상할 수 있어서 적용한 것이었다. 우리의 의견과 반대되기에 정확한 이유를 듣고 싶어 질문을 했다. ✔ ERD 질문 답변 ✅ ERD를 작성할 때 테이블을 무조건 분리한다고 해서 좋은 것이 아니다. 정합성..