접근 제한자 (public, protected, private)
클래스, 필드, 생성자, 메소드에 접근제한자를 사용하여 접근할 수 있는 범위를 정할 수 있다.
- public은 외부 클래스에서 자유롭게 접근, 사용 할 수 있다.
- protected는 같은 패지키내 클래스나 자식클래스에서만 사용 할 수 있다.
- default는 접근제한자를 적용하지 않았을때 말그대로 default로 적용되는 제한자이다. 사용은 같은 패키지내에 있는 클래스에서만 사용 할 수 있다.
- private는 외부클래스에서 접근할 수 가없고 클래스 내부에서만 사용할 수 있다.
Spring의 장점 / Spring 이란?
프레임워크의 일종으로 정해진 규격으로 개발이나 프로젝트를 하게 되면
협업에 있어서 편리함을 가질수 있어 프레임워크를 이용합니다.
Spring프레임워크의 장점은 IOC라는 제어의 역행이라는 특징을 이용하여
자바 코드로 직접 객체간의 결합을 코딩하는 것이 아니라 컨테이너로 처리하여( ->DI)
결합도를 낮춰 편리함을 제공합니다. 또한, AOP를 통해서 중요한 부분과
덜 중요한 부분으로 나눠 관리할수 있는 장점이 있습니다.
(Pyhotn에서는 Injector, similar to Guice and Spring, adds the concept of a dependency 입니다. 즉, Injector가 spring과 비슷한 장점을 해주는 역할을 하고 외부주입을 가능하게 한다.)
의존성이란 ?
하나의 객체가 다른객체 없이 제대로 된 역할을 할수 없는 것을 의미하고
스프링에서 의존성 주입의 기능이 나오며 객체와 객체를 분리하여 관리하고 ApplicationContext가 관리하는 객체를 bean이라고 부릅니다.
인터페이스
인터페이스는 추상 메소드의 모임이고 ,
인터페이스를 사용하는 클래스는 인터페이스의 추상메소드를 이용해야한다.
자바의 다형성을 이용하는 방법중에 하나 입니다.
- 추상 클래스는 추상메소드가 하나이상 이고, 전체 메소드가 추상메소드가 아니여도 된다. 추상클래스는 다중상속 불가능
객체지향
객체를 기준으로 코딩하는 방식으로 가장 큰 장점으로는
재활용성, 다향성 이 있다.
재활용성 : 하나의 객체가 여러개의 인스턴스화 될수 있는 경우
다향성 : 하나의 이름에 대해 여러 객체가 다른행위를 하는것
-오버라이딩/오버로딩
웹서버 / 웹어플리케이션 서버(WAS)
웹서버는 정적인 데이터를 처리하는 서버로 단순 이미지 HTML을 처리하는 서버
웹 어플리케이션 서버는 동적인 데이터를 처리하는 서버로 DB연동 데이터 조작 등 과 같은 처리를 WAS를 통해서 한다 .
[대용량 처리에 대한 생각]
면접 — 한이음 약속장소정하기 어플리케이션 사용시 사용자가 많아질때 해결했던 방법
Firebase 사용 시
처음에는 대규모데이터에 대해서 생각하지 않고 진행하였으나 중간에 회의를 통해서 대규모 데이터에 대한 속도처리에 대해서
의논하게 되었고, 속도 처리는 주로 쿼리문을 통해서 해결해야한다고 생각하였습니다. Firebase에서
쿼리 색인 생성을 통해 데이터 처리 효율을 조금이라도 개선하였고, orderbyChild라는 리스너 코딩 대신에 orderBykey를 사용하여 퀴리 정렬을
통해서 리스너 효율을 개선하여 대용량 데이터에 대한 문제를 개선해 나갔습니다.
-쿼리 색인 생성
데이터색인 사용 — .indexon / orderbyValue
https://firebase.google.com/docs/database/security/indexing-data?hl=ko
-리스너 효율 개선
처음에는 db에서 리스너 코딩을 할때
orderbyChild()를 사용했으나 진행해 나가면서 대규모 데이터 set를 처리할때 속도가 매우 느려질수 있다는것을 알게 되었고,
orderByKey()를 사용하여 쿼리를 정렬를 통해서 이러한 문제점을 해결하였습니다.
-AI 머신러닝 을 이용한 데이터 처리
https://d2.naver.com/news/3435170
Maria DB
-Mysql 에서 떨어져 나온 RDBMS가 마리아 디비이다.
Relation database 로 관계형 데이터 베이스를 생성하고 수정하고 관리할 수 있는 소프트웨어 이다.
마리아 디비는 mysql의 쿼리와 거의 동일하게 사용된다.
<JVM 란>
c c++과 다르게 기본적으로 자바프로그램들은 JVM위에서 동작한다.
JAVA Virtual Machine 의 약자로 JVM 역할은 자바 애플리케이션을 클래스 로더를 통해 읽어 들여
자바 API와 함께 실행하는 것이다.
그리고 JVM은 JAVA와 OS사이에서 중개자 역할을 수행하여 운영체제에 독립적인 플랫폼을 갖게 해준다.
또한 JVM은 프로그램의 메모리 관리를 알아서 해준다.
C프로그램 같은 경우 에는 직접 메모리할당을 해주고 해지해줘야한다.
하지만 JAVA에서는 JVM이 자동으로 Memory 관리를 해주는 장점이 있다.
<ORM>
객체 관계 매핑
Java에서 사용하는 대표적인 ORM으로는 MyBatis와 Hiberante가 있다. MyBatis는
Java 코드와 직접 작성한 SQL 코드를 Mapping 시켜주는 반면
Hibernate는 SQL을 직접 작성하지 않고 표준 인터페이스 기반으로 처리한다는 점에서 다르다.
Google Trend 조사에 따르면 전 세계적으로 MyBatis보다 Hibernate를 많이 사용하는 추세이다.
하지만 우리나라에서는 아직까지도 MyBatis를 사용하는 곳이 상당히 많다.
백엔드의 트랜드에 대한 생각
백엔드 개발 프레임워크의 트렌드는 어떤가요?
제가 주로 관심을 가지는 JVM 생태계에서는 계속 Spring/Netty 기반의 프레임워크들이 꾸준한 발전을 하고 있다고 느껴집니다.
제 주변에 있는 여러 개발팀에서는 고부하 처리를 위한 서버에는 Netty를 바탕으로 UI개발과 직접 호출되는 API 서버나 HTML까지
그리는 서버 개발에는 Spring 계열이 많이 쓰이고 있습니다.
JPA
JPA는 Java Persistence API의 약자로, 자바 어플리케이션에서 관계형 데이터베이스를 사용하는 방식을 정의한 인터페이스이다.
아파치와 톰캣의 차이점
=> 웹서버와 웹애플리케이션의 차이
WAS(톰캣)만 쓰지 않고 아파치를 쓰는 이유는? 목적이 다르다. (웹 컨테이너의 유무)
웹서버는 정적인 데이터를 처리하는 서버. 이미지나 단순 HTML을 처리하는 서버라면 웹 서버가 적당하며 빠르고 안정적이다.
WAS는 동적인 데이터를 처리하는 서버. DB연결, 데이터 조작등과 같은 처리는 WAS를 활용해야 한다.
아파치(80 포트) , 톰캣(8080 포트)백엔드 개발자는 사용자에게는 보이지 않는 개발영역으로 프론트 개발자가 보내준 데이터를 저장하거나 요청한 데이터를 전달하는 역할을 하며 내부적으로 필요한 로직을 개발하는 업무
커넥션풀(DBCP) 사용 이유
JDBC를 통하여 DB에 연결하기 위해서는 드라이브(driver)를 로드하고 커넥션(connection)객체를 받아와야한다.
JDBC를 사용하면 사용자가 요청을 할 때마다 매번 드라이버를 로드하고 커넥션 객체를 생성하여 연결하고 종료하기 때문에 매우 비효율적이다.
이런 문제를 해결하기 위해서는 커넥션풀(DBCP)를 사용해야한다.
출처: https://precioustar.tistory.com/24 [preciouStar]
ajax
Ajax의 장점
1. 웹페이지의 속도향상 -> 페이지의 필요한 부분만 리로딩하여 값을 얻는다.
Ajax 의 단점
1. 히스토리 관리가 안 된다. (보안에 좀 더 신경을 써야한다.)
2. 연속으로 데이터를 요청하면 서버 부하가 증가할 수 있다.
3. 실시간 서비스를 만들수 없다.
get/post
get -> url / post ->? ?
http에 담아서 전송이 되는데 get 은 header 에 넣어서 전송되는거
post는 body에 넣어서 전송되는 방식
. GET방식의 경우 데이터를 단순히 읽어 오는 경우에 쓰이며
POST방식의 경우 데이터를 생성,수정,삭제 하는 경우
(위에서 언급한 PUT,DELETE의 역할까지). 즉 , 데이터를 변경하는 경우에 사용되는 방식입니다.
단순히 데이터를 읽어 들이는 경우에 GET방식이 아닌 POST방식이 쓰일 때 가 있습니다.
그 예로 로그인의 경우 사용자의 아이디와 패스워드만 서버에 전송하여 데이터를 읽어
들이면 되지만 사용자의 개인정보가 URL에 노출이 되므로 POST방식을 사용합니다.
FTP
서버에 인터넷이 연결이 대부분 안되어있기 떄문에 FTP를 이용해서 파일을 서버에 전송하는방식
예로는 Filezila 로 사용 — 해본경험 : 스파르타 동아리에서 나만의가계부 사이트 구현시 Filezila 사용
SSH
secure shell 의 약자로
원격지에 있는 컴퓨터를 안전하게 제어하기 위한 프로토콜
클라이언트 ssh와 서버 ssh를 연결하여 제어
ssh로 원격 접속 예시
-putty -> 무료로 가능한 ssh 클라이언트 프로그램
→ 풋살 인원 모집 사이트 프로젝트시 사용
-git-bash ->스파르타 동아리에서 사용해봄
-hedisql -> 데이터베이스시 유용하게 사용
클라우드
데이터를 중앙 컴퓨터에 저장하여 언제 어디서든 사용할수 있도록 하는것
클라우드 관련 이슈
-> 클라우드 게임이라고 해서 게임자체를 서버에 올려 사용자가 사용하는 단말기의 사양에는 지장이 거의 없이 게임을 사용가능하게 하는것이 있다.
인덱스
데이터에 대한 색인으로 검색속도를 향상시키기 위해서 사용한다.
프레임워크/라이브러리
프레임워크는 소프트웨어를 만들때 뼈대가 되는 부분으로 큰틀을 제공하여 그 클에 맞춰 코딩하는 것이라면
라이브러리는 상용할수 있는 함수들의 모임으로 라이브러리를 호출하여 능동적으로 사용 가능
동기화 /비동기화
동기화 : 하나의 명령이 끝나야 다른 일 명령이 진행
비동기화 : 하나의 명령이 끝나지 않더라도 다른일을 진행
->동기화 방식으로는 크리티컬세션과 뮤텍스 방식이 있고
크리티컬세션 : 하나의 프로세스에서 Thread 내에서만 사용이 가능하다.
뮤텍스 : 프로세스간 사용이 가능하고 , Thread내에서도 가능하다.
프로세스/쓰레드
하나의 프로그램이 실행되고 있을때 그 실행되고 있는 흐름을 프로세스라 하며 프로세스에서 일하는 요소를 스레드라 한다.
큐/스택
스택 : LIFO 나중에 들어온 값이 먼저 나가는 방식으로 인터넷에서 뒤로가기 기능이 스택원리 이다.
큐 : FIFO 방식으로 우선순위 방식의 원리 이며 콜센터대기시간, 프린터 인쇄 대기 등에서 활용된다
MVC 모델
Model view controller 를 통틀어 MVC라 불리며
model은 DB와 접근하는 계층 , VIEW는 JSP HTML들이 존재
CONTROLLER는 기능에 대한 구현 담당
jdk/jre
jdk : 컴파일용
jre : 실행용
<index 처리에 대한 생각 및 장단점 >
https://myjamong.tistory.com/184
100만개의 데이터가 들어있는 테이블이라면 FULL SCAN보다는 INDEX SCAN이 유리하겠지만,
1개의 데이터가 들어있는 테이블은 굳이 INDEX SCAN 없이 FULL SCAN이 빠를 것 입니다.
오라클 서버에서는 FULL SCAN을 할지 INDEX SCAN을 할지 여러 변수로 비교하여 성능이
더 좋다고 판단되는 방법으로 SCAN 작업을 합니다. 그럼 어차피 오라클 서버가 판단해주니까
모든 컬럼에 INDEX를 만들어주는게 유리한거 아닌가요?
모든 컬럼에 INDEX를 추가해줘서 빠른 검색이 가능하면 좋겠지만… INDEX를 만들어주는데는 저장공간이 필요합니다.
그러므로 속도 향상에 비해 단점들의 COST를 비교해서 사용할지 말지를 정해야합니다.
INDEX는 SELECT 구문에서는 확실히 좋고 빠릅니다. 하지만 INSERT, UPDATE, DELETE 작업을 할때는
INDEX에 대한 수정도 필요합니다. INDEX가 없더라면 그냥 작업을 하면 되지만, INDEX가 있는 경우,
오름차순되어 있는 INDEX에 새로 변경된 데이터를 맞춰 다시 수정을 합니다데이터에서 index 처리 >
데이터베이스에서 pk를 index로 지정할경우 ROWID 값에 고유값이 들어가고 원하는
색인을 찾고 색인의 주소를 통해서 값을 얻어낸다.
데이터에서 뷰 >
1. 뷰는 사용자에게 접근이 허용된 자료만을 제한적으로 보여주기 위해 하나 이상의 기본
테이블로부터 유도된, 이름을 가지는 가상 테이블이다.
2. 뷰는 저장장치 내에 물리적으로 존재하지 않지만 사용자에게 있는 것처럼 간주된다.
즉, select 문안에 또하나의 select문을 사용하는 경우 또하나의 select문이 view 역할을 한다.
(인라인 뷰 처리 )페이징 처리에 대한 생각>
한페이지당 원하는 ROWNUM개수에 대한 쿼리를 VIEW 처리 한뒤
VIEW를 이용하여 각 페이지마다 개수를 지정해서 쿼리 사용
ajax >
Ajax는 “전체 페이지를 새로 고치지 않고도 페이지의 일부만을 위한 데이터를 로드하는 기법”
이라고 할 수 있다.
‘비동기적’이라는 것은,
클라이언트에서 서버에 요청을 보낼 때 요청을 보내놓고 프로그램은 계속 돌아간다는 의미이다.
즉, 먼저 요청한 것에 대한 콜백1 함수가 먼저 실행되지 않는다는 것이다.
댓글 달기 기능과 같이 댓글에 대한 정보를 요청해 놓고 그 결과값을 기다리는 것이 아니라
다른 화면에 대한 동작은 계속 이루워 진다 .
sql 쿼리 작성시 어려웠던점 >
쿼리를 작성할때 if조건이나 해당 값이 존재하거나 존재하지 않을때
나누는 것이 어려웠고 동적으로 sql문을 작성해야할때 어려움을 느꼈습니다.
예를 들어 검색의 키워드 부분을 선택하여 검색했을경우 값이 없는 경우도
고려해야하는 부분처럼 동적인 sql 문이 작성이 어려웠습니다.
하지만 최근 mybatis를 공부하며 mybatis에서 tirm이라는 태그를 이용해
동적인 sql을 다룬다고 배웠고 공부중에 있습니다.
쿠버네티스
컨테이너화된 애플리케이션을 자동으로 배포, 스케일링 및 관리해주는 오픈소스 시스템입니다.
깃 공부 >
git init 현재 디렉토리 저장소 만들어짐
원격 저장소란?(Remote Repository)
원격 저장소란 내 로컬PC 저장소가 아닌 네트워크상의 다른 위치에 존재하는 Git 저장소를 말합니다.
PUSH : 여기서 원격 저장소에 데이터를 쓰는 것을 Push라고 한다.
PULL : 가져오는 것을 Pull 이라고 합니다.
CLONE: 원격 저장소를 내 로컬 PC의 Git 저장소로 복사(Clone)하기
*branch
-git branch : 현재 어떤 브랜치를 사용하고 있는지 확인
-git barcn exp : exp브랜치 생성
-git checkout exp : exp 브랜치로 넘어감 ->이때 master의 상태를 그대로 가져와서 브랜치를 만든다.
-git branch -d exp : branch 삭제
php>
데이터 베이스 연동 mysqli / PAO_MySQL / mysql
-> mysql 방식은 더이상 사용하지 않고 PAO_MySQL을 이용시 데이터베이스가 바뀌더라도 PHP 코드 를 변경하지 않아도
되는 장점이 있음 mysqli를 일반적으로 mysql데이터베이스와 연동할떄 사용
https://www.php.net/manual/en/mysqli.quickstart.dual-interface.php 에서 참고
<?php
$mysqli = mysqli_connect(“example.com”, “user”, “password”, “database”);
$res = mysqli_query($mysqli, “SELECT ‘Please, do not use ‘ AS _msg FROM DUAL”);
$row = mysqli_fetch_assoc($res);
echo $row[‘_msg’];$mysql = mysql_connect(“example.com”, “user”, “password”);
mysql_select_db(“test”);
$res = mysql_query(“SELECT ‘the mysql extension for new developments.’ AS _msg FROM DUAL”, $mysql);
$row = mysql_fetch_assoc($res);
echo $row[‘_msg’];
?>
mysqli_connect();
- > 사용 방법 : mysqli_connect(“localhost(ip주소)”, “mysql 접속 아이디”, “mysql접속pwd”,”데이터베이스 이름” )예시 $mysqli = mysqli_connect(“localhost”,”root”,”123",”dfdf”);
mysqli_query();
-> 사용 방법 : mysqli_query(“mysqli_connet의 결과”,”쿼리”) /mysqli_query($mysqli, “Insert into ~~~”);에러 확인
echo mysqli_error($sql); -> 화면에 어떤에러인지 확인 시켜줌$conn= msqli_connect(‘localhost’,’root’,’1111',’테이블명’);
$sql = “insert into topic (title, description) values ( ‘$_post[‘title’],’$_post[‘description’])”;
mysqli_query($conn,$sql);
->form태그를 통해서 얻은 값을 post 형식이면 _post라는 변수의[파라미터name값] 으로
값을 받아 sql 을 적용 시킨다 .
mysql >
데이터베이스 테이블 조회 -> desc databases;
데이터베이스 중에서 사용할 데이터 베이스 use 테이블 이름
그 후 그 테이블 사용
해당 데이터베이스에서 테이블 조회 — ?show tables;
use 테이블명 → 테이블의 속성값 확인
데이터 베이스 정규화
데이터베이스 정규화란 데이터의 중복을 줄이고 무결성을 향상
시키는 등 여러 목적을 달성하기 위해 관계형 데이터베이스를 정규화된 형태로 재디자인하는 것을 말한다.
즉 테이블을 여러개 나눠 설계
제1정규화 — 각 속성값은 하나만 존재해야한다.
제2정규화 — 제1정규형에 속하면서,기본키가 아닌 모든 속성이 기본키에 완전 함수 종속되면 제2정규형이다.
제3정규화 — X->Y, Y->Z 함수적 종속관계로 인해 X->Z 의 이행적 함수 종속 관계가 나타나면 [X, Y], [Y, Z] 두 릴레이션으로 분해한다.
->삽입/삭제/갱신(이행적 함수)이상
즉, 제3정규화 과정은 정리하면 3차 정규형은 기본키를 제외한 속성들 간의 이행적 함수 종속이 없는 것 입니다. 풀어서 말하자면, 기본키 이외의 다른 컬럼이 그외 다른 컬럼을 결정할 수 없도록 테이블을 설계하는 것입니다.
출처: https://3months.tistory.com/193 [Deep Play]
https://yaboong.github.io/database/2018/03/09/database-normalization-1/
스키마란 ->
데이터의 제약조건에 대한 전반적인 내용을 기술한 데이터 집합
데이터의 무결성은 데이터의 정확성, 일관성, 유효성이 유지되는 것을 말한다
자바 컬렉션 ?
- >데이터의 집합, 그룹을 의미하며
이러한 collection을 사용하는 이유는
다수의 DATA를 다루는데 표준화된 클래스를
제공해주고 배열과 다르게 공간을 미리
저장하지 않아도 되는 장점이 있다 .
객체수를 동적으로 정할수 있다.
List = > arrayList
map => hashmap /key value 의 구조
set => hashset / map의 key 대신 value가
들어가 value를 key로 하는 자료구조
가비지 콜렉터(Garbage Collector)란?
가비지 콜렉터를 알아보기 전에, 여기서 말하는 가비지가 무엇인지부터 알아보자. 가비지는 ‘정리되지 않은 메모리’, ‘유효하지 않은 메모리 주소’를 말한다. 다음 코드를 통해 살펴보자
String[] array = new String[2];
array[0] = '0';
array[1] = '1';
array = new String[] {'G', 'C' };
위 코드에서 String 배열이 할당되기 전에 할당한 0과 1은 어디로 갔을까? 이렇게 주소를 잃어버려서 사용할 수 없는 메모리가 ‘정리되지 않은 메모리’이다. 프로그래밍 언어에서는 Danling Object, 자바에서는 Garbage라고 부른다.
추가로 앞으로 사용하지 않고 메모리를 가지고 있는 객체 역시 Garbage에 포함된다.
가비지는 메모리가 부족할 때 이런 가비지들을 메모리에서 해제 시켜 다른 용도로 사용 할 수 있게 해주는 프로그램을 말한다.
C++와 같은 다른 언어에서는 사용하지 않을 객체의 메모리를 직접 해제해주어야 하지만 자바는 GC가 잡아주니 개발자 입장에서는 편리하다. 다만 모든 메모리 누수를 잡아주는 것은 아님으로 메모리 누수에 대한 경계를 늦추어서는 안된다.
REST
REPRESENTATIONAL STATE TRANSFER의 약자로
하나의 고유한 자원을 대표하도록 설계된다는 개념
즉 자원을 원하는 형태로 서버에 전송한다.
형상관리
형상관리는 소스의 변화를 끊임없이 관리하는 것을 말한다.
git 과 SVN
SVN은 commit을 하는순간 중앙 저장소에 해당 기능을 공개하게 되고
개발자가 자신만의 version history를 가질수 없기 때문에 버전 관리가 되진 않 는다. 그러므로 commit한 내용에 실수가 있을시 다른 개발자에게 바로 영 향 을 미치는 단점이 있다.
-반면 GIT은 개발자가 자신만의 commit history를 가질수 있고,
개발자와 서버의 저장소는 독립적으로 관리가 가능하다.
commit한 내용에 실수가 있더라도 바로 서버에 영향을 주지 않는다.
결론 : git 이 SVN 보다 유연성이 강해 관리가 편하다 .
Collection
여러개의 객체를 하나의 유닛으로 다루기 위한 최상위 인터페이스
-LIST
객체들이 들어온 순서대로 참조를 관리
IDNXE를 통해서 각각의 객체에 접근하게됩니다.-SET
데이터 자체가 키로 사용되며 값은 저장되지 않는 Map과의 차이가 있다
동일한 자료형을 모아 놓은 자료형 구조 set은 또한 중복을 허용하지 않는다.-Map
키와 값을 대응시키기 위해서 사용 주어진 키에 대응하는
값을 빠르게 찾기 위한 탐색 측면에서 유용하다.
쿠키와 세션
- 쿠키
웹사이트에 접속할 때 생성되는 정보를 담는 임시 파일로 클라이언트의 컴퓨터에 저장된다. 사용자의 정보를 유지시켜 접속 시 바로 로그인이 가능하게 해주는 등..
서버에 저장이 안되어 서버에 부담을 덜어준다.
- 세션
브라우저를 종료하기 전까지 유지되는 파라미터로 만료시간을 설정할 수 있다. 정보가 저장되지 않고 유지되는 것이기 때문에 쿠키보다 보안면에서 뛰어나다고 할 수 있다.
또한, 브라우저마다 가지고 있는 값으로 보통 로그인 정보를 담는다.
DAO/DTO
DAO : DB를 사용하여 데이터에 대한 조작기능을 맡는 오브젝트
DTO : 순수한 데이터의 객체로 getter/setter 메소드를 가지고 있다.
(자바빈즈)
API
프로그램과 다른프로그램을 연결해주는 다리 역할이라 생각합니다.
API는 필요로하는 기능을 해당 서비스가 쓸수 있게 하는 것이 목적이며
어떠한 방식으로 정보를 요청하고 받을것인지에 대한 규격을 말한다고 생각
IT Infrastructure
IT 인프라란 애플리케이션을 가동시키기 위해 필요한 하드웨어나 OS, 미들웨어, 네트워크 등 시스템의 기반을 말합니다.
인프라 구성 요소
인프라를 이루는 구성 요소들은 다음과 같습니다.
- 하드웨어(Hardware, HW): 서버 장비 본체나 데이터를 저장하기 위한 스토리지, 전원 장치 등입니다. 넓은 의미에서는 이런 하드웨어를 설치하는 데이터 센터의 설비(건물, 공조, 보안 설비, 소화 설비 등)도 포함됩니다.
- 네트워크(Network) : 사용자가 원격으로 접근할 수 있도록 서버를 연결하는 도구들입니다. 라우터, 스위치, 방화벽 등 네트워크 장비와 이를 연결하는 케이블 배선 등이 있습니다. 사용자가 단말에서 무선으로 연결할 때 필요한 액세스 포인트(Access Point, AP)도 있습니다.
- 운영체제(Operating System, OS) : 하드웨어와 네트워크 장비를 제어하기 위한 기본적인 소프트웨어입니다. 리소스나 프로세스를 관리합니다.
- 클라이언트 OS : 사용자가 사용하기 쉽도록 하는데 초점을 맞추고 있습니다(Windows, macOS 등).
- 서버 OS : 시스템을 빠르고 안정적으로 실행하는데 초점을 맞추고 있습니다(Linux, Unix, Windows Server 등).
- 미들웨어(middleware) : 서버 상에서 서버가 특정 역할을 하도록 기능을 제공하는 소프트웨어입니다.
Redirect 와 Forward 전송 방식 정리
Redirect : 웹 컨테이너는 Redirect를 통해서 웹페이지 이동을하게 되면
웹 브라우저에게 다른 페이지로 이동하라고 명령을 내린다.
그후 웹 브라우저는 URL을 지시된 주소로 바꾸고 그 주소를 이동한다.
이때 새로운 페이지에서는 req,res 객체들이 새롭게 생성되기 때문에
req,res를 같이 넘기지는 못한다.
Forward : 웹 컨테이너 에서 페이지 이동이 있지만, 실제로 웹 브라우저는
다른 페이지로 이동했음을 알수가 없다. 그렇기 때문에 웹 브라우저에는 최초에 호출한 URL이 그대로 표시되고 이동한 URL은 알수가 없다.
현재 실행중인 페이지에서 Forward를 통해서 호출될 페이지는 req,res를 공유하게된다.
ERROR 종류
500 : Internal server error — 내부적 서버 오류 (스크립트 오류로 인한, 일반적인 에러 메세지)
404 : Not found — 현재는 요청한 페이지를 찾을 수 없지만, 나중엔 사용 가능할지도 모름.
503 : Service unavailable — 서버 현재 사용 불가 (과도한 데이터요청으로 서버 다운 상태)
400 :파라미터 변수값이 맞지 않은 상태에서 화면을 넘어갈 경우(값을 넘겨줄 경우
제네릭
제네릭(Generic)은 클래스 내부에서 사용할 데이터 타입을 외부에서 지정하는 기법을 의미한다. 제네릭을 통해서 라이브러리를 구현하여 사용하는 방식이지만 복잡해지기 때문에 지양한다.
예를 들어
class Person<T>{public T info;}public class GenericDemo {public static void main(String[] args) {Person<String> p1 = new Person<String>();Person<Interger> p2 = new Person<Interger>();}}
원하는 형태의 형식으로 지정하여 사용할수 있다 .
RestAPI
- REST : 자원 ,메소드, 메세지
-REST API : 데이터 형식이 JSON /XML 등 다양한 형태의 데이터로 지정되어 있는데 이를 지정하지 않고 클라이언트에 제공하는 방식
-json : key value 형식으로 되어 있는 데이터 형식
-xml: Extensible Markup Language 약자로서 markup 형식 태그 형식의 데이 터들을 확장시켜 나가며 데이터를 관리하는 기법이다.
xml의 장점은 가독성이 좋지만, 파싱이 힘들어지고 속도는 느려진다는 단점을 가지고 있기에 json 이라는 형식을 이용하여 사용한다.
인증과 권한 차이
인증은 쉽게 말해서 자신을 증명하는 것 자기 스스로 무언가 증명할 만한 자료를 제시 하는것
권한부여는 남에 의해서 자격이 부여된다는 점에서 차이가 있다 .
node.js
단일 쓰레드 방식으로 비동기방식
자바스크립트를 서버에서도 사용할수 있게 해주는것
단일 쓰레드 방식이기때문에 하나의 작업 자체가 많이 걸리는 서비스는에는 적합하지 않다 .
->nodejs was역할을 하는 기능이 포함되어있다.
자바스크립트란?
객체지향언어 이지만 클래스의 개념이 없고 변수 자료형을 미리 선언하지 않아도 브라우저에서 자동으로 파악해준다. 뿐만아니라 인터프리터 언어로서 컴파일 과정이 없는것으로 알고 있다.
웹 2.0
사용자가 직접정보를 생산하여 쌍방향으로 소통하는 웹 기술
대표적으로 게시판 댓글 블로그 UCC 등이 웹 2.0이라고 알고 있다.
ERP란 ?
기업내 애플리케이션의 통합이라는 의미로서 기업에서 필요한 여러개의 어플리케이션을 통합시키는 솔루션
->EAI 는 기업에서 사용하고 있느 어플리케이션이 많이 존재 할텐데 이들을 하나의 어플리케이션으로 통합시키는 솔루션이다.
PL/SQL
기본적으로 프로시저와 SQL을 같이 사용하는 것으로 프로시저를 사용하는 이유는 DB를 단순하게 사용하기 위함도 있고 속도 측면에서도 프로시저를 사용하면 좀더 좋다
-> 트리거란? 프로시저의 한 종류로서 데이터변경이 실행될때 자동으로 같이 실행되는 프로시저를 말한다.
RIA 란
RIA를 한 마디로 표현한다면 ‘한 페이지로 구현된 웹 응용 프로그램’이라 할 수 있습니다. 실제 많은 비즈니스 로직이 존재하지만 사용자는 한 페이지를 이용하여 모든 기능을 이용하게 됩니다. 일반적인 웹 페이지의 페이지 이동과 새로 고침의 깜박임 없이 모든 내용의 확인과 기능을 이용할 수 있는 RIA.
— 신입에게는 어려운 개념들
EJB : enterprice java bean -> 복잡한 구조를 제어하기 위해서 나오게 되었고
pojo : pain old java object의 약자로 EJB에서 객체지향의 의미가 사라져 가기 때문에 POJO 방식을 사용하여 객체지향의 장점을 살려 이용하자는 의미 POJO방식을 이용한것이 SPRING 프레임워크가 대표적인 예로 해당된다.