[HTTP 기본] 4. HTTP 상태 코드와 HTTP 헤더
·
Back-End/HTTP 기본
HTTP 상태 코드 Client가 보낸 Request의 처리 상태를 Response에서 알려주기 위함 1XX : 처리중 잘 사용하지 않음 2XX : 성공 200 : OK 201 : Request 성공 해서 새로운 리소스가 생성됨 생성된 리소스는 Response의 Location 헤더에 담아 보낸다 204 : No content Response Payload에 싣어 보낼 데이터가 없음 ex) 세이브 버튼 3XX : Request를 완료하려면 추가 행동 필요(리다이렉션) 4XX : Client 오류 400 : GET 파라미터 오류, API 스펙에 맞지 않음 401 : UnAuthorized, Response에 WWW-Authenticate 헤더와 함께 인증 방법을 설명 403 : 권한 거부 404 : 요청 ..
[HTTP 기본] 3. API와 HTTP 메서드
·
Back-End/HTTP 기본
API(Application Programming Interface) Client와 Server가 통신하기 위해 필요한 API. URI를 통해 서로 요청을 식별하는데, 올바론 API URI 설계는 무엇일까? 리소스 식별에 집중하자 CRUD 기능을 구현하는 회원 가입, 회원 조회, 회원 정보 변경, 회원 탈퇴 기능들을 만든다고 생각해보자. 회원 가입 : /create-members/{id} 회원 조회 : /read-members/{id} 회원 변경 : /update-members/{id} 회원 탈퇴 : /delete-members/{id} 이때 집중해야 할 것은 CRUD가 아닌 '회원'이라는 리소스이다. 따라서 리소스만 URI에 매핑하는것이 제일 좋다 회원 가입 : /members/{id} 회원 조회 : ..
[HTTP 기본] 2. HTTP 통신 흐름과 Stateless
·
Back-End/HTTP 기본
URI(Uniform Resource Identifier) URI에는 크게 URL(Locator) 과 URN(Name) 두가지가 있다. 굳이 따지자면 URI는 인터페이스, URL과 URN은 구현체 같은 느낌? 이름에서 알 수 있듯이 URL은 경로, 위치로 식별하고 URN은 이름으로 식별한다. URN은 현재 잘 사용되지 않으며 URL이 압도적으로 비율이 많다 URL 특징 포트 번호는 생략가능하다. 알아서 붙여주며 만약 명시하면 해당 PORT로 접속 쿼리 스트링은 모두 문자로 처리된다(/search?q=hello&hl=ko) 숫자도 문자로 처리 됨 HTTP(HyperText Transfer Protocol) 현재는 Text뿐만 아니라 영상, 이미지 모든 정보를 전송하고 있다 HTTP 통신 흐름 웹 브라우저가..
[HTTP 기본] 1. 네트워크 통신 기초
·
Back-End/HTTP 기본
네트워크 통신 기초 1. IP(Internet Protocol) 우리가 흔히 말하는 IP주소할 때 그 IP이다. 지정한 IP 주소에 패킷이라는 통신 단위로 데이터를 전달한다 패킷 패킷에는 다음과 같은 정보들이 담긴다 출발지 IP 목적지 IP 전송 데이터 패킷을 포함한 데이터들은 네트워크상에 존재하는 노드들을 통해 목적지로 보내진다. 해당 데이터를 성공적으로 받은 서버는 OK라는 메세지를 다시 노드들을 통해 클라이언트로 보내주어 확인을 한다 한계점 1. 패킷을 받을 서버가 존재하지 않거나 서비스 불능 상태여도 패킷을 보내게 된다 2. 불량 노드들로 인해 중간에 패킷이 사라질 수 있으며 패킷의 순서가 뒤바뀔 수 있다. 3. 포트 정보가 없기 때문에 같은 IP를 사용하는 애플리케이션이 두 개 이상이라면 문제가..
[디자인 패턴] 6. 커맨드 패턴
·
Programming/디자인 패턴
커맨드 패턴의 정의 커맨드 패턴을 이용해 메소드 호출을 캡슐화해서, 계산 과정의 각 부분들을 결정화 시킨 다음 작업을 요청한 쪽 하고 작업을 처리하는 쪽을 분리 시킬 수 있다. 즉, 계산하는 코드를 호출하는 객체에서는, 해당 일을 어떻게 처리해야 하는지에 대해 신경 쓰지 않아도 된다. 식당 주문 예제 커맨드 패턴에 대해 위의 세 문장으로 바로 이해할 수 있는 사람은 거의 없을 것이다. 좀 더 알기쉽게 유명한 예제인 식당에서 주문을 하는 예제로 이해해보자. 식당을 이루고 있는 객체는 고객, 주문서, 종업원, 주방장 총 4개라고 가정해보자. 고객은 주문서에 자신이 원하는 메뉴를 적는다. 종업원은 주문서에 적힌 메뉴를 확인한다. 주문서에 적힌 메뉴를 확인하고 이 메뉴를 주방장에게 전달한다. 이 3가지 Proc..
[디자인 패턴] 5. 싱글턴 패턴
·
Programming/디자인 패턴
게임 개발자라면 한번쯤은 들어본 싱글턴 패턴에대해 얘기해보자. OOP에서 클래스의 인스턴스는 여러 개 존재할 수 있다. 단순히 new 연산자로 인스턴스를 생성해주면 그만이다. 하지만 필요에 의해서, 어떤 경우든 인스턴스가 최대 한개까지만 존재하도록 하고싶은 경우가 있을 수 있다. 싱글턴 패턴은 위와 같은 경우에 사용된다. 싱글턴 패턴이 사용되는 경우 먼저 인스턴스가 최대 한개까지만 존재해야 되는 경우를 생각해보자. 가장 대표적인 예로는 사용자 설정, 레지스트리, I/O 디바이스를 다룰 때 이다. 인스턴스가 여러개 존재하면 어떤 인스턴스의 설정 값, 혹은 멤버 변수를 참조할지 모호해지므로 무조건 최대 하나만 존재해야 한다. 알기 쉽게 롤을 예시로 들어보자 롤 클라이언트의 설정 값 롤에는 각 스킬별로 스마트..
[디자인 패턴] 4. 팩토리 패턴
·
Programming/디자인 패턴
미니언 생성으로 팩토리 패턴 알아보기 오늘도 어김없이 롤을 예시로 들어보자. 여러분은 롤 클라이언트 개발팀에서 미니언쪽 부서에서 일하게 되었다. 1분 30초가 되면 미니언을 생성함과 동시에 일정 간격마다 계속 미니언을 생성해야 한다. 미니언들은 아마 이런 특성을 가지고 있을것이다. 미니언들의 특성 고유 특성 1. 근거리 2. 원거리 3. 대포 공통 특성 1. 걷는다 2. 공격한다 미니언 객체를 생성하기 위해서 코드 어디서든 이 미니언 클래스의 인스턴스를 new 해줘야 할것이다. 간단히 코드로 나타내면 다음과 같다. class MinionSpawner { public Minion GetMinion(string type) { Minion minion; if(type == "근거리") minion = new ..
[디자인 패턴] 3. 데코레이터 패턴
·
Programming/디자인 패턴
이해를 돕기 위해 롤토체스를 예시로 들어보자. 롤토체스에는 150개 이상의 챔피언이 존재한다. 챔피언들은 기본적으로 원딜, 서폿, 미드, 탑, 정글의 포지션중에 하나를 가지고 있다. 챔피언의 포지션만을 고려하여 챔피언의 판매 가격을 결정한다고 가정해보자. 챔피언 판매로 데코레이터 패턴 이해해보기 모든 챔피언들은 하나의 포지션을 갖는다. 이를 클래스로 단순하게 나타내 보자. abstract class Champion { abstract public int GetCost(); } 모든 챔피언들의 부모 클래스인 Champion 클래스는 abstract 클래스로 GetCost 추상 메소드를 가진다. Champion 클래스를 상속받는 챔피언들은 자신이 가지고 있는 포지션을 고려하여 GetCost 추상 메소드를 i..
[디자인 패턴] 2. 옵저버 패턴
·
Programming/디자인 패턴
이번에도 이해를 돕기 위해 롤을 예시로 들어보자. 평화로운 라인전에서 우리가 해야 할일은 미니언 막타!! cs를 챙겨야 된다. 미니언 막타를 쳤을 때 롤 클라이언트에서 일어나는 일을 생각해보자. 미니언 막타로 옵저버 패턴 이해해보기 1. 골드가 올라간다 미니언이 죽으면서 위에 골드 몇원을 얻었는지 UI가 뜨고 동시에 하단 템창 옆에 있는 골드 표시 UI도 해당 금액이 더해진 누적 금액으로 바뀌게 된다. 2. CS가 올라간다 게임내 정보에 내 CS 정보가 업데이트 되어 Tab키를 눌러보면 CS가 1 증가해있는걸 볼 수 있다. 여기에 CS로 벌은 골드 정보도 포함시킨다 생각해보자. 3. 어쩔때는 현상금이 올라간다 압도적인 CS로 상대팀 챔피언들보다 골드가 많아지면 현상금이 붙게 되는걸 Tab키를 눌러 확인할..
[디자인 패턴] 1. 스트래티지 패턴
·
Programming/디자인 패턴
결론부터 말하자면 스트래티지 패턴은 객체와, 객체가 가지는 행동들을 따로 분리해 놓는것이다. 이해를 쉽게 하기 위해 롤을 예시로 들어보자. 롤에는 바론, 용, 바위게, 두꺼비등의 여러가지 몬스터 종류가 있다. 각 몬스터들이 가지고있는 특성으로는 1. 챔피언을 공격할 수도 있고, 공격하지 못할 수도 있다. 2. 공격받지 않는 동안 보여주는 애니메이션이 무조건 존재한다 (Idle) 3. 챔피언이 CC기를 사용했을 때, 영향을 받을 수도 있고, 안 받을 수도 있다. 이 세가지 특성만 일단 생각해보고 Monster 클래스를 생각해보자. abstract Class Monster { public abstract void Attack(); public abstract void GotCC(); public void O..