본문 바로가기

생각

(27)
기획의도를 알고 개발할때의 시너지 돈받고 일한지 벌써 8년여가 되었습니다. 그리고 현 직장에서 지낸지 5년이 되어갑니다. 지금하는 업무는 계속 게임서버를 개발하고 관련하여 필요한 전반적인 서버파트 업무를 수행합니다. 아키텍처 설계에 참여하고 API 개발을 하고 배치프로그램을 만들어 랭킹,추천 정산같은 것을 하고. 이렇게 5년정도 일을 하다보니 여러 사람들과 일을 하며 게임이라는 도메인에 대한 이해도가 꽤 생겼습니다. 어떤 것은 실시간 처리로 진행해야하는지, 어떤 것은 배치로 처리해야하는지, 어떤 것은 부하를 분산하기 위해 사용자의 화면에 연출등을 통해 서버의 API 를 분리해야하는지. 어느정도 도메인에 대한 이해가 생기다보면 업무 자체를 추상화하여 고도화하는데까지 신경을 쓰게 됩니다. 게임내 미션, 퀘스트, 업적... 다양한데 추상화해서..
탐구는 프로그래머의 기본 자세이다. 프로그래머의 기본 자세엔 탐구가 있다고 생각한다.무척 주관적인 생각이며 아래에 왜 그런 생각을 하는지 적어본다. 돈을 받으면서 개발업무를 한 지 벌써 4년을 채워가고 있다.이렇게 4년을 일하면서 만난 사람도 여럿이다. 회사업무로 만난 사람들, 그렇지 않은 사람들. 어쨋거나 주위에 프로그래머가 꽤 있고, 그 프로그래머들과는 어찌되었든 프로그래밍 얘기를 하게 된다. 그럼 여기서 '아 저 사람 닮고 싶다.' 하는 롤모델이 생기기 마련이다. 내가 롤모델로 생각하는 프로그래머들은 다른 부분에서도 강점을 보이지만, 모두 경력이 많아서인지 지식이 풍부하다. 물론 경력이 적음에도 내 롤모델로 살포시 포함되어있는 사람도 있다. 마찬가지로 지식이 풍부하다. 그리고 이들은 하나같이 공통점을 가지고 있다. 뛰어난 탐구능력은 ..
코딩 컨벤션. 어디까지 이해해줘야 할까? C# 언어에 대해 공부 좀 해야겠다.null 허용이 가능한 string 변수에 .equals 호출을 하고문자열을 매개변수로 넣으라니??? 그게 맞는거라니???"foo".Equals(bar) 지금까지 이렇게 써왔는데bar.Equals("foo") 를 쓰라니... 아직까지 혼란스럽다.java의 stringpool 을 떠나서 저게 맞는건지 아닌지 혼란스럽다. 코딩컨벤션. 어디까지 이해해 주어야하는 걸까?
프로그램은 아무나 짤 수 있다. 정말 아무나 앉혀놓고 프로그래밍하게 하면 결과가 나오긴 나오는구나 하는 생각이 든다.급하다는 핑계를 대기엔 너무나 엉망인 설계와 코드를 보면 낙담까지 하게 된다.대화로 풀자니 주관이 너무 강하고 그냥 오래 있었다는 이유로 이 사람의 말을 모두가 따르니어쩔 수 없이 이 사람의 스타일대로 가게 되버린다.그러다보니 주위 사람들이 이 사람이 늘 옳고 잘하는구나 하고 생각하게 되고다른 제안을 했던 사람은 점점 바보가 된다.이제 이 사람은 의기양양해지고 스스로에 대해 무척 대단한듯 자아도취에까지 빠진다.
관습에 의한 코딩과 레거시코드. 그리고 나. 왜 이렇게 코드를 작성하는지에 대한 이해가 없이 어떠한 새로운 것을 배울 때에몸이 익숙해진 코딩을 유지하면서 하는 것. 관습에 의한 코딩. 지난 주에 스터디 그룹에 개발방법에 대한 이슈가 올라왔는데그때에 DTO 개념이 보이질 않았던 터라 DTO의 사용여부라는 답없는 질문을 스터디 그룹에 질문했다.글 타래들을 보면서 DTO를 보다 강력하면서도 편하게 작성할 수 있는 라이브러리도 보게 되었고동시에 VO와 DTO의 차이점도 보게 되었다.(사실 예전에 TDD책을 잠시 보았다가 DTO와 VO를 동일하게 보는 문구를 보았던 터라 동일하게 봤다 -_-) 그리고 구글링을 통해 아래와 같은 오래된 DTO에 대한 논의도 접했다.http://blog.naver.com/PostView.nhn?blogId=gunlee00&lo..
여러 사용자의 화면의 data에 sync가 맞아야 한다면? 여러 유저가 접속하였고 하나의 자원에 동시에 접근합니다.그리고 이 여러 유저들은 그 자원 상황을 공유하게되는데 이는 업데이트가 가능한 자원이라여러 유저중 한명이 그 자원에 업데이트를 해버리면 나머지 유저들은 업데이트된 값을 봐야겠죠? 이는 운영체제나 프로그래밍 언어를 배울 때에 처음 접하는 동기화 문제가 우선되어야 합니다.그럼 공유라는 문제를 해결할 수 있습니다. 다음 문제는 모든 사용자가 같은 화면을 봐야 하는 문제인데 이는 push + observer pattern으로 해결할 수 있습니다. 하지만 고민되는 것은 시간입니다.누군가가 update를 실행하였을 때에 정상적인 흐름으로 프로세스가 진행되었다면이때 옵저버가 나머지 사용자에게 push를 날려야 하는데그 사이에 누군가가 update를 시도한다면??..
그냥 돌아가는 코드 최근에 generic 을 사용하는 유틸성 코드를 작성할 일이 있었습니다. 메소드에 어떠한 타입의 객체이든 인자로 받아야했으며 return type은 그 타입의 객체들이 n개 담겨있는 list 타입이어야했죠. 처음에는 public List getList(Class classType){ List list = some(classType); return list; } 이렇게 코드를 작성하였죠. (some 메소드는 단순히 Class type을 받아서 리플렉션을 사용하여 객체생성후 list에 담아 return하는 코드입니다. List some(classType){ // some logic } 위처럼 구현되어있죠.) 그러다 고민된게 getList 메소드에서는 class type이 명확하고 List에 담겨지는 객체들은..
브라우저의 세션, 쿠키 공유.... 오늘 코드를 보다가 로그인 중복에 대해서 체크하는 녀석이 없길래static 으로 loginid와 세션값을 저장하는 map을 하나 만들고session invalidate , map에서 해당 data들 삭제하는 로직을 구현했습니다. 그리고 크롬 하나로 테스트하는 멍청한 짓을 하고 있었죠. 한 십분 삽질하다가 session id 찍는 짓까지 했고그제서야 생각나는게 session, cookie를 공유하는 개발하는 입장에서 답답하고사용자 입장에서 편안한 요새 브라우저들의 똘똘한 짓들이 생각나더군요. 만약 하나의 창에 대해서만 유니크한 로그인이 가능해야 하고기존의 로그인한 창에 대해서는 로그인 해제가 되어야 한다면어떻게 구현해야할까요~? 제가 하는 일에는 위 문제가 없다보니 별 생각이 안나는데조만간 생각해보고 적당..