0. 코드테크 - 첫 프로젝트를 마치면서

Ho Saint·2022년 12월 1일
0

🖥 코드테크

서비스 주소 : 테크 기기 리뷰 커뮤니티 - 코드테크
깃허브 저장소: https://github.com/codestates-seb/seb40_main_011
프로젝트 기간: 22.11.08 ~ 22.12.04(예정)

 코드스테이츠 KDT과정 수강생들과 함께한 첫 프로젝트 코드테크. 로컬과 aws ec2 프리티어에서 개인작업물들을 돌려보긴 했었으나 이렇게 배포까지 완전히 경험해본 것은 처음이었기에 뿌듯함과 아쉬움이 동시에 들었다. 이번 프로젝트에서 나는 백엔드 팀원의 일원으로 자바 스프링 기반의 REST API 서버 애플리케이션 개발을 맡았다. 그 중에서 평점과 간단한 리뷰를 남길 수 있는 간단리뷰(이하 스낵리뷰), 질문/답변 도메인의 코드를 작성했고 메인 페이지 구현을 수행했다.

🖨 기여

1. 공유

  • 홈 서버를 갖고 있는 백엔드 팀원이 있어 배포 환경과 CI/CD를 구성해 주셨고 다른 팀원분은 회원 도메인과 Spring Security를 맡아 주셨다. 덕분에 나는 맡은 부분에 온전히 집중할 수 있었다.

  • 그렇게 공부한 내용을 디스코드에 상주하면서 팀원들과 공유하였고 나 역시도 맡은 부분은 아니었지만 Jenkins 구성 과정과 Oauth2 트러블슈팅을 간접적으로 경험해볼 수 있었다.

  • JPA

    • 마이페이지 조회를 위해 회원 엔티티가 여러 엔티티들과 양방향 매핑이 되어 있었다. 로그인 시 매핑된 엔티티들이 전부 로딩되면서 많은 쿼리가 발생했다. 개선 방향으로 N쪽 엔티티에 지연로딩을 설정하고 마이페이지 조회시 @Batchsize/default_batch-_fetch_size 옵션으로 한번에 가져오는 방법을 공유했다.

    • 팀원이 업데이트 로직에서 JpaRepository의 save(Entity e) 메소드를 사용하고 있었다. SimpleJpaRepository 구현체의 save 메소드 호출 시 식별자(id)가 존재할 경우 merge가 사용되는 것을 말씀드다. 그리고 merge와 dirty checking의 차이점, 트랜잭션 내부에서 영속 상태에 있는 인스턴스의 상태가 변경되면 save 호출 없이도 dirty checking에 의해 update 쿼리가 날아가는 것을 같이 확인해 보았다.

    • 제품 정보 등록 시에 제품 이미지 정보를 설정하면서 lazyinitializationexception이 발생했다. 우선 제품 엔티티 저장과 이미지 엔티티 저장을 분리된 트랜잭션에서 수행하는 것으로 해결을 했다. 그리고 담당 팀원에게 제품 쪽의 연관관계를 끊고 이미지의 경로만을 제품 엔티티에서 관리하는 것은 어떨까 제안을 드렸다.

    • 그 밖에 일대다 관계 조회에서 고민을 많이 하셔서 내가 구현한 질문 조회 메소드를 공유했다.

  • Postman API Documentation

    • 처음에는 Spring Rest Docs를 사용하여 api 문서 자동화를 해보려고 했다. 하지만 아직 기본적인 구현 자체도 미숙한 상황에서 테스트 코드 작성과 Spring Rest Docs의 러닝 커브에 팀원들이 부담을 느꼈다.

    • 그래서 빠르게 프론트엔드 팀원들과 api 명세를 공유할 수 있는 방법을 찾다가 포스트맨의 api 문서화 기능을 발견했고 사용법을 팀원들과 공유했다.

  • Querydsl, Spring Data Redis

2. 스낵리뷰

3. 질문/답변

4. 메인페이지

🎚 사용

1. Spring MVC

2. MariaDB

3. JPA/Spring Data JPA

4. 페이징 처리

5. Querydsl

6. Redis/Spring Data Redis

7. K6

8. 개발환경

🔖 회고

1. 배운 것

2. 아쉬운 것

3. 좋았던 것

4. 향후 계획

profile
열정보다 시스템. 실수를 막을 수 있는 프로세스.

0개의 댓글