Sio's Programming
(WEB,JAVA) 웹 개발자 필요 지식 정리 본문
웹 개발자 필요 지식 정리
1. 자바의 특징
- OOP객체 지향 언어) : 부품에 해당하는 객체들을 먼저 만들고, 이것들을 하나씩 조립해 전체 프로그램을 완성하는 개발 기법
- ‘가비지 컬렉션(Garbage Collection)에 의한 메모리 자동 관리
ð 가비지란 유효하지 않은 메모리 주소를 뜻함
ð 메모리가 부족할 때 정리해주는 프로그램
- ‘멀티 쓰레드’ 지원
ð 프로세스(Process) : 실행 중인 하나의 애플리케이션
ð 멀티 스레드(Multi thread) : 하나의 Process가 두 가지 이상의 작업을 처리할 수 있도록 하는 것.
- JVM(Java Virtual Machine)에 의한 동작으로 특정 OS에 종속적이지 않고 이식성이 좋으며 보안성이 좋음
ð 자바 가상 머신(영어: Java Virtual Machine, JVM)은 자바 바이트코드를 실행할 수 있는 주체이다
ð 물리적인 기계와 소통할 수 있도록 자바 프로세스를 실행시키는 가상머신
ð 플랫폼에 독립적, 스택기반의 가상머신, 가비지 컬렉션
2. 자바를 만드신 분
- ‘제임스 고슬링’
3. 변수란?
- 하나의 값을 저장할 수 있는 메모리 공간
4. 객체와 클래스의 차이점?
- 클래스(Class) : 현실 세계의 객체의 속성과 동작을 추려내 필드와 메서드로 정의한 것으로 "아직 메모리가 할당되지 않은 상태"
- 객체(Object) : 이 Class라는 설계도를 기반으로 실제 메모리가 잡힌 것을 의미하며 이런 객체를 조합해 전체 프로그램을 완성해 나가는 방식을 OOP(객체지향 프로그래밍)이라고 한다.
5. 스프링이란?
- 자바언어를 기반으로 다양한 애플리케이션을 개발하기 위한 경량급 프레임워크.
6. 프레임워크란?
- 소프트웨어 제작을 편리하게 할 수 있도록 미리 뼈대를 이루는 클래스와 인터페이스를 제작하여 이것을 모아둔 것.
ð 프레임워크를 사용하면 개발 생산성이 증가하며 품질이 향상되고 유지보수가 편리하다는 장점이 있음.
ð 익숙해지는데 시간이 오래걸리며 유연성이 부족함
7. JDK(Java Development Kit)란?
- 자바 프로그램 개발 도구로써 개발을 위한 클래스, 컴파일러, 실행 및 배포 도구를 포함하여 개발을 위한 전반적인 환경을 제공하는 것
8. OOP(Obejct-Oriented Programming)란?
- 객체 지향 프로그래밍
ð 클래스라는 개념을 도입함으로써 코드의 재사용 가능
- 캡슐화, 상속 다형성
9. MVC (Model, View, Controller) 패턴이란?
- 애플리케이션은 크게 Model, View, Controller의 세가지 영역으로 구분하여 영역 간의 결합도를 최소화한 논리적인 패턴입니다. 가장 큰 특징이며 장점은 비즈니스 로직과 프레젠테이션 로직이 분리 된다는 것입니다. 그로 인해 디자이너와 개발자의 영역이 분리 됨 으로써 작업의 분업화를 할 수 있습니다. 또한 유지보수에도 용이합니다.
10. DAO(Data Access Object)
- 데이터 접근을 목적으로 하는 객체
11. 오버라이딩이란?
- 부모 클래스에게 상속 받은 것들을 다시 자신의 클래스에서 새로이 재정의 하는 것을 말함.
- 재정의 한 것은 자신의 클래스 내부에서만 영향 끼침
- 부모클래스에게 영향을 끼치지 않음
- 부모 클래스의 모든 것을 상속받음
12. 오버로딩이란?
- 상속이 아닌 하나의 클래스 내에서 이름이 같은 여러 개의 메소드를 정의하는 것
13. 상속이란?
- 기존 클래스의 기능을 유지하면서 추가적인 기능을 추가하여 클래스를 만들고 싶을 때 사용하는 방법.
- 새로운 클래스를 생성할 때 클래스를 지정함으로써 상위클래스의 모든 기능, 속성을 제공받고, 자신의 클래스에는 부가적인 기능, 속성을 추가할 수 있음.
- 코드의 간결화, 재사용성이 용이함
14. 자바의 데이터 타입
- 기본형(Primitive Type) – 실제 값을 저장하는 공간, 종류는 8가지
- 참조형(Reference Type) – 기본형 이외의 모든 타입, 실제 값이 저장된 곳의 주소를 저장
15. 다형성
- 하나의 클래스나 함수가 다양한 방식으로 동작이 가능한 것
- 하나의 메시지가 전달되었을 때 수신자가 누구냐에 따라 각각 다른 기능 수행
16. 쓰레드란(Thread)?
- 자바 프로그램을 구성하는 명령문을 순서대로 하나씩 처리하는 기본 실행 흐름
- 둘 이상의 흐름을 가지려면 멀티 쓰레드 프로그램 사용
17. 멀티쓰레드(Multi Thread)?
- 하나의 프로그램에서 둘 이상의 작업이 필요할 때 사용
- 자원을 효율적으로 사용
- 작업이 분리되어 코드가 간결함
18. 쓰레드 생성방법이 무엇인가요
- 쓰레드 클래스를 상속받거나 인터페이스를 구현 받는 방법
- 구현한 클래스 내부에서 인스턴스 생성 즉시 쓰레드를 생성시키는 방법
19. 추상클래스란?
- 하나 이상의 추상 메소드를 포함한 클래스
- 객체를 생성할 수 없으며, 멤버변수, 일반 메소드, 상수 등도 가질 수 있음
20. 인터페이스(Interface)란?
- 클래스가 상속을 통해 구현하기에 한계가 있는경우, 자바에서 불가능한 다중 상속을 흉내내기 위한 도구로써 사용
- 추상클래스보다 추상정도가 높음, 추상메소드와 상수만을 가질 수 있음
- Implements를 통해 구현
21. AOP(Aspect Oriented Programming)란?
- 다양한 곳에서 자주 사용되는 공통관심 요소를 단일 기능으로 뽑아내서 코드의 중복을 줄이고 관리의 효율성을 높이기 위해 사용
22. Spring DI(Dependency Injection)란?
- 의존성 주입을 뜻함
- 설정 파일을 통해 객체간의 의존관계를 설정함으로써 객체는 의존하고 있는 객체를 생성
- 코드관리가 편리함
23. Main 메소드가 Static인 이유
- Static은 메모리 선언을 사용하지 않아도 사용이 가능
- main메소드는 JVM에 의해 호출되는 것이므로 반드시 static으로 선언되어 미리 올라가 있어야 함. 만일 메모리에 존재하지 않다면 시작점인 main 메소드를 호출하려고 할 때 메모리에 존재하지 않기 때문에 실행되지 않음.
24. 캡슐화?
- 관련된 데이터와 메소드를 하나의 단위로 묶는 원리
- 캡슐내부와 외부를 구별.
- 클래스의 필드 값에 권한 설정 가능, 또한 사용자의 데이터가 클래스에 어떻게 저장되는지 알 수 없음.
- 클래스의 결합도가 낮아져 재사용이 용이함
25. 직렬화
- 메모리에 있는 객체를 보조기억장치에 저장할 수 있도록 바이트 형태로 변환하는 것
- 객체가 생성되어 데이터가 적재되는 메모리는 순간적이기 때문에 영구적으로 보관하기 위해 직렬화 사용
26. 객체(Object)란?
- Object(객체)는 OOP에서 데이터(변수)와 그 데이터에 관련되는 동작(함수). 즉 절차, 방법, 기능을 모두 포함한 개념
- 예)기차역에서 승차권을 발매하는 경우, 실체인 '손님'과 동작인 '승차권 주문'은 하나의 객체이며, 실체인 '역무원'과
- 동작인 '승차권 발매'도 하나의 객체이다.
- 같은 성질, 같은 구조와 형태를 가지는 객체는 등급으로 정의하고 등급에 속하는 객체는 그 등급의 인스턴스라고 한다.
27. Servlet
- Container가 이해할 수 있게 구성된 순수 자바 코드로만 이루어진 것(HTML in JAVA)
28. JSP(Java Server Page)
- HTML 기반에 JAVA 코드를 블록화하여 삽입한 것 (Java in HTML)
29. JDBC(Java Data Base Connection)
- JAVA언어를 통해 데이터베이스에 접근할 수 있는 프로그래밍을 의미
30. GET방식
- 클라이언트에서 서버로 데이터를 전달할 때, 주소 뒤에 "이름"과 "값"이 결합된 스트링 형태로 전달
- 주소창에 쿼리 스트링이 그대로 보여지기 때문에 보안성이 떨어진다.
- 길이에 제한이 있다(=전송 데이터의 한계가 있다.)
-
Post방식보다 상대적으로 전송 속도가 빠르다.
31. POST 방식
- 일정 크기 이상의 데이터를 보내야 할 때 사용
- 서버로 보내기 전에 인코딩하고, 전송 후 서버에서는 다시 디코딩 작업 시행
- 주소창에 전송하는 데이터의 정보가 노출되지 않아 GET방식에 비해 보안성이 높음
- 속도가 GET방식에 비해 느리다.
- 쿼리스트링(문자열) 데이터 뿐만 아니라, 객체들의 값도 전송이 가능
32. GET, POST 차이점
- Get은 주로 웹 브라우저가 웹 서버에 데이터를 요청할 때 사용
- Post는 웹 브라우저가 웹 서버에 데이터를 전달하기 위해 사용.
- Get을 사용하면 웹 브라우저에서 웹 서버로 전달되는 데이터가 인코딩되어 URL에 붙는다.
- Post방식은 전달되는 데이터가 보이지 않는다.
- Get방식은 전달되는 데이터가 255개의 문자를 초과하면 문제가 발생할 수 있다.
- 웹서버에 많은 데이터를 전달하기 위해서는 Post 방식을 사용하는 것이 바람직하다.
33. Session과 Cookie
- 현재 우리가 인터넷에서 사용하고 있는 HTTP프로토콜은 연결 지향적인 성격을 버렸기 때문에 새로운 페이지를 요청할 때마다 새로운 접속이 이루어지며 이전 페이지와 현재 페이지 간의 관계가 지속되지 않는다. 이에 따라 HTTP프로토콜을 이용하게 되는 웹사이트에서는 웹페이지에 특정 방문자가 머무르고 있는 동안에 그 방문자의 상태를 지속시키기 위해 쿠키와 세션을 이용한다.
34. Session
- 특정 웹 사이트에서 사용자가 머무르는 기간 또는 한 명의 사용자의 한 번의 방문을 의미
- Session에 관련된 데이터는 Server에 저장됨
- 웹 브라우저의 캐시에 저장되어 브라우저가 닫히거나 서버에서 삭제 시 사라짐
- Cookie에 비해 보안성이 좋음
35. Cookie
- 사용자 정보를 유지할 수 없다는 HTTP의 한계를 극복할 수 있는 방법
- 인터넷 웹 사이트의 방문 기록을 남겨 사용자와 웹 사이트 사이를 매개해 주는 정보이다.
- Cookie는 인터넷 사용자가 특정 웹서버에 접속할 때, 생성되는 개인 아이디와 비밀번호, 방문한 사이트의 정보를 담은 임시 파일로써,
- Server가 아닌 Client에 텍스트 파일로 저장되어 다음에 해당 웹서버를 찾을 경우 웹서버에서는 그가 누구인지 어떤 정보를 주로 찾았는지 등을 파악할 때 사용된다.
- Cookie는 Client PC에 저장되는 정보기 때문에, 다른 사용자에 의해서 임의로 변경이 가능하다.(정보 유출 가능, Session보다 보안성이 낮은 이유)
ð Q. 보안성이 낮은 Cookie 대신 Session을 사용하면 되는데 안하는 이유?
ð A. 모든 정보를 Session에 저장하면 Server의 메모리를 과도하게 사용하게 되어 Server에 무리가 감
36. Call by Value(값에 의한 참조)
- 인수로 기본 데이터형을 사용
- 주어진 값을 복사하여 처리하는 방식
- 메소드 내의 처리 결과는 메소드 밖의 변수에 영향을 미치지 않음
37. Call by Reference(주소에 의한 참조)
- 매개 변수의 원래 주소에 값을 저장하는 방식
-
클래스 객체를 인수로 전달
38. Wrapper Class
- Primitive type으로 표현할 수 있는 간단한 데이터를 객체로 만들어야 할 경우가 있는데 그러한 기능을 지원하는 클래스
39. 접근제한자(public > protected > default > private)
- public - 접근 제한이 없다.(같은 프로젝트 내에 어디서든 사용가능)
- protected - 같은 패키지 내, 다른 패키지에서 상속받아 자손클래스에서 접근 가능
- default - 같은 패키지 내에서만 접근 가능
- private - 같은 클래스 내에서만 접근 가능
40. Framework
- 특정 형태의 소프트웨어 문제를 해결하기 위해 상호 협력하는 클래스프레임과 인터페이스 프레임의 집합
- 특정한 틀을 만들어놓고 거기에 살을 붙여 놓음으로써 프로그램을 만들어 작업시간을 줄여주는 것이다.
- 프레임워크는 특정 개념들의 추상화를 제공하는 여러 클래스나 컴포넌트로 구성된다.
- 프레임워크는 이렇게 추상적인 개념들이 문제를 해결하기 위해 같이 작업하는 방법을 정의한다.
- 프레임워크 컴포넌트 들은 재사용이 가능하다.
- 프레임워크는 좀 더 높은 수준에서 패턴을 조작한다.
- 프레임워크가 중요한 이유는 객체지향 개발을 하게 되면서 개발자의 취향에 따라 다양한 프로그램이 나오게 되었다.
- 프로그램 개발에 투입되는 개발자도 점점 늘어남에 따라 전체 시스템의 통합성, 일관성이 부족하게 되었기 때문이다.
- 개발자의 자유를 제한하기 위해 프레임워크를 도입했다.
41. 프레임워크가 가져야할 특징
- 개발자들이 따라야할 가이드라인을 가짐
- 개발할 수 있는 범위가 정해져 있음
- 개발자를 위한 다양한 도구들 지원
42. 프레임워크의 장단점
- 장점 : 개발 시간을 줄일 수 있고 오류로부터 자유로워 짐
- 단점 : 프레임워크에 너무 의존하면 개발 능력이 떨어짐
43. Thread와 Process차이
- 여러 분야에서 '과정' 또는 '처리'라는 뜻으로 사용되는 용어로 컴퓨터 분야에서는 '실행중인 프 로그램'이라는 뜻으로 쓰인다. 이러한 프로세스 내에서 실행되는 각각의 일을 스레드라고 한다. 프로세스 내에서 실행되는 세부 작업 단위로 여러 개의 스레드가 하나의 프로세스를 이루게 되는 것이다.
44. Spring framework(스프링 프레임워크)
- java 플랫폼을 위한 오픈 소스 애플리케이션 프레임워크.
- 자바 엔터프라이즈 개발을 편하게 해주는 오픈 소스 경량급 애플리케이션 프레임워크이다.
- 자바 개발을 위한 프레임워크로 종속 객체를 생성해주고 조립해주는 도구
- 자바로 된 프레임워크로 자바SE로된 자바 객체(POJO)를 자바EE에 의존적이지 않게 연결해주는 역할
45. Spring framework의 간단한 특징
- 크기와 부하의 측면에서 경량이다.
- 제어의 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
- 관점지향 프로그래밍(AOP)을 위한 풍부한 지원 (AOP : 객체지향프로그래밍을 더 객체 지향답게 만들어줌)
- 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 할 수 있다.
- 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있다.
- 크기와 부하의 측면에서 경량이다.
- 제어의 역행(IoC)이라는 기술을 통해 애플리케이션의 느슨한 결합을 도모한다.
- 관점지향 프로그래밍(AOP)을 위한 풍부한 지원 (AOP : 객체지향프로그래밍을 더 객체 지향답게 만들어줌)
- 애플리케이션 객체의 생명 주기와 설정을 포함하고 관리한다는 점에서 일종의 컨테이너라고 할 수 있다.
- 간단한 컴포넌트로 복잡한 애플리케이션을 구성하고 설정할 수 있다.
46. Spring framework의 자세한 특징
- 경량 컨테이너로서 자바 객체를 직접 관리
- 각각의 객체 생성, 소멸과 같은 라이프 사이클을 관리하며 스프링으로부터 필요한 객체를 얻 어올 수 있다.
- 스프링은 POJO(Plain Old Java Object) 방식의 프레임워크
ð 일반적인 J2EE 프레임워크에 비해 구현을 위해 특정한 인터페이스를 구현하거나 상속을 받을 필요가 없어 기존에 존재하는 라이브러리 등을 지원하기에 용이하고 객체가 가볍다.
- 스프링은 제어의 역행(IoC : Inversion Of Control)을 지원
ð 컨트롤의 제어권이 사용자가 아니라 프레임워크에 있어서 필요에 따라 스프링에서 사용자의 코드를 호출한다.
- 스프링은 의존성 주입(DI : Dependency Injection)을 지원
ð 각각의 계층이나 서비스들 간에 의존성이 존재할 경우 프레임 워크가 서로 연결시켜준다.
- 스프링은 관점 지향 프로그래밍(AOP : Aspect Object Programming)을 지원
ð 트랜잭션이나 로깅, 보안과 같이 여러 모듈에서 공통적으로 사용하는 기능의 경우 해당 기능 을 분리하여 관리할 수 있다.
- 스프링은 영속성와 관련된 다양한 서비스를 지원
ð MyBatis, hibernate 등 이미 완성도가 높은 데이터 베이스 처리 라이브러리와 연결할 수 있는 인터페이스를 제공한다.
- 스프링은 확장성이 높다.
ð 스프링에서 지원되고 있는 라이브러리를 별도로 분리할 수 있다.
47. 소켓 통신(TCP/UDP)
- TCP(Transmission Control Protocol)
ð 연결형 서비스 제공
ð 높은 신뢰성 보장
ð 데이터 흐름 제어, 혼잡 제어
ð 전이중, 점대점 서비스(양방향 송수신 서비스)
- UDP(User Datagram Protocol)
ð 비연결형 서비스 제공, 신뢰성이 낮다
ð 데이터의 전송 순서가 바뀔 수 있다
ð CP보다 전송속도가 빠르다.
48. Stack
- LIFO(Last In First Out)의 후입선출 구조
- push()를 이용한 데이터 입력, pop()을 이용한 데이터 출력
ð ex) 역순 문자열 만들기
49. QUEUE
- FIFO(Fist In First Out)의 선입선출 구조
- enQueue()를 이용한 데이터 입력, deQueue()을 이용한 데이터 출력
ð ex) 우선순위가 같은 작업 예약
'유용한 정보 > 개발에 도움되는 것' 카테고리의 다른 글
| 컴파일러와 인터프리터 차이 (0) | 2018.05.17 |
|---|---|
| 초보 웹개발자를 위하여 (0) | 2018.05.02 |