본문 바로가기
Etc/Study Note

Java & HTTP RESTFul API & Servlet

by happy coding! 2018. 1. 6.
반응형

Dreaming IT Study 2주차 학습 내용



* 객체 (Object)


1. 객체지향 (캡슐화, 상속, 다형성)


 - Java 언어는 C언어와 다르게 OOP(Object Oriented Programming) 성격을 가짐

 - C언어는 절차지향적 언어. main()의 순서대로 진행이 됨

 - Java는 객체 단위로 프로그램이 수행됨

 

 - 캡슐화 : 다른 외부 객체에서 필드나 메소드를 참조하려고 접근 시 이를 보안상 보호하기 위한 개념

 

 - 상속 : 부모 클래스가 있고, 이를 자식 클래스가 물려받아서 사용하는 구조

 

 - 다형성 : 상속 기반에서 부모 클래스가 각각의 자식 클래스를 포함할 수 있어 다양한 형태를 취할 수 있

               다는 개념. 즉 A가 부모이고 B,C가 자식클래스일 경우 A는 B가 될 수도 있고 C가 될수도 있음. 

               반대의 원래로 B,C가 A를 할당할 수도 있으나 캐스팅을 해야하고 기본적으로 에러가 나는 구조

               로 잘 사용하지 않고 권장하지 않는 구조임



2. Object


- 구성요소를 이루는 큰 집합을 객체라고 함(의미는 추상적)


- 사람을 예로 들면, 사람이라는 하나의 객체가 존재.


- 구성요소로는 손과 발이 있음


- 그것에 따른 행위로 손을 움직이다, 발로 걷다 등이 있음



3. Heap Memory





- 프로그래머가 직접 할당을 하여 사용하는 메모리(Memory) 공간


- Java에서는 new를 이용해서 만든 객체가 이 메모리에 할당됨


- C언어에서는 동적할당(malloc 등)을 한 요소들이 이 메모리에 속함


- 할당된 영역을 사용하고 프로그램 종료시 해당 메모리를 다시 운영체제에게 반납


- C/C++은 프로그래머가 직접 메모리 관리(free(), 소멸자)를 해야함


- 자바는 할당 해제를 따로 명시하지 않아도 Garbage Collection이 수행되어 자

  동으로 객체가 반납됨


- 힙 메모리를 잘못 사용하면 버퍼 오버플로우라는 위험이 있을 수 있음.





4. 필드, 메소드



- 객체를 이루는 구성요소


- 필드는 요소


- 메소드는 요소에 따른 행위를 의미함




5. 생성자



- 객체를 생성 시 초기값을 의미함


- 일반 메소드와 가장 큰 특징은 반환타입이 없다는 점과 메소드의 이름이 클래스의 이름과 반드시 동일해야한다는 점.


- 코딩시 아무런 생성자를 적어주지 않으면, 컴파일러가 기본적으로 default 

  생성(파라미터도 없고 아무런 액션도 없는 경우)를 잡아버려 에러가 나지 않음.


- 일반 생성자(파라미터가 있는)가 존재할 경우 default 생성자는 반드시 존재

  해야함.



6. Getter/Setter



- OOP의 캡슐화는 외부 연관되지 않은 객체로부터 필드와 메소드를 보호하는 

  목적으로 설계됨


- 따라서 다른 객체에서 참조하려는 객체의 필드와 메소드에 접근하기 위해서 

  접근자와 생성자를 둠. 




* 상속(Inheritance), 인터페이스(Interface)



1. super/this


- super는 상속 구조에서 상위(부모)클래스를 의미


- this는 현재 자신의 객체를 의미


2. extends, implements


- extends는 상속을 하기 위한 키워드


- implements는 인터페이스를 구현하기 위한 키워드


3. abstract Method


- 인터페이스 내부에 선언되는 메소드를 의미


- 메소드 원형만 존재하고 본체는 존재하지 않는 구조


4. Object Class


- Java에서 가장 최상위의 클래스


