본문 바로가기

전체 글

(10)
분산 DB 환경에서 데이터 정합성 지키기 회사에서는 현재 master DB (원천), 멀티테넌트 구조로 운영되는 main DB (메인), common 스키마 하나에 모든 데이터들이 들어있는 Integrate DB (이하 Itg DB)가 있다. 세 db 모두 Postgresql을 사용한다. 내가 작업하는 레포에서는 하나의 서버 애플리케이션에서 3가지의 DB를 모두 접근해야하기에, db별로 JpaRepositoryConfig이름으로 Configuration파일을 다르게 설정해 두었다.@Configuration@EnableTransactionManagement@EnableJpaRepositories( basePackages = {ITG_JPA_REPOSITORY_BASE_PACKAGE}, entityManagerFactoryRef = ITG_ENTI..
[Java, Spring, Aop] SoftDelete 적용기 (2) - 배경 - [Java, Spring, Aop] SoftDelete 적용기Troublog 에서는 일부 테이블의 데이터에 대해 softDelete를 적용하고 있다. 적용 대상이 되는 테이블은 terms, users, projects, posts, contents, post_tags, comments (대댓글이 존재하는 경우)로, 단순 데이터 삭제redcalender.tistory.com이전 포스팅에서 @Filter, @FilterDef, Aop, 어노테이션을 이용해 엔티티 조회 시점에 동적으로 개발자가 지정한 SQL조건을 추가하여 softDelete를 선언적으로 on/off 할 수 있도록 구현하였다. 그런데 이후 리팩토링을 진행하던 중 치명적인 문제를 발견했고, 이를 다룬 내용을 적어보고자 한다. 1. F..
[Java, Spring, Aop] SoftDelete 적용기 Troublog 에서는 일부 테이블의 데이터에 대해 softDelete를 적용하고 있다. 적용 대상이 되는 테이블은 terms, users, projects, posts, contents, post_tags, comments (대댓글이 존재하는 경우)로, 단순 데이터 삭제보다 히스토리 보존이 더 중요한 경우 softDelete를 적용했다. 그러나 softDelete를 적용한 후에 몇 가지 문제점(불편한 점)을 발견했고, 이를 개선해 나간 내용을 공유하고자 한다. - 기존 구현 방식 -1. softDelete여부 칼럼을 is_deleted (boolean) 혹은 deleted_at (timestamp)로 둠 2. is_deleted : false -> true로 변경 혹은 deleted_at : null ..
벤처투자 ERP 개발을 위한 도메인 공부 (1) 기본용어 VC (Venture Capital, 벤처캐피탈) 우리가 흔히 볼 수 있는 xxx인베스트먼트, xx파트너스 등의 이름을 갖고 있으며경쟁력 있는 스타트업을 발굴해 투자하고, 성장을 지원하는 기업.기본적으로 VC가 스타트업에 투자를 진행할 때, 펀드를 통해 LP의 자금을 조달한다. LP (Limited Partner, 유한책임조합원) VC가 만든 펀드에 자본을 제공하는 투자자펀드의 출자액 내에서만 유한책임을 지는 조합원이며 한국벤처투자, 성장금융, KDB뿐 아니라 공제회, 일반기업, 개인들도 LP의 역할로 펀드에 출자할 수 있다. GP (General Partner, 업무책임조합원/무한책임조합원) 펀드의 운용 및 모든 것을 관리하며 무한책임을 지는 조합원. VC가 결성한 펀드를 직접 운용하는 역할...
이미지(파일) 업로드 개선 와이랭 프로젝트에서는 사용자가 커뮤니티 게시글을 작성할 때, 이미지를 첨부할 수 있도록 구현했다. 두 가지 방법 중 선택을 해야 했는데,사용자가 작성한 텍스트와 첨부한 이미지를 업로드 버튼 클릭 시 한 번에 서버로 전송-> 텍스트와 이미지의 메타데이터는 DB에 저장, 이미지는 S3로 전송이미지는 첨부하는 즉시 서버 -> S3로 전송,업로드 버튼 클릭 시 작성한 텍스트와 업로드가 확정된 이미지의 메타데이터를 서버로 전송-> 실제 게시글에 업로드되지 않은 이미지들은 스케줄러가 주기적으로 S3에서 삭제1번은 개발자 입장에서 편한 방법이다.개발자는 작성 도중 취소된 이미지들을 관리할 필요가 없다. 사용자가 업로드 버튼을 누르기 전까지는 아무것도 서버로 전송되지 않는다.최종 데이터만 저장되기 때문에 불필요한 데이..
배포 전략 코테이토에서 CI/CD 주제로 발표를 진행하며 여러 가지 배포 전략에도 관심을 갖게 되었다.BigBang 배포먼저 전통적인 Big-Bang Deployment는 가장 단순하지만 효과적인 방법으로, 한 번에 모든 서버를 내리고 업데이트 후 다시 올리는 방식이다. 따라서 성공만 한다면 가장 빠른 배포시간을 가질 수 있다. 하지만 서버를 내리는 과정에서 다운타임이 불가피하게 발생하고, 롤백이 어렵다는 단점이 있다. 전체 시스템을 레거시에서 현대적으로 리디자인하거나 마이그레이션 하는 대규모 업데이트, 혹은 내부 직원이 사용하는 ERP시스템의 경우에 적절한 배포 방식일 수 있지만, 실시간 트래픽이 많은 B2C서비스나 고가용성이 중요한 서비스에서는 적절한 방식이 아닐 수 있다. 따라서 개발자는 상황에 맞는 적절한 ..
학습은 수직적으로, 협업은 수평적으로 7개월 전 작년 9월, 앞으로의 진로를 개발자로 정하면서 앞만 보고 계속 달려왔다.그러던 중 코테이토에 들어와 지금 '어떠한 개발자가 될 것인가'에 대한 주제로 글을 써 보며 그간 걸어온 길을 멈춰서 돌아보고, 재정비할 수 있는 좋은 기회를 갖게 되어 정말 다행이라 생각한다! 7개월 간 공부하고 개발하며 '학습'과 '협업'에서 중요하게 느껴지는 것들이 있었고, 이에 따라 어떤 개발자가 되고 싶은지 간략하게 정리해 보았다. 6개월 후에 같은 주제로 다시 글을 쓸 것인데, 지금의 내 생각과 비교해 보는 것도 재밌을 거 같다! 학습아래 일화는 '학습'에 관하여 쪽팔림? 을 무릅쓰고 올리는 일화인데, 사실 이미 코테이토 면접에서 언급했던 일이기에.. 작년 9월~12월까지 교내 GDSC에서 백엔드 강의를 들으며 ..
[Java, Spring] 로그인 기능 구현해보기 (세션을 통한 인증) ▲2025.01.08 - [개발] - [Java, Spring] 로그인 기능 구현해보기 (쿠키를 통한 인증) [Java, Spring] 로그인 기능 구현해보기 (쿠키를 통한 인증)우리가 로그인을 얘기할 때 들어보는 쿠키, 세션, Jwt와 같은 도구들은 모두 Http 프로토콜의 stateless 특성에 기인한다. telnet, ssh와 같은 네트워크 프로토콜은 한번 접속을 하면 서버는 사용자가 누redcalender.tistory.com이전 포스팅에서 Http 프로토콜을 따르는 환경에서의 인증 과정과 쿠키를 사용한 간단한 인증 방식에 대해 알아보았다. 단순히 쿠키만을 사용해 인증을 진행할 때의 문제점에 대한 해결로 Session(세션) 로그인 방식과 Jwt를 이용한 로그인 방식을 언급했는데 오늘은 둘 중 ..