1. JRE, JDK의 차이점
    • JRE - Runtime관련
    • JDK - 개발 + JRE
  2. == 과 equals의 차이점
    • 오버라이딩한 객체를 비교할때 ==과 equals는 같은 동작을 진행한다
    • 하지만 str1과 str2가 각각 있다고 가정했을떄 equals는 true지만 == 는 false가 나온다
    • equals → 객체 내용비교
    • == → 같은 객체 또는 같은 참조(주소)를 비교 (기본 데이터는 값을, 객체는 참조위치(메모리주소)를 비교)
  3. 2개의 객체가 동일한 HashCode를 갖고있으면 무조건 equals가 true로 나와야하는가?
    • 아니다. HashCode는 해싱 기법에 사용되는 해시함수를 구현한것이다.
    • 해시충돌 - 서로 다른 객체나 데이터가 동일한 해시 코드를 갖는문제
    public int hashCode() {
        int h = 0;
        int len = value.length;
        for (int i = 0; i < len; i++) {
            h = 31 * h + value[i];
        }
        return h;
    }
    //h = 31 * h + value[i]: 
    //이는 각 문자의 유니코드 값을 더하면서, 31이라는 소수를 곱해 누적된 해시 코드를 계산하는 방식
    //문자열의 길이가 같거나, 특정 값에 의해 충돌이 발생할 수 있습니다. 
    //"FB"와 "Ea"는 서로 다른 문자열이지만 해시 코드가 같습니다(2236).
    // F의 유니코드 값은 70, B의 유니코드 값은 66.
    // h = 31 * 0 + 'F' = 70
    // h = 31 * 70 + 'B' = 2236.
    // E의 유니코드 값은 69, a의 유니코드 값은 97.
    // 해시 코드는 h = 31 * 0 + 'E' = 69, 그리고 h = 31 * 69 + 'a' = 2236.
    
  4. 자바의 final의 기능
    • 변수,메서드, 클래스 등에 변형이 안되도록 수정을 막아버리는것
    • 변수 - 값 변경, 중간할당 불가 (초기화 값이 그대로감)
    • 메서드 - 오버라이드 불가
    • 클래스 - 상속불가
  5. 자바의 Math.Round(-1,5)의 결과는?
    • 반올림을 진행하는데 -1번쨰 자리(소수점 첫번째에서 반올림)
    • 5 초과는 올림, 5 이하는 내림
  6. String은 기본타입?
    • String는 int, char 같은 기본 데이터 타입이 아닌 참조 데이터 타입이다
    • Stack이 아닌 Heap부분에서 문자열 데이터가 생성된다 →
    • String은 불변이라 String a = “A”: a+”B”일때 a에 글자를 더하는게 아닌 AB를 새로 만들어 주소를 다시 참조하는 형태이다
    • “AB”가 아닌 “A”는 gabage가 되며 GC가 이를 수집하고 삭제한다
    • JAVA에선 성능 최적화를 위해 String Pool 이란걸 사용하는데 동일한 내용의 String 객체는 메모리 낭비를 막기위해 재사용된다.
  7. 자바의 문자열을 조작하는 클래스
    • 앞서 말한 Stirng의 불변성으로 인해 문자열을 조작할경우 성능적인 낭비가 발생할수있으며 StringBuffer, StringBuilder를 사용하여 해당 문제를 해결할수 있다.
    • StirngBuffer - 멀티쓰레드 환경에서도 안전하다 → 동기화(synchronized)가 자동으로 적용, 문자열을 자주 변경할경우 성능저하를 피할수있다.
    • StringBuilder - StringBuffer에서 동기화만 빠진것 → 단일 스레드 환경에선 더욱 빠른 성능을 제공한다
  8. String str = “i”와 String str = new String(”i”)가 동일할까?
    • 다르다!
    • str i 는 문자열 상수를 선언하는 형태로 i 라는 문자열이 만들어지며 JVM의 constant pool(상수 풀)에 저장된다.
    • 만일 str2 - “i”를 사용할경우 상수풀에 존재하는 i를 돌려쓰는는것이다. (싱글톤)
    • new String은 새로운 String 객체를 생성하는 방식으로 i가 상수 풀에 존재하여도 JVM이 관리하는 heap 공간에 새로운 객체를 저장한다.
    • 만일 str2 =”i”를 선언하고 str과 비교할경우 두 변수가 같은 주소를 가리키며 str2 = new String(”i”)를 할경우 서로 다른 주소를 가리킨다.
  9. 문자열을 반복시키는 가장 좋은 방법
    • 리스트를 사용해 반복문으로 변경시키는 방법
      1. 직접 리스트를 만들어 반복문으로 변경하는 작업
      String b = "asdf";
      sb = new StringBuilder();
      char[] charArray = b.toCharArray();
      for(int i = chrArray.length -1; i>=0; i--){
      	sb.append(charArray[i]);
      }
      
    • 라이브러리 메서드를 이용하는 방법 (StringBuilder,StringBuffer)
      1. StringBuilder
      String a = "asdf";
      StringBuilder sb = new StringBuilder();
      sb.append(a).reverse();
      
  10. String 클래스의 일반적인 메서드
    • endWith : 문자열 마지막에 지정한 문자가 있는지 판단후 있으면 true, 없으면 false 반환
    • equlas : Object의 메서드이나 오버라이드된것으로 String의 값만 비교해 True, false 를 반환한다
    • indexOf : 지정한 문자가 문자열 몇번째에 있는지 반환
    • length : 문자열 길이 반환
    • replace : 문자열에 지정한 문자 “asd”가 있으면 “hello”로 바꿔서 출력
    • subString : 문자열에 지정한 범위에 속하는 문자열을 반환 (시작범위 값은 포함, 끝나는 범위 값은 미포함)
  11. 추상클래스의 추상 메서드는 필수인가?
    • 추상메서드는 필수가 아니며 추상클래스는 추상메서드를 갖지않아도 무방하다.
    • 추상클래스 - abstract를 사용해 선언된것, 인스턴스화 불가
    • 추상메서드 - 구현부가 없는 메서드로 추상클래스는 추상메서드를 0개 가질수 있다.
    • 구체클래스 - 추상클래스를 할당받은 클래스로 추상메서드를 무조건 구현해야한다
  12. 보통 클래스와 추상클래스의 차이
    • 실제 내용이 안들어가있어도 문제가 없다.
    • 클래스의 상속에선 부모 메서드를 오버라이딩 하는것이 필수가 아니며 자식에게 특정 메서드를 구현하라고 강요할수 없다.
    • 추상클래스는 추상 메서드를 자식 클래스가 구현하는게 강제이기에 해당 클래스를 상속받는 자식클래스는 항상 해당 메서드를 구현해야한다.
  13. final은 추상클래스를 수정할때 사용이 가능한가?
    • final이 붙는순간 상속이 불가능한 클래스로 바뀐다 → 추상클래스는 자체로 인스턴스가 불가능 하기에 구체 클래스에게 상속을 해줘야 한다 → 상속불가한데 상속을 해줘야한다? → 컴파일 에러
    • 애초에 final과 abstract는 같이 붙을수 없고 컴파일 단계에러 에러가 나온다
  14. 자바 컨테이터란?
    • 객체들을 저장하기 위한 저장소(컨테이너도 객체!)이다.
    • 배열은 원시타입의 배열을 사용할떄 크기를 미리 선언해놓는데 1번 정할경우 바꿀수 없는 제약이 생긴다
    • 이때 자바 컨테이너가 java.util 라이브러리에 컨테이너 클래스가 있으며 List,Set,Queue,Map이 존재한다.
  15. Collection, Collections의 차이

    • Collection - 데이터의 자료구조를 다루는 Collection 프레임워크(List, Set, Map*)에 필요한 메서드가 선언되있는 인터페이스
      1. add,contains,clear 등 자료구조 관련 메서드가 정의되있따.
      2. Map은 Collection을 구현하지 않았으나 Collection으로 본다. (Key-값의 쌍)
    • Collections - 컬렉션과 관련된 메서드를 제공하는 클래스
      1. fill, copy, sort등과 같은 Arrays에서 제공하는 메서드들은 물론 멀티 쓰레드 프로그래밍에 필요한 동기화 처리가 가능하도록 제작된 Collection을 반환하는 메서드도 제공
  16. List,Set,Map의 차이점
    1. List - 순서가 있는 데이터구조로 중복을 허용, 인덱스를 통해 데이터 접근이 가능 (ArrayList, LinkedList)
    2. Set - 순서가 없고 중복값 미허용(중복값은 자동으로 제거), 순서가 없기때문에 iterator(순차접근)를 사용하여 검색속도가 빠르다 (HashSet, TreeSet)
    3. Map - key,value의 형태로 key는 미중복, value는 중복허용, iterator를 사용하여 접근은 ㄱ가능하나 KeySet(), entrySet()을 사용해 순회해야한다 (HashMap,TreeMap)
  17. HashMap과 Hashtable의 차이
    • HashMap
      1. 동기화가 보장되지 않아 멀티스레드 환경에서 불안전하나 단일 스레드에선 더 나은 성능을 제공
      2. 검색에 뛰어난 성능을 갖고 Key,value로 null을 허용한다
    • HashTable
      1. 동기화가 보장되어 멀티스레드 환경에서 사용이 가능
      2. HashMap보다 처리속도가 느리다.
      3. Key,Value로 Null이 허용되지 않는다.
  18. 어떤 상황에서 HashMap과 TreeMap을 사용하는가?
    • HashMap은 해시함수를 사용하여 빠른 탐색시간을 갖는게 장점(O(1))이며 정렬되지 않는다(key로 검색해버리면 되니까!)
    • TreeMap은 HashMap보다 느린탐색(O(logN))을 갖는다
    • TreeMap은 Red-Black Tree로 관리하여 Key값을 기준으로 정렬된 상태를 유지하는데 key가 오름차순으로 자동정렬되기에 정렬된 순서로 데이터에 접근한다
    • 정렬보다 빠른 탐색을 우선해야 할경우 HashMap을 사용
    • 빠른 탐색보다 정렬이 우선되면 TreeMap을 사용
    • 추가 궁금증 - key가 0~100까지 있다고 가정했을때 30번째 key를 찾는다고 가정했을때 TreeMap은 3~4번이면 찾는게 아닌가??
      1. HashMap은 key를 입력받았을때 해시값으로 계산한뒤 이를 이용해 한번에 위치를 특정할수 있다.
      2. TreeMap은 이진탐색으로 0~50, 51~100(루트노드) → 0~25, 26~50 → … 이런 형식으로 나무 뿌리처럼 타고 들어가기에 더 느리다.
      3. 만약 해시 충돌이 나타날경우 hash값에 여러개의 key가 매핑될수도 있는데 해시값이 존재하는 버킷에서 체이닝, 오픈 어드레싱 방식으로 충돌을 처리한다. (키가 30개인데 테이블(버킷) 크기가 10개면 3개씩 중복이 나타나는데 이런경우 해시충돌이 발생한다)
      4. 버킷 - 해시 테이블에서 데이터를 저장하는 공간 (key의 해시값 보관소)
      5. 체이닝 - 하나의 버킷에 여러개의 요소를 저장하는 방법으로 해당 버킷에 있는 데이터를 리스트 형태로 저장하며 삽입된 데이터는 버킷의 리스트 끝에 추가되고 해당 해시값에 매핑된 리스트를 순회하며 원하는값을 탐색
      6. 버킷 0: (key1 -> value1) -> (key3 -> value3) 해당 상황에서 key1과 key3은 동일한 해시값을 갖게되어 버킷 0번에 들어가있는 형태이다. 여기서 사용자가 key3을 검색할경우 순차적으로(key1 -> key3의 순서) 탐색하며 키가 일치할경우 해당하는 값을 반환 index 목적으로 사용되는 key1,key3의 해시값이 123123으로 동일할경우 해시충돌이 일어나며 이때 index키가 같으니 대신 사용할수 있는 후보키로 key의 value를 사용하여 한번 더 탐색
      7. 오픈 어드레싱 - 충돌이 발생했을떄 빈 버킷을 찾아 데이터를 저장하는형식으로 1개의 버킷에 여러 요소를 저장하는게 아닌 비어있는 버킷을 찾아서 저장한다
  19. HashMap의 구현원칙
    • Key는 저장된 값을 찾기위하여 컬렉션 내부에서 유일해야한다 (PK일것)
    • HashMap은 내부적으로 Entry 또는 Node라는 내부 객체로 묶어서 저장하게되는데 키-값 쌍을 저장하는 형태라 키와 값 서로 연관성을 유지할수 있게된다. HashMap의 1개 배열엔 Entry, Node 객체가 저장되며 그 안에서 key와 value가 같이 저장된다.
    • 즉, 1개의 HashMap은 키와 값이 서로 연관된 값이기에 키, 값을 각자 배열로 사용하여 필요할때마다 가져오기 보단 키,값을 1개의 클래스로 정의해 둘을 1개의 배열로 다루는것이 데이터 무결성측면에서 더 바람직하기 떄문이다
    • HashMap의 hashCode는 Object의 hashCode메서드를 사용하며 각 주소값을 해싱하기에 가장 좋은 방식이기도 하지만 String 클래스와 비슷하게 equals를 재정의 해야한다면 hashCode도 재정의 해야 해싱을 구현한 컬렉션 클래스도 정상적인 동작이 가능하다
      1. HashMap은 HashCode를 사용해 해당 객체가 저장될 객체를 결정하는데 같은 해시코드를 가진 키는 같은 버킷에 저장되며 버킷에서 equals로 동일한 키인지 검사르 진행한다.
      2. HashCode(버킷위치 - 저장주소), equals(객체 동일여부)
      3. 만일 a=b 를 진행할경우 equals()를 재정의 한다면 둘은 동일한 객체가 되는데 HashCode는 해당 객체가 동일한 HashCode를 반환해야한다
      4. 하지만 a는 1번버킷, b는 2번 버킷에 저장되어있기에 다른 HashCode를 가지며 이로인해 키를 제대로 못찾게된다.
      a = (1,test)
      b = (2,hello) 
      a=b 
      a = (1,test), b= (2,test)
      
  20. HashSet의 구현원칙
    • HashSet을 구현할땐 Set의 특징처럼 중복된 요소가 저장되면 안되며 저장순서를 유지하지 않는다.
    • HashSet의 hashCode는 Object의 hashCode 메서드를 사용하여 각주소값을 해싱해야 정상적으로 동작한다.
    • 오버라이딩을 통해 작성된 hashCode가 만족해야할 3가지 조건
      1. 실행중인 애플리케이션에서 동일한 객체에 대해 여러번 hashCode를 호출할때 동일한 int를 반환해야한다(실행할떄마다 동일한 int를 반환할 필요는없다) → 일관성
      2. equals메서드를 이용한 비교에서 true를 얻은 두 객체는 hashCode()로 해시값을 호출했을떄 항상 같아야한다. →
      3. 서로 다른 객체들에 대해 반드시 다른 해시코드를 반환할 필요는 없지만 가급적 서로 다른 해시코드를 반환하는게 바람직하다. → equals로 false를 반환하는 객체는 같은 hashCode를 가질수 있으나 서로 다른 해시코드를 반환하는게 효율적이다.
        1. equals는 내용이 같은지 비교하는 함수인데 hashcode가 동일할수가 있다 (해시충돌) 3-2 문항 참조
        String str1 = "FB";
        String str2 = "Ea";
                
        System.out.println(str1.hashCode());  // 2236
        System.out.println(str2.hashCode());  // 2236
        System.out.println(str1.equals(str2));  // false
        

 

 

 

