본문 바로가기

All

(79)
[개발생각] Transactional(readOnly=true) 마스터-레플리카 구성의 디비에서 마스터는 Read-Write로 사용하고, 레플리카는 Read-Only로 사용하고 싶었다.(데이터베이스의 부하 분산 측면으로 레플리카를 조회성으로 적극활용하고 싶었기 때문이다.) RoutingDataSource을 확장하여, Transactional의 readOnly를 이용해서,마스터 레플리카로 DataSource를 스위칭하도록 설정을 하였다. 당연히 기대한 결과는,1) Hibernate에서 ReadOnly=true의 기본동작인 DirtyCheck를 하지않는것 (조회 성능 최적화)2) 해당 트랙잭션안에서는 레플리카 디비를 사용함에 따른 save, delete, update등의 쿼리를 사용하면, 예외를 발생하는것 위 2가지를 기대했다. 1번은 기대했던대로 동작을 하는것으로 확..
[개발아이디어] 대기열을 구현해보자. 순간적으로 트래픽이 몰리는 케이스를 방어하기위해, 대기열 기능을 만들었다. (대용량 트래픽 노이로제...직업병같다..) 우선 대기열이란, 미리 정한 특정 TPS 즉 초당 사용자의 접근을 제어하여 정해진 TPS이상으로는 시스템에서는 사용자의 활동을 제한하여, 서비스의 폭주를 막는 좋은(?) 기능이다.대용량 트래픽이 예상되는 서비스에서는 필수적인 기능이라고 해도 과언이 아니다(이렇게 해도 죽기는 하는건.. 함정 ㅋ.. 하지만 더 안정적으로 버틴다의 관점으로 봐야한다.) 대기열을 만들기 위해서는 크게 3가지 개념을 알고있어야한다. 1) 대기열큐2) 대기표3) 락 이 개념만 확실히 알고있으면, 크게 어려울것은 없지만, 동시성과 락을 사용하는것이기에, 개인에 따라서, 어려운 개념일수도있다. 우선 내가 만든 대기..
[개발생각] 조건이 많은 기능들을 앱에 노출해야하는경우 조건이 많은 기능들을 앱에 노출해야하는 경우, 상당히 API가 많아질수있다. 1) 홈화면에 카드형식의 데이터들을 노출해야할때, 각각의 카드는 노출해야하는 조건들이 다르다.- 각카드별로 노출여부 조건을 조회하는 API를 호출하고 해당 API의 응답을 클라이언트가 판단하여, 카드를 노출한다. 2) 미션탭에서, 각각의 미션의 조건이 다르다.- 각각의 미션은 미션수행의 조건이나 노출여부가 사용자마다 다르고 이또한 조건을 조회하는 API를 조회하여 노출여부를 판단한다. 일반적인 방법으로 구현을 하게되면,클라이언트에서 각각의 조건에 맞는 API들을 다수 호출하게 되고,그 API들또한 미묘하게 동일한 데이터를 포함하거나, 중복되는 호출의 API일 가능성이 높아진다. 이런 API들을 미션이나 홈카드 노출전용으로 묶어서..
[아이디어] 삼성,엘지 가전 제어, 어떻게 할까? 삼성,엘지 가전에는 AutoDr이라는 개념이 있다. 전기소비를 줄이라는 캠페인(DR)이 한국전력거래소(KPX)에서 발령이 되면, 해당 발령을 공공데이터포털의 OpenApi를 통해 이벤트를 받을수도있고, 관련한 제휴업체들은 직접 이벤트를 받을수도있다.이 이벤트를 받았을때,가전제품 특히 전기를 많이 먹는 에어콘, 온풍기등을 Off하거나, 온도를 조절하는등으로 전기사용량을 제어를 하면,전기소비를 줄일수있다. 요즘은 삼성,엘지 가전에서는 삼성스마트띵스, 엘지띵큐등으로 가전을 제어할수있는 API를 사용자에게 오픈하고 있다. DR이벤트를 받을수있고, API를 사용하여, 가전의 제어를 할수있다면, AUTODR (자동으로 전력소비를 줄이는 행위)를 할수있다. 여기서 중요한건, 해당 API를 서버에서 날리는 방법보다는..
[개발생각] 주소기반 데이터 조회를 위한 방법은? 진행중인 프로젝트에서 주소기반으로 동일한 지역, 비슷한 지역내의 사용자들의 에너지 데이터들의 통계를 내야하는 경우가 발생했다. 기본적으로는 주소데이터를 컬럼으로 추가하고, 같은 지역으로 GroupBy를 하여 통계를 내는 방식을 사용하지만,이렇게 주소데이터 컬럼을 사용하게되면,군, 시, 도로 확장해나갈때, 쉽게 그룹핑을 하기가 애매해진다.군,시,도에 따른 주소컬럼을 모두 포함하도록 쿼리를 만들어야하지만,해당 주소 컬럼에 포함되는 지역데이터가 엄청나게 많이 존재하기 때문에 난감해진다. Mysql에는 R-tree를 이용한 위치기반 인덱스를 사용할수있는 기능이 있지만,사용하는 PostgreSql에는 디플리케이트가 되었고,GiST인덱스가 그 자리를 차지하고 있었다.어차피 개념은 비슷하지! 개념은 2차원 좌표 데이..
[개발생각] 앱에서 한페이지에서 API를 많이 호출할때 튜닝 프로젝트의 막바지(?)에 프론트와 서버간의 API호출에 대한 튜닝을 한참했다. 여기서 아이디어가 하나 떠올랐다! 프론트와 서버간의 API호출을 튜닝을 진행할때 진행한 내용은 아래와 같다. 1) API를 중복하여 호출하는 부분은 줄인다.2) A API와 B API의 응답이 포함관계에 있는지 확인하고,포함하는 API 하나만 호출하도록 줄인다.3) A,B,C API를 하나의 묶음 API로 내려줄수있다면, 신규 API에 A,B,C 응답을 함께 내려주게하여, API호출을 줄인다.4) 한화면에서 여러개의 무거운 API를 호출해야할때, API의 호출을 줄인다. 4번이 이번에 이야기할 내용이다.1) 2) 3)번에 해당이 되지않고, 필연적으로 한화면에서 여러개의 API를 호출해야하는경우, 특히 차트나 그래프, 통계 데..
[개발생각] API와 앱의 출시 마무리 작업 프로젝트의 마무리시 꼭 해야하는 작업이 있다. 바로 폴리싱작업이라고 해야하나?! 개발중일때, 특히 프로젝트의 마무리시점까지는 엄청나게 바쁘다.우선 일정을 맞춰야하고, 그에따른 미진한 개발을 진행해야하기 때문이다.따라서, 여러 멤버들은 엄청나게 바쁘고,그에따라 이 기간에는 서로간의 커뮤니케이션이 현저하게 낮아지게 된다.(사실 이건 명약이 없다...) 물론, 이 현상이 잘못된 현상이긴하지만, 자연적인 현상이기도 하다고 생각한다.(훌륭한 프로젝트 멤버들이나, 아니거나, 빅테크나 아닌 조직이나, 동일하게 나타나는 현상같으니..사람이 하는일에서는 나타나는거 같다가 맞을듯? ㅋ) 이건 어디서나 필연적으로 나오는 현상같다. 잘못된것이라고는 생각하지 않는다는 말이다. 그런데, 멤버간의 커뮤니케이션이 줄어들어게되면, 소..
[개발생각] 공포의 주간랭킹 개발하기 프로젝트에서 주간랭킹을 개발해야했다...이게 공포가 될줄이야... 생각할께 너무 많아서 머리가 아픈적은 처음이네 ㅠ 여러 이벤트를 이용해 경험치를 유저가 획득하고,주간으로 획득한 경험치 순으로 주간 랭킹을 구해야 한다는 개발요건이다.(쉽지??...ㅎㅎ)그런데... 여기서 끝나는게 아니고, 조건이 몇가지 더있다!!! 1) 회원 전체 대상 랭킹이 아닌, 소규모로 그룹을 나누고 그 그룹안에서의 랭킹.2) 소규모 그룹을 나누는 기준은 랜덤.3) 해당 기준은 주마다 매번 달라야함 (즉, 주마다 랜덤을 섞여야함) 이렇게 3가지 조건이다. 물론, 단순하게 생각을 하면 뭐 이게 뭔 고민을 할꺼리인가? 라고 생각할수도있다.하지만, 이 기능은 고민을 하지않고 만들게 되면, 큰 성능상의 문제를 발생할 여기가 다분하게 있다...
[개발생각] 블리자드..이래서 망한건가??? 주말에 스타크래프트, 와우, 오버워치로 유명한 블리자드에서 Battle.net API를 제공하는것을 알았다. OAuth2 API로 구성되어있고, 다름 데이터가 많아서,랭킹 리스트와 프로필등을 한눈에 볼수있는 서비스를 하나 만들면 어떨까?하고 API의 연동을 시도해봤다... 그런데!!!글로벌기업, 그리고 한떼는 모든 게이머들에게 선망의 대상이었던,갓 블리자드가 API를 이렇게 만드는게 현실인가??? 라는 생각이 들기 시작했다. 우선 API는 문서가 없다.문서라고는 api url들과 필요한 요청파라미터만 기술되어있다.해당 API의 응답 필드가 문서로 정리되어 제공하고 있지않아서, 직접 API를 호출해보고, 응답값을 보고, 유추하여 사용해야한다 ㅠㅠ(하... 내가 알던 블리자드 맞나???)https://com..
[개발생각] AI시대에 프로그래머로 사는법? 예전에는 프로그래머의 실력을 가늠하는 기준중에 하나가 경험에서오는 노하우, 그리고 지속적인 스터디를 통한 지식으로 확연하게 실력을 가늠할수있었다. 예외인경우도 있었지만, 연차가 그 개발자의 실력을 가늠해주는 척도로 자주 사용을 했었다. (짬밥 어디안간다!! 이런 느낌이지..ㅋ) 이런 연차를 무시못하는것이 연차만큼 여러 문제글 경험하고, 해당 문제를 해결하기위해 노력했던 사람이라면,그 노하우가 무시못할 지식이기 때문이다.이런 경험들이 쌓이면, 일부 예언도 가능하다(이건 아마 이래서 문제가 있을꺼야 같은 예언...) 예전에 윈도우 개발을 할때도, 레퍼런스가 많이 없어서, 커뮤니티를 수없이 들락거리며, 질문하고 답을 얻으며 개발자로서 시간을 보냈다.문제를 당면하고 그 해답을 얻는 방식이였기 때문에, 해당 문제..