2024.03.11(월) ~ 2024.03.15(금)

  • Day 91 ~ 95
  • 최종 프로젝트 3주차



Day 91

  • 3.11(월)

해야할 일

  • 3.15(금)까지 백엔드 / 프론트엔드 구현 완료 (0번째 스프린트)
  • 3.22(금)까지 CI/CD 설정 및 적용 완료

Health check ON

  • 선생님께서 강의실에서 1초에 몇 번씩 각팀이 배포한 페이지들 health check할 예정
  • 그동안 무중단 배포가 되어야 한다.
  • 이렇게까지 하는 (부트캠프) 프로젝트는 없을 것이다.
    왜냐하면 장애 없이, 중단 없이 배포하는 것이 그만큼 어렵기 때문에
    이 기회에 잘 하자.

3.25 ~

  • 성능 리팩토링 스프린트
    • 한다면 그에 따른 분명한 근거가 있어야 한다.
    • 리팩토링한 결과가 이전보다 더 좋다는 정량적 데이터 필요 (증빙 및 증명)
  • MSA 분리 스프린트
  • ES(Elastic Search) 스프린트
  • 각 팀 사정에 따른 2~3일 혹은 일주일 단위의 단기 스프린트

4.1 ~

  • 스프린트 1

4.8 ~

  • 스프린트 2

4.15 ~

  • 최종 문서 작업 및 발표 준비


3.11(월) commit history

3.11 commit

  • [백엔드] 리뷰 관련 Entity, Repository 구현
  • [백엔드] 리뷰 관련 Entity mapping 설정
  • [백엔드] pom.xml 설정 및 버전 통일화
  • [백엔드] 리뷰 스크랩 생성 기능 구현
  • [백엔드] 리뷰 스크랩 생성 테스트 코드 작성 (미완)




Day 92

  • 3.12(화)

선생님 피드백

  • 우리팀

    • 검색 엔진

    • 캐시 서버

    • 적용하는 건 좋은데
      새로운 기술 도입과 교체에는 반드시 그럴만한, 타당한 이유가 있어야 한다.


  • ES
    • 필드 넣어서 mysql full text로 검색해보고 성능 테스트한 후
      ES 적용해서 성능 테스트하면
      두 데이터를 비교할 수 있고 이를 증명할 수 있는 데이터로 사용할 수 있을 것.

3.12(화) commit history

3.12 commit




Day 93

  • 3.13(수)

선생님 피드백

  • 검색 기능을 중점적으로 개발
  • 제목 / 내용 / 사용자 등으로 검색할 수 있게
  • 제목 & 내용
  • 제목 & 내용 & 사용자
  • ...

  • 동적 SQL (동적 쿼리)
    • 검색은 SELECT인데 유저가 검색하는 것에 따라 달라짐.
    • 똑같은 테이블을 검색하는 것인데
      제목으로 검색을 하는가? 이와 같은 점이 달라짐.
    • 참고
      • 코드로 배우는 스프링 부트
        • if로 동적으로 하나씩 붙여주는 방식으로 할 것 (QueryDSL)
        • 동적 쿼리에 if문 붙여서 하는 것
        • 예전에는 SQL을 실행하는 것이었는데 지금은 아님

  • 알림
    • Firebase가 응답이 다소 느려서 SSE가 좋을 것 같긴 한데
      오프라인일 때 되지 않을 것 같다.
    • 구현을 어떻게 하는지에 따라 할 수도 있을 것 같다.

3.13 commit history

3.13 commit history 1

3.13 commit history 2



Day 94

  • 3.14(목)

선생님 피드백

  • 검색어 자동완성 시도해볼 것.
    • 당장의 성능은 좋아지지 않을 것.
    • 하지만 ES로 적용하면 해결될지도...?

  • 동적 쿼리
    • 제목으로 검색하고 싶으면 제목으로 검색하게
    • 제목 + 내용으로 검색하고 싶으면 제목 + 내용으로 검색하도록
    • Default로 제목 + 내용으로 검색하게 되어 있는 건 동적 쿼리가 아님
    • 사용자가 제목만 추가했으면
      QueryDSLif문으로 제목만 검색되도록 수정해야 함.

해야할 일

  • 동적 쿼리 적용해서 메인페이지 검색 API 구현

    • 제목으로 검색
    • 제목 + 내용으로 검색
  • 동적 쿼리 적용에 따른 프론트엔드 드롭다운 메뉴 추가

  • 각 페이지에서 검색 API도 구현해야 함.

  • nav bar에서 프로필 이미지 불러오는 API 구현 후 이미지 출력 기능 구현해야.


3.14 commit history

3.13 commit history



Day 95

  • 3.15(금)

선생님 피드백

  • Spring keyup event

    • Enter 눌렀을 때 뜨고 백엔드로 데이터가 가서
      제목으로 검색하면 결과 가져와서 드랍다운 등의 메뉴를 그려주면 된다.
  • 네트워크 탭

    • Fetch 탭에 그때 그때 바로 불어봄 (호출)
    • Payload에 검색어 보내짐
    • ex.)
      • 로또 입력하면 키보드 4번 누르니까 API가 4번 호출되고 응답이 오고 있다.
    • 키보드 입력 한 번 할 때마다 백엔드와 통신
    • 이런 방식이 대표적인 비동기 통신 방식

정리

  • 주말동안 검색어 자동 완성
  • 관리자 페이지
    • Vue 조회 컴포넌트 구현
    • axios 적용
  • 예외 처리 보완할 것 (모든 상황에 대해)
  • 테스트 코드 작성