'JAVA' 카테고리의 다른 글

Call by value와 Call by reference  (0) 2024.02.24
DocumentBuilderFactory와 예제  (0) 2024.02.18
스레드풀  (0) 2023.03.07
프로세스와 스레드  (0) 2023.03.07
동일성(identity)과 동등성(equality)  (0) 2023.02.26

주요 용어

네트워크 인터페이스

  • 유선 네트워크→ 이더넷포트 (LAN 포트)
  • 무선 네트워크 → 와이파이

물리적인 네트워크 인프라

  • 라우터, 스위치, 허브, 케이블

논리적인 네트워크 인프라

  • IPv4/IPv6, 서브넷, 게이트웨이, DNS 등 네트워크 설정

 

 

Dynamic Host Configuration Protocol

호스트의 IP주소와 각종 TCP/IP 프로토콜의 기본 설정을 클라이언트에게 자동적으로 제공해주는 프로토콜로 컴퓨터가 켜지면서 자동적으로 진행되는과정중 1개이다.

컴퓨터가 처음 실행될때 네트워크 부팅과정에서 DHCP서버에 IP 주소를 요청하고 이를 얻게된다.

네트워크 내부에서 컴퓨터에 자동으로 네임서버주소(DNS), IP주소, 게이트웨이 주소를 할당해주며 해당 클라이언트에게 일정기간 임대를 해주는 동적 주소 할당 프로토콜이다.

 

cmd에서 ipconfig를 입력할경우

사진과 같은 형태로 데이터를 확인할수 있다.

 

처음 노트북이 켜졌을때 DHCP가 가동된다 이때 물리적 네트워크 인프라가 연결되어야 DHCP의 IP를 할당을 받을수 있으며 이때 네트워크 인터페이스를 활용해 정상적인 통신이 이뤄졌을경우 논리적 네트워크 인프라가 설정된다.

 

DHCP서버

네트워크 인터페이스를 위해 IP주소를 갖고있는 서버에서 실행되는 프로그램으로 일정한 범위의 IP 주소를 다른 클라이언트에게 할당하여 자동으로 설정하게 해주는 역할로 클라이언트에게 할당된 IP주소를 변경없이 유지하게 해준다.

 

DHCP 클라이언트

시스템이 시작하면 DHCP서버에 자신의 시스템을 위한 IP주소를 요청하고 DHCP 서버로부터 IP주소를 부여받으면 TCP/IP 설정이 초기화되며 다른 호스트와 TCP/IP를 활용해 통신이 가능해진다.

DHCP의 주소 할당은 임대라는 개념을 갖고있으며 영구적인 IP할당이 아닌 일정기간 IP 주소를 사용하도록 하는것이며 IP 주소 임대기간 연장을 위해선 DHCP 서버에 요청을 해야한다.

 

 

브로드캐스트

단말이 DHCP 서버를 찾기 위한 메세지로 DHCP서버가 존재하는지 요청을 진행하는것

 

브로드 캐스트 메세지

FF:FF:FF:FF:FF → 이더넷 레벨(물리적)에서 브로드 캐스트 MAC 주소로 모든 네트워크 장치가 패킷수신이 가능

255:255:255:255 → IP 레벨에서의 브로드캐스트 주소로 네트워크상 모든 장치가 해당 패킷 수신

 

 

DHCP동작순서

  1. DHCP Discover
    • 방향 : 단말 → DHCP 서버
    • 단말이 DHCP서버를 찾기 위한 메세지로 LAN상에 브로드캐스팅을 하여 DHCP서버에 응답을 요청
    • 파라미터 - 단말의 Mac 주소(Client MAC)
    • 브로드 캐스트 메세지 : FF:FF:FF:FF:FF:FF
  2. DHCP OFFER
    • 방향 : DHCP 서버 → 단말
    • 브로드 캐스트 메세지 또는 유니캐스트일수도 있다.
    • 단말이 보낸 DHCP내의 Broadcast Flag의 값에 따라 달라지는데 Flag = 1 은 DHCP Offer메세지가를 Broadcast, Flag = 0 은 Unicast로 전송
    • DHCP가 응답했다는 메세지로 단말기에 할당할 IP주소 및 네트워크 정보(앞서 말한 네트워크 인터페이스?)를 함께 단말에 전송
    • 파라미터 - Client Mac주소, Your IP, Subnet Mask, Router, Dns, IP Lease Time, DHCP Server idntifier(만약 DHCP 서버가 2개의 이상일때 둘다 Offer를 보낼수 있으니 자신의 IP주소를 해당 필드에 넣어 전송)
  3. DHCP Request
    • 방향 : 단말 → DHCP 서버
    • 단말은 DHCP 서버의 존재를 확인헀고 서버가 전달해준 네트워크 정보를 기반으로 DHCP 메세지를 통해 전달바은 DHCP 서버중 1개를 선택해서 해당 서버에 자신이 사용할 네트워크 정보를 요청
    • 파라미터 - Client Mac주소 , Request IP Address (DHCP Offer의 Your IP가 존재), DHCP Server Identifier (DHCP 서버의 IP 주소가 존재)
  4. DHCP Ack
    • 방향 : DHCP 서버 → 단말
    • 브로드캐스트 메세지 혹은 유니케스트 BroadCast Flag = 1이면 DHCP 서버는 DHCP Ack를 Broadcast, Flag = 0이면 Unicast로 전송
    • DHCP 절차의 마지막으로 DHCP 서버가 단말에 네트워크 정보를 전달해주는 메세지로 DHCP Offer 네트워크 정보와 동일한 파라미터가 전송된다.
    • 파라미터 - Client Mac, Your IP, Subnet Mask, Router, Dns, IP Lease TIme, DHCP Server Identifier

 

만약 무인도처럼 네트워크가 아예 없는경우

네트워크 인프라가 없는 상황에선 DHCP가 동작되지 않는다.

노트북이 켜지는 순간 네트워크 연결을 시도하는데 연결을 위해선 IP주소가 필요하다

IP주소가 필요하기에 DHCP 서버에 IP주소를 요청하게 된다.

노트북은 네트워크 인터페이스를 통해 DHCP Discover 패킷을 브로드캐스트로 보내려 하지만 이를 받아줄 서버가 없기에 패킷은 응답을 받을수 없으며 time out이 발생하게 된다.

 

네트워크 연결이 없다는것은 논리적인 IP주소 연결이 없는 상태를 의미하지만 노트북이 물리적으로 네트워크에 연결된 상태에서는 DHCP Discover 브로드캐스트 패킷을 보낼수 있다.

HTTP

웹 상에서 클라이언트와 서버 간에 하이퍼미디어 문서를 교환하는 기본적인 통신 방식으로 header와 body로 구성된 메세지를 통해 정보를 교환한다.

웹 브라우저와 웹 서버간 데이터 통신을 위한 기본적인 프로토콜로 해당 프로토콜로 데이터를 전송할경우 암호화가 진행되지 않은 평문 데이터를 주고받는다.

HTTPS

HTTP에 Secure가 붙은것으로 보안계층(SSL/TLS)를 추가한 프로토콜이 데이터 통신을 암호화하여 진행한다.

1. 내가 웹사이트에 보내는 정보를 훔쳐보지 못하도록 암호화(보안계층에서 진행)를 진행한다. (클라 -> 서버 또는 반대의 방향에서 이를 방지하게된다.)

2. 서버 신원 확인을 진행하여 신뢰 가능한 사이트인지 확인이 가능하도록 해준다. (검증된 사이트만 Secure이 붙게 된다)

대칭키, 비대칭키

대칭키

하나의 동일한 키를 활용해 양쪽 모두 데이터를 암호화,복호화를 진행하는것

하지만 데이터를 처음 보낼때 해당 대칭키에 한 정보를 보내야하는데 이때 시점에서 키가 노출될경우 암호화의 의의가 사라지게된다.

 

비대칭키(공개키)

주고받는쪽이 데이터를 암호화, 복호화를 진행할때 서로 다른 키(공개키, 개인키)를 사용하는 경우 서로 한쌍이지만 서로 다르기때문에 비대칭키 라고도 불리운다

개인키를 서버가 보관하고 웹상엔 공개키를 사용해 해당 키를 뿌려버린다

공개키로 암호화 할경우 개인키로만 복호화가 가능해지며 반대의 경우도 마찬가지다.

즉, 서로 데이터를 주고받을경우 갖고있는 공개키로만 데이터를 풀어볼수 있기에 이를 통해 내가 요청한 사이트인지 확인이 가능하다.

서버의 신원을 확인하기 위해서 서버가 자신의 개인키로 서명한 인증서를 클라이언트에 제공하고 클라이언트는 서버의 공개키로 이를 검증한다.

 

HTTPS의 공개키가 정품인지 확인을 위해선 각각의 브라우저에 내장된 CA가 확인한다.

 

핸드셰이크 과정

1. 클라 -> 서버에 무작위 데이터 전송 - 클라가 지원하는 TLS버전, 랜덤값, 암호화 방식 목록 전송

2. 서버 -> 클라에 무작위 데이터 및 서버 인증서 전송 - 선택된 TLS 버전 및 암호화 방식, 서버 랜덤값 

3. 클라는 서버가 제공한 인증서의 서명을 검증(브라우저는 CA 인증서 목록을 내장하며 CA의 개인키로 인증서에 서명이 되어있으며 클라이언트는 CA의 공개키로 서명을 검증)

4. 문제가 없을경우 클라이언트는 클라이언트와 서버의 서로 공개키를 사용해 세션키를 생성, 해당 키를 통해 통신을 암호화한다.

 

 

SSL/TSL

대칭키와 비대칭키 방식이 혼합되어서 사용된다.

비대칭키 방식으로 암호화 및 복호화를 진행하는건 대칭키로 할떄보다 부담되며 비 대칭키 방식으로 메세지를 암호,복호화 할경우 

데이터는 대칭키로 암호화를 진행하며 대칭키를 공유할때 비대칭키를 사용한다.

1. 암호화 (도청방지)

2. 통신내용 변경 방지 (위조방지 -> 메시지 인증 코드(MAC) 또는 해시 함수를 통해 변경여부 검)

3. 신뢰 가능한 사이트인지 확인(피싱방지 -> CA)

 

SSL, secure Sockets Layer  (보안소켓계증) -  디지털 인증서라 불리우며 사용자와 서버 (웹사이트) 사이의 보안소켓 계층을 의미한다 (현재는 TLS로 대체되었다)

TLS, Transport Layer Security  (전송 계층 보안) - HTTP에 보안계층을 추가한것으로 HTTP를 TLS로 암호화한것

 

CA (Certificate Authority)

클라이언트가 접속하려는 서버가 실제로 의도한 서버인지(신뢰 가능한 서버인지) 확인 해주는 민간업체로 서버에 대한 디지털 인증서를 발급한다.

'CS' 카테고리의 다른 글

코딩 용어모음  (0) 2024.08.23
JS파일 가져오기 로컬, 원격 차이  (0) 2024.08.03
크로스 도메인,SOP, CORS, XSS,  (0) 2024.01.25
IP, DNS, HTTP  (0) 2023.07.09
HTTP 헤더  (0) 2023.05.06

구글 폰트 적용시키기

 

1. 구글 폰트 사이트 접속 

https://fonts.google.com/?subset=korean

 

2. filter에 korean 검색후 원하는 폰트 클릭

 

3. 클릭한 페이지에서 Get Font 클릭 (이미 받은 폰트가 적용했을경우 Remove라 나올텐데 클릭하면 다시 Get Font가 나온다)

4. 다운형식, import형식 택1 

5-1.embed code  (@import 형식)

Style.css

@import url('https://fonts.googleapis.com/css2?family=Noto+Sans+KR:wght@100..900&display=swap');
body {
    font-family: 'Noto Sans KR', sans-serif; /* 폰트 적용 */
}

하단과 같은 형태로 진행하면 되나 import할때까지 대기시간이 발생하며 페이지가 로딩된 시점에서 어긋나는 느낌을 주기에 별로 추천되지 않는다.

 

5-2. Download 방식

zip을 압축 해제한뒤 ttf파일을 resourecs에 위치시킨뒤 url에 해당 파일위치 지정

참고용 depth

Style.css

@font-face {
    font-family: 'Noto Sans KR';
    src: url('/FONT/NotoSansKR-VariableFont_wght.ttf') format('truetype'); /* TTF 폰트 사용 */
    font-weight: 100 900;
    font-style: normal;
}body {
    font-family: 'Noto Sans KR', sans-serif; /* 폰트 적용 */
}

 

 

