You Can Become A
늦게 시작해도 누구든지 노력하면 개발자가 될수 있어요 !
☕ 자바 제네릭(Generics) 개념 & 문법 정복하기
제네릭 (Generics) 이란 자바에서 제네릭(Generics)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 객체별로 다른 타입의 자료가 저장될 수 있도록 한다. 자바에서 배열과 함께 자주 쓰이는 자료형이 리스트(List)인데, 다음과 같이 클래스 선언 문법에 꺾쇠 괄호 로 되어있는 코드 형태를 한번 쯤은 봤을 것이다. ArrayList list = new ArrayList(); 저 꺾쇠 괄호가 바로 제네릭이다. 괄호 안에는 타입명을 기재한다. 그러면 저 리스트 클래스 자료형의 타입은 String 타입으로 지정되어 문자열 데이터만 리스트에 적재할 수 있게 된다. 아래 그림과 같이 배열과 리스트의 선언문 형태를 비교해보면 이해하기 쉬울 것이다. 선언하는 키워드나 문법 순서가..
📚 자바스크립트 Proxy & Reflect 고급 기법
JavaScript Proxy 객체 프록시(Proxy)의 사전적 뜻은 '대리인', '대리'라는 뜻이다. 서버를 다뤄본 독자분들이라면 프록시 서버에 대해 질리도록 들어봤을 것이다. 프록시 서버는 클라이언트와 본 서버 중간에 위치하여 캐싱, 분산 등 여러 부가 기능을 수행하는 대리자 역할로서 정말 유용하게 다뤄지는 개념이다. 심지어 디자인 패턴에서는 따로 프록시 패턴(Proxy Pattern) 으로 코드 패턴을 정의하여 소개하기도 한다. 이 프록시 코드 패턴은 실무에서 정말 빈번하게 다뤄지기 때문에, 이에 각각 프로그래밍 언어에서는 별도의 프록시 객체를 만들어서 아예 개발자에게 API로 제공해준다. 대표적으로 자바(Java) 진영의 Dynamic Proxy 를 들 수 있으며, 자바스크립트(JavaScript..
☕ 누구나 쉽게 배우는 Dynamic Proxy 다루기
Java Dynamic Proxy 자바 프로그래밍의 디자인 패터중 하나인 프록시 패턴은 초기화 지연, 접근 제어, 로깅, 캐싱 등, 기존 대상 원본 객체를 수정 없이 추가 동작 기능들을 가미하고 싶을 때 사용하는 코드 패턴이다. 이 디자인 패턴을 적용하면 개방 폐쇄 원칙(OCP)의 효과를 얻을 수 있어 코드 수정없이 유연하게 확장이 가능하여 유지보수 측면에서 플러스 효과를 얻을 수 있다는 장점이 있다. 하지만 프록시 디자인 패턴은 대상 원본 클래스 수만큼 일일히 프록시 클래스를 하나하나 만들어 줘야하는 치명적인 단점이 존재한다. 즉, 프록시 적용 대상 객체가 100개면 프록시 객체도 100개 만들어줘야 한다는 말이다. 따라서 코드량이 많아지게 되고 중복이 발생하여 코드의 복잡도가 증가한다는 한계점이 존재..
💠 프록시(Proxy) 패턴 - 완벽 마스터하기
Proxy Pattern 프록시 패턴(Proxy Pattern)은 대상 원본 객체를 대리하여 대신 처리하게 함으로써 로직의 흐름을 제어하는 행동 패턴이다. 프록시(Proxy)의 사전적인 의미는 '대리인'이라는 뜻이다. 즉, 누군가에게 어떤 일을 대신 시키는 것을 의미하는데, 이를 객체 지향 프로그래밍에 접목해보면 클라이언트가 대상 객체를 직접 쓰는게 아니라 중간에 프록시(대리인)을 거쳐서 쓰는 코드 패턴이라고 보면 된다. 따라서 대상 객체(Subject)의 메소드를 직접 실행하는 것이 아닌, 대상 객체에 접근하기 전에 프록시(Proxy) 객체의 메서드를 접근한 후 추가적인 로직을 처리한뒤 접근하게 된다. 그냥 객체를 이용하면 되지, 이렇게 번거롭게 중계 대리자를 통해 이용하는 방식을 취하는 이유는, 대상..
💠 추상 팩토리(Abstract Factory) 패턴 - 완벽 마스터하기
Abstract Factory Pattern 추상 팩토리 패턴은 연관성이 있는 객체 군이 여러개 있을 경우 이들을 묶어 추상화하고, 어떤 구체적인 상황이 주어지면 팩토리 객체에서 집합으로 묶은 객체 군을 구현화 하는 생성 패턴이다. 클라이언트에서 특정 객체을 사용할때 팩토리 클래스만을 참조하여 특정 객체에 대한 구현부를 감추어 역할과 구현을 분리시킬 수 있다. 즉, 추상 팩토리의 핵심은 제품 '군' 집합을 타입 별로 찍어낼수 있다는 점이 포인트 이다. 예를들어 모니터, 마우스, 키보드를 묶은 전자 제품군이 있는데 이들을 또 삼성 제품군이냐 애플 제품군이냐 로지텍 제품군이냐에 따라 집합이 브랜드 명으로 여러갈래로 나뉘게 될때, 복잡하게 묶이는 이러한 제품군들을 관리와 확장하기 용이하게 패턴화 한것이 추상 ..
☕ 누구나 쉽게 배우는 Reflection API 사용법
자바의 Class 클래스 (Java.lang.Class) 자바 프로그래밍을 할때 우리는 보통 변수나 클래스를 직접 선언하고 만들어 사용하여 왔다. 그런데 어떤 경우에는 애플리케이션 실행 중에서 클래스를 동적으로 불러와 다루어야 할 경우가 생긴다. 즉, 코드를 실행하기전 컴파일 단에서 개발자가 직접 폴더를 뒤져가며 클래스 정의문을 찾아 클래스 정보를 얻는 것이 아닌, 코드 상에서 호출 로직을 통해 클래스 정보를 얻어와 다룸으로써 런타임 단에서 다이나믹하게 클래스를 핸들링 하는 것이다. 이때 사용되는 것이 바로 Class 클래스 객체이다. Class 클래스는 java.lang.Class 패키지에 별도로 존재하는 독립형 클래스로서, 자신이 속한 클래스의 모든 멤버 정보를 담고 있기 때문에 런타임 환경에서 동적..
🌐 301 vs 302 상태 코드 차이점 (SEO)
301 vs 302 Redirection 리다이렉션(Redirection)은 보통 웹사이트를 새로운 도메인으로 옮겼거나 페이지의 주소가 바뀌없을때, 이용자들을 하여금 변경된 주소로 자동으로 옮겨가게 만드는데 사용된다. HTTP 프로토콜에서는 리다이렉션 HTTP 상태코드인 301 과 302 를 통해, 클라이언트를 지정된 URL로 보내도록 할수가 있다. 이중. 301 리다이렉션은 영구(permanent) 리다이렉션이라고 부르며, 302 리다이렉션은 일시(temporarily) 리다이렉션 이라고 부른다. 문제는 이 둘의 차이점이 애매하다는 것이다. 왜냐하면 실제로 둘이 동작 형태를 브라우저로 확인해보면, 둘다 자동으로 리다이렉션하는 것을 똑같으니 사람의 육안으로는 이 둘의 차이를 구별할수 없기 때문이다. 그럼..
🌐 HTTP 상태 코드(1XX ~ 5XX) 종류 총정리
HTTP Status Code HTTP의 상태 코드는 클라이언트가 보낸 HTTP 요청이 성공했는지 실패했는지를 서버에서 알려주는 숫자 코드다. 개발자 도구의 네트워크 탭을 보면 아래와 같이 Status 숫자 코드로 요청의 결과를 간략하게 나타내주는데, 클라이언트를 다루는 우리들은 이 숫자를 보고 결과를 단번에 유추할수 가 있게 된다. (물론 각 코드가 무엇을 의미하는지 별도의 공부가 필요하다) HTTP 상태 코드는 3자리 숫자로 이루어져 있으며, 총 100번대 ~ 500번대 까지 존재한다. 그리고 각 상태코드의 첫 번째 자리는 최상위 코드가 되어 다음과 같이 5 개의 그룹으로 나뉘어 관리된다. 1XX : 요청이 수신되어 처리중 2XX : 요청 정상 처리 3XX : 요청을 완료하려면 추가 행동이 필요 4X..
🌐 5XX (Server Error) 상태 코드 - 총정리 모음
5XX Server Error 5XX 번대의 상태 코드들은 서버 오류를 의미한다. 4XX 상태코드와 5XX 상태코드 모두 오류를 반환하는 응답 코드이지만, 4XX는 클라이언트의 요청에 문제가 있는 것이기에 요청 메세지를 검토하여 수정한 뒤 재전송하면 해결이 가능하지만, 5XX 는 서버에 문제가 있는 것이기 때문에 서버 자체의 상태를 보아야 하는 차이가 있다. 즉, 클라이언트가 유효한 요청을 보냈음에도, 5XX 가 발생하면 즉시 서버 상태를 확인하여 서버 복구를 진행해야 한다는 것이다. 그래서 서버가 복구되면 같은 요청 메시지를 재전송면 요청이 성공할 가능성이 있다. 또는 클라이언트와 원 서버 모두 정상이지만 중간 프록시 서버나 게이트웨이와 같은 서버의 보조 구성 요소에서도 문제가 생길때 5XX 응답 코드..
🌐 4XX (Client Error) 상태 코드 - 총정리 모음
4XX Client Error 4xx 번대의 상태 코드들은 클라이언트 오류를 의미하며, 잘못된 문법 등의 오류로 인해 서버가 요청을 수행할 수 없고 그 원인이 클라이언트에게 있음을 뜻한다. 예를들어 잘못 구성된 요청 메세지 규칙 같은 것이 있을 수 있으며, 존재하지 않은 URL 요청도 있을 수 있다. 400 Bad Request Bad Request ⇢ 클라이언트가 잘못된 요청을 보냄을 의미 클라이언트의 잘못된 요청으로 서버가 이해할수가 없어 요청을 수행할 수 없음을 뜻한다. 주로 요청 구문, 메시지 등의 문법 오류로 인한 문제가 해당되며 요청 파라미터가 잘못되거나 API 스펙이 맞지 않는 경우에도 400 상태코드를 내뱉는다. 따라서 이를 해결하기 위해서는 클라이언트가 자신의 요청을 검토하고 재전송하여야..
🌐 3XX (Redirection) 상태 코드 - 총정리 모음
3XX Redirection 3xx 번대의 상태 코드들은 리다이렉션을 의미하며, 이는 요청을 완료하려면 추가적인 작업(페이지 이동)이 필요함을 의미한다. 클라이언트가 관심 있어 하는 리소스에 대해 다른 위치를 사용하라고 말해주거나 그 리소스의 내용 대신 다른 대안 응답을 제공한다. 리다이렉션(Redirection)은 클라이언트가 요청한 URL에 대해 다른 URL을 다시(re) 지시(direct)하여 다른 주소로 이동할 수 있게 하는 기술이다. HTTP 에 사용되는 리다이렉션은 크게 3가지 종류로 나눌 수 있다. 영구 리다이렉션(Permanent) : 특정 리소스의 URL 이 영구적으로 이동 일시 리다이렉션(Temporary) : 특정 리소스의 URL 이 일시적으로 이동 특수 리다이렉션(Special) :..
🌐 2XX (Successful) 상태 코드 - 총정리 모음
2XX Success 2xx 번대의 상태 코드들은 요청이 정상적으로 처리되었다는 의미를 가진다. 단순히 요청에 대한 성공을 나타내지만, 클라이언트가 어떠한 행위에 대한 성공인지에 대한 것을 나타내기 때문에, 응답을 받고 클라이언트가 취할 행위를 결정하는데 중요하면서도 정말 자주 보게될 상태 코드일 것이다. 200 OK OK ⇢ 클라이언트의 요청을 서버가 정상적으로 처리 메세지 바디에는 HTTP 메서드에따라 각기 다른 요청된 리소스를 포함 GET : 리소스를 가져왔고 메시지 바디에 들어있음 POST : 리소스가 명시하는 행동의 결과가 메시지 바디에 들어있음 PUT : 200 OK (수정 완료) / 201 Created (수정할 개체가 없어 새로 업로드) DELETE : 200 OK (삭제 완료) / 204..