한화 시스템 부트 캠프 6주차 회고
이번 6주차는 부하분산에 대해서 배웠다.
세션에 DB를 저장하고, 부하분산을 했을 때 세션 불일치 문제를 해결하는 것이다.
여기에서 세션 클러스터링과 스티키 세션에 대해서 배웠는데,
- 세션 클러스터링
- WAS가 두 대 이상 설치되어 있을을 경우 동일한 세션으로 세션관리를 하는 것을 의미한다
- WAS에 세션을 전부 복사한다.
- was 서버끼리 세션 복사를 한다.
- 스티키 세션
- 특정 세션의 요청을 처음 처리한 서버로만 전송하는 것을 의미한다.
이거 말고도 열거형, 제네릭, 컬렉션, 어노테이션, 스트림에 대해서 배웠는데
열거형의 사용
enum 열거형이름 {상수명1, 상수명2, ...}
열거형에 정의된 상수를 사용하는 방법은 열거형이름.상수명이다.
클래스의 static변수를 참조하는 것과 동일하다.
제네릭의 사용
ArrayList<Integer> list01 = new ArrayList<Integer>();
ArrayList<Integer> list02 = new ArrayList<Integer>();
<> 안에 들어가는 타입을 지정해준다. 여러개도 지정할 수 있다.
제네릭은 클래스 내부에서 지정하는 것이 아닌 외부에서 사용자에 의해 지정되는 것을 의미한다.
어노테이션
@WebServlet(”/member”)
이런식으로 코드 위에 달리는 것들을 많이 봤을 것이다.
이는 안에서 설정에 따라 메소드에만 적을 수 있는 어노테이션이 있고, Target이 어디를 향하는 지에 따라 달리는 곳이 다르다고 한다.
이 어노테이션은 메소드에서만 사용할 수 있도록 되어 있고, 런타임까지 유지가 된다고 적혀있는 것이다.
자료구조
이제 대망의 자료구조에 대해서 배웠는데, Stack과 List에 대해서 배웠다.
말하는 감자는 강사님이 밉다. (장난)
이번 시간에는 모든 교육 시간을 혼자서 짜 보고, 다음 시간에 풀이를 해 주신다고 했다. 그래서 처음에 정말 막막했는데, 한 줄씩 강사님께서 코드를 한글로 정의 해 주셨다.
처음에는 이게 뭔 소린가 싶었는데 이건 기초가 부족한 날 탓해야 했다. 음.
package LinkedList;
public class LinkedList {
// 마지막에 추가한 노드를 저장하는 tail이라는 변수
Node tail;
Node head;
// 연결리스트 처음에 생성할 때
// tail에 null을 저장
public LinkedList (){
this.tail = null;
this.head = null;
}
public Integer countNode() {
int count = 0;
Node node;
node = this.head;
while (node != null){
count++;
node = node.getNext();
} return count;
}
public void delect(Integer idx) {
if (head == null){
}
}
public void insert(Integer data, Integer idx) {
if (idx == 0){
insertFirst(data);
return;
} else if (idx == this.countNode()) {
insertLast(data);
return;
} else if (idx < this.countNode()){
System.out.println("저장 못함");
} else{
Node n01;
n01 = new Node(data);
Node node;
node = head;
for (int i = 0; i < idx; i++) {
node = node.getNext();
}
n01.setNext(node.getNext());
node.setNext(n01);
}
}
// 숫자를 하나 전달받아서 맨 처음에 추가하는 기능
// 만약에 저장한 적이 있으면
// 노드 생성를 생성해서 변수에 저장
// 생성한 노드의 데이터에 전달받은 숫자를 저장
// 생성한 노드의 다음 노드에 head를 저장
// head에 생성한 노드를 저장
// 그렇지 않으면
// 노드 생성를 생성해서 변수에 저장
// 생성한 노드의 데이터에 전달받은 숫자를 저장
// tail에 생성한 노드 저장
// head에 생성한 노드 저장
public void insertFirst(Integer data){
if (head != null){
Node node;
node = new Node(data);
this.head.setNext(node);
this.head = node;
} else {
Node node;
node = new Node(data);
this.tail = node;
this.head = node;
}
}
// 숫자를 하나 전달 받는 마지막에 저장하는 기능
public void insertLast(Integer data){
// 만약에 저장한 적이 있으면
// 생성한 노드의 데이터에 전달받은 숫자를 저장
// tail의 다음 노드에 현재 생성한 노드를 저장
// tail에 현재 생성한 노드 저장
if(tail != null){
Node node;
node = new Node(data);
this.tail.setNext(node);
this.tail = node;
}
// 그렇지 않으면
// 노드 생성를 생성해서 변수에 저장
// 생성한 노드의 데이터에 전달받은 숫자를 저장
// tail에 생성한 노드 저장
else {
Node node;
node = new Node(data);
this.tail = node;
this.head = node;
}
}
// 연결리스트에 저장된 모든 데이터를 출력하는 print라는 이름의 기능
// 현재 노드를 저장할 변수 생성
// 현재 노드를 저장할 변수에 head를 저장
// 현재 노드를 저장할 변수가 비어있지 않으면 반복
// 현재 노드의 데이터를 출력
// 현재 노드에 현재 노드의 다음 노드를 저장
public void print() {
Node node;
node = this.head;
while (node != null){
System.out.println(node.getData());
node = node.getNext();
}
}
}
이런식으로 주석을 따라 한 줄씩 구현했다. 지금 List는 할 수 있을 것 같다.
혼자 해 보기도 했고, 이해 하려고 백 번을 노력했다... 이제 stack을 복습하고, 다음 주에 발표가 있는 B+, AVL, 레드블랙트리에 대해서 공부를 하러 가야겠다.
다음 주에는 그래도 고수가 돼서 올게요,,, 제일 부족한 사람을 발표 시킨다고 하셨는데 (난가?) 절대 눈 안 마주쳐야겠다.