'기타' 카테고리의 다른 글

카카오맵 api 활용하기  (0) 2024.07.21
FileZila 사용법  (0) 2024.06.27
이미지 배치하기  (0) 2024.02.23

@ResponseBody(서버 → 클라), ( 주로 비동기 )

메서드의 반환값을 HTTP 응답의 body에 직접 작성하도록 하는것

더 자세히 설명하면 메소드 파라미터가 Web Request Body에 명시한 데이터를 통해 bind 되는것을 나타내는 어노테이션이다 (@Valid 를 통해 자동 유효성검사 가능)

비동기 - ajax에 대한 요청을 json 데이터로 반환할때 사용

동기 - 사용은 가능하나 동기방식일땐 주로 HTML 페이지를 반환하는 뷰 렌더링 방식이 일반적으로 사용하기에 많이 쓰이진 않는다

 

@ResponseBody
@RequestMapping(value = "/ajaxTest.do")
public UserVO ajaxTest() throws Exception {

  UserVO userVO = new UserVO();
  userVO.setId("테스트");

  return userVO;
}

 

 

 

@RequestBody(서버 ← 클라), ( 비동기에서 주로 사용 )

클라이언트한테 받은 http Body를 자바객체 (Entity)로 변환해서 메서드 파라미터로 바인딩할때사용

클라이언트가 서버에 데이터를 전송할때 서버는 해당 데이터를 처리하기 위해 객체로의 형 변환이 필요한데 이를 담당하는것 (Message Converter가 변환해줌)

만약 Http의 Content Type을 지정해주지 않으면 415 에러가 나타난다

동기 - 주로 form 데이터나 쿼리 파라미터를 사용하는 동기방식에선 덜 사용됨

비동기 - 자주 사용(ajax로 JSON 데이터를 요청 본문에 담아 전송할때)

@RequestMapping(value = "/ajaxTest.do")
public String ajaxTest(@RequestBody UserVO getUserVO) throws Exception {

  System.out.println(getUserVO.getId());

  return "test/login.tiles";
}

 

 

쿼리스트링 → ?category=books&sort=price_asc&page=2

쿼리 파라미터 - 쿼리 스트링 내부에서 개별적인 데이터를 나타내는 키-값 쌍으로 여러 파라미터는 &로 구분된다

category=books (키 - category, 값 - books)

sort=price_asc (키 - sort, 값 - price_asc)

 

 

@RequesetParam ( 서버 → 클라 ) , ( 동기방식 )

ajax의 경우 보통 json 형태의 데이터를 요청본문에 담아서 사용하는데 어차피 여기에 데이터가 있기때문에 비동기에선 잘 안쓴다.

@RestController

class 최상단에 붙이는 어노테이션으로 리턴값에 자동으로 @ResponseBody가 붙게된다.

자바 객체를 할당하면 알아서 json 형식으로 매핑해서 응답한다.

 

@PathVariable ( 서버 ← 클라 )

URL 경로(Path)에 있는 변수값을 매개변수에 바인딩할때 사용 name=test?id=hello 일때 (@PathVariable String name, @PathVariable String id) 이런 형태로 사용

@GetMapping("/users/{name}/{id}")
public String getUser(@PathVariable String name, @PathVariable String id) {
    // 로직 처리
}

비동기 (AJAX) - RequestBody, ResponseBody를 주로사용

동기 - ResponseBody, RequestParam을 사용

타임리프 적용을 진행하는데 css를 지정해주었으나 찾지 못하는 문제가 존재했다.

 

파일구조

다음과 같은 형식으로 작성했으나 302에러가 나타났다.

<link th:href="@{/CSS/member/login.css}" rel="stylesheet" />

 

인터넷에 검색을 진행해보니 boot에선 해당 부분이 기본적을 scan되는 페이지라고 한다. 

 

이를 토대로 css를 지정하였고 시큐리티에 설정도 끝내주었다.

 

