728x90 전체 글654 최적 이진 검색 트리/ AVL 트리 최적 이진 검색 트리 최적 이진 탐색 트리(Optimal Binary Search Tree)는 이진 검색 트리(Binary Search Tree, BST)의 일종으로, 주어진 키 집합에 대해 평균 검색 비용이 최소가 되도록 구성된 트리입니다. AVL트리 AVL트리는 이진 탐색 트리의 일종으로, 자동으로 균형을 유지하는 자료구조입니다. 글로 적기 힘들어서 영상으로 찍음. 2023. 3. 29. 퍼셉트론의 이해 퍼셉트론은 인공 신경망 중 하나로, 이진 분류를 위해 사용되는 간단한 알고리즘이다. 퍼셉트론은 다수의 입력값과 가중치(Weight)를 곱한 합을 계산하고, 이 합이 특정 임계값 ㄷ보다 크면 1을, 작으면 0을 출력한다. 이 때 가중치와 임계값을 적절히 조절하여 분류 경계선을 찾아야 한다. AND게이트를 퍼셉트론으로 구현하기 우선 AND게이트의 동작을 살펴보자. x1 x2 y 1 1 1 0 1 0 1 0 0 0 0 0 두 개의 입력(x1, x2)이 주어졌을 때 두 입력이 모두 1일 때만 출력(y)이 1이 되어야 한다. 두 개의 입력 x1, x2에 대한 가중치를 w1, w2라고 하면 가중합은 x1*w1 + x2*w2 이 된다. (이 계산은 np.dot(가중치,입력값) 또는 np.sum(가중치*입력값)과 같다.. 2023. 3. 25. DHCP DHCP(Dynamic Host Configuration Protocol)는 네트워크 관리를 간편하게 하기 위해 사용하는 프로토콜이다. DHCP를 사용하면 네트워크 장치에 IP주소, 서브넷마스크, 기본 게이트웨이, DNS서버 주소와 같은 네트워크 구성 정보를 자동으로 할당할 수 있다. DHCP를 사용하면 수동으로 각 네트워크 장치의 구성을 변경할 필요가 없으므로 네트워크 관리가 훨씬 편리해진다. 이는 모바일 기기등에도 적용된다. DHCP의 4가지 절차 discover offer request ack 1. DHCP discover: 클라이언트는 DHCP discover 메세지를 브로드캐스트한다. 이 메세지는 클라이언트가 DHCP서버를 찾기 위해 전송된다. (서브넷 내로 브로드캐스트 되며, src의 port.. 2023. 3. 23. JPA, Spring Data JPA JPA(Java Persistence API)는 객체와 관계형 데이터베이스를 매핑할 때 사용하는 ORM(Object-Relational Mapping)프레임워크이다. JDBC는 자바에서 데이터베이스에 접근하기 위한 API로, 개발자가 SQL쿼리를 직접 작성하여 데이터베이스와 통신한다. JDBC는 개발자가 SQL을 직접 작성하여 데이터베이스와 통신하기 때문에, 데이터베이스 연동 작업을 상세하게 제어할 수 있지만, JDBC를 사용하면 개발자가 매번 SQL을 작성해야 하며, 이로 인해 반복적인 작업이 많아지고 오류 발생 가능성이 높아지기도 한다. 반면, JPA는 엔티티 클래스를 사용하여 데이터베이스의 테이블과 객체간의 매핑을 자동으로 처리한다. 이를 통해 개발자는 객체 지향 프로그래밍 방식으로 데이터베이스와 .. 2023. 3. 21. Filling Polygons 다각형 채우기. 다각형은 3가지 타입이 있다. 1. Simple Convex: 볼록 다각형 2. Simple Concave: 오목 다각형 3. Non-simple(self-intersection): 내부 교차된 다각형 이런 다각형들의 경계선의 내부를 채우는 알고리즘을 설계해 보자. 몇가지 문제들: 다각형의 윗쪽,오른쪽 경계선은 픽셀을 켜지 않는다. 만약 윗쪽,오른쪽 경계선의 픽셀을 키게되면, double-fill문제가 발생할 수 있는데, 예를들어 두 사각형이 변을 맞대고 붙어있을 때, ① 맞닿은 부분이 깜빡거리는 flicker현상이 발생할 수 있고, ②두번 그리는것 자체가 비효율적이기도 하다. 그러므로 공유엣지에 대한 룰로, 오른쪽 수직엣지, 윗쪽 수평엣지는 그리지 않는다. 다각형을 어떻게 채울까? 주사.. 2023. 3. 20. Search Structures 1. Symbol Table (키,값)쌍의 모임을 symbol table이라고 한다. 사전에서 특정 단어(키)를 이용하여 뜻(값)을 알아내는 것도 심볼테이블의 응용분야이다. symbol table public class SymbolTable { void put(Key k,Value v); Value get(Key k) boolean contains(Key k) void delete(Key k) boolean isEmpty() int size() Iterator keys() } 심볼테이블은 보통 위와같은 메소드들을 가진다. 여기서는 Generics 지원하며, 중복키는 허용하지 않는다. 만약 중복키가 입력될 경우 기존의 값을 새 값으로 변경한다. 키와 값은 null이 될 수 없고, 테이블에 없는 키값으로 검.. 2023. 3. 20. 의존성 주입(DI), 스프링 빈과 의존관계 의존성 주입(DI)을 간단히 말하면, 클래스에서 필요로 하는 의존성을 직접 생성하지 않고, 외부에서 주입받는 방식이다. 이를 통해 클래스 간의 결합도를 낮추어 유연성을 높일 수 있다. 예를들어, A클래스가 B클래스를 의존한다면, A클래스에서 B클래스의 객체를 생성하고 사용하는것이 아니라, 외부에서 B클래스의 객체를 생성하여 주입하는 방식을 사용하는 것이다. public class UserService { private final UserRepository userRepository = new UserRepositoryImpl(); public void addUser(User user) { userRepository.save(user); } } 예를들어, UserService클래스는 UserReposito.. 2023. 3. 19. 빌드하고 실행하기 ./gradlew build cd build/libs java -jar hello-spring-0.0.1-SNAPSHOT.jar 콘솔에서 작업파일로 이동한다. 나는 hello-spring의 hello-spring디렉토리로 이동했다. 그리고 ./gradlew build 명령어를 입력하면 빌드가 시작된다. 빌드가 끝났다면 build디렉토리로 이동해보자. 안에 libs 디렉토리가 있는데 libs 디렉토리로 이동해보면, 내부에 jar파일이 생긴것을 볼 수 있다. 이 파일을 자바로 실행시키면.. 서버가 실행된다. 서버 배포할 때 이 파일 하나만 넣고 실행시키면 된다. 2023. 3. 18. Socket Basic (실습) Network Programming(Socket Programming) 소켓은 컴퓨터 네트워크에서 프로세스 간 통신을 가능하게하는 기술이며, 네트워크상에서 데이터 송수신을 담당한다. 소켓은 주로 클라이언트/서버 모델에서 사용되며, 클라이언트는 서버로 연결을 시도하고, 서버는 연결을 수락하고 데이터를 송수신한다. 소켓은 application 레이어와 transport레이어 사이의 인터페이스 역할을 한다. 서버측 주요코드 #include int socket(int domain,int type, int protocol); //성공시 파일 디스크립터를, 실패시 -1 반환 int bind(int sockfd, struct sockaddr *myaddr, socklen_t addrlen);//IP와 포트번호를 소켓.. 2023. 3. 17. IP Addressing: classful, CIDR /IP Fragmentation /NAT IP Address(IPv4) 컴퓨터 네트워크에서 장치를 식별하는 고유한 32비트 숫자. 계층적 주소 지정: 10001101 11011111 01010100 0111000 이러한 IP주소가 있을 때 예를 들어, 왼쪽에서 24비트는 Network주소, prefix로 사용하여 기관(소속)을 나타내고 25째 비트부터는 Host주소, 해당 소속 안에서의 번호를 나타냄 (prefix가 항상 24비트인것은 아님) Classful addressing 예전에는 IP주소에서 Network부분을 8비트로 사용하였는데, 2^8으로 기관들을 나타내기에는 너무 적어서 Classful Addressing이라는것을 사용함. (오늘날엔 사용되지 않음) Classful Addressing은 A,B,C 등의 클래스로 나누어 A클래스는 .. 2023. 3. 17. Process and Scheduling Process Concept OS는 다양한 프로그램을 실행한다. -배치 시스템 -interactive 시스템 process란 실행중인 프로그램이다. 프로세스는 OS가 자원을 할당하는 최소단위이고, 스레드는 프로세스 내에서의 독립적인 실행단위이다. 프로세스는 다음을 포함한다 1. Program(코드/텍스트): 프로그램 코드와 리터럴상수를 저장 2. data : 프로그램 실행 전체에 필요한 데이터를 저장. 전역변수, static 변수, symbolic constant(#define..), 문자열 상수 등을 저장 3. Stack : OS에 의해 관리됨(자동으로 할당,해제됨). 지역변수, 함수 등이 저장된다. 4. Heap : 프로그래머에 의해 관리됨. 메모리 누수가 일어날 수 있음. 동적할당한 객체, 변수등이.. 2023. 3. 16. 외부 정렬(External Sort) 외부정렬은 대용량의 데이터를 정렬하는 알고리즘으로, 메모리보다 큰 데이터셋을 정렬할 때 사용된다. 외부정렬은 기본적으로: 정렬할 파일을 메모리에 적재가능한 크기의 run들로 분할한다. 각 run에 대해 내부 정렬 후 다른 파일에 저장한다. 파일에 저장된 run들을 병합하여 다시 파일에 저장한다. 병합된 run의 수가 1이 될 때까지 병합을 반복한다. 병합 방법에 따라 sort/merge 알고리즘은 다음과 같이 분류할 수 있다. Binary Sort/Merge Balanced Binary Sort/Merge Balanced K-way Sort/Merge Polyphase Sort/Merge Binary Sort/Merge Sorting phase - 초기 run들을 정렬한 후, 2개의 외부 파일에 저장 M.. 2023. 3. 16. ObjectMapper ObjectMapper를 알아보자.. restAPI를 이용할 때, 클라이언트가 보낸 JSON데이터는 자동으로 DTO로 변환되고, 서버에서 클라이언트로 데이터를 보낼때에도 DTO에서 JSON으로 자동으로 변환되었다. 어떻게 변환되는 것인지.. 그 동작을 살펴보자 @Test public void 자바_객체를_JSON으로_변환() throws JsonProcessingException { //준비 List ingredients = Arrays.asList("shrimp","beef","bread","tomato"); Burger burger = new Burger("burger",5500,ingredients); ObjectMapper objectMapper = new ObjectMapper(); //수행. .. 2023. 3. 14. AOP(Aspect Oriented Programming) 스프링 부트 AOP (Aspect-Oriented Programming)는 스프링 프레임워크에서 제공하는 기능으로, 비즈니스 로직과 같은 핵심 기능과 로깅, 보안, 트랜잭션 처리와 같은 부가 기능을 분리하여 개발할 수 있도록 지원합니다. 예를 들어, @Transactional //DB를 건들기때문에, 중간에 문제가 생기면 롤백되도록 트랜잭션으로 설정 public CommentDto create(Long articleId, CommentDto dto) { // log.info("input => {}",articleId); // log.info("input => {}",dto); //게시글조회 및 예외발생 Article article = articleRepository.findById(articleId) ... 2023. 3. 14. 댓글 수정, 삭제기능 추가하기 (API 호출, fetch) 수정기능 {{#commentsDtos}} {{nickname}} edit delete {{body}} {{/commentsDtos}} 수정버튼을 누르면 모달창이 뜨도록, 모달 트리거 버튼을 추가해준다. 안에 data-bs가 무더기로 있는것은.. 모달 트리거 버튼을 눌렀을 때 나오는 모달창으로 데이터를 전달하기 위함이다. Modal title nickname comment {{#article}} {{/article}} save 모달 코드도 추가해준다. 이 코드들은 부트스트랩에 있다.. let commentEditModal = document.querySelector("#comment-edit-modal"); commentEditModal.addEventListener('show.bs.modal',funct.. 2023. 3. 14. 버킷 정렬, 기수 정렬, 병합 정렬 버킷 정렬: 1.입력 배열의 원소들을 해당하는 버킷에 저장 2. 각 버킷을 정렬함. 3. 버킷을 차례로 방문하여 원소들을 원 배열에 저장 기수 정렬(Radix sort) -높은 자리 우선 정렬(MSD) -낮은 자리 우선 정렬(LSD) 가 있음. 이 때 LSD방식은 버킷별로 별도 정렬 단계가 필요 없으므로 MSD보다 많이 사용됨. LSD를 이용한 기수 정렬 입력 데이터에서 가장 큰 숫자를 max라고 할 때, 입력 데이터를 일의자리 수부터, max의 최대자릿수까지,한 값을 기준으로 삼아 차례대로 counting sort를 반복한다. public class Radix { public static void sort(int[] A){ int i,m = A[0], exp=1, n=A.length; int[] B =.. 2023. 3. 13. Scan Conversion 2D Cartesian Coordinate System 2차원 직각 좌표계. 수평 기준축인 x축과 수직 기준축인 y축이 직각을 이루며 만들어낸 평면 위에 좌표를 기록. 일반적으로 2차원좌표계에서 (x,y)쌍으로 위치를 표현할 수 있고, x,y는 실수범위로 사용가능하지만 그래픽을 전제하는 좌표계에서는 x,y가 정수여야 한다. (물리적으로 존재하는 Pixel의 위치값이기 때문에 정수일 수밖에 없다) Scan Conversion? 스캔 변환. 스캔 방식을 이용해 아날로그 도형을 디지털 도형으로 변환하는 알고리즘. 아날로그 도형의 특성등을 스캔하여 어떤 픽셀을 켤지 등의 정보를 비트맵 형식으로 저장함. 예를들어, 아날로그로 표현된 선분을 pixel들의 집합(디지털)로 만들어 냄. 무한한 값으로 표현되는 아날로그.. 2023. 3. 13. Storage Structure/Multiprogramming/Multitasking/process/memory/file Storage Structure 메인 메모리 - CPU가 직접 접근 가능한 저장장치. 전원 공급이 멈추면 내용이 휘발된다. (RAM 등) 보조 기억장치(Secondary strage) - 비휘발성. 메인메모리보다 느리지만 데이터를 영구적으로 저장가능.(HDD,SSD, USB 등) 자기 디스크(magnetic disk) - 대표적으로 하드디스크가 있음 전자식 디스크(Electronic disk) - 한 종류로 flash memory가 있음. 플래시메모리는 SSD, USB등이 있고, EEPROM과 유사하게 동작함. storage system은 다음과 같은 기준으로 정렬할 수 있다.. -속도 -비용 -크기 -휘발성 strage system 계층에서 위로갈수록 용량당 가격이 비싸고 빠르다. 캐싱 - 아래 계층의.. 2023. 3. 13. 자바스크립트 fetch로 REST API 호출하기 (댓글등록) 댓글 폼에 댓글내용을 작성하고 전송버튼을 클릭. 해당 버튼의 이벤트리스너를 추가해 클릭을 감지하고 클릭시에 fetch를 통해 RestAPI를 호출해보자.. nickname comment {{#article}} {{/article}} save 뷰페이지에는 새 댓글의 정보를 입력할 폼이 있다. nickname, body를 입력할 란이 있고, 각 란은 id값을 지정해놓았다. 또한, 현재 글의 article_id 정보를 함께 전달하기 위해 hidden타입의 input에 article_id값을 넣어두었다. addEventListner를 이용해 전송버튼의 클릭을 감지하고, 폼에 입력된 정보를 이용해 JS 객체 comment를 생성한다. 그리고 fetch메소드를 이용하여 RestAPI를 호출하는데, fetch() 메.. 2023. 3. 13. 댓글 REST API 완성하기 Comment의 controller와 service를 만들어 REST API를 완성해보자. @RestController public class CommentApiController { @Autowired private CommentService commentService; //댓글 목록 조회 @GetMapping("/api/articles/{articleId}/comments") public ResponseEntity comments(@PathVariable Long articleId){ List dtos = commentService.comments(articleId); return ResponseEntity.status(HttpStatus.OK).body(dtos); } //댓글 생성 @PostMap.. 2023. 3. 13. 이전 1 ··· 7 8 9 10 11 12 13 ··· 33 다음 728x90