본문 바로가기

부트캠프 개발일기/Pre-Project17

93일차: Pre-Project Day 13 (프리프로젝트 회고) 오늘로 13일간의 프리 프로젝트 기간이 끝이 났다. 정말 어떻게 지나갔는지 모를정도로 하루하루가 바쁘게 지나갔다. 매일매일 그날 한 일, 느낀점들을 간단히 남겨왔으니 오늘은 교육 컨텐츠에서 제시하는 회고 주제로 작성해보고자 한다. 1. 기대 혹은 염려했던 첫 프로젝트 경험은 어땠나요? 정말 너무나도 좋은 경험이었다. 약 3개월 반동안 학습을 하면서도 이걸 어떻게 쓸 수 있을지 감이 오지 않아서 막막했던 적이 있다. 프로젝트를 통해 하나의 프로그램을 기획하고 직접 구현하고 배포하는것까지 전 과정을 수행하면서 배웠던것들이 어떻게 쓰이는지, 내가 어떤 부분이 부족하고 어떻게 채워나가야할지 알 수 있는 시간이었다. 특히 Spring Security, 인증, 인가, 배포쪽에 대한 이해가 많이많이 부족하다고 느끼고.. 2023. 6. 27.
92일차: Pre-Project Day 12(배포: EC2, S3, RDS, gradle) 프리 프로젝트를 하면서 가장 오류를 많이 겪은 날이었다. 배포가 생각보다 쉽지 않을것 같다는 생각은 했지만, 이렇게 단계마다 에러를 겪게 될줄이야... 백엔드 팀원 세명의 코드를 모두 합치고 충돌나는 부분을 수정해서 코드를 정리했다. 로컬 환경에서 테스트를 할때는 인메모리 DB인 H2 데이터베이스를 사용했으나, 실제 배포 환경에서 인메모리 DB는 애플리케이션을 재실행할때마다 데이터가 날아가는 문제가 발생한다. 따라서 MySQL을 사용하기로 했고 AWS의 EC2, RDS, S3를 통해 애플리케이션을 배포하기로 했다. 먼저 MySQL을 사용할 수 있도록 코드를 수정하고, AWS의 서비스 인스턴스들을 생성했다. 이후 코드를 EC2에 클론해와서 실행시키는 순서로 진행했다. 크게 세가지 문제를 겪었고 다음과 같.. 2023. 6. 26.
91일차: Pre-Project Day 11 (Mapper/MapStruct 생성안됨) 코드를 실행하면서 가장 문제가 되었던 부분 중 하나가 Mapper였다. 분명히 메서드 파라미터 타입, 리턴 타입 모두 잘 작성되어있고 의존라이브러리도 추가되어있고, 애너테이션도 잘 붙어있고 인터페이스 타입으로 생성되어있고 Entity, Dto 필드명도 일치하는데 뭐가 문제일까 한참을 고민했다. 심지어 또 어떨때는 생성이 되기도하고 어떨땐 안되기도 해서 정말 뭐지? 라는 고민을 많이했다. (그래서 초반에는 일단 코드를 돌려야겠다는 생각에 디폴트 매퍼를 생성해서 사용하기도 했다.) 이제 코드가 어느정도 정리되고나니 여유가 생겨서 해당 부분 문제를 해결해보기로 했다. 구글링해보니 이유가 명확히 있었다. 사용중인 Lombok과 MapStruct간에 충돌이 나서 그렇다고 한다. Getter, Setter를 사용해.. 2023. 6. 23.
90일차: Pre-Project Day 10-2 (코드 Merge, CORS 오류 해결, Ngrok) 백엔드 팀원들의 코드를 모두 합친 첫날이었다. 아무래도 각자 다른 부분을 작성하고 연관관계도 있다보니 처음에는 컴파일 오류나는 부분들이 꽤 있었다. 그래도 import 설정을 추가하고 일부 수정했더니 다행히 코드가 잘 실행됐다. github에 코드 올리고 머지하는것도 이제는 조금 익숙해져서 비교적 큰 충돌 없이 잘 진행되고 있다. 아무래도 부트캠프 과정에서 배운 내용을 바탕으로 하고있고 초기에 API명세, 테이블명세를 잘 작성해두어서 필드명이나 메서드명을 서로 참조하는게 편했던것같다. 다음에 본 프로젝트에 들어가서도 코드 구현 전에 분석, 설계 부분을 명확히 하는게 중요할것같다. 그런데 한가지 문제가 생겼다. 아직 배포환경은 구성하지 못해서 Ngrok을 통해서 프론트엔드 코드와 연동 테스트를 하려고했는데.. 2023. 6. 23.
90일차: Pre-Project Day 10-1 (인증 에러 처리: AuthenticationFailureHandler, AuthenticationEntryPoint) 로그인, 로그인 상태 검증 등 인증과 관련된 내용을 정리하다보니 인증에 실패했을때 리턴 형태에 대해 고민하게 되었다. 지금은 기본 지정된 상태로 값이 리턴되고 있다. 이걸 에러코드 / 메세지로 깔끔하게 보내는건 어떨까? 하는 생각이 들었다. 인증과 관련해서 발생할 수 있는 에러는 크게 두가지로 나뉜다. 먼저 로그인(Authentication)과정에서 실패하는 경우 -> AuthenticationFailureHandler를 통해 원하는 작업을 지정할 수 있다. 그 외 인증 과정에서 만료된 토큰이나 조작된 토큰 등 유효하지 않은 인증 정보를 사용하는 경우 -> 발생한 에러를 AuthenticationEntryPoint에서 잡아서 처리할 수 있다. 먼저 로그인에 실패했을때 에러 코드 / 메세지를 출력할 수 있.. 2023. 6. 22.
89일차: Pre-Project Day 9 (HandlerInterceptor, JWT 정보 가져오기) 이제 회원가입/로그인/로그아웃 관련 기능들을 어느정도 마무리하고 무엇을 해야할까 고민하던중 "코드가 merge되지 않은 상태인데 다른 팀원분들은 질문/답변 등록할때 memberId 같은 정보를 어디서 받아올 수 있을까?"라는 의문이 생겼다. 질문/답변 조회의 경우 별도의 사용자 인증이 필요 없는 상태이지만 등록이나 수정할때는 인증된 사용자만 가능하다. 그렇다면 클라이언트가 질문이나 답변을 POST, PATCH 할 때 내용 뿐만 아니라 memberId와 같은 정보도 계속 보내야하는가? 하는 생각이 들었다. 현재 JWT를 통해 인증 여부를 확인하고 있으므로 JWT에서 회원 정보 관련 내용을 추출할 수 있다면 클라이언트측에서 추가로 회원 정보를 보낼 필요가 없다. 그렇다면 JWT에서 어떻게 회원 정보를 가져올.. 2023. 6. 21.