전체보기
-
작년과 올해 프로젝트를 진행하면서 겪었던 문제들과, 이번 Real MySQL 북스터디를 하면서 습득했던 지식들로 문제를 해결해보았습니다. 시나리오 많은 서비스들이 본인이 보았던 컨텐츠에 반응하거나 저장하기 위해 좋아요, 북마크 등의 기능을 가지고 있습니다. 이런 기능들은 다음과 같은 문제점들을 주의 해야 합니다. 중복 요청 문제 (일명 따닥..) 해당 로직과 관련된 쿼리의 성능 문제 준비 도메인은 다음과 같이 User, Post, Likes 를 준비했습니다. @Entity @AllArgsConstructor @NoArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "..
[DB] 좋아요 성능 문제와 동시성 문제 해결하기 - 다중 유니크 키, 실행계획, JMeter작년과 올해 프로젝트를 진행하면서 겪었던 문제들과, 이번 Real MySQL 북스터디를 하면서 습득했던 지식들로 문제를 해결해보았습니다. 시나리오 많은 서비스들이 본인이 보았던 컨텐츠에 반응하거나 저장하기 위해 좋아요, 북마크 등의 기능을 가지고 있습니다. 이런 기능들은 다음과 같은 문제점들을 주의 해야 합니다. 중복 요청 문제 (일명 따닥..) 해당 로직과 관련된 쿼리의 성능 문제 준비 도메인은 다음과 같이 User, Post, Likes 를 준비했습니다. @Entity @AllArgsConstructor @NoArgsConstructor public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "..
2023.03.05 -
현재 프로젝트에서 Git branch 전략을 Git flow를 사용하고 있습니다(우아한형제들 - 우린 Git-flow를 사용하고 있어요) 기존에는 시간에 쫒기며 개발하느니라 쉘스크립트로 배포를 했었습니다. 이 프로젝트에서는 다음 세가지 시나리오로 구분하여 CICD 배포 파이프라인을 구성했습니다. feature 브랜치 작업 후 Pull Request -> JAR 빌드 및 테스트 develop 브랜치에 merge(push) -> Jib 빌드 -> 테스트서버 배포 main 브랜치에 merge(push) -> Jib 빌드 -> 메인 서버 배포 일단 Jib 가 무엇일까요? GitHub - GoogleContainerTools/jib: 🏗 Build container images for your Java appli..
[Spring] Jib CI/CD 파이프라인 구축하기 (feat. Spring Rest Docs 를 돌려주세요..)현재 프로젝트에서 Git branch 전략을 Git flow를 사용하고 있습니다(우아한형제들 - 우린 Git-flow를 사용하고 있어요) 기존에는 시간에 쫒기며 개발하느니라 쉘스크립트로 배포를 했었습니다. 이 프로젝트에서는 다음 세가지 시나리오로 구분하여 CICD 배포 파이프라인을 구성했습니다. feature 브랜치 작업 후 Pull Request -> JAR 빌드 및 테스트 develop 브랜치에 merge(push) -> Jib 빌드 -> 테스트서버 배포 main 브랜치에 merge(push) -> Jib 빌드 -> 메인 서버 배포 일단 Jib 가 무엇일까요? GitHub - GoogleContainerTools/jib: 🏗 Build container images for your Java appli..
2023.02.26 -
이번에 프로젝트를 진행하며, orphanremoval = true 로 엔티티 삭제를 구현해볼까? 라는 생각이 들었습니다. 그런데 실제로 적용해보고 쿼리가 나가는 것을 확인해보며 이런저런 문제가 있다는 것을 느끼게 되었습니다. 상황 게시글(Post) 엔티티는 해시태그(Hashtag) 엔티티를 자식으로 가지고 있습니다. (OneToMany) 게시글(Post) : 게시글 정보를 담고 있음 해시태그(Hashtag) : OneToMany, 해시태그 여러개를 담고 있음 요구사항 : 게시글을 지우면, 게시글에 있는 여러개의 해시태그도 모두 삭제해야 합니다. 간소화된 엔티티 코드는 다음과 같습니다. Post.java public class Post { @Id @GeneratedValue(strategy= Generat..
[DB] JPA의 orphanremoval 또는 CascadeType.REMOVE 에서 발생할 수 있는 성능 문제와 버그(?)이번에 프로젝트를 진행하며, orphanremoval = true 로 엔티티 삭제를 구현해볼까? 라는 생각이 들었습니다. 그런데 실제로 적용해보고 쿼리가 나가는 것을 확인해보며 이런저런 문제가 있다는 것을 느끼게 되었습니다. 상황 게시글(Post) 엔티티는 해시태그(Hashtag) 엔티티를 자식으로 가지고 있습니다. (OneToMany) 게시글(Post) : 게시글 정보를 담고 있음 해시태그(Hashtag) : OneToMany, 해시태그 여러개를 담고 있음 요구사항 : 게시글을 지우면, 게시글에 있는 여러개의 해시태그도 모두 삭제해야 합니다. 간소화된 엔티티 코드는 다음과 같습니다. Post.java public class Post { @Id @GeneratedValue(strategy= Generat..
2023.02.19 -
[(링크) 해당 게시글은 네이버 클라우드 플랫폼 공식 블로그에도 소개되었습니다 !] 포착(Phochak) 포착 서비스는 이번 넥스터즈 활동에서 저희가 출시한 서비스입니다 :) 포착은 여행을 가서 촬영한 짧은 영상들을 저장하고 공유하는 아카이빙 및 스트리밍 서비스입니다. 네이버 클라우드 플랫폼의 든든한 지원 감사하게도 Naver Cloud Platform의 지원으로 크레딧을 지원받아 AWS 가 아닌 NCP를 무.료.로 이용하게 되었습니다 ! NCP를 쭉 들여다보니, AWS와 거의 동일한 환경을 제공합니다. 심지어 AWS SDK와 호환되게끔 구성이 되어있습니다. 이 게시글에서 사용할 NCP 클라우드 요소들을 소개하면.. Server(EC2): 서버 Object Strage(S3): 비용 효율적인 정적 파일 ..
[Spring] Naver Cloud Platform으로 스트리밍 서비스 개발하기(1)[(링크) 해당 게시글은 네이버 클라우드 플랫폼 공식 블로그에도 소개되었습니다 !] 포착(Phochak) 포착 서비스는 이번 넥스터즈 활동에서 저희가 출시한 서비스입니다 :) 포착은 여행을 가서 촬영한 짧은 영상들을 저장하고 공유하는 아카이빙 및 스트리밍 서비스입니다. 네이버 클라우드 플랫폼의 든든한 지원 감사하게도 Naver Cloud Platform의 지원으로 크레딧을 지원받아 AWS 가 아닌 NCP를 무.료.로 이용하게 되었습니다 ! NCP를 쭉 들여다보니, AWS와 거의 동일한 환경을 제공합니다. 심지어 AWS SDK와 호환되게끔 구성이 되어있습니다. 이 게시글에서 사용할 NCP 클라우드 요소들을 소개하면.. Server(EC2): 서버 Object Strage(S3): 비용 효율적인 정적 파일 ..
2023.02.06 -
어떤 것을 공부했는가? 1. 스프링 전문성을 가져라. 전역 후에 스프링을 공부하는 것으로 목표를 굳혔고, 김영한 선생님의 강의를 열심히 들었습니다. 학교를 다니면서 틈틈히 시간날때마다 듣고는 했는데, 어느새 4개 정도가 남아있네요. 이번 겨울방학에 모두 완강할 예정입니다! 이렇게 명강의가 있을까 싶을 정도로 너무 즐겁게 듣고 있습니다. 꼭 스프링 백엔드 개발을 하는게 아니더라도, 객체지향이 어떻게 실무에서 적용되는지에 대해서 알기 위해서라도 이 강의의 초반은 꽤 괜찮다고 생각됩니다. 이렇게 완강에 다가서고 있지만, 아직 스프링에 대해서 10% 도 모른다는 생각이 들고 있습니다. 제가 공식문서에 있는 기능들을 모두 이해하고 있는 날까지, 꾸준하게 공부하는 것이 답인 것 같습니다. 그리고 내가 사용한 코드가..
회고 2022어떤 것을 공부했는가? 1. 스프링 전문성을 가져라. 전역 후에 스프링을 공부하는 것으로 목표를 굳혔고, 김영한 선생님의 강의를 열심히 들었습니다. 학교를 다니면서 틈틈히 시간날때마다 듣고는 했는데, 어느새 4개 정도가 남아있네요. 이번 겨울방학에 모두 완강할 예정입니다! 이렇게 명강의가 있을까 싶을 정도로 너무 즐겁게 듣고 있습니다. 꼭 스프링 백엔드 개발을 하는게 아니더라도, 객체지향이 어떻게 실무에서 적용되는지에 대해서 알기 위해서라도 이 강의의 초반은 꽤 괜찮다고 생각됩니다. 이렇게 완강에 다가서고 있지만, 아직 스프링에 대해서 10% 도 모른다는 생각이 들고 있습니다. 제가 공식문서에 있는 기능들을 모두 이해하고 있는 날까지, 꾸준하게 공부하는 것이 답인 것 같습니다. 그리고 내가 사용한 코드가..
2022.12.26 -
사이드 프로젝트 개발 팀 Dope를 만들고 운영하며 작성한 회고록입니다. 좌충우돌 3개월간 7인의 여정이 끝났다. 공모전과 학교 일정이 좀 정리가 되어서, 회고록을 써보자. 팀원들의 참여율 매일매일 하루 6시간 이상씩 풀타임 투자를 하는 것은 매우 힘들었지만, 한 명도 빠짐없이 모두 잘 참여해주었다. 앞선 포스트에서 언급했지만, 페이를 받지 않는 팀을 이정도로 이끌어 나온 것에 대해서 매우 뿌듯하다. 어디까지나 약한 규율 위에서 자유롭게 근무했다. 하지만 팀원들은 내가 기대했던 것 이상으로 많은 시간과 노력을 투자해주었다. 근무 시간 (오전10시 ~ 오후 4시)동안 게더타운에 접속하는 것 만으로도, 실제로 옆에 있는 것 같으면서도 관리가 잘 되었던 것 같다. 심지어 지각하는 인원이 있으면 내가 항상 모닝..
사이드 프로젝트 개발팀을 굴려보자 - 회고, 무엇을 배웠나사이드 프로젝트 개발 팀 Dope를 만들고 운영하며 작성한 회고록입니다. 좌충우돌 3개월간 7인의 여정이 끝났다. 공모전과 학교 일정이 좀 정리가 되어서, 회고록을 써보자. 팀원들의 참여율 매일매일 하루 6시간 이상씩 풀타임 투자를 하는 것은 매우 힘들었지만, 한 명도 빠짐없이 모두 잘 참여해주었다. 앞선 포스트에서 언급했지만, 페이를 받지 않는 팀을 이정도로 이끌어 나온 것에 대해서 매우 뿌듯하다. 어디까지나 약한 규율 위에서 자유롭게 근무했다. 하지만 팀원들은 내가 기대했던 것 이상으로 많은 시간과 노력을 투자해주었다. 근무 시간 (오전10시 ~ 오후 4시)동안 게더타운에 접속하는 것 만으로도, 실제로 옆에 있는 것 같으면서도 관리가 잘 되었던 것 같다. 심지어 지각하는 인원이 있으면 내가 항상 모닝..
2022.11.11