- Java의 모든 클래스는 default로 Object 클래스를 상속받고 있다.


- Object 클래스는 기본적인 메소드들을 제공하는데 toString(), wait(), notify(),

  notifyAll() 등이 있음.


- Java는 int, double 등의 타입에 따른 객체가 존재하는데 Integer, Double 등 

  랩퍼클래스가 존재


5. 다중상속


- 자바에는 기본적으로 다중상속이라는 것이 없음


- 즉 extends에서 여러 개의 클래스를 참조할 수 없음


- 대신, 인터페이스의 개념을 이용해서 여러 개를 구현받아서 다중상속과 유사한 

  효과를 낼 수 있음


6. 메소드 오버로딩, 오버라이딩


- 오버로딩 : 메소드의 이름은 동일하나 매개변수의 타입이 다른 경우


- 오버라이드 : 상속 기반에서 메소드의 이름이 동일하고 매개변수 또한 상위클래스랑 동일한 경우를 의미



* 다형성(Polymorphism)


1. Parent/Child


- 상속 기반에서 부모클래스로 자식클래스를 생성하는 구조가 가능


- 부모는 다양한 형태를 가질 수 있음을 의미함


- 반대로 자식 클래스에서 부모를 생성하는 것은 캐스팅을 사용해서 가능하나 잘 

사용하지 않고 추천하지 않는 방법




* Map, List 자료구조




1. Map은 자료구조 중에서 HashMap 구조에 따름


- Map방식은 자바 자료구조 중 Map 분류에 속함


- Map은 자료구조 중 해시테이블의 원리를 따름


- key, value로 쌍을 이룸


- HashMap은 Map 관련 클래스. 


  Map이 인터페이스라 내부 구현된 메소드 본체가 없어 이를 HashMap이 선언하여 구현함. 

  따라서 실제 할당은 HashMap<>으로 진행. 


- <>는 Template의 의미로 해당 타입으로 모든 데이터들을 치환하겠다는 의미



2. List는 자료구조 중 LinkedList 구조에 따름


- List 는 자바 자료구조 중 Collection 분류에 속함


- List는 자료구조 중 링크드리스트 구조에 따름


- List 역시 인터페이스로 실제 구현된 클래스는 ArrayList이다.



3. 기타 자바 자료구조 클래스


- 대표적인 Map<>, List<>를 포함하여 Queue, Stack, LinkedList 등 다양하게 지원



4. JSON 




                              


- key, value 쌍으로 구조화 되어 있는 데이터 포맷.


- '[' 는 배열을 의미


- '{' 는 객체를 의미


- 객체 내부에 데이터는 'testa' : '1' 이런 식으로 key, value로 구성


- 자바의 Map이 이에 호환


- 웹 프로그래밍 시 자주 사용되는 포맷으로 (application/json) Ajax 통신시 주 포맷 유형






* HTTP RESTFulAPI


RESTFul API





1. REST(Representational State Transfer)의 구성


 - 자원(Resource) : URI


 - 행위(Verb): HTTP Method


 - 표현(Representations)



2. REST API 디자인


(1) URI는 정보의 자원을 표현해야 한다.

 

- GET/member/delete/1 (X) : 잘못된 방식. 이유는 URI는 자원을 표현하는데 중점을 두어야함. delete와 

                                      같은 행위 표현은 적절하지 않음.

 

(2) 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다.

 

- DELETE/member/1 (O) : 올바른 설계. URI는 자원에 집중하였고, 행위는 DELETE로 Method를 이용함


- POST/member/2 (O) : 올바른 설계. URI는 자원에 집중하였고, 행위는 POST로 Method를 이용함



3. HTTP Method


- POST, GET, PUT, DELETE 4 가지의 메소드를 가지고 CRUD를 구현 가능


* POST : POST를 통해 해당 URI를 요청하면 리소스를 생성한다.

* GET : GET을 통해 리소스를 조회한다. 리소스를 조회하고 해당 도큐먼트의 자세한

         정보를 가져온다

