본문 바로가기

전체 글25

넥스터즈 23기 이수 후기 2023.8.19 일자로 약 2달간의 넥스터즈 23기가 끝이났다. 이전들의 기수와 다르게 수료증, 이수증을 PDF파일과 더불어 운영진분들이 직접 하나하나 프린트해 나누어 주었습니다. (참고로 특정 기수를 마치면 이수증이 발급되고, 2회 이상 이수시 최종 넥스터즈 수료증이 발급됩니다. 또한 활동 점수 70점 이상일 시 수료가 가능합니다!) 지난 넥스터즈 활동과의 차이점을 적어보고 싶지만, 이번이 첫 활동이기 때문에 간단히 지난 2달간의 후기로 대체했습니다. (다음 넥스터즈 활동 후기에선 차이점을 적어보겠습니다~) 1차 세션(팀빌딩) : PM들의 아이디어 발표 및 팀원 매칭 2차 세션(기획) : 팀별 아이디어 와이어프레임 및 기획 고도화 3차 세션(레크레이션) : 상금을 건 팀별 레크레이션 및 팀 작업(2개.. 2023. 8. 24.
퍼사드 패턴을 도입해 도메인 간 의존성을 줄이다. Volunteer 프로젝트 관련 포스터 입니다. GitHub - project-Volunteer/BackEnd: 사이드 프로젝트 - 봉사 활동 팀 매칭 서비스(BackEnd)👊🏼 사이드 프로젝트 - 봉사 활동 팀 매칭 서비스(BackEnd)👊🏼. Contribute to project-Volunteer/BackEnd development by creating an account on GitHub. github.com 프로젝트를 진행하면서 필요한 도메인이 늘어나고, Service layer, Repository layer 간 의존성이 증가하는 상황이 빈번히 발생했습니다. 이러한 의존성을 줄이고 응집도 높은 클래스를 만들기 위해 퍼사드 디자인 패턴을 도입한 경험을 소개해드리고자 합니다. 레거시 상황 아래는 .. 2023. 8. 13.
Spring Rest docs 적용기 Volunteer 사이드 프로젝트에 적용하면서 학습했던 Spring Rest docs를 정리해보고자 합니다. 자세한 코드는 깃허브를 참고해주시기 바랍니다. Rest Docs 란? 테스트 코드 기반으로 Restful API 문서화를 도와주는 도구 입니다. Asciidoctor를 사용해서 AsciiDoc(adoc 파일)을 HTML 등으로 다양한 포멧으로 문서화를 변환할 수 있습니다. snippet(adoc 파일)은 문서화에 필요한 문서 조각이며, Asciidoctor가 이러한 파일을 HTML 파일 등으로 변환시켜주게 준다. 문서화를 위한 테스트 코드와 API 명세가 일치하지 않으면, 테스트가 실패하게 되고 문서화가 진행되지 않습니다. 그러므로 검증된 문서 임을 보장할 수 있습니다. 예전 프로젝트에서는 Swa.. 2023. 8. 8.
넥스터즈 5차 세션 후기 지난 4차 세션(2023.7.15)에는 이때까지 미뤄왔던 정처기 실기 시험으로 인해 불참석했고, 2023.7.29에 진행했던 5차 세션 후기를 남겨보고자 합니다.~~ (정처기 시험은...움....부분점수 잘 주겠지?...공부를 안 했으니 떨어지는 게 당연하지만...희망을...🤣) 5차 세션 이번 5차 세션에는 팀별 중간 발표, 4차 세션 UT 피드백, 작업 현황 등을 공유하는 세션으로 이루어졌습니다. 4차 세션에 참석하지 못해 다른 팀의 서비스 UT를 듣는 것은 처음이었습니다. 순조롭게 진행되는 팀도 있었고, 초기 기획이 아예 바뀐 팀도 있었습니다. 심지어 저희가 목표로 한 4주 런칭을 이미 성공해서 서비스를 홍보하던 팀도 있었습니다.(헉...우리 목표였는데...😥...아니야!! 우리도 이제 곧이야!!).. 2023. 7. 30.
Github Actions과 Docker를 이용한 CI/CD 본 게시물은 넥스터즈 23기 짠지 사이드 프로젝트에서 진행한 내용입니다. 자세한 내용: https://github.com/Nexters/zzanji-server GitHub - Nexters/zzanji-server: 넥스터즈 23기 짠지 팀의 서버 저장소 넥스터즈 23기 짠지 팀의 서버 저장소. Contribute to Nexters/zzanji-server development by creating an account on GitHub. github.com 들어가기 앞서 예전 사이드 프로젝트에서는 Jenkins, Docker를 이용해서 자동 배포 파이프라인을 구성했지만, 이번에는 새로운 툴을 사용해보고 싶어 Github Action를 이용하여 CI/CD 파이프라인을 구성해보았습니다. (기본적으로 Do.. 2023. 7. 19.
동시성 이슈에 낙관적 락을 걸어보다. 들어가기 앞서 Volunteer 사이드프로젝트를 진행하면서, 사용자는 공지사항에 대해서 읽음 표시를 할 수 있었다. 읽음 표시 및 해제가 가능하며 흔히 좋아요 기능과 같은 기능이다. 평소에 커뮤니티 서비스를 사용하면서 좋아요 버튼을 광클하면 어떻게 될까? 라는 생각을 했었고, 좋아요 기능과 비슷한 기능이 사이드프로젝트 내에 존재해 실제 무슨 일이 생길지 테스트 해보았다. 같은 사용자가 같은 공지사항의 읽음을 광클을 한다는 상황을 가정하고 Jmeter를 통해 간단히 실험해보았다. 하나의 공지사항에 대해서 같은 사용자는 한번만 읽음 확인이 가능한데, 같은 사용자의 정보 2개가 들어오는것을 볼 수 있었다. 동시성 이슈가 발생한 것이다.❗ 같은 사용자 읽음 정보가 들어왔을 때, 읽음 확인 사용자 리스트 조회 시.. 2023. 7. 8.
넥스터즈 1차 세션 후기 2023.7.1에 진행되었던 넥스터즈 23기 1차 세션 후기를 남기고자 합니다. 편하게 읽어주시면 감사하겠습니다. 넥스터즈 23기 지원서 및 면접 후기는 아래 링크를 참고해주기 바랍니다.😊 https://bonsik.tistory.com/6 넥스터즈 23기 지원서 후기🤣 많은 전국 IT 동아리 중에서도 탑티어로 뽑히는 넥스터즈 동아리에 지원서 작성 부터 면접까지 후기를 공유해보고자 합니다. 또한, 작성한 지원서 및 면접 질문들도 기억나는 대로 적어 보도록 bonsik.tistory.com 먼저 넥스터즈는 총 8개의 세션으로 진행됩니다. 작년까지 세션 별로 장소가 달라지는 경우가 있었는데, 이번 23기부터는 서울산업진흥원세택 3층에서만 진행된다고 합니다. (고정된 위치가 좋지..ㅎㅎ) 이렇게 상세하게 길을.. 2023. 7. 6.
JPA & Querydsl exists 성능 분석 들어가기 앞서 Volunteer 사이드 프로젝트를 진행하면서 Spring Data JPA를 이용해 exists 함수를 사용해야할 상황이 있었다. Spring Data JPA는기본 메서드로 existsBy~ 형태로 제공하지만, where절의 조건이 3개,4개... 증가할 수록 필드명이 너무 길어져 @Query를 사용합니다. 대부분 아시다시피, Spring Data JPA는 exists 함수를 제공하지 않기 때문에, 이를 대체하고자 Querydsl를 사용합니다. 또한, Querydsl은 서브쿼리로만 exists 함수를 제공하고 성능상 이슈가 있어 직접 구현해야하는 걸로 알고 있습니다. 직접 얼만큼 성능차이가 있는지 눈으로 보기 위해서 몇가지 경우를 직접 성능 테스트 해보았습니다. Querydsl의 기본 ex.. 2023. 7. 4.
동시성 이슈와 데드락 문제를 비관적 락를 이용해 해결하다. 문제 상황 봉사 매칭 서비스 사이드 프로젝트에서 다중 사용자가 봉사 일정 신청시 동시성 이슈가 발생했다. 즉, 봉사 일정에 참가 가능한 인원이 한명이고, 3명의 신청자가 동시에 참가 신청을 했을 때 동시성 이슈로 인해 모두 참가되는 문제가 발생한 것이다. 개발 중인 서비스 DB의 일부분이다. 앞서 문제를 다시 설명하자면, 일정 테이블:일정 참가자 테이블=1:N 관계이고 사용자 3명이 동시 신청시 일정 참가자 테이블에 3개의 데이터가 모두 insert 되는 것이다. 간단히 테스트를 통해 실제 동시성 이슈가 발생하는지 보도록 하자. 위는 코드는 일정 참가 신청시 호출되는 Service 메서드이다. 간략히 설명하자면, 아래의 플로우로 일정 신청이 진행된다. 일정 검증(존재 여부, 참여 가능 일자 여부) 일정 .. 2023. 6. 28.