전체 글 110

자동 구성 (Auto Configuration) - 1

자동 구성 (Auto Configuration) 자동 구성 예제 Member 를 만들고 Jdbc를 연결해 들어간 데이터가 맞는지 테스트 예정 Member 클래스 생성 DbConfig 클래스 생성 JdbcTemplate 을 사용해 회원 데이터를 DB에 보관하고 관리하는 기능 각 기능들을 스프링 빈으로 직접 등록 외부 DB 가 아닌 JVM 내부에서 동작하는 메모리 DB 사용 (H2) Repository 생성 Test 코드 @Transactional 어노테이션을 사용해 트랜잭션 기능 적용 TransactionManager 가 스프링 빈으로 등록되어 있어야 함 테이블 생성, 회원 저장, 조회 후 검증 JdbcTemplate , DataSource , TransactionManager 모두 사용했지만 스프링 빈으..

운영체제

⁉️ OS (운영체제)란? 하드웨어, 시스템 리소스를 제어하고 프로그램에 대한 일반적 서비스를 지원하는 시스템 소프트웨어입니다. ⁉️ 커널이란? 커널은 운영체제에서 핵심이 되는 부분으로 컴퓨터의 하드웨어들을 관리하는 역할을 합니다. 이 커널은 user와 대화를 할 수 없으며, 컴퓨터의 관련된 일만 할수있습니다. 그래서 user와 대화하기 위해서는 쉘(shell)을 사용합니다. ⁉️ 메모리의 구조를 영역에 따라 설명 프로세스의 주소 공간은 코드 (code), 데이터 (data), 스택 (stack), 힙 (heap) 영역으로 구성됩니다. 코드 (code, text) 영역 : 사용자가 작성한 프로그램 함수들의 코드가 CPU에서 수행할 수 있는 기계어 명령 형태로 변환되어 저장되는 공간입니다. 데이터 (dat..

트리와 이진 탐색 트리 - 2

트리와 이진 탐색 트리 - 2 이진 탐색 트리 삭제 삭제는 많이 복잡하지만 로직만 잘 세우면 단순한 것 같음 Leaf Node 삭제 (제일 마지막 노드 삭제) Child Node 가 하나인 Node (중간 노드 삭제) Child Node 가 두개인 Node (중간 노드 삭제) 삭제할 Node 찾기 public boolean delete(int value) { boolean search = false; Node curParentNode = this.head; Node curNode = this.head; // Node 가 하나도 없을 경우 if(this.head == null) { return false; // Node 가 하나만 있고 해당 Node 를 삭제 할 경우 } else { if(this.head..

코테/자료구조 2023.08.18

스프링 부트 스타터와 라이브러리 관리

스프링 부트 스타터와 라이브러리 관리 라이브러리 관리의 어려움 프로젝트를 시작하면 어떤 라이브러리를 사용할 지 고민하고 선택함 각 라이브러리들끼리 호환이 잘되는지 안되는지 알아야해 버전까지 고민해야 함 프로젝트 세팅 시간 ⬆️ 라이브러리 직접 관리 문제점 수 많은 라이브러리를 알아야하고, 버전까지 골라서 선택해야함 호환이 잘 안되는 버전도 있음 스프링 부트 라이브러리 버전 관리 스프링 부트가 라이브러리의 버전을 직접 관리해주고, 원하는 라이브러리만 고르고 버전은 생략해도 됨 스프링 부트가 최적화된 라이브러리 버전을 선택해줌 버전 관리 기능을 사용하려면 io.spring.dependency-management 플러그인을 사용해야 함 dependency-management 버전관리 io.spring.depe..

스프링 부트와 내장 톰캣 - 2

편리한 부트 클래스 만들기 부트 : 시작을 편하게 처리해주는 것 어노테이션 만들기 만든 어노테이션으로 컴포넌트를 스캔 하기 때문에 HelloConfig에 어노테이션은 주석 처리 프로젝트를 실행 시키는 main클래스 생성 (많이 본 형태임) 패키지 위치가 중요 (hello) 만든 어노테이션에 컴포넌트 스캔이 추가되어 해당 어노테이션이 붙은 클래스의 현재 패키지부터 하위 패키지까지 스캔 대상으로 사용 MySpringApplication.run(설정 정보, args) 실행하면 됨 @MySpringBootApplication 어노테이션과 MySpringApplication.run() 메서드만 기억하면 됨 내장 톰캣, 스프링 컨테이너 생성, 디스패처 서블릿, 컴포넌트 스캔까지 한번에 동작함 스프링 부트 프로젝트 ..

스프링 부트와 내장 톰캣 - 1

WAR 배포 방식의 단점 WAS 를 별도로 설치해야함 개발 환경 설정이 복잡함 배포 과정이 복잡함 톰캣 버전을 변경하려면 톰캣을 다시 설치해야함 외장 서버 VS 내장 서버 왼쪽은 WAS 를 실행해서 동작하는 방식, 오른쪽은 JAR안에서 WAS 라이브러리가 포함되는 방식 내장 톰캣 - 설정 서블릿 관련해서도 다 들어있음 내장 톰캣 - 서블릿 내장 톰캣 생성해서, 8080 포트에 연결 서블릿 등록 tomcat.addServlet() 서블릿 등록 context.addServletMappingDecoded() 서블릿 경로를 매핑 tomcat.start() 톰캣 시작 내장 톰캣 - 스프링 내장 톰캣 (8080) 포트 연결 스프링 컨테이너 빈 (Bean) 등록 스프링 MVC 디스패처 서블릿을 만들고 스프링 컨테이너..

트리와 이진 탐색 트리 - 1

트리와 이진 탐색 트리 - 1 트리 (Tree) 구조 트리 (Tree) : Node와 Branch를 이용해서, 사이클을 이루지 않도록 구성한 데이터 구조 이진 트리 (Binary Tree) 형태의 구조로, 탐색 (검색) 알고리즘 구현을 위해 많이 사용됨 용어 Node : 트리에서 데이터를 저장하는 기본 요소 Root Node : 트리 맨 위에 있는 노드 (Root) Level : 최상위 노드를 Level 0 으로, 하위 노드로 연결된 노드의 깊이를 나타냄 Parent Node : 어떤 노드의 상위 레벨에 연결된 노드 (부모 노드) Child Node : 어떤 노드의 상위 레벨에 연결된 노드 (자식 노드) Leaf Node (Terminal Node) : Child Node가 없는 노드 Sibling (B..

코테/자료구조 2023.08.16

웹 서버와 서블릿 컨테이너 - 2

서블릿 컨테이너 등록 WAS 와 스프링 통합 스프링 컨테이너 만들기 스프링 MVC 컨트롤러 스프링 컨테이너 빈으로 등록 스프링 MVC 디스패처 서블릿 서블릿 컨테이너 등록 현재 스프링 관련 라이브러리가 없으니 추가 spring-webmvc 라이브러리 추가 시 spring-core 를 포함한 스프링 핵심 라이브러리들도 함께 포함 간단한 스프링 컨트롤러로, HTTP 응답으로 'hello spring' 이라는 메시지를 반환. 컨트롤러를 사용하기 위해 직접 스프링 빈(Bean) 으로 등록 이제 애플리케이션 초기화를 사용해서 서블릿 컨테이너에 생성 후 등록 생성 후 실행하게 되면 바로 호출되는 것을 볼 수 있음 AnnotationConfigWebApplicationContext 가 스프링 컨테이너임 appCont..

해쉬 테이블 (HashTable)

해쉬 테이블 (HashTable) 키 (Key) 에 데이터(Value) 를 매핑할 수 있는 데이터 구조 키 (Key) 를 통해 주소를 알 수 있으므로, 저장 및 탐색 속도가 빨라짐 용어 해쉬 함수 (Hash Function) : 임의의 데이터를 고정된 길이의 값으로 리턴해주는 함수 해쉬 테이블 (Hash Table) : 키 값의 연산에 의해 직접 접근이 가능한 데이터 구조 해쉬 테이블 구현 public class Hash { public Slot[] hashTable; public Hash(Integer size) { this.hashTable = new Slot[size]; } public class Slot { String value; Slot(String value) { this.value = va..

코테/자료구조 2023.08.15

알고리즘 시간 복잡도 (Time Complexity)

시간 복잡도 (Time Complexity) 입력 크기와 알고리즘간의 관계 알고리즘의 복잡도를 나타내는 지표 중 하나 프로그램의 동작시간을 가늠해 볼 수 있는 수단 Big-O 표기법 (O(n)) 일반적으로 가장 많이 사용함 가장 최악의 상황을 포함한 시간의 상한선 시간 복잡도에 가장 영향을 많이 미치는 요소는 반복문 입력의 크기가 커지면 반복문이 수행 시간을 지배함 가장 높은 차수로 표기 O(1) 10) { System.out.println(n); } // n번, n + 10, 3n + 10번 등 실행 : O(n) for(int num = 0; num < 3;..

코테/알고리즘 2023.08.11