* PUT : PUT을 통해 해당 리소스를 수정

* DELETE : DELETE를 통해 리소스를 삭제


=> URI는 자원을 표현하는데 집중하고 행위에 대한 정의는 HTTP Method를 사용하여 구성하는 것이 REST한 API를 설계하는 핵심 원리



4. URI 설계 시 주의점


1. 슬래시 구분자는 계층관게를 나타내는데 사용된다.


2. URI 마지막 문자로 슬래시를 포함하지 않는다.


3. 하이픈은 URI의 가독성을 높이는데 사용


4. 밑줄은 URI에서 사용하지 않는다.


5. URI 경로에는 소문자가 적합하다.


6. 파일 확장자는 URI에 포함시키지 않는다.



5. HTTP 응답 상태 코드


200 : 클라이언트의 요청을 정상적으로 수행함


400 : 클라이언트의 요청이 부적절할 때 사용하는 응답코드


401 : 클라이언트가 인증되지 않은 상태에서 보호된 리소스를 요청했을 때 사용하는 응답코드


403 : 유저 인증상태와 관계없이 응답하고 싶지 않은 리소스를 클라이언트가 요청했을 경우 사용하는 응답코드


405 : 클라이언트가 요청한 리소스에서는 사용 불가능한 메소드를 이용했을 경우 사용하는 응답 코드


500 : 서버에 문제가 있을 경우 사용하는 응답코드



* Servlet


1. Servlet의 개념


- Servlet은 톰캣 위에서 동작하는 자바 프로그램.


- 톰캣과 같은 WAS가 자바 파일을 컴파일하여 Class로 만들고 메모리에 올려 Servlet 객체를 만들게되고, 

  이 Servlet 객체는 doPost, doGet 을 통해 요청에 응답


- WAS를 통해 컴파일된 후 메모리에 적재되어 클라이언트의 HTTP Get, Post 등의 요청을 처리하는 자바프로그램



2. WAS란?


- Web Application Server는 인터넷 상에서 HTTP를 통해 사용자 컴퓨터나 장치에 애플리케이션을 수행해주는 미들웨어



3. Servlet 생애주기



- Service 단에서 HTML 코드를 만들어 다시 응답하기가 복잡


- HTML 코드에 자바문법 적용이 가능한 JSP '%' 이용




4. DD(배포서술자), web.xml



- Servlet, Error Page, Listener, Filter, 보안설정 등 Web Application의 설정 파일


- URL 과 실제 서블릿의 매핑 정보를 포함


- 하나의 웹 애플리케이션에 하나만 존재


- 일반적으로 Web Document Root 디렉토리에 WEB-INF 폴더 아래 web.xml 파일로 존재




1) Servlet : servlet-name과 servlet-class를 연결


2) servlet-name : DD안에서 사용될 이름


3) servlet-class : 자바 클래스 이름


4) url-pattern : 클라이언트가 요청하게 될 주소


5) servlet-mapping: servlet-name과 url-pattern 을 연결





[출처 및 참조]


https://scw0531.blog.me/

https://stackoverflow.com/questions/4478661/getter-and-setter

http://hunit.tistory.com/155

http://www.nextree.co.kr/p3878/

http://hellojs.egloos.com/v/656571

https://workshop.benzen.io/course/510

https://docs.oracle.com/javase/tutorial/collections/interfaces/index.html

https://www.slideshare.net/mhb8436/java-programming-pdf

https://www.slipp.net/wiki/pages/viewpage.action?pageId=12878219

https://tutorialedge.net/general/what-is-a-rest-api/

http://dexcore.tistory.com/380

반응형

'Etc > Study Note' 카테고리의 다른 글

TDD, 리팩토링, 클린코드(1주차)  (0) 2018.04.01
스프링 MVC 패턴  (0) 2018.01.06
[GIS] OpenLayers Simple Map 만들기  (0) 2017.12.16

댓글