본문 바로가기

All

(47)
[개발생각] 스크럼의 진정한 목적이 무엇일까? 스크럼은 가장 값싼 비용으로 유연한 개발문화를 만들수있는 방법중에 하나라고 생각한다. 하지만, 스크럼의 진정한 목적을 모르고, 진행을 하면 그냥 시간잡아먹는 하마와 같이 변할수도있다. 스크럼을 잘하기 위해서는 몇가지 갖추어야할 선제조건들이 필요하다.(값싸지만, 미리 선행되야 하는 조건들은 비싸다!!! ㅋㅋ) 1) 팀원들은 개인의 업무에 대해서 스케줄링을 할수있어야 한다. - 스크럼을 시작할수있는 전제조건은 개개인이 자기가 맡은 역할에 대해서 최선을 다하고, 최선을 다하는것을 넘어서 일정을 철저히 지킬수있는 책임감을 가지고있어야 비로소 스크럼을 할수있는 조건이 된다. 스크럼은 빠르게 토론하고 빠르게 만들고를 반복하는 애자일 전략의 한 방법이다. 따라서 빠르게 변화..
[스터디] 자바 ScopedValue에 대해서 ScopedValue 와! 이거 좋구나!! 스터디 잘해서, ThreadLocal의 찝찝함을 없애야겠다.. 자바 26릴리즈 노트를 최근에 봤는데, 쭉 내용을 보던중에 눈에 띄는게 있었다. 그게 ScopedValue와 StructuredTaskScope였다. 우선 ScopedValue가 가장 맘에 들었다 ㅋThreadLocal를 대체할수있는 개념이였기에 큰 흥미가 생겼다.평상시, 나도 ThreadLocal의 사용성이나 사용법이 개발자의 실수를 만들어내기에 쉬운 구조라고 생각을 자주했기 때문이다.(ThreadLocal사용할때, 아..쓰기싫다 이러면서 쓴적도 많긴하다 ㅋㅋ) 음,, 뭐가 맘에 들지않았냐하면 ..ㅋ 1) ThreadLocal의 실행 라이프사이클이 Thread를 따른다는것이다.- Thread의 라이..
[개발생각] REDIS에서 아토믹처리를 하려면 REDIS를 깊게 사용하다보면, 트랜잭션처리 기능에 욕심이 생긴다. read_committed조회, rollback처리 이런것 있으면..이런생각 ㅋ REDIS는 기본적으로 완벽한 트랜잭션을 제공하는 다른 RDS의 성격이 아니다.빠르고 연산을 아토믹하게 처리하는 성격이고 또 그렇게 설계되었기 때문에, RDS에서의 트랜잭션처리를 완벽하게 구현할수도 없고,그렇게 사용하는게 개발메카니즘/철학과도 맞지않는 사용법이라고 생각한다. 다만 우리는 REDIS사용을 할때, 아토믹한 처리의 여러가지 방법이 존재하기에 이 방법은 잘 알고있어야 한다. 아토믹 처리의 방법중에는 크게 MULTI와 LUA SCRIPT방법 2가지가 있다. 1) MULTIMULTI명령어 이후의 명령어는 순서를 보장하고, 다른 명령어가 끼어들지못하게 한..
[개발생각] 붉은사막...펄어비스... 붉은 사막 오픈 하루전이다. 오늘 메타크리점수가 오픈되었고, 78점으로 주식은 하한가 크리를 먹었다..쩝 (주주로써 가슴아프다) 요즘 개발에서 드는 생각와 붉은 사막과 오버랩되는것이 있다.과연, 유저를 위한 시스템인가? 나만의 생각을 유저의 생각이라고 포장하여 만든 시스템인가?서비스를 만들때, 초기 설계/기획을 할때, 가장 주의해야하는 부분이 아닌가 한다.연차 자랑은 아니고, 연차가 많기에 이런 경우를 많이 겪었기에 기우가 생긴다. 대부분의 나의 안좋은 경험은 아래와 같았다. 기획 : "유저들은 이런 기능을 원합니다! 이렇게 해주세요!"개발 : "음.. 어떤 데이터에 기반해서 유저들이 원한다고 판단했을까요?"기획 : "....." 기획 : "이 기능은 유저들이 정말 필요로 하는 기능이고, 요청사항도 많이..
[개발생각] testFixtures에 대해서 테스트코드는 작성해야만 하는것, 하지만 유지보수에 대한 생각은 많이 안해도 되는것으로 생각하기 쉽다. 테스트 코드를 잘 작성해야, 프로젝트의 퀄리티가 올라가는 부분에 대해서는 말하지 않아도 누구나 인지하고 있을듯하다.따라서, 테스트 코드를 어떻게 잘 작성을 하는가에 많은 개발자들은 초점을 맞추고있다. 물론, 이 부분도 정말 중요하지만, 간과하면 안되는 부분이 있다. 테스트 코드를 어떻게 유지보수를 하면서 잘 관리해 나가느냐 또한 잘 작성하느냐와 더불어 엄청나게 중요한 부분이라는 것이다. 실제 비즈니스 코드는 리팩토링을 매번 하지만, 테스트 코드를 쉽게 짜도록 하는 유틸이나, 기능에 대한 부분은 아예 작성하지 않거나, 리팩토링을 하지않으며, 신경을 덜 쓰게 된다. 테스트 코드의 유지보수성을 높이기 위해서는..
[자작게임] 무한의 채굴 유니티로 각잡고 게임한번 만들어보자고해서, 스터디해서 만들어본 방치형 광물 채굴 게임... 유니티를 사람들은 쉽게 생각하지만, 잘 만들려면 유니티를 정말 심도 깊게 스터디해야한다는것을 느꼈다.쉽게 시작할수있지만, 쉽게 끝낼수는 없는 3D엔진툴이랄까? ㅋ 유니티에서 드로우콜 이라는 개념이 있는데, 이건 간단히 이야기하면, 최초 CPU가 GPU에게 “이 오브젝트를 화면에 그려줘”라고 데이터와 함께 요청하는 명령의 단위이다.드로우콜이 많으면 많을수록 성능은 떨어지게 된다. 지속적으로 CPU가 요청을 해야하니, 병목이 생기고 성능이 떨어지기 때문이다. 따라서, 드로우콜을 요청할때, 같은 객체를 한번에 그릴수있게 만들어, 다수의 객체를 그리게 만들거나, 팔레트, 메시를 하나로 합치거나 같이 사용하여, 드로우콜을..
[스터디] 코틀린에서 infix함수 활용에 대해서 코틀린에서 infix함수를 잘 사용하면, 정말 깔끔한 코드를 만들고 유지할수있다. 적극사용하자! 코틀린에서 infix 함수는점(.)과 괄호 없이 함수 호출을 할 수 있게 만드는 기능이다.(확장함수나, 함수 표현식이 아닌 호출 표현)그래서 코드가 마치 우리가 일반적으로 사용하는 인간의 언어, 즉 자연어처럼 읽히게 만들 수 있다. 한가지 예로) a+b를 더하는 함수는 아래와 같이 정의하고, 사용도 아래와 같이 사용한다. fun add(a: Int, b: Int): Int { return a + b}add(1, 2) 일반적으로 우리는 이렇게 함수를 만들고 사용한다.하지만 코틀린에서 infix함수로 정의를 하면, 더 깔끔하게 표현할수있다. infix fun Int.plus(other: Int): Int {..
[아이디어] 대용량 앱푸시 예약발송 기능 어떻게 만들까? 앱 푸시 메세지 발송 기능을 만들어야 한다면, 그리고 예약시간에 정확히 발송해야 한다면? 어떻게 설계를 해야할까? 물론 내가 말하는 모든 가설은 대용량/대량 트래픽을 기본으로 하고있다. 따라서 좀더 고민을 해야하는 포인트들이 많다.우선은, 기본적인 것은 카프카 큐를 이용해, 발송대상 이벤트를 받고 해당 이벤트를 컨슘하며, 푸시를 보내는 설계는 기본일듯하다. 여기서 가장 큰 문제는 바로 예약 발송을 어떻게 구현을 할까이다..이 부분이 상당히 어렵기도하고 까다롭기도 하다. 예약 발송 구현을 위한 방법은 다양하다. 가장 합리적이고, 괜찮은 방법을 몇개 생각해 봤다. 1) 레디스의 ZSET을 이용하는 방법이다.레디스의 ZSET는 SORTED SET으로 키값을 정렬하여 리스트로 가지고있다. 이 키값을 범위조회로 ..
[개발생각] 원팀이 무얼까? 원팀이 뭐냐는 질문을 최근 받았다. 평상시 나는 공상을 많이하는 사람이다. 그 여러 공상중에서도 '원팀'에 대한 것도 많이 했었어서, 내생각을 확고히 말할수있었다.다만 평상시 엄청나게 공상했던, 그 답변을 모두 이야기하지못한 부분이 있기에, 그 나머지썰을 풀려고 한다. 개발직군에서 특히, 회사에서의 '원팀'의 개념은 좀더 철저하고 엄격하다랄까??프로에서의 '원팀'은 아무리 누군가가 우리는 '원팀!!', '최고의 팀!'이라고 외친다고 원팀이 되지않는다.약간의 사기충전면에서의 도움정도 된다랄까? '원팀'의 마인드는 모두가 마음속에서 서서히 생겨난다.그 마음속에서 서서히 생겨나는 전제 조건중 가장 중요한건, 각자의 역할에 최선을 다하는 모습을 서로가 보이고, 이부분을 마음속에서 인정해 줄때, 존중의 마음과..
[개발생각] Apache Camel에 대해서 아파치 카멜 처음 잠깐 써본게, 18년 정도 된거같은데... 최근에 각잡고 써보니 쓸만하다!! 인터넷 찾아보니, 최초 릴리즈가 2007년...ㅎㄷㄷ잠깐 사용했을때가, 나온지 1-2년된 따끈따끈한때였구나 ㅋ그때도 어느정도 성숙한 오픈소스여서, 꽤 유용했던것으로 기억한다.특히 간단한 ETL, BATCH 잡에 사용하기 정말 강력했던 기억이다.물론, 스프링배치가 배치쪽은 아직 꽉 잡고있다고는 하지만, 스프링배치는 너무 초기 러닝커브가 있다는 점이 아쉽다.최근에 카멜을 다시 쓸일이 있어서, 좀 자세히 알아봤는데, 실시간 이벤트 처리에 관해서는 꽤 괜찮은 솔류션으로 보인다. 우선 병렬처리에 대한 접근이 쉽다.샤딩을 직접 해서 대상을 만들거나, 파티션으로 데이터를 읽거나 하는 방법을 쓰지않아도 (물론 쓰면 더좋다),..