아쿠의 개발 일지

한화 시스템 부트 캠프 6주차 회고 본문

ETC/한화시스템

한화 시스템 부트 캠프 6주차 회고

디아쿠 2024. 6. 9. 13:25

강사님 버그가 왜 생기는지 모르겠어요 디버깅도 했어요 근데 안 돼요 어 되네?

 

 

이번 6주차는 부하분산에 대해서 배웠다. 

세션에 DB를 저장하고, 부하분산을 했을 때 세션 불일치 문제를 해결하는 것이다.

여기에서 세션 클러스터링과 스티키 세션에 대해서 배웠는데,

  1. 세션 클러스터링
    1. WAS가 두 대 이상 설치되어 있을을 경우 동일한 세션으로 세션관리를 하는 것을 의미한다
    2. WAS에 세션을 전부 복사한다.
    3. was 서버끼리 세션 복사를 한다.
  2. 스티키 세션
    1. 특정 세션의 요청을 처음 처리한 서버로만 전송하는 것을 의미한다.

server에 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, 레드블랙트리에 대해서 공부를 하러 가야겠다.

다음 주에는 그래도 고수가 돼서 올게요,,, 제일 부족한 사람을 발표 시킨다고 하셨는데 (난가?) 절대 눈 안 마주쳐야겠다.

 

 

728x90