dev 130

[JAVA] AOP 용어 정리

AOP(Aspect Oriented Programming) 말 그대로 관점 지향 프로그래밍이다. 예로 스프링에서 @Transactional 어노테이션이 AOP로 구현된다.코드가 많은 트랜잭션 처리를 쉽게 할 수 있다는 장점이 AOP를 잘 설명 해주는 것 같다. 기본적인 용어crosscutting concerns(횡단 관심): OOP로 모듈화 시키기 어려운, 특정 처리구문(?) 예로 로깅, 보안, 트랜잭션, 예외처리, 등등advice(어드바이스): 실행할 부가적인 기능(실제 코드)target(타겟): 어드바이스를 적용할 대상 객체joinpoint(조인포인트): 어드바이스를 삽입할 특정 지점pointcut(포인트컷): 조인포인트를 선별하기 위한 정의weaving(위빙): 포인트컷으로 선별된 조인포인트에 어드..

dev/java 2017.03.05

stateless and stateful

무상태 프로토콜(stateless)은 대표적으로 HTTP가 있다.상태 프로토콜(stateful)은 TCP Sock 커스텀 프로토콜 등이다. StatelessPros서버의 수평확장 용이로드밸런싱 용이적은 메모리 사용량연결 지속성이 없음Cons요청 헤더가 큼느리다(DB관련 오버헤드)단방향 통신 StatefulPros요청 헤더가 작음빠르다(메모리에 데이터로 대부분 처리가능)양방향 통신Cons서버의 수평확장이 어려움로드밸런싱이 어려움많은 메모리 사용량(상대적)연결에 지속성이 필요하며, 재접속에 대한 오버헤드가 큼 대략 이런 장단점을 가지고 있다고 볼 수 있다. 구글링을 하면 더 자세한 정보가 있을 것이다. 전통적으로 게임서버는 stateful로, 구현되었으나, 모바일 게임에서는 연결을 유지하는게 어렵기 때문에 ..

dev/etc 2017.03.02

Ajax 크로스 도메인 세션유지

세션(HTTP Session)웹 프로토콜 HTTP는 무상태(stateless)이다.전통적으로 로그인 인증처리를 위해, 웹서버는 프로토콜과 무관하게 세션이라는 것을 제공한다.이는 웹 어플리케이션에게 필요한 state를 서버에 전달하기 위한 목적으로 session이나 cookie를 이용하는 대체수단정도로 볼 수 있다.세션이 생기면서 웹서버는 상태 프로토콜(stateful)처럼 동작하고 있다. XMLHttpRequest 과 CORSAJAX 통신시 크로스 도메인 이슈가 있으며,이에 대한 해결책으로 CORS라는 게 있다.사전요청(preflight)으로 서버에 질의한뒤, 실제 요청을 보내는 형태로 되어있다.참고: https://developer.mozilla.org/ko/docs/Web/HTTP/Access_con..

dev/web 2017.03.02

웹 기술 동향 - 개인적인 로그

기술 동향이라 써놓으니 너무 거창하다.사실, 기술 동향이라는 것은, 꽤나 비현실적인 경우가 태반이라 생각하는데, 어느정도 업종에 종사를 하다보니, 중요한 것임을 깨닫고 있다. 2007년 아이폰2008년 HTML5 그리고 크롬 사실 이 흐름은 필자가 받아들이 벅차다. 기억을 더듬어 보자면학창 시절 Adobe Flash를 가지고 놀던(AS3는 너무나 재밌었고, Tweener의 입문이었을 것이다) 필자에게, HTML5의 등장은 좌절이었다. 요즘엔 클라우드라는 말이 들리지 않는다.분명 몇년 전만해도 여기저기 클라우드라는 이름으로, 고작 원격 스토리지를 제공했었는데 말이다.대신 AWS, BaaS, PasS같은 소리가 들린다. 그야말로 뜬구름 같았던 Cloud Computing이 현실이 되어 버렸다.여전히 벅차다...

dev/web 2017.03.02

깃 디플로이 (Deployment from Git)

Git은 정말 훌륭한 도구이다. 현재로썬 버전관리의 끝판왕? 인지라..쓰기는 쉽지만, 잘쓰기는 어려울 툴이다.ㅠㅠ 원격 깃 저장소로부터 실제 운영 서버로 디플로이를 해야할 때,자동화 스크립트는 생성하는 방법이다. 추가로 hook같은 건 제외하겠다. 레파지토리 path : /home/www/repos/mysite.git디플로이 path : /home/www/html 서버의 로컬 레파지토리 생성--bare 는 소스파일없는 .git폴더($GIT_DIR)로써, 이력만 관리한다는 뜻(remote정보가 없음, fetch시 메인 리포를 지정필요)--mirror 도 --bare에 추가로 remote정보가 포함됨cd /home/wwwmkdir repos && cd reposgit clone --mirror ssh://g..

dev/linux 2017.03.01

Pokemon Go fake client

포켓몬 위치를 표시해주는 서비스iv(개체값)을 보여주는 서비스봇 나인안틱이 개발자들에게 API를 제공해준다라고 생각할 수 있다.하지만, 그렇지만, 메카니즘이 궁금하다. 저런 어플, 아니 서비스는 수없이 많다. 결론부터 이야기하자면 fake client다. 공식 게임 클라이언트의 통신 구조가 전부 털린 모양이다. 이는 전부 이용약관을 위반하는 행위라는 점 사용하는 유저들을 밴 여부는 정확하지 않지만, 저런 서비스들 대부분, 이런걸 표시하고 있지 않은게 문제다.

dev/game 2017.02.20

[OAuth 2.0] Store token and re-authentication

목적OAuth 2.0을 사용하여 얻은 토큰의 관리 방법에 대한 내용으로,사용자의 재인증을 피하며, 토큰의 무분별한 발급을 줄여보자는 취지이다. 수많은 외부 서비스 API에서 채용하고 있는 OAuth 2.0사용법은 그리 어렵지 않다.사용자에게 해당 외부 서비스에서 로그인을 요청사용자의 로그인 및 정보제공 동의리다이렉트로 authentication code를 받고이것으로 access token을 발급받는다.access token을 이용해서, API를 사용허나, access token은 고유값이 아니다. 만료시간이 있으며, 만료가 되기전에 갱신을 받을 수 있다.물론, 서버에서는 갱신 프로세스를 자동화시키면, 계속해서 활성화된 access token을 유지할 수 있지만, 보안 문제점을 야기할 것이다. 소셜로그인..

dev/etc 2017.02.15

[Android M] Apache HTTP Client Removal

안드로이드 6 마쉬멜로 변경점 중 골칫거리는 Apache HTTP Client Removal이다. 쉬운 대응으로 HttpURLConnection으로 변경하거나, org.apache.http.legacy를 사용해서 해결하였다면,조금 더 나은 방향을 모색할 필요성을 느끼게 되어 이 포스팅을 하게 되었다. Http Clientjava.net패키지의 HttpURLConnection를 사용해, 응답을 받기위해 BufferedReader까지 써가면서 구현하기는 지루하고 힘들다.대안으로 apache의 HttpComponents (https://hc.apache.org/) 를 다시 사용할 수도 있지만이 traditional한 방법이 안드로이드에서 사라진 이유가 분명이 있을 것이다.구글과 아파치의 문제일지, 방대한 AP..

dev/android 2017.01.23