반응형

개발 330

spring batch 에서 하나의 reader 에 여러 개의 datasource?

정산 작업이 존재한다. 사용자가 특정 페이지에서 머물고 있는 시간을 기준으로 하여 특정 시간이 넘어간다면 정산 대상이 되며, 한 번 정산이 된 사용자에게는 다시 정산이 되지 않도록 한다. 쉽게 생각하면 위와 같이 구성 돼 있다. 하루에 한 번씩 배치에서는 A DB 에서 사용자가 페이지를 머무른 기록이 존재하는 테이블에서 데이터를 가져와 B DB 에서 정산 기록 테이블에서 정산 유무를 파악하여 이번 달에 정산이 되야 할 사용자인지 아닌지 판별해야 한다. 그러면 spring batch 에 step 이라는 개념이 존재하는데 해당 step 을 tasklet 으로 구현을 할지 reader, processor, writer 로 구현할지 고민이 되었다. 우선 처음에 생각했던 정산이라는 job 에 대한 작업은 다음과 ..

개발자가 적은 상황에서 aws iam 사용자 권한은 어떻게 해야 할까

2021년 6월 N일 오전 11시였다. 갑자기 beanstalk 환경이 재구축이 되면서 한 동안 서비스가 중단 되었다. 1시간 전으로 돌아가서... 오전 10시 출근하자마자 나는 새로 입사하신 개발자분들과 함께 새로운 서비스를 위한 실서버 환경에서 beanstalk 환경을 구축하고 있었다. 그러니 갑자기 다음과 같은 로그가 있었다. 나는 그저 환경을 하나 새로 구축 밖에 하지 않았다. 우선 매우 당황했고 슬랙에 알렸다. 실서버가 다 사라졌다고.. 앱, 웹 접속이 되지 않을 것이라고.. 우선 어찌어찌해서 환경을 새로 만들어서 서비스 정상화를 시켰다. 그리고 원인을 파악하려고 여러 로그를 뒤졌다. 먼저, 재구축 시도한 환경이 새로 살아나지 않는 현상이 발생했다. 다음과 같은 에러를 뿜으며 새로 재구축이 되지..

결제 로직이 진행 중 사용자가 환불을 했을 때 어떻게 대체할까

내가 개발하고 있는 서비스는 매달 구독이 일어난다. 사용자는 첫구매를 진행하고 난 뒤 넷플릭스처럼 다음 달에 자동으로 결제가 이루어지게 된다. 또한, 사용자는 홈페이지에 들어가서 환불/해지를 진행할 수 있다. 재구독 결제 로직이 진행되는 중에 사용자가 환불을 했을 때는 어떻게 하는 것이 좋을까? 물론 요구사항에 따라서 구현 방법이 달라지겠지만 우선 '재구독 중 환불 시 진행 중인 결제는 정상적으로 진행하고 환불을 진행한다.' 로 요구사항을 정하도록 하겠다. 작성 중

로그인 기능에 여러 sns 연동 기능이 존재할 때

'직접 회원가입 하고 로그인하기' 와 'SNS 로 로그인하기' 기능이 존재할 때 로그인을 어떻게 구현할까에 대해 작성한다. 요구사항과 정책에 따라 구현도 달라지기 때문에 다음과 같이 정해보도록 한다. 1. 직접 회원가입 후 로그인을 할 수 있다. 2. 직접 회원가입 한 다음 SNS 연동을 할 수 있다. 3. SNS 연동 시 email 을 기준으로 유저를 식별한다. 4. SNS 에서는 email 을 변경하지 못한다. 5. 7일 이상 접속하지 않을 시 로그아웃 시킨다. 6. SNS 는 구글, 애플, 페이스북, 네이버가 존재한다. 7. SNS 에서 가져오는 정보는 이메일과 초기 세팅할 정보인 이름만 존재한다. 8. SNS 연결을 끊어도 로그인이 된 상태는 유지 되어야 한다. 처음에 난 SNS 연동을 도입한다는..

아키텍처 대해서

백엔드 동료들과 앞으로의 백엔드 아키텍처를 어떻게 가져가면 좋을지 이야기를 했다. 예전 글을 보니 예전에도 이런 얘기를 했었던 때가 있었다. 멋도 몰랐지만. 2020.01.08 - [개발/고민과 생각] - 기존 모놀로틱에서 MSA 로..? 먼저 지금 현 회사의 백엔드 아키텍처를 얘기하자면 아래 사진과 같다. 별로다. 그런데 내가 입사 때부터 이렇게 돼 있었고 의존성이 너무 강해서 떼어낼려면 너무 대공사였기에 엄두를 내지 못하고 있다. 실제 유저들에게 서비스하고 있는 P, M 서비스가 존재한다. 이 서비스들은 A 라는 도메인을 기반으로 하여 각기 다른 서비스를 제공하고 있다. 그러나 P 서비스에는 매 분마다 M DB 에 존재하는 A 도메인에 대한 데이터를 P DB 로 옮기는 스케줄러가 존재한다. 그래서 본..