다음 주

  • 쿠버네티스 클러스터 구성, 배포 등의 CI/CD 환경 구성
    (마스터 1대, 워커 4대)

  • 나는 macOS에서 centOS9에 아직 설치해보지 않았으니까 미리 해보자.


  • 배치 처리

    • 모니터링 시스템에서 배치 처리가 실행될 떄 메트릭 확인
  • 검색 엔진

    • 검색 부하 테스트
      • ngrinder 혹은 JMETER

  • 캐시 서버
    • 캐시 적용
      • 로그인
      • 대기열 등
    • 부하 테스트
      • ngrinder 혹은 JMETER

2번째 스프린트 때 타당한 이유로 추가 기능을 도입해야 한다!!


검색

  • 검색도 타당한 이유가 있어야 한다.
  • 검색은 크게 트래픽이 뛰지는 않는다.
  • 검색을 할 때 db 서버에 부하가 간다.
  • 모니터링 시스템으로 볼 수 있지만 검색은 특정 시간에만 튀는 건 아니기 때문에
    모니터링 시스템으로 캡처하는 것 보다는 jmeter 등으로 테스트해야 한다.
  • 검색을 한다면
    메인 페이지에 오자마자 검색할 수도 있고 로그인해서 특정 페이지에서 검색할 수도 있다.
    시나리오에 따라 다른데 시나리오대로 테스트를 할 수 있다.

  • ngrinder
    • 여러 대의 pc로 디도스 공격하듯이 테스트하는 방식
  • jmeter
    • 도커로 CI/CD할 때 테스트코드 돌아갈 때
      docker build 결과로 확인할 수 있다.

캐시 서버

  • 이득을 보는 쪽은 토큰 로그인 관련된 영역
  • 캐시 서버에서는 로그인 관련된 것 말고도 다른 곳에서 활용 가능
  • 대기열까지는 우리가 사용할 일 없다.

다음 주까지 이 모든 내용을 진행해야 한다.

최대한 주말동안 핵심 기능에 사소한 부분들까지 모두 구현해야 한다.


브랜치 정리

  • 우리는 베타 버전 개발 중이므로 배포하면 Release하고 나서 브랜치는 정리할 것.

3.15 commit history

3.15 commit history



소회

단기 스프린트로 짧은 시간동안 많은 기능을 구현해야 했다.
처음에는 2개월이라는 시간이 길게 느껴졌고 충분한 시간이라는 막연한 생각이 주로 들었다.
하지만 막상 프로젝트가 시작되고 나니 개발을 짧은 시간 안에 대부분 마쳐야 했기에
부담이 있었고 완성도에 대한 불안함이 엄습하기도 했다.


하지만 모든 팀원들이 각자의 역할을 제대로 하고 있기 때문에 걱정은 되지 않는다.
모든 팀원들이 각자의 속도는 다르지만 매일 자신에게 할당된 개발 업무를 충실히 이행하고 있다.
개발을 처음 접하는 팀원들도 꽤 있는데 이들 모두 지난 4개월 동안 열심히 노력했음을 매일 느낀다. 팀을 구성한 사람으로서 뿌듯하고 정말 감사하게 생각한다.


이제 기본 Spring Framework를 이용해 기본적인 기능 및 CRUD는 어느 정도 구현이 완료되었고 Vue.js를 이용해서 컴포넌트들과 기본적인 페이지들도 구현되었다.


다음 주부터 CI/CD 설정에 돌입한다.Devops 때 배운 K8S, Jenkins 등의 필수 설정을 하고 나면 개발 후 Githubpushpull request를 하는 순간 테스트 코드를 거쳐 빌드를 하고 자동으로 k8s에 배포가 될 것이다.


그 환경만 구축되고 나면 우리 프로젝트의 어느 정도 완성도를 갖춘 모습을 볼 수 있을 것이다. 이미 local 환경에서는 테스트가 끝났지만 그래도 선생님을 비롯한 다른 사람들의 환경에서 확인하면 또다른 문제가 보일 테니 이 또한 잘 보완해야 한다.


그리고 여전히 잘 모르는 devops 파트이지만 그럼에도 불구하고 틈틈히 이론적인 부분도 보완하고 테스트코드도 잘 만들어서 client들이 예외 상황 혹은 에러 상황이 발생하지 않도록 꼼꼼하게 프로젝트를 완성할 것이다.

profile
Web Developer

3개의 댓글

comment-user-thumbnail
2024년 6월 12일

안녕하세요.
한화시스템 beyond sw 부트캠프 관련되어서 궁금한게 있는데 이메일 확인 한번만 부탁드려도 될까요ㅠ

1개의 답글
comment-user-thumbnail
2024년 6월 20일

안녕하세요!
한화시스템 beyond sw 캠프 신청을 하려고 찾아보던 중 블로그 글을 보게 되었습니다 ㅎㅎ
후기가 너무 궁금했는데 후기 올려주셔서 너무 감사해요-!!
혹시 최종적으로 캠프를 마친 후기를 알려주실 수 있으실까요? (도움이 된 것 같은지, 캠프를 하길 잘했다고 생각이 드는지, 추천하고 싶은지, 전체적으로 과정이 어땠는지, 만족한점, 아쉬운점 등 이요ㅜ 다 알려주시면 너무 감사하지만 가능한 것 만 답변 주셔도 정말 감사드립니다 ㅜ)
취직하는데도 도움이 되셨을까요?
알려주시면 정말 정말 너무 감사드리겠습니다! 너무너무 궁금해요ㅜㅜ!
읽어주셔서 감사합니다! 답글 부탁드립니다 :)

답글 달기
Powered by GraphCDN, the GraphQL CDN