스프링 시큐리티

 @Bean
    public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
        http
                .authorizeHttpRequests(authorize  -> authorize
                                .requestMatchers("/customLoginPage","resources/*","/CSS/**").permitAll() // 여기서 모든 사용자의 접근을 허가

 

pom.xml

 

plugins {
	id 'java'
	id 'org.springframework.boot' version '3.3.1'
	id 'io.spring.dependency-management' version '1.1.5'
}

	implementation 'org.springframework.boot:spring-boot-starter-security'

 

properties

spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.suffix=.html
spring.thymeleaf.cache=false

 

해당 형식으로 변경하니 css는 문제없이 가져오게 되었다.

 


 

rediret 문제

 

css를 가져오는것 까진 문제없었으나 실제 controller엔 2번의 request가 요청되고 있었다.

Bean이 2개인가 싶어 확인해보았으나 그것도 문제가 아니었다.

 

 

확인해보니 favicon.ico에 설정을 따로 진행해주지 않아서 해당 리소스를 리로드하기 위해 redirect가 한번 더 진행된것이다

 

이를 해결하기 위해선 

html 코드에 favicon을 임의로 설정해준다던가

<link rel="icon" href="data:;base64,iVBORw0KGgo=">

 

시큐리티 부분에서 

.requestMatchers("customLoginPage","/CSS/**","/favicon.ico").permitAll()

 

해당 favicon을 수정해주면 된다.

'Spring' 카테고리의 다른 글

@ResponseBody @RequestBody  (0) 2024.09.15
젠킨스 로컬에서 자동화하기 - 1  (0) 2024.06.27
젠킨스 로컬에서 자동화하기 - 2  (0) 2024.06.22
젠킨스 관련 에러 내용 (crumb, 용량부족)  (0) 2024.06.16
Jmeter - 2  (0) 2024.06.12
기존 Mybatis의 동작방식
insert a from table
....

 

기존 mybatis를 써본사람은 알것이다.

DB에 통신을 보내기 위해선 VO를 만들고 DAO로 Mapper와 연결한뒤 Mapper에선 DB에 보낼 쿼리를 만드는 형태로 이뤄지게된다.

하지만 이전에 리팩토링을 진행했을때 myabtis의 한계를 확인할수 있었다.

유지보수의 어려움

VO에 생각보다 사용되지 않는 필드가 많았고 이를 VO에서 수정을 진행할때마다 mapper를 수정해야하는 번거로움이 존재했다.

만약 VO에 필드가 1개 변경되었다면 이와 연관되있는 mapper를 전부 변경해야하는 문제점이 존재했다.

<select id="GET_ASSET_LIST_BY_SOFT_DELETE" resultType="AssetDTO">
		select *
		from assets where asset_deleted=0
	</select>

	<select id="GET_ASSET_ONE_BY_ID" parameterType="int"
		resultType="AssetVO">
		select * from assets
		where asset_id = #{asset_id}
	</select>

 

다음과 같은 코드에서 asset_id를 만약 ASEET_ID로 변경한다고 가정시 모든 asset_id를 ASSET_ID로 변경해줘야 한다!

조회 데이터의 한계

비즈니스 코드에서 쿼리를 사용해 DB의 데이터를 가져올경우 비슷한 데이터를 가져와야 했지만 쿼리가 달라서 @ Overloading 하듯이 중복된 쿼리를 생성해야했다. (그냥 전체 데이터를 가져오는 쿼리를 써도 문제없지만 성능상 문제로 인해 피하는게 좋았다)

Member a = testdaoImpl.getmember();
Member b = testdaoImpl.getmemberPW();

 

패러다임의 불일치

먼저 짚고 넘어자면 객체와 RDMB이 서로 지향하는 목적이 다른게 가장 큰 원인이다.

객체 - 상속을 통한 전체 데이터를 갖고있는형태 (참조를 통해서 사용가능)

RDMB - FK를 통해 필요한 데이터를 그때그때 가져오는 형태 (외래키를 사용해서만 참조가능)

OOP의 목적

객체 위주로 모델링이 진행되며 각각의 객체는 자신의 데이터(필드) 및 메서드를 캡슐화 하는 형태로 데이터와 기능을 1개의 단위로 묶어 사용한다

member a = new member();
a.getmambername();

 

만약 a라는 객체가 다른 객체의 요소를 사용해야 할경우 상속을 통해 부모 - 자식관계를 형성한뒤 이를 활용한다.

RDMB의 목적

데이터 중심의 구조화된 연관관계를 외래키(FK)를 활용하여 참조한다.

슈퍼타입 VS 서브타입 

슈퍼타입 - 테이블이 존재하고 공통적인 속성들을 가진다. (OOP의 특성인 추상화, Animal)

서브타입 - 슈퍼타입을 상속받으면서 각각의 특정 속성을 추가로 갖는다. (Cat, Dog,)

차이점 슈퍼타입 서브타입
정의 서브타입에서 사용할 공통적인 속성을 가진다. 슈퍼타입의 상속을 받으며 특정 속성을 추가로 갖는다.
예시(상단 그림 참조) ITEM ALBUM, MOVIE, BOOK

 

서브타임의 객체를 가져와야 할경우 슈퍼타입에 존재하는 테이블을 항상 Join해야하는 불편함이 있으며 이를 토대로

모든 Join을 걸어버려야한다.

그렇다고 테이블에 맞춰 객체를 모델링할경우 OOP의 사용목적이 등한시된다.

엔티티 신뢰의 문제

MemberVO에 data를 설정해놨다고 하더라도 해당 member가 내가 필요로 하는 데이터를 전부 갖고있지 않을수도 있다.

select * from member;	//member전체 데이터
select member_id from member;	//memebr 특정 데이터

2개의 쿼리처럼 엔티티가 문제없이 데이터를 가져왔다고 해도 (B)쿼리를 실행했을경우 내가 가져온 엔티티를 신뢰하지 못하는 문제가 있다.

 

즉, 내가 주체가 아닌 SQL이 주체가 되어 dao를 건드리면 되는게 아니라 sql을 바꿔야하는 문제가 존재했다. -> 

(SQL에 의존적인 개발 이라고 한다.)

"그렇다면 객체를 자바 컬렉션에 저장하듯이 DB에 저장할수 없을까?"  라는 궁금증에서 시작한게 JPA이다.

 


JPA의 동작방식

memberDAO를 사용한다고 가정했을때 JPA가 지정해놓은 특정한 메서드를 사용할경우 해당 메서드에 해당하는 SQL 쿼리를 JPA가 자동으로 생성, DB에 요청을 보내게된다.

 


JPA는 Persistence라는 클래스가 존재하는데 해당 클래스가 persistence.xml을 확인하여 EntityManagerFactory클래스를 만들고 해당 Factory클래스가 EntityManager를 만든다

또한 JPA는 JDBC API 사이에서 동작 되며 MemberDAO가 Entity Object를 던지면 자동으로 JPA가 캐치해서 DB에 SQL쿼리를 쏴주는 형태로 해당방식의 이점은 다음과 같다.

 

1. 엔티티 간의 연관관계를 모델링해주고 이를 기분으로 데이터 조회가 가능해진다.

2. 테이블간 참조가 필요할경우 JPA가 자체적으로 외래키를 참조한다.

3. 객체그래프 탐색문제 해결 -> 지연로딩으로 인해 연관관계를 JPA는 필요로하는 시점에 적절한 쿼리를 실행하여 연관된 객체를 조회가 가능하다.

4. 엔티티의 동일성 보장

 

즉시조회 - 데이터를 조회할때 이와 연관된 객체의 데이터까지 전부 로드하는것으로 1:N의 관계를 맺고있을경우 1을 호출하면 이와 연관된 모든 데이터를 가져오는것

지연로딩

데이터가 필요한 시점에 해당 객체와 연관된 객체의 데이터를 불러오는것

초기 로드시간 감소 및 메모리 사용 최적화의 이점 

지연쓰기

엔티티의 변경사항을 즉시 반영하는게 아니라 트랜잭션 끝에서 데이터를 일괄적으로 처리하는형태

네트워크 호출횟수 최소화 및 성능상 이점

 

지연로딩 (Lazy Loading) VS  즉시로딩

지연로딩 (Lazy Loading) : 객체가 실제로 사용될때 로딩

즉시로딩 : Join SQL로 한번에 연관된 객체까지 모두 조회

해당 코드에선 DB에 쿼리를 날리는 형태를 구현하였는데

 

Mybatis의 경우 메서드를 호출할때마다 해당 메서드가 실행된다 즉, 해당 코드에선 3번의 sql 쿼리를 DB에 전송하게 된다.

그에 반해 JPA는 지연쓰기를 지원하는 형태이기에 3번의 sql이 진행되더라도 이를 한번에 보내기 때문에 DB에 쿼리를 날리는 횟수는 1번에 지나지 않는다!

 

//JPA의 insert
transaction.begin();	//트랜잭션 시작
em.persist(A);
em.persist(B);
em.persist(C);
//쿼리 대기중
transaction.commit();	//트랜잭션 종료(커밋), SQL 실행


//Mybaits insert
transaction.begin();	//트랜잭션 시작
em.insetData(A);	//SQL 쿼리 실행
em.insetData(B);	//SQL 쿼리 실행
em.insetData(C);	//SQL 쿼리 실행
transaction.commit();	//트랜잭션 종료(커밋)

 

엔티티의 동일성 보장

JPA가 JDBC와 DAO 사이에 존재한다는 그림과 JPA가 지연쓰기를 지원함으로써 해당하는 특징이다.

SQL쿼리를 날릴때 쿼리를 모았다가 한번에 사용되는것인데 이것이 스프링의 컨테이너와 비슷하게 EntityManager라는 클래스가 해당 쿼리에 해당하는 엔티티의 생명주기를 관리한다.

그리고 여기서 사용되는 엔티티는 EntityManager에 존재하는 동일한 엔티티를 참조함으로써 동일성이 보장되는것이다.  

Member member1 = memberDAO.getMember(memberId);
Member member2 = memberDAO.getMember(memberId);

member1 == member2 // 다르다

public MembergetMember(String memberId){
...
retrun new Member(..);
}

//이런 형태로 이뤄지기 때문

Member member1 = list.get(memberId);
Member member2 = list.get(memberId);

member1 == member2 //같다

Member member1 = jpa.find(memberId);
Member member2 = jpa.find(memberId);

member1 == member2 //동일한 트랜잭션에선 조회한 엔티티의 동일성을 보장

 

 

1. JPA와 상속

JPA
jpa.persitt(album)...

Mybatis
insert into Item ...
insert into Album ...

조회 (Join을 jpa가 알아서 해준다)
JPA
Album album = jpa.find(Album.class, albumId);

Mybatis
Select I.*, A.*
	from ITEM I
    JOIN ALBUM a On I.ITEM_ID = A.ITEM_ID

 

2. JPA와 연관관계

연관관계 저장

연관관계 저장
member.setTeam(team);
jpa.persist(member);

객체 그래프 탐색
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();

Member member = memberDAO.find(memberId);
member.getTeam();	//객체 그래프 탐색 가능 -> 지연로딩으로 가능하게 된다.
member.getOrder().getDelivery();

 

 

기본적인 사용법

저장 jpa.persist(member)
조회 Member member = jpa.find(memberId)
수정 member.setName("변경할 이름")
삭제 jpa.remove(member)

 

JPA의 성능최적화 기능

1차 캐시와 동일성 보장

Member member1 = jpa.find(Member.class, memberId);	//SQL이 전송
Member member2 = jpa.find(Member.class, memberId);	//캐시

member1 == member2 //같다
println(m1 == m2)	//같다

트랜잭션을 지원하는 쓰기 지연 

//insert
transaction.begin();	//트랜잭션 시작
em.persist(A);
em.persist(B);
em.persist(C);
//쿼리 대기중
transaction.commit();	//트랜잭션 종료(커밋), SQL 실행


//update,delete 등
transaction.begin();	//트랜잭션 시작
changeMember(A);
deleteMember(C);
//비즈니스 로직이 실행될때 DB 로우락이 걸리지 않는다
//커밋하는 시점에 DB로 쿼리를 전송
transaction.commit();	//트랜잭션 종료(커밋), SQL 실행

 

 

 

 

 

 

 

 

 

작성중이며 수시로 업데이트 하고있습니다

(언젠간..전부 포스팅 예정..)

 

가수 - 곱해지는수 (EX : 2⁴ 에서 2)

객체 (Object) - 모든클래스의 조상 (부모가 없는 클래스는 컴파일러가 자동적으로 object 클래스를 상속도록 만든다)  

가상돔 (Virtual DOM) - 실제 DOM에 접근하여 조작하지 않고 추상화한 JS객체를 구성하여 사용 많은 데이터를 사용하는 대규모 웹에서 사용(CSS 재연산, 레이아웃구성 등의  

공유 메모리 모델 - 복수의 프로세스가 커널을 통해 주소공간의 일부를 공유하도록 요청하며 한번 설정되면 어떤 프로세스나 읽기쓰기를 진행할수 있다..

기법 (Mechanism) - OS의 설계에서 OS가 어떤 방식을(기능을) 담당할건지 결정하는것

결합도 (Coupling) - 모듈이 다른 모듈에 의존하는 정도

고정소수점 - 실수표현방식의 일종으로 현재는 부동소수점 방식을 더 사용한다.

가상화 (Virtualization) - 단일 컴퓨터(1개의 시스템)에서 여러 시뮬레이션 환경 및 전용 리소스를 사용하는 기술 (운영체제가 다른 운영체제내에서 사용하는것 -> 물리적 하드웨어에 구현됨)

강제타입변환 (Casting) - 강제로 타입을 다른타입으로 변환하는것

자식타입이 부모타입으로 자동변환시 부모타입 선언된 필드 및 메소드만 사용가능/부모타입 자식클래스로 강제 변환이 가능한건 아니다)

개방 폐쇄 원칙 (Open Closed Priciple, OCP) - OOP 5대원칙 중 하나로 확장에 열려있어야하며(추상화된걸 구현할수 있어야하며) 수정엔 닫혀있어야 한다. (추상메서드의 수정은 금지된다)

가상회선 식별번호 (VCI, Virtual Circuit Identifier) - 가상회선 방식에서 패킷을 전송할경우 보내는 패킷마다 자신의 순서를 명시하기 위해 만들어진 번호

기아상태 (Starvation) - 특정 프로세스의 우선순위가 낮아 자원을 할당받지 못하는 상태

경합조건 (race Condition) - 2개 이상의 명령어가 동시에 돌아갈경우 그들 사이의 경쟁으로 인해 수행 결과를 예측할수 없게되는것

논블로킹 (Non-Blocking) - 호출된 함수가 자신의 일을 마치지 않았더라도 바로 제어권을 호출, return하여 호출된 함수가 다른일을 할수 있도록 하는것(될때까지 딴거하고있어!) <-> 블로킹

난독화 (Code Obfuscating) - 코드를 읽기 어렵게 변환하는 작업으로 소스코드 난독화, 바이너리 난독화 2가지로 분류한다.

Null - 참조하지 않는다는 뜻이며 Null자체로 초기값을 갖는게 가능하기에 Null로 초기화된 변수는 스택영역에 생성된다.(배열도 Null값을 가질수 있다)

네이티브 앱 - 각 OS에 맞는 앱을 개발하는 방법

네임스페이스 (namespace) - 네임스페이스라는 소속 공간(한 코드)에 따라서 변수나 함수가 같은 이름임에도 다른 식으로 구분이 될 수 있는것

다형성 (polymorphism) - 1개의 객체가 여러가지 타입을 가질수 있는것 -> 오버로딩, 오버라이딩, 함수형 인터페이스가 예시

데드코드 (Dead Code) - 실행되지 않을 불필요한 코드

동적다형성 - 실행할 메서드가 런타임에 결정되는것으로 주로 @Override를 통해 결정되며 재사용 가능한 코드가 많으나 이로 인해 약간의 오버헤드가 발생한다 <-> 정적다형성

동적바인딩 (Dynamic Binding) - 실행 시간에 이름과 구현이 연결되는것 -> 프로그램의 유연성이 증가되나 오버헤드가 발생될 우려가 잇다. (가상함수의 오버라이딩, 인터페이스 호출 등)

(DOM, Document Object Model) - 웹페이지를 이루는 태그들을 JS가 이용할수 있게끔 브라우저가 트리구조로 만든 객체모델 (문서객체모델)

동일출처정책 (SOP, Same Origin Policy) - 동일한 출처의 접속만 리소스에 접근하도록 제한하는것 

덤프 (Dump) - 장애가 발생했을때 문제가 발생한 상태를 기록매체에 덮어씌우는것

데몬 (Deamon) - 사용자의 직접적인 제어 없이 서비스의 요청에 응답을 위해 백그라운드에서 여러 작업을 진행하는 프로그램

동적 (Dynamic) - 상황에 따라 실시간으로 변하는 상태로 클릭하면 움직이는 화면, PC에서 창 크기를 줄였을떄 이에 맞도록 컨텐츠의 사이즈가 줄어드는것

디버깅 (Debugging) - 버그잡기(에러 찾아서 고치기..)

동적링킹 (Dynamic linking) - 실행가능한 목적파일을 만들때 프로그램에서 사용하는 모든 라이브러리 모듈을 복사하지않고 해당 모듈의 주소만 갖고있다가 런타임시 링킹이 이뤄질때 해당 주소로 가서 필요한것들을 들고오는 방식 (필요한것만 가져오는 방식)

동기 (synchronous) - 요청과 결과가 동시에 일어난다(시간이 얼마나 걸리든지 요청한 자리에서 결과가 주어져야한다 - 편의점에서 계산을 맡길경우 계산이 완료될때까지 기다린다.) <-> 비동기 

더티체킹 (Dirty Checking) -

도메인 (Domain) - IP대신 사용하는 웹사이트 접속 주소 (132.204.123.143 대신 www.naver.com로 이것을 연결해 주는 시스템은 DNS(Domain Name System)이라고 한다

단일 책임 원칙 (Single Responsibility Principle, SRP) - OOP 5대원칙 중 하나로 객체는 1개의 책임(기능)만 가져야한다

동등성 (Identity) - 같은 내용을 갖고있는 객체 (값이 같은지? equals()메서드로 boolean여부를 반환 )

동일성 (Equality) - 동일한 오브젝트(같은 레퍼런스)를 바라보고있는 객체 (주소가 같은지? - hashcode()메서드로  )

디폴트메서드 (default) - 메서드 앞에 접근제어자(public, private 등)을 붙이지 않는 경우 디폴트 메서드로 인식된다.

(접두에 자동적으로 붙는것이며 구현 객체가FURL 필요하다)

 

리터럴 (Literal) - 변수에 넣는 데이터 (코더가 값을 넣은것을 의미하기도 한다)

런타임 (RunTime) - 컴퓨터 프로그램이 실행되는 동안의 동작

렌더링 (Rendering) - 서버로부터 요청해서 받은 내용을 브라우저 화면에 표시해주는것

리플렉션 (Reflection) - 클래스의 메타 정보를 얻는기능을 의미 (클래스의 필드는 무엇인지, 생성자를 갖고있는지 등)

롤백 (Roll Back) - 오류가 났을경우 오류가 발생하지 않은 직전의 버전으로 되돌리는것

로컬 클래스 - 메서드 내부에서 선언한 중첩클래스로 메서드 실행이 끝나도 힙 메모리에 존재한다 (접근제한자,static 접두 불가 -> 로컬에서만 사용하는 LV이기 때문에 붙이면 로컬이 아니게 된다.)

라우트(Route) : 경로, 서로 다른 네트워크 간 데이터를 전송하고 전송한데이터를 받는 경로

라우터(Router) : 인터넷 공유기를 떠올리자, 라우터는 한개의 인터넷 회신을 여러개의 네트워트가 사용할 수 있도록 쪼개주는, 중계 역할을 해주는 장치다.

라우팅(Routing) : 엔드 포인트(URI, 경로)의 정의, 해당 엔드포인트에 대한 클라이언트 요청에 애플리케이션이 응답하는 방식이다.

로더 (Loader) - 링커 또는 외부 기억장치로부터 주기억장치로 옮기기 위하여 메모리 할당 및 연결, 재배치 ,적재를 담당하는 서비스 프로그램 

로그레벨

  • Fatal(매우심각, 프로그램종료)
  • Error(의도치 않은 에러, 프로그램 미종료)
  • Warn(에러 발생 가능성 보유)
  • Info(개발자가 의도한 에러 및 요구사항에 따른 동작을 보여줄때)
  • Debug(Info 레벨보다 더 자세한 정보가 필요한 경우 Dev환경)
  • Trace(Debug보다 자세함, Dev환경에서 버그를 해결하기 위해 사용)

레지스터 (Register) - CPU가 요청을 처리하는데 필요한 데이터를 일시적으로 저장하는 기억장치

링킹 (Linking) - 컴파일러가 만들어낸 하나 이상의 목적 파일(우리가 작성한 코드 덩어리)과 라이브러리를 이를 실행 프로그램(exe 등)으로 병합하는것으로 동적링킹, 정적링킹이 있다. (해당 작업을 진행해주는 프로그램은 링커라 한다.)

링커 (Linker) - 컴파일러가 만든 1개 이상의 목적파일(소스코드)을 가져와 단일 실행 프로그램으로 병합하는 프로그램으로 심볼해석 -> 재배치의 순서를 거친다.(컴파일러가 원시코드를 파일로 생성하면 이 파일과 라이브러리 등 다른 파일들을 결합하여 exe 같은 프로그램을 생성)

래퍼클래스 (wrapper class) - 객체로 사용하기 위하여 사용(포장)해주는 클래스

로컬 변수 (Local value) - 메서드 내부에서만 유효한 변수 (메서드 종료시 사라진다)

리스코프 치환 원칙 (Listov Substitution Priciple, LSP) - 서브타입은 언제나 부모타입으로 교체할수 있어야한다.

루핑 (Looping) - 요소 전체를 반복하는것 (peek() - 중간처리 메서드, forEach() - 최종처리 메서드 2종류가 있다)

메소드,메서드 (method) - 객체의 동작에 해당하는 실행블록으로 함수와 비슷한것 (함수와의 차이점은 클래스 내부에 정의한 함수. -> 즉, 독립적으로 존재하는게 함수, 클래스 내부에 종속된게 메서드)

메소드 추출 (extract method) - 리팩토링에서 공통된 메소드를 추출하는것

마이그레이션 (migration) - 복수의 시스템이 갖춰진 환경에서 더나은 시스템으로 옮겨가는 과정 (OS, 

모놀리식 구조 (Monolithic) - 가장 간단한 OS구조로 최소한의 자원으로 최대의 기능을 제공하며 인터페이스와 기능계층이 잘 분리되어 있지 않다 (기능을 1개에 다 때려박은 단일 코드 덩어리라 생각하면 된다).

모놀리식 아키텍처 - SW의 모든 구성요소가 한 프로젝트에 통합된 형태로 단일 서비스로 실행

마운트 (Mount) - 디스크 등 물리적인 장치를 디렉터리에 연결시켜주는것

무한버퍼 (Infinite Buffer) - 공유 메모리 시스템의 프로세스간 통신에서 사용되는 개념으로 소비자는 항목을 기다릴순 있으나 생성자는 기다릴 필요가 없다  <-> 유한버퍼

메소드 영역 - 코드에서 사용되는 클래스들을 클래스 로더로 읽어 런타임상수풀,필드데이터, 메소드데이터, 메소드 코드,

생성자코드를 저장하며 JVM이 시작할때 생성되며 모든 스레드가 공유하는 영역이다.

메타데이터 - 컴파일 과정과 실행 과정에서 코드를 어찌 컴파일할것인지 알려주는 정보

매핑 (Mapping) - Key역할을 하는 데이터를 다른 데이터에 대응시켜 저장하는것

모듈 (module) - 프로그램을 구성하는 요소로 관련된 데이터와 함수를 1개로 묶은 단위를 의미한다.

멱등성(idempotent) - 연산을 여러번 적용해도 결과가 바뀌지 않는것으로 SW에선 몇번을 호출해도 결과가 동일해야 멱등하다고 이야기한다. -> 연산을 여러번 반복해도 한번 수행것과 같은 성질

멀티플 도메인 인증서 - 메인 도메인 이름을 비롯해 최대 99개까지의 대체 도메인 이름을 보호할수 있게 해준다 (통합 커뮤니케이션 인증서라고도 한다)

멀티 프로그래밍 (Multi Programming) - 1개의 프로세서가 1개의 프로세스를 실행하는동안 타 프로세스에 접근할수 있도록 하는것 (논블로킹방식)

메모리덤프 - 컴퓨터 프로그램이 특정 시점에 작업중이던 메모리 상태를 기록한것

멀티태스킹 - 같은 시간에 여러개의 프로그램을 띄우는(돌리는) 시분할 방식

바이어스 (Bias) - 부동소수점에서 지수의 부호 구분을 위한것

바이오스 (BIOS, Basic Input/Output System) - OS중 가장 기본적은 SW로 컴퓨터 입출력을 담당하는 펌웨어이다.

백그라운드 프로세스 - 

바이너리 암호화 (Binary Encryption) - 소스코드의 난독화가 아닌 디컴파일 자체가 불가능하도록 바이너리 자체를 암호화하는것으로 키가 있어야만 해독이 가능하다.

복호화 (디코딩) - 부호화된 데이터를 부호(코드)화 되기 전에 형태로 바꿔 사람이 읽을수 있는 형태로 되돌리는것

바이너리 로그 - DB복구에 주로 사용??

부하 테스트 (LoadTest) - 성능 테스트 및 성능 튜닝이 어느정도 완성되면 이것이 HW/SW 환경에서 얼마나 많은 사용자가 동시에 사용가능한지 테스트하는것을 의미한다.

백업 (Backup) - 데이터 손상, 손실을 대비해 저장하는 데이터의 사본 - 데이터의 복원이 주요목적으로 원본 삭제X

복원 (Restore) - 단일 파일, 서버 DB를 복원하기 위한 목적으로 특정 시점을 기준으로하여 이뤄진다 (어느시점인지 알아야한다)

블루/그린(Blue/Green) 배포 - 2개 이상의 인스턴스를 사용할때 신규 버전을 배포하는동안 로드밸런서를 이용해 기존 버전이 실행되는 인스턴스로 트래픽을 보내는 형태의 배포

부트블록 (Boot block) - OS부팅을 위해선 메모리 적재가 필요한데 이에 필요한 코드를 저장되어있는 디스크영역 (부트 섹터라고도 한다)

브로드캐스트 (Broad Cast) - 자신의 호스트가 속해 있는 네트워크 전체를 대상으로 패킷을 전송하는 일대다 통신방식

블랙박스테스팅(Black Box Testing) - SW테스트 방법중 1개로 SW 내부구조나 작동원리를 모르는 상황에서 기능을 테스트하는 방법

바인딩 (Binding) - 실제 구현에 연결하는 과정으로 프로그래머가 코딩을하여 컴파일을 할경우 프로그래머가 값을 변경할수 없는 상태 (정적바인딩, 동적바인딩)

바이너리 (Binary) - 2조각, 2부분으로 컴퓨터에선 이진파일을 의미한다 (0,1)

빌드 - 코드를 컴파일과정을 통해 (오브젝트 파일생성 -> 링킹 -> 라이브러리파일)로 만드는것 

병목현상 (Bottle neck) - 전체 시스템 성능이 다른 구성요소로 인해 제한받는것(2인 3각인데 두 선수의 기량차이가 다르다면 높은쪽이 낮은쪽에 맞춰서 가는것)

버퍼 (buffer) - 데이터를 한곳에서 다른 한 곳으로 전송하는 동안 일시적으로 그 데이터를 보관하는메모리의 영역 (I/O에서 는 CPU와 보조기억장치 사이에서 사용되는 임시저장공간을 의미하며 큐(Queue)라고 하기도 한다, 유튜브 영상볼때 미리 서버에서 받아온 데이터를 보관하는 부분은 하얗게 표시되는데 이것도 버퍼의 일종이다)

버스 (Bus) - 컴퓨터 부품 또는 컴퓨터간 데이터와 정보를 전송하는 통로

버퍼링 (Buffering) - 입출력시 CPU의 속도와 입출력 장치간 속도차이를 해소하기 위해 하드디스크, 메모리 영역에 자료를 잠시 저장해놓는것

분할 컴파일 - 실행파일을 만들기위해 소스파일을 여러개로 나눠 개발하는 방식

비선점형 OS - 프로세스가 CPU를 할당받았을때 그것이 자발적으로 중지되기 전까지 계속 실행되도록 보장 (이거먼저 끝내고 해라)

부동소수점 - 고정소수점의 정확한 값을 표현하지 못한다는 문제점을 보완한 방식

블로킹 (Blocking) -  작업완료 통보 방식 중 하나로 작업결과물이 아닌 작업이 완료될때까지 기다리는것(선행작업이 끝날때까지 제어권은 갖고있는 상태로 호출한 함수에게 바로 return하지 않는것 - 할때까지 기다려!) <-> 논블로킹

비동기 (Asynchronous) - 요청과 결과가 동시에 일어나지 않는것(요청한 자리에서 즉시 결과가 주어지지 않으며 결과가 나오기까지 대기시간동안 다른 요청의 처리가 가능하다 - 편의점에서 계산을 맡길경우 계산이 완료될때까지 기다린다. <-> 동기

박싱 (Boxing) - 기본자료타입을 래퍼클래스로 변환하는 작업으로 100만건 작업 기준 오토박싱 진행시 5배가량 성능 차이가 발생한다 (Integer 객체명A = new Integer(정수 또는 객체명B) <-> 언박싱 

생성자 (Constructor) - 객체 생성시 초기화 담당 (new연산자로 호출되는것)으로 생성자이름은 클래스 이름이며 return값이 없다.

스네이크 케이스 (snake_case) - 전부 작은 글씨로 쓰면서 중간의 공백은 "_" 로 쓰는것

스니핑 (sniffing) - 네트워크에서 다른 상대방의 패킷교환을 엿듣는것 (네트워크 트래픽을 도청하는것)

스트레스 테스트(Stress Test) - CPU,RAM,DISK등 환경이 갖춰지지 않은 어플리케이션에 비정상적으로 높은 부하를 걸어 한계 테스트를 진행해보는것 (시스템 레벨에서 결함을 예상하는것)

슬로우 쿼리

시멘틱 (Semantic) - 이것이 화면에서 어떻게 보여질까?가 아닌 이 코드의 의미, 즉 역할은 무엇이며 기능은 무엇인가를 나타내는 것(가격을 정의할떄 a=1000보단 price=1000 이 더 시멘틱 하다고 표현한다) 

세션 - 사용자와 서버간의 관계가 기억 및 보존되는 상태로 브라우저를 닫아 서버간 연결을 끝내는 시점까지를 의미한다. (방문자가 웹 서버에 접속한 상태를 한개의 단위로 보며 쿠키와 달리 서버의 자원을 사용한다)

선형 큐 (Linear Queue) - 일자로 구성된 큐(Queue)로 데이터처리가 진행되면 뒤쪽으로 한칸씩 밀려나지만 앞쪽은 공란인인 문제가 생긴다.  

스레드풀 - 스레드의 집합을 미리 생성해두고 관리하는방식으로 웹 서버에서 클라이언트의 요청을 처리할때 각 요청을 별도의 스레드에서 처리가능 

스마트 캐스트 (Smart cast) - 변수의 값이 실수일때도 정수일때도 있는데 이것을 컴파일러 혼자 값으 타입을 검사한후 이것을 자동으로 캐스팅을 하는것

샌드박스 (Sandbox) - 외부로부터 들어온 프로그램이 보호된 영역에서만 동작해 시스템의 부정조작을 막는 보안형태

상대경로 - 현재 위치를 기준으로 경로를 가리키는것 (./window -> 여기서 .은 상위폴더를 가리킨다)

서버 사이드 렌더링 (Server Side Rendering, SSR) - 클라이언트(브라우저)가 서버에 매번 데이터를 요청하여 서버에서 처리하는 방식

스키마 (Schema) - DB의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합 (

(Shell) - OS에서 커널과 사용자간 명령을 해석하기 위해 필요한 인터페이스를 제공하는 (인터프리터)프로그램으로 실제로 명령어를 전달하고 결과를 전달받는 프로그램 (명령 줄셸(CLI)과 그래픽 셸(GUI)이 있다)

셸 스크립트 (shell script) - 셸, 명령줄 인터프리터에서 돌아가도록 작성된 1개의 OS를 위해 쓰인 스크립트

시프트연산 (shift operator) - 비트 연산자중 1개로 비트값을 왼쪽(<<) 또는 오른쪽(>>)으로 이동시키는 연산자이다.

시스템 콜 (System Call) - 프로그램이 작업을 하려고 하는데 자신만의 권한으로 실행할수 없는경우 OS에게 부탁하는것으로 커널함수를 호출하는것이다.

소켓 - 통신을 진행할때 양쪽이 갖고있어야하는 부품, 전화기의 역할 (브라우저에서 쌍방간 통신할때 필요한것 -> 웹소켓

// JAVA는 연결기반(TCP), 비연결성(UDP) // 스프링은 자체 웹소켓지원 API 제공 )

스풀링 (Spooling) - 프린터 등이 병렬 수행 프로그램이 사용할수 있도록 도와주는 방법 -> 하드디스크에 공간을 확보하여 프린터로 전송될 데이터를 먼저 받아서 저장해두면 프린터는 혼자 작동하고 그동안 CPU는 다른일을 할수 있게 된다 (재료투입구에 재료를 넣어놓고 다른것 하는것)

시퀀스 (Sequence) - 저장순서를 기준으로 찾는다

스와핑 (swapping) - 프로세스 할당이 끝나면 보조 기억장치로 프로세스를 보내고(스왑아웃) 새로운 프로세스를 메모리에 적재하는것 (스왑인)

선점형 OS - 프로세스가 CPU를 할당받아 실행중이라도 다른 프로세스가 기진행중인 프로세스를 중지하고 CPU를 강제로 점유할수 있다 (하던거 멈추고 다른거 부터 할수있다) 

스택트레이스 (Stack Trace) - 프로그램이 시작된 시점부터 현재 위치까지의 메서드 호출목록 (JVM이 자동으로 생성 -> 예외가 발생한 위치 확인가능)

싱글 도메인 인증서 - 한개의 도메인 또는 그 서브 도메인을 위해 발행되는것 

삼항연산자 (?:) - if에서 발전된 문으로 "조건식 ? 값(true) : 값(false)" 형식이다.

                            (EX :  int b = (5 < 4) ? 50 : 40;   //b는 50이 들어간다)

스택 (Stack) - 쌓아놓은 더미 라는 뜻으로 이전에 사용되던 데이터 등이 보관되는 장소로 저장방식은 후입선출 방식 (복수의 클립보드 같은것)  (EX : int a = 5; 일때 a의 값은 스택에 저장된다)

시분할 시스템 (Time Sharing System, TSS) - 여러명의 사용자가 사용하는 시스템에서 컴퓨터가 사용자들의 프로그램을 번갈아가며 처리하는것 (라운드 로빈 방식이라고 하기도 한다)

시분할 기법 (Time-shared) - 아주 짧은 시간 간격을 두고 여러 프로그램을 전환하며 실행 (전환은 OS가 담당, 멀티태스킹, 멀티스레드를 가능하게하는 기법)

상수 (Const) - 참조변수 메모리의 주소값이 변하지 않는다는 의미 (그 주소가 가리키는 데이터들은 변할 수 있다)

싱글톤 (Singleton) - 단일객체 생성을 보장하며 여러 스레드의 요청이 들어와도 객체는 오직 1개임을 보장 (new연산자 사용시 생성자를 호출한 만큼 객체가 생성되는데 이를 방지)

인증 - 실제 사람이 맞는지 확인하는것 (내방객분 예약하신 성함이 어찌되실까요?)

인가 - 권한이 있는지 확인하는것 (내방객분 출입권한은 있으신가요?)

인스트럭션 (instruction) - 컴퓨터에게 일을 시키는 단위로 명령부(OP)와 처리부(Operand)로 구분됨

암호화 (Encryption) - 보안 유지를 위해 데이터를 읽을수 없는 형식을 바꾸는것으로 키가 있어야 해독이 가능하다

언패킹 (Unpacking) - 패킹된 소스코드를 보기위해 암호화나 압축을 푸는행위

이스케이프 시퀀스 (escape sequence) - 표현할수 없는 문자나 기능을 표현해주는 역할 (제어 시퀀스, 확장 비트열, 이스케이프 문자라고도 한다 - \n, \\, \"...)

웹 표준 - 브라우저마다 다른 코드의 실행방식을 통합해 정한 규칙 (W3C) 

엣지케이스 (edge case) - 알고리즘이 처리하는 데이터값이 알고리즘 특성에 따른 범위를 넘을경우 발생 (int 

원형 큐 (Circular Queue) - 선형큐의 단점을 보완해서 나온 큐(Queue)로 이동에 따라 front 또는 rear가 이동하며 Front가 큐의 끝에 도달하면 큐의 맨앞으로 자료를 보내 원형으로 연결하는 방식

온프레미스 (on-premise) - 사내 전산실에서 자체적으로 서버를 구축, 관리하는것

아카이브 (Archive) - 보관, 참고용으로 생성한 데이터의 사본으로 일부 과거의 일부데이터 회수가 주요목적 -> 원본 데이터 삭제가 종종 있다.

유한버퍼 (Finite Buffer) - 공유메모리 시스템의 프로세스간 통신(IPC)에서 사용되는 개념으로 버퍼가 고정되있다고 가정하여 버퍼가 비었을경우 소비자는 무조건대기, 모든 버퍼가 채워져있으면 생산자는 대기오버플로가 발생할 우려가 있으며

데이터손실, 전송지연 등 문제가 나타날수있다. 

암묵적 스레딩 (implicit Threading) - 프로그램, 시스템이 자동적으로여러 스레드를 활용해 병렬로 처리하는것 (스레드풀)

인픽스 (infix) - 2개의 피연산자 사이에 연산자가 존재하는것 (a+b)

운영체제 (OS, operating system) - HW가 컴퓨터 시스템 운영(조작)을 도와주는 SW

응집도 (Cohesion) - 모듈안의 요소들이 함께 속하는 정도 (메소드, 클래스의 데이터간 강도 등)

인라이닝 (Inilning) - 호출 부분을 함수 전체 코드로 치환하여 컴파일한다. 

아키텍처 (Architecture) -  1개의 서비스가 어떻게 구성되며 어떤 원리로 돌아가는지 설명하는 틀 또는 설계도 (ISO 규격, 청사진같은 개념으로 이해하면 된다 -> ISO 7001 규격에 맞춰서 작성했다)

의존 (Dependence) - 객체끼리 서로 참조등으로 A를 실행하기 위해선 B가 필요한경우 A는 B에 의존한다고 한다 (내가 메세지를 보내기 위해서는 카카오톡이 필요하다 -> 내가 메세지를 보내는 행동을 위해선 카카오톡이 필요(의존)한다)

의존성주입 (Dependency Injection, DI) - 클래스 외부에서 의존되는것을 대상 객체의 IV에 주입하는것 (프로그램 디자인이 결합도를 느슨하게 되도록 의존관계역전(DIP) 및 단일책임원칙(SRP) 을 따르도록 클라이언트의 행위를 분리하는것)

오버헤드 (Overhead) - 어떤 처리를 하기위해 들어가는 간접적인 처리시간, 메모리 등

익명함수 (Anonymous Function) - 함수의 이름이 없다는 뜻으로 익명함수는 모두 일급객체로 취급된다.

에뮬레이션 (Emulation) - 1개의 시스템이 다른것을 흉내내는것으로 A에서 구동되나 B에서 구동불가시 B가 A의 동작을 에뮬레이션(흉내) 한다 (실제로 B가 A를 구현한것은 아님)

인터럽트 서술자 테이블 (IDT, Interrupt Descriptor Table) - 인터럽트 처리를 위해 서비스 루틴을 함수로 구현해놓고 각 함수의 시작점을 등록해놓은 테이블

일급객체 (First-Class Object) - 변수나 데이터에 할당할수 있어야하며(메서드에 데이터를 담을수 있어야하며) 파라미터 및 반환값으로 사용이 가능한(return method()) 객체

언박싱 (Unboxing) - 래퍼클래스를 기본자료타입으로 변환시키는 과정 <-> 박싱

인터렉션 (Interaction) - 2 이상의 물체 또는대상이 서로 영향을 주고받는 일종의행동

예외 (Exception) - 코드로 수습할수 있는 미약한 오류 (실행은 됩니다!)

오류(Error) - 코드로 수습 불가능한 심각한 오류로 수습이 안되니 일단 종료시키는것이다. (실행도 안됩니다!, 가장 자주 나타는 오류는 OM이다.

인터럽트 (interrupt) - 특정 기능을 수행하던 도중에 작업을 멈춰달라고 요청하는것으로 InterruptedException를 활용 (오류발생으로인한 종료, 정상적인 방법에 의한 종료, 작업을 취소하는경우의 종료, CPU엔 인터럽트 라인이 존재한다.)

인터럽트 벡터 (Interrupt vector) - 인터럽트 발생시 그 인터럽트를 처리할수 있는 서비스 루틴의 시작주소를 갖고 있는 공간으로 컴퓨터전원이 켜질때 OS는 인터럽트 벡터값을 초기화를 진행한다.

인터프리터 (interpreter) - 고급언어로 작성된 프로그램을 한줄단위로 읽고 실행시키는 프로그램 (목적프로그램 미생성, 속도느림, CPU낭비 큼 //파이썬, APL 등)

엘리먼트 (element) - 어노테이션에서 사용하는 멤버 (외부의 값 즉, 리터럴을 입력받는 부분)

와일드카드 - *,?으로 포인터 및 3항 연산자를 뜻하는게 아니며 해당 파일, 텍스트를 찾을떄 못찾겠다면 해당 문자를 넣는 형식 (프로?래밍 -> 프로구래밍,프로그래밍, 프로기래밍 등 출력 ||||| 프로* -> 앞의 2글자가 "프로"로 시작하는 모든것 출력)

유니코드 (Unicode) - 코드 테이블 인덱스값으로 모든 문자에 대하여 유니크한 넘버를 부여한것이다 (유니코드는 플랫폼,OS,언어에 독립적이다)

인터페이스 분리 원칙 (Interface Segregation Principle, ISP) - OOP 5대원칙 중 하나로 큰덩어리의 인터페이스를 작은단위로 분리시켜 필요한 메서드만 사용하게 해야한다. 

의존 역전 원칙 (Dependency Inversion Principle, DIP) - OOP 5대원칙 중 하나로 상위모듈(부모개체), 하위모듈(자식개체) 모두 추상화에 의존해야하며 상위모듈이 하위모듈에 의존하면 안된다.

인스턴스 맴버 클래스 - static 없이 선언된 클래스 (인스턴스 필드, 인스턴스 메서드만 선언가능 / 정적필드, 정적 메서드 선언불가)

익명클래스 - 이름이 없는 클래스로 정의와 생성을 동시에 한다 (new 조상클래스 또는 new구현인터페이스)

오버플로우 (Overflow) - 넘쳐흐른단 뜻으로 연산의 계산 결과가 허용 범위를 초과할 때 발생하는 오류

오버로딩 - 동일한 메소드를 매개변수, 순서를 다르게하는것 (동명이인, 새로 만드는것)

오버라이딩 (Override) - 상속된 메소드(상위메서드)의 내용이 자식클래스(하위메서드)와 맞지않는경우 자식클래스에서 동일한 메소드를 재정의(수정)하는것(오버라이딩시 초기 상속된 부모메서드는 사라지므로 super를 활용해 부모메소드 재호출 할것)

어노테이션 (Annotation) - 애플리케이션에서 처리할게 아닌 컴파일 과정, 실행과정에서 코드를 어떻게 컴파일하고 처리할지 알려주는정보 - 메타데이터라고 볼수 있다

인터페이스 (Interface) - 객체의 사용방법을 정의한타입으로 자바의 람다식은 인터페이스의 구현개체를 생성한다 ->개발코드를 수정하지 않고 사용객체를 변경하기 쉽도록 하기위해서 작성 (4가지 특성 - 상수필드 - 상수 선언시 초기값 필요, 추상메소드 -매개값 및 리턴값만 알려준다,정적메소드,디폴트메소드 // 인터페이스 구현은 자식 인터페이스의 메소드와 그것의 부모인 인터페이스의 메소드까지도 모두 구현해야한다.)

인스턴스 -

인스턴스 변수 - 개별속성으로 들어가는 것엔 인스턴스 변수 (사람마다 다른 이름, 주민번호 등) <ㅡ> 클래스 변수 

웹 컨테이너 - jakarta의 서블릿과 상호작용하는 웹 서버 컴포넌트 중 1개로 서블릿의 수명주기 관리 및 URL 매핑을 확인하는 역할과 JSP파일, 서버측 코드를 포함한 기타유형 파일에 대한 요청을 처리한다

제어자 (modifier) - 클래스와 클래스의 맴버(맴버변수, 메서드)에 부가적인 의미 부여로 다중사용 가능 -> 접근제어자 이외의 것들(staic,final,abstract ...)

정적다형성 - 호출되는 메서드가 컴파일 시간에 결정되는 방식으로 성능상 이점이 제공된다(오버헤드 미발생  <-> 동적 다형성

정적 (Static) - 고정된 의미로 객체생성없이 사용가능한것으로 클래스의,공통적인 (정적멤버, 정적필드, 정적메서드)

정적 사이트 생성 (Static Site Generation, SSG) - 각 페이지를 빌드시점에 정적파일로 생성하고 클라이언트가 요청할때 이것을 넘겨주는 형식으로 CDN과 사용시 효율이 극대화된다.

정적 바인딩 (Static Binding) - 컴파일 시간에 이름과 구현이 연결되는것 (함수 오버로딩, 최종클래스, 메서드 호출 등)

정책 (Policy) - OS의 설계에서 OS가 무엇을(어떤 프로그램) 담당할건지 결정하는것

재배치 (Relocation) - 링커가 심볼을 해석하면 각 심볼의 참조는 1개의 심볼 정의(1개의 값)만 갖는것으로 목적프로그램을 실제 주기억 장소에 맞게 재배치하는것(상대주소를 절대주소로 변경)

절대경로 - 현재 위치하고 있는 경로와 상관없이 늘 같은 경로를 가리킴

정적링킹 (Static linking) - 실행 가능한 목적파일을 만들때 프로그램에서 모든 라이브러리 모듈을 복사하는 방식 (링커가 실행하며 모든 라이브러리를 복사하기에 중복이 발생한다)

정적메서드 (Static Method) - 객체생성 없이 직접 접근가능 ( class_name.method_name -> "클래스명","메서드명")

정적필드 (Static filed) - 객체 생성없이 직접 

정적 맴버 클래스 - static 키워드로 선언된 클래스 (모두 선언가능)

중첩 (Overray) - 당장 필요하지 않는 프로그램의 일부를 중첩으로 설정하는 방식 (필수 명령어,데이터만 적재하고 나머지는 메모리 중첩영역에 만들어 필요할때 그 공간에 적재 -> 창고 여유공간이라 생각하면 된다)

지수 - 제곱하는 부분 (EX : 2⁴ 에서 4)

자바 가상 머신 (JVM) -  Java 는 OS에 종속적이지 않다는 특징을 가지고 있는데. OS에 종속받지 않고 실행되기 위해선 OS 위에서 Java 를 실행시킬 무언가가 필요하다. 그게 바로 JVM이다. 즉, 어떤 환경이든 똑같은 실행결과를 도출한

중첩클래스 (Nested Class) - 클래스 내부에 선언한 클래스 (불필요한 클래스 관계를 감춰 코드의 복잡성을 줄이는 목적 - 정적 맴버 클래스, 로컬 클래스,인스턴스 맴버 클래스)

중첩인터페이스 (Nested Interface) - 클래스 내부에 선언한 인터페이스 (해당 인터페이스와 관계를 맺는 구현클래스를 만들기 위해서 -> UI 이벤트 처리목적)

최상위 부호 비트 (MSB) - 비트를 2진수로 변환했을때 가장 큰값(맨앞에 있는값) 10110

최하위 부호 비트 (LSB) - 비트를 2진수로 변환했을때 가장 작값(맨뒤에 있는값) 10110

추상 (abstract) - 실체간 공통이 되는 특성을 추출한것 (게임에서 캐릭터마다 유닛, 건물마다 체력, 이름이 있는 공통된 특징을 추출하여 선언한것을 추상화 하였다 라고한다. - 체력, 이름이 있다는것만 알지 체력이 몇인지, 이름이 몇인지는 하위클래스에서 정의한다)

추상메서드 (abstract method) - 자식클래스에서 반드시 오버라이딩해야 사용가능한 메서드 (컴퓨터한테 강아지란 개념을 이해시킬때 강아지라는걸 선언만 해놓고 다리로 구분하는 집합에선 다리가 4개인것으로, 종별로 구분할땐 포유류로 구분해야 하듯이 개념을 추상적으로 해놓고 필요한곳에서 오버라이딩을 이용해 구현하여 사용하는것)

클래스 (Class) - OOP에서 특정객체를 생성하기 위하여 변수와 메서드를 정의하는 일종의 틀

클래스 변수 (Class Value- CV) - 주로 공통속성인 변수에 static을 붙이는 형태로 사용시 "클래스명.변수"형태 <ㅡ> 인스턴스 변수 

클라이언트 (Client) - 네트워크로 연결된 서버로부터 정보를 제공받는 컴퓨터 

클라이언트 - 서버 모델 - 서버가 한대 이상의 클라이언트에게 리소스를 제공하는 형식

클라이언드 사이드 렌더링 (Client-side Rendering, CSR) - 클라이언트가 입력한것을 수신해 데이터만 받은 상태에서 JS가 HTML로 만들고 이를 애플리케이션에서 해석해서 표시하는것

크로스 플랫폼  - 동일 소스코드로 여러 OS에서 동작하는 앱을 만드는도구 (페북,에버비앤비,인스타그램)

카멜케이스 - 앞은 소문자 뒤는 대문자 (leageuOfLegend)

쿠키 (Cookie) - 브라우저에 저장되는 텍스트 조각(사용자 정보)으로 탈취되어도 큰 문제가 없는 데이터 보관

코너케이스 (Corner Case) - 엣지케이스를 만족지만 외부변수나 특정 조건에서 문제가 발생하는 경우 (다 돌아가는데 윈도우 98은 지원이 안됨.. 등)

코드스니펫 (Code Snippet) - 코드조각, 재사용 가능한 소스코드를 가리키며 코드의 일부를 복붙할때 사용하기도 한다

콘솔 - 시스템을 물리적으로 조작할수 있는 체계 또는 입출력장치

컨텍스트 (Context) - 어떠한 행위를 할떄 필요한 정보

컨텍스트 스위칭 (Context switching) - 다수의 프로세스 실행 중 기존 프로세스를 중단하고 다른 프로세스를 교체하는것 으로 CPU에 실행할 프로세스를 교체하는 기술 (문맥교환이라고도 한다)

커널 (Kernel) - OS의 핵심이 되는 컴퓨터 프로그램으로 시스템의 모든것을 통제하며 각 응용프로그램 수행, 하드웨어 자원을 필요로하는 프로세스에 할당, 메모리제어, 시스템 콜을 수행하는 부분으로 항상 메모리에 상주하는부분

커널패닉 (kernel panic) - OS의 커널의 온전한 복구 및 계속 실행시 오류 발생의 여지가 있는경우 이를 방지하고자 나타내는 오류 (메모리 고갈로 시스템 핵심 기능이 실패하게 되는것, 블루스크린)

마이크로 커널 - 

캐시 (Cache) - 대용량 메인 메모리(RAM)과 중앙처리장치(CPU) 사이에 있는 데이터를 처리할떄 자주 사용하는 데이터를 보관하는곳 (자주 사용되는 데이터나 프로그램은 이 캐시에 저장해놓으며 중앙처리장치 명령시 캐시를 먼저 찾아보고(있으면 캐시히트) 없으면(캐시 미스) DRAM에서 데이터를 찾는다)

컴포넌트 (Component) - 재사용이 가능한 각각의 독립된 모듈로 여러 프로그램 함수를 모아 특정기능을 수행하도록 구성한 기능적인 단위 (여러 컴포넌트를 링크하여 실행가능한 단일파일(exe)로 만들수 있음

클래스로더 (Calss Loader) - 동적로딩에 필요한 클래스간 로딩 및 링크하여 런타임 데이터영역 (JVM메모리)에 올린다.

컴파일 (compile) - 코드 전체를 다른 언어로 바꿔주는 과정 -> 내가 작성한 "hello world"(고급언어)를 add  esp,12(어셈블리어) -> 010100010101(기계어)로 바꾸는것

컴파일러 (compiler) - 고급언어로 작성된 프로그램 전체를 목적프로그램을 생성해 실행가능한 프로그램을 생성(인터프리터보다 빠름 -> 코드를 전체를 한번에 읽기때문 //C언어, 자바 등)

코드를 한번에 번역하기에 배포시 구문오류가존재할수 없다, 기계어를 직접 만들어낸다, 수행성능이 좋다, 메모리관리는 직접해야한다.

크로스 사이트 스크립팅 (Cross-site scripting) - 웹 애플리케이션에서 나타나는 취약점으로 사이트 관리자가 아닌이가 웹페이지에 악성 스크립트를 삽입할수 있는 취약점이다 (

캡슐화 - OOP 특성중 하나로 외부로부터 데이터를 보호하기 위하여 직접접근을 막는것 (다른 객체에서 접근하여 값을 바뀐는걸 방지하기 위함 -> 접근제어자 기능)

콜백 (callback) - 멀티스레드의 작업완료 통보 방식중 하나로 작업처리를 요청 후 다른기능을 실행할수 있다 (작업 완료시 콜백메서드가 자동적으로 실행되기 때문)

터미널 (Terminal)  - 서버의 로컬 또는 원격으로 접속할 수 있는 콘솔(키보드, 마우스) SW로 구현한것으로 GUI에서 사용할수 있도록 하는 프로그램 (CMD)

트리 (Tree) - 나무가지처럼 노드로 이루어진 자료구조

트랩 (Trap) - 소프트웨어 인터럽트라고 말하며 프로그램(SW) 내부에서 발생하는 에러로 프로세스가 특정 시스템을 사용하려고 할떄 그 기능을 OS에 요청하는 방법 -> 프로세스 권한 밖의 일이니 인터럽트를 발생시켜 OS에게 해달라 요청

트랜잭션 (Transaction) - DB의 상태를 변화시키기 위하여 수행하는 작업의 최소단위 (주문하는 거래단위는 주문 -> 결제 -> 배송까지 주문완료이다. 전체 과정을 트랜잭션이라 칭한다)

템플릿 - 메서드 패턴 (Template Method Pattern) - 객체지향 디자인 패턴중 하나로 알고리즘 구조를 정의하고 일부 단계를 서브 클래스(자식클래스)에서 구현하도록 하는것 -> 기본적인 흐름은 추상클래스로 짜주되 필요한건 직접 구현하라고 하는것

필드 (field) - 객체 생성시 데이터가 저장되는곳 (변수와는 다르다!)

팩토리 메서드 패턴 (Factory Method Pattern) - 

포그라운드 작업 (foreground) - 사용자와 대화창구인 I/O장치를 통해 대화하듯 결과가 출력될때까지 기다리는 방식으로 처리하는 작업 (CMD에 명령어 입력시 결과가 출력되고 이것을 사용자가 보고 다음 명령어를 입력하는 (대화식) 작업)

프리픽스 (Prepix) - 연산자를 앞으로 배치하는 방식 {EX : (a+b)*c) -> * + a b c}

포스트픽스 (Postpix) - 연산자를 피연산자 뒤쪽에 표시하는 방법 ()

패킷 (Packet) - TCP/IP에서 사용되는 데이터의 단위로 인터넷상 네트워크 통신에선 호스트와 서로 패킷을 주고받는것 

포워딩 (Forwarding)- 데이터 패킷을 다른 장치로 전달하는 과정 (Port 포워딩, IP 포워딩)

패킹 (Packing) - 역설계를 막기위해 실행파일을 암호화 및 압축하는것으로 프로그램 용량을 줄이거나(Shrink) 검사 및 분석을 어렵게 하기위해서 사용된다.

패커 (Packer) - 실행파일을 변환하여 데이터를 저장하고, OS에서 호출하는 언패킹 스텁을 제공한다 -> 내부에 압축해제 코드를 퐇마하여 실행하는 순간 알아서 압축해제 및 실행되는 기술이다.

플레인텍스트 (plain text) - 그림, 그래픽이 아닌 문자열만을 대표하는 데이터

패키지 (package) - 클래스간 관리를 용이하게 하도록 관련된 클래스의 묶음을 의미하며 동일한 패키지에 속해있다면(동일한 C드라이브에 속해있다면) 사용가능하며 다른 패키지에 있는건 Import기능 사용 (패키지 경로 지정 - C:\User\Desktop를 package test.packgetest의 예시와 같이 참조할 클래스의 경로를 지정해주는것)

퍼널 (Punner) -  고객이 페이지를 탐색할때 접근하는 비율이 점차 작아지는데 이 모양이 깔대기와 같다하여 붙여진 이
프로토콜
(Protocal) - 컴퓨터 또는 전자기기 간 원활한 통신을 위해 지키기로 한 규약

프레임 (Frame) - 물리주소공간이 일정한 크기로 균일하게 나뉜것 TCP, IP, HTTP, SMTP, FTP, DHCP 등이 있다.

프레임워크 - 개발에 필요한 기본적인 기능이 내장된 제작키트

페이지 (Page) - 논리주소공간이 일정한 크기로 균일하게 나뉜것

프로세서 (Processor) - 중앙처리장치(CPU)를 의미하여 컴퓨터 내에서 프로그램을 수행하는 하드웨어 유닛 (HW)

프로세스 (Process) - 컴퓨터 프로그램을 구동하여 프로그램 자체와 프로그램의 상태가 메모리 상에서 실행되는 작업단위로 프로세서가 실행할 명령어와 데이터 목록을 메모리에 읽어들인것 (프로세스간 자원 공유는 불가하며 만일 공유할경우 커널패닉 발생, 텍스트(실행코드)섹션, 데이터(전역변수)섹션, 힙(동적 할당 메모리)섹션, 스택섹션)

포인터 (point) * - 위치를 표현하는 것으로 그릇위에 사과가 있을때 누군가 그릇에 있는걸 가져오라고 하면 그릇은 사과를 가리키는 포인터가 되는것이다

펌웨어 (Firmware) - 특정 HW(주로 ROM)에 포함된 SW로 전자기기의 기본적인 제어 및 구동을 담당

(heap) - 객체와 배열이 생성되는 영역으로 여기서 생성된 객체 및 배열은 JVM 스택 영역의 변수 및 다른객체의 필드를 참조한다 (참조하는 영역이 없으면 JVM 에선 Garbage로 판단, GC가 가동되어 삭제된다)

(EX : String a = "야근왕" 에서 야근왕은 힙영역에 저장된다)

함수 (Fuction) - 어떠한 기능을 위하여 만들어진 기능 (독립적으로 존재하는게 함수이냐, 클래스 내부에 종속된게

메서드)

회수 (Retrieval) - 데이터 관련 모음으로 일정 시간대를 사용해 데이터를 가져오는 방식 (일정 기간의 문서, 파일등을 회수)

헤더 (Header) - 

활성화 레코드 (Activation record) - 메인함수 호출시 생성되고 스택에 저장되며 컨텍스트 스위칭 이전에 함수상태를 기록,복원을 위한것이다 (리턴값, 값 파라미터, 지역변수 등을 기록하며 스택 프레임(Stack Frame)이라고도 한다)

해시 (Hash) - 다양한 길이를 가진 데이터를 고정된 길이를 가진 데이터로 매핑한것 (A -> 4tew43 / BFDS -> 64sfds)

해시함수 (Hash Function) - 데이터를 입력받아 데이터에 산술연산을 수행하여 한개의 수를 반환

횡단관심사 (cross-concern) - 핵심적인 기능이 아닌 중간중간에 삽입되야할 기능을 의미한다

기타, 영어

` (숫자 키패드 1번 옆에것) - 백틱

ABI (applictaion binary interface) - 응용 프로그램 이진 인터페이스로 특정 아키텍처에서 2개 이상의 SW간 하위수준 이진 인터페이스를 정의

final - 값을 고정하는 것으로 한번 선언한경우 프로그램 도중 수정이 불가능하다. (클래스 - 상속불가 ,필드 - 수정불가 ,메소드 - 오버라이딩 불가 모든곳에 사용가능)

RAM (Random Access Memory) - 임의 접근(Random Access)이 가능한 메모리로 어떤 위치에 있든 즉시 이동해 값을 읽을수 있는 메모리로 빠르지만 값이 비싸다 (DRAM,SRAM으로 나뉜다)

DRAM (Dyanmic RAM, 동적 메모리) - 전원이 계속 공급되더라도 주기적으로 재충전 되어야 기억된 내용을 유지할수 있다.

XMX (Memory Maximum) - JVM이 사용 가능한 힙 메모리의 최대크기, 클수록 GC의 빈도가 줄어드나 GC에 드는 시간이 오래걸린다.

XMS (Memory Start) - JVM의 Heap의 크기 제어를 설정, 작을수록 GC가 자주 일어나며 너무 작으면 OOM이 발생한다. (기본값 : 50MB)

Dispatcher (디스패처)- 요청, 작업, 이벤트 등을 적절한 처리기나 서비스로 전달하는 역할

  • OS - CPU 스케줄러의 일부로 준비상태의 프로세스중 1개를 선택, CPU실행을 위해 그 프로세스를 준비하는 역할(컨텍스트 스위칭)
  • 웹 - HTTP 요청을 받아 그 요청을 URL, 메서드 같은 정보를 분석해 해당 요청을 처리할 컨트롤러, 뷰로 라우팅하는역할 (디스패처서블렛 스프링에서 중앙 허브같은 역할로 - 요청매핑, 핸들러실행, 모델 및 뷰 선택, 예외처리, 뷰 렌더링)
  •  

CPU Schediling (CPU 스케쥴링) - CPU가 유후 상태가 될때마다 OS는 준비 큐에 존재하는 프로세스중 한개를 선택해 실행해야하며 이것은 스케줄러에 의해 실행된다.

UEFI (Unified Extensible Firmware Interface) - 시스템 부팅, 운영체제 로드에 사용되는 S/W 인터페이스  (BIOS 대체목적)

REMEMBER_ME : 스프링 시큐리티에서 세션종료 및 브라우저가 꺼져도 사용자를 기억하고 자동로그인을 제공하는것 (통상적으로 쿠키를 사용)

SPA (single-page application) - 단일 페이지 애플리케이션으로 현재 페이지를 동적으로 작성함과 동시에 사용자와 소통하는 웹 애플리케이션

EAR (Enterprise Archive) - 하나 이상의 모듈들을 하나의 아카이브로 묶어 여러 모듈이 애플리케이션 서버에 동시에 배치되도록하는 파일 (Gradle, maven 등)

Deploy - 배포

CDN (Content Delivery Network) - 서버에서 사용자가 요청하는 콘텐츠를 캐싱해두고 가까운 위치에서 콘텐츠를 제공하는 역할

NAT - IP 헤더에 있는 네트워크 주소 정보를 수정하여 다른 주소로 매핑하는 기술

Tenant -

LoopBack - 로컬 호스트 주소라고도 이야기하며 자신에게 데이터를 전송하고 다시 받는 과정 즉, A의 네트워크 계층이 B의 네트워크 계층으로 패킷을 전송하는게 통상적인데 목적지 주소를 LoopBack으로 한채 패킷을 보낼경우 A네트워크 계층의 상위로 값을 올려보낸다(IPv4의경우 127.0.0.1 /// IPv6의 경우 ::1)

3th party cookie (서드파티쿠키) - 웹사이트를 방문할떄 해당 사이트가 아닌 다른 도메인에 생성되고 저장되는 쿠키로 A사에 접속했는데도 B사가 해당 쿠키(데이터)를 수집할수있다. 

SMTP (Simple Mail Transfer Protocol) - 이메일 메세지를 주고받는데 사용되는 통신프로토콜

SEO (Search engine optimization) - 검색 엔진 최적화로 각 웹사이트나 웹페이지에 대한 트래픽의 품질과 양을 개선하는 과정이다.

Thread - 다른 스레드와 독립적으로 실행될수있는 프로그램내의 일련의 명령 -> (멀티스레드) 

DeadRock - 교착상태란 의미로 스레드에선 상호간 리소스가 해제되기만 기다리고 있는 상황 (이도 저도 못하는상황)

AJAX (Asynchronous Javascript And Xml) - 자바스크립트를 통해서 서버에 데이터를 비동기 방식으로 요청하는것

JDBC API - 순수 자바코드를 통한 DB 접근

Entry Point - 프로그램 시작점 (java의 psvm)

SSO (Single Sign-On) - 한번의 로그인으로 다른 사이트에서 자동적으로 접속하여 이용하는것 (A에 카톡 로그인시 B도 로그인됨)

RSS (Rich Site Summary) - 새로운 콘텐츠가 올라왔을때 해당 사이트에 방문하지 않고 리더 한곳에서 그 콘텐츠를 이용하기 위한 방법 (XML 기반 문서형식으로 이뤄져있다)

SpringJdbcTemplate - JDBC API에 템플릿 메서드 패턴을 적용해 커넥션을 얻어 DB 접근 (SQL코드 작성 필요)

MyBatis - SQL 매퍼라고 불리며 프로그램 코드와 SQL코드를 분리할수 있다. (XML에 SQL코드 작성)

JPQL - 엔티티를 통해 DB에 접근이 가능하며 SQL과 유사한 코드로 테이블 중심이 아닌 엔티티 중심 개발이 가능하다.

JPA Criteria (jpa)- 테이블이 아닌 엔티티를 통해 DB접근이 가능하며 JPQL로 해결이 힘든 동적 쿼리 문제를 자바 코드로 해결한다(표준이지만 다루긴 어렵다)

QueryDSL - 오픈소스 라이브러리로 JQPL로 해결이 힘든 동적 쿼리 문제를 자바코드를 통해 실용적으로 해결한다 (실무에 자주 쓰인다)

WAR (Web Application Archive) - 웹 어플리케이션을 압축해 저장해 놓은 파일로 배포에 사용하는 파일 

SDK (Software Development Kit) - SW개발에 사용되는 키트로 JDK도 SDK의 일종이다

STW (Stop The World) - GC가 가동되는 시점에서 모든 작업은 중지되는데 이것을 가리킴

RTE (Run Time Enviorment) - 런타임 환경

Iaas - 클라우드를 이용해 서버용 인프라(가상화된 서버)가 갖춰진 컴퓨터를 대여하는 서비스 (EC2, MS, IBM)

Pass - 애플리케이션 개발, 서비스에 필요한 서버,OS, 개발환경을 자동으로 설치, 제공된 플랫폼을 제공하는 서비스

SaaS - SW가 완성된 형태로 제공하는 클라우드 서비스 - N드라이브, MS오피스

HTTP (Hypertext Transfer Protocol) - 클라이언트, 서버간 통신을 위한 프로토콜(규약)으로 Stateless하는 특징을 갖는다

HTTPS (Hypertext Transfer Protocol Secure) - CA라는 인증기관에서 인증서를받고 인증서가 유효한지 검증 - 구글에서 http - > https로 변경을 진행하며 SEO를 함께 진행하였다

TLD (Top Level Domain) - 최상위 도메인

ELF (Executable and Linkable Format) - 실행파일, 목적파일, 공유 라이브러리, 코어덤프를 위한 x86기반 유닉스 표준 바이너리 파일형식

규칙 기반 옵티마이저(Rule-Based Optimizer, RBO) - 미리 정의된 규칙 집합을 사용하여 실행 계획을 선택하는방식으로 일반적으로 쿼리의 성능이 높아진다. -> 인덱스가 있는 칼럼을 우선사용, 가장 적은수의 행(pk같이 1개만 나오는것)을 반환하는 조건을 먼저적

비용 기반 옵티마이저(Cost-Based Optimizer, CBO) - 실행 경로의 비용을 추정하고, 가장 낮은 예상 비용을 가진 경로를 사용하는 방식 -> 인덱스를 먼저 확인하여 가장 낮은 총 비용을 가진 계획을 선

Reverse Proxy - 웹 서버보다 앞에 위치하여 클라이언트 요청을 웹서버에 전달하는 유

ClickJacking - Frame등 환경에서 유저 상호작용을 유도해 사용자가 인지하지 못하는 상태에서 악의적인 기능을 수행토록 하는기법 (재생 버튼에 프로그램 다운링크 + 재생기능 2가지를 넣는다던가)

X-Frame-Options - 홈페이지를 프레임별로 개발할경우 각 프레임별 접근 URL이 다른데 이를 방지하기 위해  사용 -> 로드를 반복하여 한번에 수십, 수백 리퀘스트를 발생시킬 여지가 있기때문

Iframe - html태그의 일종으로 한 웹페이지 내부에 다른 html 문서를 내장하도록 하는 요소

Proxy - 클라이언트 시스템 그룹 앞에 위치하여 컴퓨터가 웹사이트 및 서비스에 요청할경우 해당 서버가 이 요청을 가로채 해당 클라이언트를 대신하여 웹서버와 통신한다.

LTS (Long Term Support) - 장기지원버전 - 한가지 예시로 ogg파일은 동영상파일인데 HTML5에선 작동되지 않는다

SRAM (Static RAM, 정적 메모리) - 전원이 공급되는동안 기록된 내용이 지워지지 않는다 (전원이 꺼지면 날라감)

ROM (Read Only Memory) - 전원이 꺼져도 정보를 저장할수 있는 메모리

InnoDB - Mysql에서 사용되며 트랜잭션, 데이터 무결성 등 제공 (.ibd 확장자)

MyISAM - Mysql DB시스템에서 사용되는 엔진 (5.5부터 innoDB로 변경)

PWA (Progressive Web Apps) - 브라우저 기능을 활용해 네이티브 앱 같은 다양한 편의를 제공하는 웹앱

IDE - 통합개발환경 (개발툴 - 이클립스, VS..)

TDD (Test-Driven- development) - 테스트 주도 개발로 설계 이후 콬드개발 및 테스트 케이스를 작성하는것

BIG O (빅오) - 알고리즘중 최악의 실행 시간을 표기한다.

Big-Ω(빅 오메가) - 알고리즘 최상의 실행시간을 표기

Big-θ(빅 세타) - 알고리즘 평균 실행시간을 표기

CORS (Cross-Origin Resource Sharing) - 동일하지 않은 출처에 대해서도 리소스 접근을 허용하는 정책으로 SOP 정책을 조금 완화 

Pseudo-Code (슈도코드) - 가짜 코드로 실행될 내용을 인간의 언어로 간략히 설명해놓은것 (주석)

Dictionary (딕셔너리) - 연관배열을 뜻하며 리스트, 튜플처럼 순차적인 값이 아닌 KEY에 해당하는 Vlaue를 얻는다

XML (Extensible Markup Language) - 공유 가능한 데이터 정의 및 저장으로 타 플랫폼(시스템)간 DATA교환이 목적 - SQL과 같은 프로그램에서 데이터를 가져와 다른 프로그램,플랫폼과 공유 가능

HTML (Hypertext Makup Language) - 정적 웹페이지 작성에 사용

Patch version - 패치 버전으로 버그 및 소규모 개선시 사용(1.25.432 에서 432)

Minor mare - 부 버전으로 이전 버전과 호환되는 새로운 기능 및 개선사항이 있을경우 사용(1.25.432 에서 25)

Major vesion - 주요 버전으로 큰 규모의 변경사항, 호환되지 않는 변경사항이 있을경우 사용(1.25.432 에서 1)

Semantic Tag (시멘틱 태그) - 웹페이지 구조를 쉽게 이해할수 있도록 정의된 태그 (<nav>, <header>, <section>..)

XSS (Cross-site scripting) - 웹페이지에 악성 스크립트를 삽입할수 있는 취약점으로 주로 게시판에 악성스크립트가 담긴 글을 남기는 형태로 지속형, 비지속형 2가지 종류가 있다.

Queue (큐) - 메세지 또는 트렌젝션에서 주로 사용되며 순서를 보장할 필요가 있을경우 사용됨 (FIFO방식)

Deque (데크) - 양방향큐로 앞뒤 양쪽에서 값을 추가, 제거가 가능하다

Dequeue(디큐) - Enqueue의 반대로 큐에서 값을 빼는(내보내는)것으로 Front는 고정, 뒤에서 데이터를 앞으로 이동시킴

Enqueue(인큐) - Dequeue의 반대로 큐에서 값을 넣는(삽입하는)것으로 Front는 고정, 데이터가 뒤로 계속 쌓임 

POP - 스택에 데이터를 빼는것

PUSH - 스택에 데이터를 넣는것

OOP (OOriented Programming) - 객체지향프로그래밍 (캡슐화, 추상화, 다형성, 상속 4가지 특징)

POJO - 오래된 방식의 자바 오브젝트

AOP (Aspect Oriented Programming) - 관점지향프로그래밍

OM (Out of memory) - 메모리 초과

Aspect - 횡단 관심사를 모듈화한것으로 advice + pointcut를 합친개념

AspectJ - 자바 AOP 소프트웨어의 표준

DLL (Dynamic-link Library) - 동적 링크 라이브러리 (윈도우에서 동적링킹할때 사용되는 라이브러리 파일)

AWT (Abstract Window Toolkit) - GUI 프로그래밍(윈도우 프로그래밍)을 위한 도구 (컴퓨터 기본 화면 및 아이콘 등) OS의 컴포넌트를 그대로 사용(OS 종속적)

XML (eXtensible Markup Language) - W3C에서 여러 특수 목적의 마크업 언어를 만드는 용도에서 권장되는 다목적 마크 업 언어 (HTML도 XML의 일종이다)

BSS (Block Started by Symbol) - 초기화되지 않은 전역 데이터를 위한 영역으로 데이터 세그먼트 또는 일부 컴파일러,링커가 사용

rt - 런타임 파일

Stable Version - 최종 버전에서 테스트가 완료되고 버그가 수정된 안정된 버전 (실제 유저에게 배포하는 버전 - 진짜 최종)

Legacy Version - 사용은 가능한 예전 버전에서 테스트 및 버그가 수정된 안정된 버전 (문제는 없으나 진짜 최종은 아님)

Major Version - 기존 API의 변경, 삭제가 이뤄져 업데이트 안하면 동작이 안됨(4.2.05에서 4가 메이저 버전)Minor Version - 이전 버전과 호환되는 방식으로 API가 추가되었으니 살펴보라는 의미 (4.2.05에서 2가 마이너 버전)

Patch Version - 이전 버전과 호환되는 버그 수정을 했을경우 (4.2.05에서 05는 패치버전)

Nightmare Version - 문제가 많은 버전 (주로 알파테스트에 사용됨)

JAR (Java Arcive) - 자바 클래스 파일 묶음(java의 배포파일)

Lib - 라이브러리

CSRF (Cross-Site Request Forgery) -  이미 인증된 사용자의 권한을 이용하여 공격자가 의도한 행동(예: 패스워드 변경, 이메일 주소 변경 등)을 웹 애플리케이션에 요청하는 방식 (사용자 로그인 -> 악성 코드 실행 사이트 접속 -> 해커가 이미 인증된 계정 정보를 가지고 개인정보 조작, 변경)

API (Application Programmin interface) - 두 SW의 구성요소가 서로 통신할수 있도록 돕는 매커니즘(방법)

UTF (Unicode Transformation Format) - 유니코드를 인코딩 하는 방법으로 2,8,16등 여러가지 방법이 있으며 숫자를 기준으로 인코딩 한다는 의미이다. (UTF16은 16비트, 1바이트를 기준으로 인코딩하며 가장 보편적으로 쓰인다.)

IPC (Inter-Process Communication) - 프로세스간 통신으로 데이터를 주고받는 행위 또는 이에대한 경로를 의미 (공유메모리, 메세지전달 2가지 방식)

SOLID - 객체지향 5대원칙으로 SRP, OCP, LSP, ISP, DIP 앞글자를 따서 SOLID 원칙으로 불리운다

JDK (Java Development Kit) - 자바 프로그래밍시 필요한 컴파일러등의 개발도구가 내장됨

JRE (Java Runtime Environment) - 바이트 코드로된 컴파일된 자바 프로그램을 실행할때 사용 (JVM이 자바 프로그램을 실행할때 필요한 라이브러리 파일 및 기타파일이 내장됨)

DHCP (Dynamic Host Configuration Protocol) - 호스트의 IP주소와 각종 TCP/IP프로토콜의 기본 설정을 클라이언트에 자동적으로 제공해주는 프로토콜

TCP (Transmission Control Protocol) - 한 기기에서 다른 기기로 데이터 전송하는것을 담당 (JAVA가 제공하는 java.net패키지의 tcp소켓 존재) 

UDP (User Datagram Protocol) - JAVA의 경우 datagramSocket과 DatagramPacket클래스를 사용해 구현 (빠른 전송을 위해 오버헤드가 적으나 데이터순서, 무결성 미보장)

IP (Internet Protocol) - 인터넷에서 데이터 주소를 지정하고 라우팅 하기 위한 요구사항의 집합으로 

패킷 헤더부분에 나온 IP주소를 기반으로 승인자 호스트에서 요청자 호스트로 패킷을 전달하는 작업을 수행하며 이 데이터를 캡슐화하는 패킷구조를 의미하며 소스 및 요청자에게 데이터그램 레이블 지정에 사용되는 주소지정방법

TCP/IP (Transmission Control Protocol / Internet Protocol ) - 통신 규칙의 모음으로 프로토콜 스위트라고도 불리운다(4계층이 있다)

AMP (Accelerated Mobile pages) - 가속화된 모바일 페이지

FTP (File Transfer Protocl) - 파일 전송 프로토콜

NFS (Network File System) - 네트워크 상에서 파일(디렉토리)을 공유하여 어디서든 사용 가능하도록 설계된 파일시스템

.s - 컴파일러가 출력한 어셈블리어 코드

.S - 개발자가 직접 작성한 어셈블리어 코드

MIME (Multipurpose Internet Mail Extensions) - 클라이언트에게 전송된 문서의 다양성을 알려주기 위한 매커니즘

AMQP (Advanced Message Queuing Protocol) - 어드밴스트 메시지 큐잉 프로토콜

 

 


메모장
MSA 아키텍쳐 - 각각 마이크로하게 나눈 독립적인 서비스를 연결한 구조

UTF8MB4

IOC (Inversion of Control) - 제어의 역전

unix time -> timestamp

timestamp <-> datetime 

BULK

SQL 세퍼레이터

I18N

HFO 

N-gram

DBaas

XHTML - 

DB Partitioning - 

메모리 안전 언어 (memory-safe languages) - 

 

'CS' 카테고리의 다른 글

HTTPS VS HTTP  (0) 2024.09.17
JS파일 가져오기 로컬, 원격 차이  (0) 2024.08.03
크로스 도메인,SOP, CORS, XSS,  (0) 2024.01.25
IP, DNS, HTTP  (0) 2023.07.09
HTTP 헤더  (0) 2023.05.06

+ Recent posts