본문 바로가기

Project

(15)
[Independe] 예외처리 방법 개발 초기엔 구현에만 급급하여 예외처리를 전혀 신경쓰지 못 했다. 그러나 개발이 점점 진행 될수록 프론트엔드 개발자를 위해 예외 API를 깔끔하게 전달 해줘야겠다는 생각이 들기 시작했다. 난 처음에 프로그램 내부의 예외 처리를 아래의 코드처럼 모두 IllegalArgumentException으로 처리했다. Member findMember = memberRepository.findById(memberId) .orElseThrow(() -> new IllegalArgumentException("Id not exist")); 그러나 이렇게 구현을 하니 해당 예외가 왜 발생했는지는 오직 나 혼자만 알 수 있었다. 백엔드를 혼자 구현하다보니 이런 예외처리가 문제라고 쉽게 생각하지 못 했다. 또한, 예외의 메시지를..
[TickerBell] 로그인 필터에서 Controller로 변경한 이유 새로운 팀프로젝트로 공연 예매 서비스(TickerBell)를 구현하던 중 로그인 처리를 어디서 해야할지 고민했던 경험을 담은 글이다. Spring 과 Spring Security, JWT 를 이용해 로그인을 구현했다. 난 평소 "/api/login" 이라는 url 경로로 요청이 들어오면 작동하는 필터를 만들어 로그인 처리를 진행했다. 아래는 필터를 이용해 구현한 코드이다. public class JwtAuthenticationFilter extends AbstractAuthenticationProcessingFilter { private final JwtTokenProvider jwtTokenProvider; private final ObjectMapper objectMapper = new ObjectM..
[Independe] 협업을 위한 첫걸음 Swagger 난 자취생 커뮤니티 Independe가 첫 프로젝트였는데 팀원 역시 프로젝트 경험이 없었다. 팀원은 서버에 대한 개념조차 거의 없어 처음엔 통신을 어떻게 해야되는지도 잘 몰랐다. 그렇게 서로 학습을 하고 Vue.js와 Spring이 통신하기 위해선 REST API를 url을 통해 데이터를 주고 받는걸 알게됐다. 하지만 둘다 프로젝트는 처음이었기에 어떤 URL에 어떤 데이터가 맵핑되어있는지 서로에게 알려주기 너무 힘들었다. 부끄럽지만 처음엔 가장 단순한 방법인 카카오톡을 사용했다. 같은 교내 학술동아리라 다행히 옆 자리였기에 먼저 카톡으로 Url과 함께 데이터를 어떻게 전송해야되는지 보내주고 팀원은 이를 받은 뒤 개발하며 모르겠거나 오류가 발생하는 것은 옆에서 하나하나 물어보며 개발을 했다. 사실 처음엔 ..
[Independe] 추천, 신고, 즐겨찾기 DB 설계에 대한 고민 자취생 커뮤니티 개발을 하며 게시글, 댓글에 대해 추천, 신고, 즐겨찾기와 같은 요구사항이 발생했다. 처음엔 해당 기능들은 다 게시글과 1 : N 관계로 구축하면 되겠다고 쉽게 생각했다. 하지만 1 : N으로 맵핑한 뒤 구현을 할 수록 이상함이 느껴졌다. 추천은 '회원이 게시글을 추천한다' 그렇다면 추천이라는 테이블엔 회원, 게시글에 대한 정보가 모두 존재해야 한다. 또한, 한명의 회원은 여러개의 게시글에 추천을 할 수 있고 하나의 게시글 또한 여러명의 회원에게 추천을 받을 수 있다. 즉 1 : N이 아닌 N : M 다대다 관계로 구축해야 했다. 이 다음 발생한 고민이 추천, 신고, 즐겨찾기는 결국 boolean 값으로 isRecommend, isReport, isFavorite과 같이 컬럼에 저장되는데..
[Independe] 댓글 Repository 삭제 테스트 오류 해결 프로젝트를 Junit5를 이용해 댓글 삭제 테스트 코드를 작성하던 중 Postman으로 테스트 할 땐 정상적으로 동작하던 코드가 테스트 코드를 이용하면 원하는 결과값이 도출되지 않았다. @Test void deleteCommentsByPostIdTest() { // given Member member = Member.builder() .username("id") .password("1234") .nickname("nick") .role("ROLE_USER") .build(); memberRepository.save(member); Post post = Post.builder() .title("title") .content("content") .member(member) .independentPostTyp..
[Independe] 대댓글 설계에 대한 고민 자취생 커뮤니티를 개발하며 댓글과 대댓글에 대한 요구사항이 있었다. 난 단순히 댓글 테이블과 대댓글 테이블을 따로 두어 1 : N 관계를 맺으면 될것이라 판단했다. 그러나 구글링을 통해 다른 개발자분들이 대댓글을 구현한 것을 보니 모두 계층형 구조를 가져갔다. 계층형 구조 자체는 이해하기 수월했지만 구현된 코드를 보니 다소 이해하기 난해했다. 하지만 많은 개발자분들이 작성해주신 예제들을 이용해 직접 구현해보며 코드를 이해할 수 있었다. @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) // protected 기본 생성자 public class Comment extends BaseEntity { @Id @GeneratedValue @Co..
[Independe] 자취생 커뮤니티 프로젝트 기획 개발 동기 난 성인이 된 이후 바로 자취를 시작해 현재까지 자취를 하고있다. 자취를 시작하니 일상생활에 불편함과 어려운 부분이 많았다. 가령 부엌의 기름때를 청소하기 위한 방법을 네이버 또는 유튜브 등에 검색하면 너무나 많은 정보들이 쏟아졌다. 유튜브 영상을 보더라도 제품에 대한 홍보 영상인 경우도 다수였다. 수 많은 영상과 글들 속에서 나에게 적합한 정보를 찾는것도 너무 귀찮았다. 난 '실제 자취를 하며 이러한 문제를 해결한 사람들에게 직접 물어볼 수 있으면 이러한 문제점을 해결할 수 있지 않을까?' 라고 생각했고 인터넷 커뮤니티의 게시글과 채팅이 가장 효과적일 것이라 생각해 자취생 커뮤니티 개발을 결심했다. 학과에 나처럼 웹 개발자를 목표로 하는 친구들이 있어 프로젝트를 같이 진행하자 제안했고 친구들..