[Web] Https 는 어떻게 동작할까

갑자기 생각이 들었다. 이렇게 대충 알고 있어서야 내가 과연 네카라 개발자가 될 수 있을까 라고. 어쨌든 내 뇌를 깨어나게 해준 HTTP 완벽 가이드 와 후배 yom-hardy 에게 감사를 표한다. Https 란 우선 Https 는 무엇에 대한 약자인가. wikipedia 에서는 다음과 같이 표현하고 있다. HyperText Transfer Protocol over Secure Socket Layer HTTP over TLS HTTP over SSL HTTP Secure https 를 사용하면 모든 http 요청과 응답 데이터는 네트워크로 보내지기 전에 암호화된다. 간단하게 https 에 대해서 알고 싶다면 위의 내용만 알면 된다. https 는 http 와 다르게 SSL, TLS 를 이용하여 구현된다...

개발/Web 2021.05.24

[Spring] 최대 사용 기기 관리 구현

앱에서 최대 3개의 기기에서 로그인을 하여 서비스를 이용할 수 있도록 해달라는 요구사항이 생겼을 때 어떻게 구현을 하면 좋을까 해서 검색을 좀 해보았는데 나오는 글이 없었다. 내가 못 찾은 걸지도 ㅎㅎ 자세한 요구사항은 작성하지 않지만 간략하게 이야기하면 다음과 같다. 요구사항 서로 다른 기기라는 것을 구분해야 함 웹, 앱 내에 마이페이지에서 등록된 기기를 개별 삭제, 전체 삭제를 할 수 있어야 함 기기 별로 기기 이름과 마지막 접속 시간이 나타나야 함 이미 3대의 기기가 등록 돼 있는 상태에서 추가로 기기가 등록된다면 해당 기기에서는 사용자에게 등록된 기기를 삭제하고 로그인을 할 수 있거나 로그인을 하지 않고 앱을 나갈 수 있음. 그렇다면 요청이 들어올 때마다 서버에서는 요청을 어느 기기에서 요청한 것..

개발/Spring 2021.04.17

[Ktor] Ktor 서버에서 LocalDateTime 을 json 으로 반환하기

Ktor 공식문서를 참고해서 ContentNegotiation 를 install 에서 repsonse 에 객체를 담아 json 으로 내보내려고 할 때를 위해 사용하려고 했다. Ktor 에서 지원해주는 Gson, Jackson, kotlinx.serializaiton 을 이용해서 굳이 직접 converter 를 설정해주지 않도록 하려고 했다. 그래서 그 중 평소에 사용하는 Jackson 을 사용하는 것으로 했고, 간단하게 저런 식으로 LocalDateTime 으로 반환하려고 했으나 map 형태로 반환이 돼 추가적으로 conveter 를 구현하여 jackson objectMapper 에 모듈로 추가를 해줘야 했다. jackson-datatype-jsr310 해당 의존성 추가해서 작업하려고 했는데 의존성 또 ..

개발/ktor 2021.04.03

[Ktor] Ktor 서버 생성

사이드프로젝트를 개발 중에 있는데 프론트 개발을 하다보니 지겹기도 하고 얼추 기능단은 완성이 돼 가고 있어서 서버 개발을 시작해보려고 했다. 인텔리제이에서 프로젝트 생성을 하려는 순간,, 또 Spring 을 써야하나,,? 이 빌드 시간도 느리고 내가 몇 년간 회사에서 사용했던 프레임워크를,, ? 또..? 라는 생각이 들었다. 그래서 여러 프레임워크나 라이브러리 중 node 기반의 nest 와 ktor 사이에서 고민이 됐다. nest 는 ts 기반으로 개발을 할 생각이었는데 생각해보니 회사의 한 개발자분께서 스크립트 기반으로 서버 개발하려니 너무 힘들다,, 라는 말씀을 했던 것이 기억나 주변에서 한 번도 얘기 들어보지 못 했던 ktor 를 고르게 됐다 ㅎㅎ ktor.io 에 접속하면 해당 문구가 있다. 내..

개발/ktor 2021.04.03
반응형