Study/WEB

    [nGrinder] nGrinder Script 사용법

    스크립트(Groovy) 작성법 Groovy란? Groovy는 자바에 파이썬, 루비, 스몰토크 등의 특징을 더한 동적 객체 지향 프로그래밍 언어이다. JVM에서 동작하고 자바의 강점 위에서 파이썬, 루비, 스몰토크 등의 프로그래밍 언어에 영향을 받은 특징 및 장점이 있다. 자바 기반이기 때문에 자바 프로그래머들이 많은 학습을 하지 않아도 프로그래밍을 할 수 있다는 점과 단순화된 문법을 지원하여 코드를 읽고 유지보수하기 편하다는 장점이 있다. 자바와의 비교 그루비의 문법체계는 자바를 계승하고 발전시켰다. 자바에 없는 간편 표기법을 지원하는 것 외에 LIST, MAP, 정규식을 위한 구문을 제공함으로서 프로그래밍을 쉽고 간결하게 해준다. JVM 상에서 동작하는 동적 스크립트 언어인 Jython, Jruby 등..

    [WEB] 프록시(Proxy)란?

    프록시(Proxy)란? 프록시(Proxy)는 "대리"의 의미로, 인터넷과 관련해서 쓰이는 경우, 특히 내부 네트워크에서 인터넷 접속을 할 때에, 빠른 액세스나 안전한 통신 등을 확보하기 위한 중계서버를 "프록시 서버"라고 일컫는다. 클라이언트와 Web 서버의 중간에 위치하고 있어, 대신 통신을 받아 주는 것이 프록시 서버이다. 프록시(Proxy)의 종류 프록시(Proxy)는 포워드 프록시와 리버스 프록시로 나뉘어져, 기본적으로 포워드 프록시는 클라이언트 쪽, 리버스 프록시는 서버쪽의 설정을 한다. 포워드 프록시 클라이언트의 대신 프록시 서버가 목적 서버에 통신해 주는 구성을 "포워드 프록시"라고 한다. 프록시를 사용하지 않은 경우 아래와 같다. 포워드 프록시의 경우 아래와 같이 프록시 서버가 외부 Web..

    [Java] 빠져나올 수 없는 null 처리의 늪 - 2

    null 관련 문제 돌아보기 이 전 포스팅의 예제 코드를 통해 살펴본 null과 관련된 문제들은 크게 2가지로 요약된다. 런타임에 NPE(NullPointerException)라는 예외를 발생시킬 수 있음 NPE 방어를 위해서 들어간 null 체크 로직 때문에 코드 가독성과 유지 보수성이 떨어짐 그냥 두자니 곳곳에 숨어서 일으켜 장애를 유발하고, 조치를 하자니 코드를 엉망으로 만드는 null, 어떻게 하면 조금 더 현명하게 다룰 수 있을까? 함수형 언어에서 그 해법을 찾다 스칼라나 하스켈과 같은 소위 함수형 언어들은 전혀 다른 방법으로 이 문제를 해결한다. 자바가 "존재하지 않는 값"을 표현하기 위해서 null을 사용했다면, 이 함수형 언어들은 "존재할지 안 할지 모르는 값"을 표현할 수 있는 별개의 타..

    [Java] 빠져나올 수 없는 null 처리의 늪 - 1

    null이란? null 참조(null reference) 또는 null 포인터(null pointer)란 유효한 객체(Object)를 포인터(또는 참조) 하지 않고 있음을 가리키기 위한 저장된 값을 말한다. null은 왜 나쁜가? Ad-hoc(임시방편, 이것을 위해서만 만들어진) 에러 핸들링 객체를 받을 경우 항상 null인지 유효한 객체인지 체크해야 한다. 모호한 의도(또는 의미) 모호성을 없애려면 항상 실제 객체를 반환하거나, null 객체 반환 또는 exception을 던져야한다. 컴퓨터적 사고 vs 객체적 사고 - Hello, is it a software department? - 안녕하세요. 소프트웨어 부서인가요? - Yes. - 네. - Let me talk to your employee "J..

    [JAVA] 예외 던지기(throw) & 예외 연결(Chained Exception)

    예외 던지기 예외 발생시키기 (throw) 만일 프로그램적으로 에러가 아니라도 로직상 개발자가 일부러 에러를 내서 로그에 기록하고 싶은 상황이 올 수 있다. 자바에서는 throw 키워드를 사용하여 강제로 예외를 발생시킬 수 있다. 원래는 프로그램이 알아서 에러를 탐지하고 처리 하였지만, 이번에는 사용자가 일부러 에러를 throw하여 에러를 catch 한다는 개념으로 보면 된다. 이 때 new 생성자로 예외 클래스를 초기화하여 던지는데, 이 클래스 생성자에 입력값을 주게 되면, catch의 getMessage() 메서드에서 출력할 메세지를 지정하게 된다. import java.util.Scanner; public class Main { public static void main(String[] args) ..

    [WEB] HTTP Method

    HTTP Method GET 서버에게 Resource를 보내도록 요청하는데 사용 (서버의 Resource를 읽음) HEAD GET과 동일하지만 서버에서 Body를 Return 하지 않음 Resource를 받지 않고 오직 찾기만 원할 때 object가 존재할 경우 응답의 상태 코드를 확인할 때 서버의 응답 헤더를 봄으로써 Resource가 수정되었는지 확인 PUT 서버에 문서를 쓸 때 사용 (GET과 반대) PUT 메소드는 서버가 Client 요청의 Body를 확인한다. 요청된 URL에 정의된 새로운 Resource를 생성하기 위함 요청된 URL이 존재할 경우 대체하여 사용 POST Server에 Input Data를 보내기 위함 (HTML, form에 많이 사용) PUT vs POST PUT은 서버의 R..

    좋은 객체 지향 설계의 5가지 원칙 (SOLID)

    SOLID 클린 코드로 유명한 로버트 마틴이 좋은 객체 지향 설계의 5가지 원칙을 정리 SRP: 단일 책임 원칙 (Single Responsibility Principle) OCP: 개방-폐쇄 원칙 (Open/Closed Principle) LSP: 리스코프 치환 원칙 (Liskov Substitution Principle) ISP: 인터페이스 분리 원칙 (Interface Segregation Principle) DIP: 의존관계 역전 원칙 (Dependency Inversion Principle) SRP 단일 책임 원칙 한 클래스는 하나의 책임만 가져야 한다. 하나의 책임이라는 것은 모호하다. 클 수 있고, 작을 수 있다. 문맥과 상황에 따라 다르다. 중요한 기준은 변경이다. 변경이 있을 때 파급 효..

    [WEB] WebSocket 이란?

    WEB SOCKET (웹 소켓) 실시간 (양방향) 통신을 위한 웹의 노력 개인적인 생각으로 HTML5의 새로운 스펙중에 사용자가 가장 흥미로워 한 것이 Canvas 라면 개발자가 가장 흥미로워 한 것은 바로 웹 소켓(Web Socket)이지 않나 싶다. 필자 역시 순수 웹 환경에서 연결 지향 양방향 통신을 지원하는 웹 소켓이 가장 눈에 띄는 것 중 하나였다. 과거 순수 웹 환경에서 채팅과 같은 실시간 응용프로그램을 위한 얼마나 많은 시도들이 있었던가 이제 박물관에서나 볼 법한 숨긴 frame(or iframe)을 통한 반복적인 재요청은 당시만 해도 웹에서 실시간 효과를 낼 수 있는 참신한 아이디어로 부상한 적이 있었다. 이후 Ajax의 등장으로 비동기로 반복 요청을 할 수 있어 그나마 조금은 개선 되었다..

    [WEB] WebRTC란?

    WebRTC Web Real-Time Communication의 약자 웹, 앱(안드로이드, iOS) 에서 별 다른 소프트웨어 없이 카메라, 마이크 등을 사용해서 실시간 커뮤니케이션을 제공해주는 기술 우리가 잘 알고있는 화상통화, 화상 공유 등을 구현할 수 있는 오픈 소스 비디오, 음성 및 일반 데이터가 P2P방식으로 피어간의 전송되도록 지원 JavaScript API로 제공 알아야할 용어 및 개념 data streams, STUN/TURN servers, Signaling, JSEP, ICE, SIP, SDP, NAT, UDP/TCP, network socket 등 https://www.slideshare.net/BlissonChoi/webrtc-71984826 → 성능측정 WebRTC의 장점과 단점 장..

    [WEB] Access Token & Refresh Token 원리 (feat. JWT)

    Access Token과 Refresh Token JWT 포스팅 [WEB] JWT 토큰 인증 이란? Cookie 인증 쿠키는 Key-Value 형식의 문자열 덩어리이다. 클라이언트가 어떠한 웹사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버를 통해 클라이언트의 브라우저에 설치되는 작은 기록 정보 jmdwlee.tistory.com Refresh Token이 왜 필요한가 Access Token 만을 통한 인증 방식의 문제는 만일 제 3자에게 탈취당할 경우 보안에 취약하다는 점이다. Access Token은 발급된 이후, 서버에 저장되지 않고 토큰 자체로 검증을 하며 사용자 권한을 인증하기 때문에, Access Token이 탈취되면 토큰이 만료되기 전가지, 토큰을 획득한 사람은 누구나 권한 접근이 가능..