본문 바로가기

Dev22

페이지네이션 미적용 원인 이슈 페이지네이션 미적용 원인 이슈   페이지네이션 미적용 원인GET /notifications?page=0&size=5 public Page displayNotifications(User user, int page, int size) { Pageable pageable = PageRequest.of(page, size); Page notificationDtoPage = notificationQuerydslRepository.findAllByReceiverId(user, pageable); return toResponsePage(notificationDtoPage); }   public Page findAllByReceiverId(User receiver, Pa.. 2024. 5. 16.
2024 마이펫로그 프로젝트 회고 반려인(집사)들의 공동 기록과 소통을 위한 서비스를 기획하여 프로젝트를 진행하였습니다. 개발기간 : 2023. 1. 20(토) ~ 2023. 2. 29(목) 협업 방법 노션을 통해서 문서 공유를 하였고 실시간 소통을 위해 디스코드 채널을 활용하였습니다. 프론트엔드&벡엔드&디자이너 협업 미팅 및 회고는 목요일에 진행했습니다. 미팅에서는 진행사항, 논의사항 그리고 각 팀의 회고 시간을 가졌습니다. 팀 회고는 "KPT 회고" 방식을 도입하여 진행했습니다. Keep 현재 우리팀이 잘 하고 있어서 계속 유지하면 좋을 것 같은 부분 Problem 현재 우리팀이 가지고 있는 문제 Try Problem에 적은 것을 해결하기 위해 우리 팀이 다음에 시도해볼만한 것 (혹은 Keep 중에서도 더 개선하거나 시도해보고 싶은 .. 2024. 4. 3.
[Numble] 연계_내가 만드는 나만의 유형테스트 회고 요즘 마케팅, 상품기획, 콘텐츠 기획에서 많이 보이는 키워드인 '나만의 유형검사' 를 주제로한 디프백, '디자인' '프론트엔드' '백엔드' 연계 딥다이브를 6주간 진행했었습니다. 23.05.26 ~ 23.07.06 디프백 연계_ 내가 만드는 나만의 유형테스트 연계_ 내가 만드는 성격유형테스트 www.numble.it 시작전 넘블에서 마련한 오프라인 네트워킹을 통해 팀원들을 볼 수 있었고 그 덕분인지 이후 온라인(디스코드)에서 크게 어색함을 찾아볼 수 없었습니다. 여러 사람들과 함께 공통 목표를 통해 나가면서 재미도 있었고 트러블도 있었지만 무엇보다 무언가를 함께 만들어 간다는 것과 디스코드가 쉬질 않아 그동안 한 배를 탄 동료가 있다는 것이 좋았습니다. 회사일 때문에 많은 시간을 투자할 수 없었고 많이 .. 2023. 7. 17.
[Numble] Spring으로 타임딜 서버 구축 - 트러블 슈팅과 회고 4 (핀포인트, nGrinder) 10. Pinpoint 설치 약 8시간 삽질 pinpoint는 대규모 분산 시스템에서의 성능 모니터링과 분석을 위한 도구로, 다양한 기능과 통계 정보를 제공합니다. 10.1. 핀포인트 설치 pinpoint-apm/pinpoint-docker: Official Dockerized components of the Pinpoint (github.com) 깃허브에 설치하는 방법이 나와있다. java 와 도커가 설치돼있기 때문에 docker-compose를 통해 설치할 것입니다. 설치전 현재 아키텍처에 대해 보여주자면 젠킨스를 통해 배포 서버를 원격으로 배포중이기 때문에 *(중요)배포 서버에 root 가 아닌 배포 사용자로 접속후 설치 진행해야됨 (이것때매 삽질,, 나중에 agent가 jar파일을 root로 설치.. 2023. 4. 17.
[Numble] Spring으로 타임딜 서버 구축 - 트러블 슈팅과 회고 3 (동시성 처리) 9. 동시성 구현 개요 스프링에서는 하나의 요청에 스레드 풀에서 스레드를 하나 꺼내 한 요청을 수행합니다. 만약 여러 요청이 올 경우 여러 스레드들이 동시에 요청을 수행을 할 것입니다. 이러한 멀티 스레드 환경에서 자원들이 공유되는 상황에서 프로그래밍을 할 때, 타이밍에 의한 Race Condition(경쟁상태 : 여러 개의 스레드 혹은 프로세스가 공유 데이터를 동시에 변경하려고 할 때 생기는 문제) 가 발생해 문제를 야기할 수도 있습니다. 동시성 문제는 변경되는 데이터에 의해 발생한다고 생각한다.(변경되기 전의 데이터에 대한 접근과 변경된 후에 데이터에 대한 접근에 대한 데이터 정합성 문제) 그래서 변경되는 부분을 focus 해서 처리하자. 동시성문제 처리에 있어서 동시성, 가시성, 원자성에 대한 용어.. 2023. 4. 17.
[Numble] Spring으로 타임딜 서버 구축 - 트러블 슈팅과 회고 2 (CI/CD) 8. 네이버 클라우드에서 CI/CD 구축 무중단 배포 과정 푸시를 하면 젠킨스 서버에서 젠킨스가 webhook으로 인식 해당 깃허브 레포지토리를 pull 한뒤 gradle로 빌드하여 .jar 파일 완성 도커는 기존 컨테이너 종료시키고, 컨테이너와 이미지 삭제 jenkins 에서 Dockerfile 빌드하여 Docker hub로 push 배포서버에서 Docker hub에 있는 jar 파일을 이미지로 가져오고 실행 (pull & run) 8.1. 젠킨스 구축용 서버에서 젠킨스, 도커 설치 [Jenkins] CentOS에 Jenkins 설치하기 (tistory.com) 설치 목차 1. jdk11 설치 및 환경변수 설정 2. 빌드 도구 설치 (Gradle) 3. 젠킨스 설치 4. 도커 설치 젠킨스 이용하여 도커.. 2023. 4. 17.
[Numble] Spring으로 타임딜 서버 구축 - 트러블 슈팅과 회고 1 (DB, 아키텍처, 테스트) 1. ERD 작성 나름대로 스스로 ERD를 설계했습니다. 타임딜 이라는 것은 상품에서 확장된 느낌이라 생각했습니다. 재설정된 세일가격, 제한물량, 시작시간을 추가했습니다. 타임딜 상품은 일반상품과 동일하게 상품명, 상품설명 등을 가질 수 있다고 생각했습니다. 한 상품으로 여러 타임테이블을 생성할 수 있다고 생각하여 상품과 타임딜 테이블을 1:N으로 설정했습니다. 유저와 상품의 관계테이블로 구매테이블이 생성됩니다. 2. API목록 API 명세 각각의 도메인 별로 API 정리 3. 와이어프레임 피그마로 작성 4. 아키텍처 젠킨스 서버와 배포 서버를 운영하였습니다. 젠킨스 서버에서 GitHub 코드를 pull 하여 코드를 가져오고 빌드시켜 DockerHub에 Push 합니다. 배포 서버에서 젠킨스를 통해 원격.. 2023. 4. 17.
[Numble] Spring으로 타임딜 서버 구축 - 클린코드를 포함한 리팩토링 (TOP3 선정!) 처음 참가한 넘블 벡엔드 챌린지에서 무려 TOP3 안에 들게 되었습니다!! 👏👏👏👏👏 감사하게도 처음으로 현직자 분에게 코드리뷰를 받게 되었고 코드리뷰 받은 것과 클린코드(좋은 코드)를 토대로 리팩토링을 할 것입니다. 총평에 대한 코멘트 블로그와 깃허브 read me 칭찬을 받았습니다! llsrrll96/numble-timedeal-server: 넘블챌린지-Spring으로 타임딜 서버 구축하기 (github.com) 성능테스트에서 TPS 개선은 미흡했습니다 ㅠ 아직 테스트 지표를 보고 성능 개선에 대한 지식이 부족: 책이나 강의를 보아야겠습니다. API 명세를 노션으로 정리해 두었습니다. Swagger 를 사용하여 문서화를 한 경험이 있었으니 이번 챌린지에는 적용하지는 않았습니다. projects 를 활.. 2023. 4. 9.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 8 - 스웨거(Springdocs)로 API 문서 제공 API 문서화를 위해 Springdocs 도입 프론트엔드에 API 를 테스트해 볼 수 있는 화면을 제공 "Springfox"의 경우 2020년 이후 활동이 없는 상태라, Springdoc를 사용하였습니다. 의존성 추가 implementation 'org.springdoc:springdoc-openapi-ui:1.6.14' application.yml 설정 springdoc: api-docs: path: /chat-api-docs default-consumes-media-type: application/json default-produces-media-type: application/json swagger-ui: operations-sorter: alpha tags-sorter: alpha # http:/.. 2023. 3. 9.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 7 - 성능 측정, 성능 향상을 위한 리팩토링, 수정과 보완 설계때 정의한 기능들을 우선 구현하고 모바일과 연동을 위해 AWS EC2에 배포를 하였습니다. 이후에는 리팩토링과 성능 향상, 수정과 보완을 하는 시간을 가져보려고 합니다! 1. 성능 테스트 서비스가 얼마나 빠른지 time 일정시간 동안 얼마나 많이 처리할 수 있는지 TPS 얼마나 많은 사람들이 동시에 사용할 수 있는지 Users 서버 메모리 CPU Usage 1.1. nGrinder 사용 💡 성능 측정 목적으로 개발된 오픈소스 프로젝트로 NHN 사단이 개발했다고 합니다. 부하를 줄 수 있는 인터페이스와 테스트 결과를 통계로 제공하며 Groovy 스크립트로 테스트 시나리오를 작성합니다. JUnit 과 유사한 그루비 언어로 시나리오에 따라 스크립트 작성 가능, 오픈소스에 레퍼런스 많기 때문에 사용하였습니다.. 2023. 3. 5.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 6 - 프로젝트 배포 1. 개요 개발 도중 모바일과 서버의 연동테스트를 하는 시간을 가졌습니다. 현재 GitHub를 통해서만 코드를 공유하고 있고 로컬환경에서만 개발하고 있었기 때문에 모바일과 서버가 연결할 수 없었습니다. 팀회의 결과 도커에 올려서 모바일 개발자가 이미지를 받아 서버를 실행시키는 방법도 있었지만 그러기엔 복잡한 과정을 거쳐야했기에 서버를 배포해서 모바일 개발자들이 연동 테스트를 하기로 하였습니다. 현재 Spring Boot 서버는 MSA구조로 인증, 유저, 알림, 채팅, 접속상태 마이크로서비스, 2개의 메인 DB (MySQL, MongoDB), 레디스, 카프카를 운영중입니다. ec2 하나에 모두 넣자는 의견이 있었지만 마이크로서비스들과 레디스, 카프카는 ec2에 넣고 MySQL은 AWS RDS, MongoD.. 2023. 3. 4.
2022 스마일게이트 윈터데브캠프를 통해 성장하기 5 - MongoDB 쿼리 자유롭게 사용하기 Spring Boot에서 MongoTemplate를 활용한 MongoDB 쿼리 자유롭게 사용하기 MongoRepository를 사용하다 쿼리 작성해 한계가 있어서 좀 더 고도화된 쿼리문을 작성할 수 있는 MongoTemplate 사용하기로 하였습니다. MongoTemplate을 사용하기 위해서는 db.collection.find()와 같은 MongoDB 쿼리문도 어느 정도 알아야했습니다. 제가 원하는 쿼리 결과를 생각하면서 쿼리문 예제와 docs 를 찾아보며 연구를 하고 원하는 결과가 나오는 것을 보니 재미가 있더라구요! 이번 포스팅은 에서 사용해봤던 쿼리들을 통해 MongoDB 쿼리문과 MongoTemplate 쿼리 작성을 비교해보면서 쿼리를 자유롭게 작성한 것을 공유할 것입니다. 1. 몽고디비 세팅 .. 2023. 3. 3.