Cute Hello Kitty Kaoani

전체 글

Database/SQL

[MySQL] 데이터베이스 생성 / 사용자 계정 추가 / 권한 부여

MySQL Command Line Client 실행- MySQL 설치 시 입력했던 비밀번호를 입력하고 접속한다. 데이터베이스 생성 create database DB명 default character set utf8; 데이터베이스가 잘 생성되었는지 확인 show databases; 사용자 계정 추가 # 내부 접근을 허용하는 사용자 create user '사용자'@'localhost' identified by '비밀번호'; # 외부 접근을 허용하는 사용자 create user '사용자'@'%' identified by '비밀번호'; # 특정 ip만 접근을 허용하는 사용자 create user '사용자'@'000.000.000.000' identified by '비밀번호'; 권한 부여 # 모든 데이터베이스의 ..

WebServer/Spring Boot

[Spring/JPA] Spring Data JPA란?

JPA(Java Persistence API)는 자바를 이용하여 데이터베이스와의 상호 작용을 쉽게 만들어주는 프로그래밍 인터페이스이다. JPA를 사용하면 객체와 관계형 데이터베이스 간의 매핑을 쉽게 처리할 수 있으며, 데이터베이스에서 객체를 저장하고 검색하는 등의 작업을 보다 간편하게 수행할 수 있다. 💡 JPA는 JAVA에서 ORM(Object-Relational Mapping)기술 표준으로 사용하는 인터페이스 모음 JPA를 사용하는 이유 객체 지향적인 방식으로 데이터를 다루면서 데이터베이스를 효과적으로 활용 SQL 쿼리를 직접 작성하는 대신 JPA가 데이터베이스 간의 매핑을 처리 ➜ 개발자가 비즈니스 로직을 구성하는데만 집중 가능 RDB를 변경하더라도 SQL에 의존적이지 않기 때문에 변경 용이 MyB..

Algorithm/알고리즘

[JAVA] 바이너리 인덱스 트리 (Binary Indexed Tree, BIT)

바이너리 인덱스 트리(Binary Indexed Tree, BIT)는 2진법 인덱스 구조를 활용해 구간 합 문제를 해결해 줄 수 있는 자료구조이다. 펜윅 트리(fenwick tree)라고도 한다. 바이너리 인덱스 트리를 구현하려면, 어떤 수 X를 이진수로 나타냈을 때, 0이 아닌 마지막 비트를 알아야한다. 0이 아닌 마지막 비트를 찾는 방법 어떤 수 X의 0이 아닌 마지막 비트를 찾기 위해서 X & -X를 계산하면 된다. L[i]는 i를 2진수로 나타냈을 때, 0이 아닌 마지막 비트값을 저장하고 있는 배열이다. 즉, 3을 이진수로 나타냈을 때 011 이므로 0이 아닌 가장 마지막 비트값은 L[3]=1 이다. Tree[i]는 arr[i]로부터 앞으로 L[i] 개의 합을 저장하고 있는 배열이다. - Tree..

Algorithm/Problem Solving

[BOJ] 2075번 N번째 큰 수 - JAVA(자바)

💡 PriorityQueue 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 우선순위 큐를 구현하는 방식인 힙(Heap)에서 데이터를 넣었다가 꺼내는 작업은 정렬하는 작업과 동일하다. 이 경우 시간복잡도는 O(NlogN)이 된다. 따라서 순서 상관없이 주어진 데이터를 우선순위 큐에 넣기만 하면 루트노드는 가장 우선순위가 큰 값을 가지고 먼저 제거된다. 문제에서는 N번째로 큰 수를 찾는 문제로 Collections.reverseOrder()메서드를 활용하여 높은 숫자가 우선순위가 될 수 있도록 한다. import ja..

Algorithm/알고리즘

[JAVA] 우선순위 큐 (PriorityQueue)

우선순위 큐 (PriorityQueue) 우선순위 큐는 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조이다. 우선순위 큐를 구현하는 방법은 다양하다. ① 단순히 리스트를 이용하여 구현 ② 힙(Heap)을 이용하여 구현 데이터의 개수가 N개일 때, 구현 방식에 따라 시간 복잡도가 다르다. 우선순위 큐 구현 방식 삽입 시간 삭제 시간 리스트 O(1) O(N) 힙(Heap) O(logN) O(logN) 단순히 N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업은 정렬과 동일하다. 이 경우 시간 복잡도는 O(NlogN) 이다. 힙(Heap)의 특징 힙(Heap)은 완전이진트리의 일종 힙(Heap)에서는 항상 루트노드를 제거한다. 최소 힙(min heap) 루트노드가 가장 작은 값을 가진다. 따라서 값이 ..

Algorithm/알고리즘

[JAVA/자료구조] 스택(Stack)과 큐(Queue)

Stack은 마지막에 저장한 데이터를 가장 먼저 꺼내는 LIFO, Queue는 먼저 들어간 데이터를 먼저 꺼내는 FIFO 구조이다. Stack의 메서드 메서드 설명 boolean empty() stack이 비어있는지 Object peek() Stack의 맨 위에 저장된 객체 반환 Object pop() stack의 맨 위에 저장된 객체를 꺼내 반환 Object push(Object o) stack에 객체를 저장 int search(Object o) stack에서 주어진 객체를 찾아 그 위치를 반환, 못찾으면 -1 반환 💡 위치가 1부터 시작 Queue의 메서드 메서드 설명 boolean add(Object o) Queue에 객체를 추가 boolean offer(Object o) Queue에 객체를 저장 ..

Database/MongoDB

[MongoDB] Aggregation Pipelines (집계 파이프라인)

aggregate pipelines 집계 파이프라인 기능을 사용하면 stream내의 document에 다양한 기능들을 지원할 수 있다 그룹핑 가능 컬럼 연산 기능 및 새로운 컬럼에 저장 컬럼에 별칭 지정 필터링 기능 및 정렬 db.collection.aggregate([{ stage }, ...]) 💡 stage 표현식 : $project, $match, $sort, $group $project 열 단위로 검색(projection) 하거나 별칭을 지정할 수 있다. 기존 key값을 사용할 때는 $key를 사용한다 # username 과 age 만 보기 db.user.aggregate({$project:{username:1, age:1}}) # 별칭 age ➜ userage , _id ➜ num db.use..

Database/MongoDB

[MongoDB] 몽고DB의 문서(document) 저장, 수정, 삭제

문서(document) 저장 _id 속성을 명시하지 않으면 자동으로 생성된다. 💡 _id는 pk 역할 Insert Methods — MongoDB Manual Docs Home → MongoDB Manual MongoDB provides the following methods for inserting documents into a collection:The following methods can also add new documents to a collection:See the individual reference pages for the methods for more information and examp www.mongodb.com 단일 문서 저장 db.collection.insertOne(문서) #..

Database/MongoDB

[MongoDB] 몽고DB의 조회(find)

배열 query 배열을 조회할 때는 정확하게 순서 및 값을 지정해야 된다. 값으로 조회 db.collection.fine({key:value}) # 배열형식의 조회는 순서가 정확하게 일치해야 함 db.collection.fine({key:[v1,v2,v3]}) # 하나 이상의 배열요소와 일치하는 값 반환 # 배열의 순서 및 갯수 무관하며 값의 일치여부만 확인 db.collection.find({key:{$all:[v1,v2]}}) # example # grade 배열 중 'A' 가 있는 경우 > db.user2.find({grade:'A'}) # grade 배열이 'A', 'B', 'C' 인 경우 > db.user2.find({grade:['A','B','C']}) # 1개 # grade 배열 중 'A'..

WebServer/Spring

[Spring] @RequestBody 와 @ResponseBody

@RequestBody @ResponseBody 는 XML이나 JSON과 같은 메시지 기반의 커뮤니케이션을 위해 사용된다. @ResponseBody가 메서드 레벨에 부여되면 메서드가 리턴하는 객체는 뷰를 통해 결과를 만들어내는 Model로 사용되는 대신, 메시지 Converter를 통해 바로 HTTP 응답의 메시지 본문으로 전환된다. @RequestBody @ResponseBody를 위한 jackson 라이브러리 필요 com.fasterxml.jackson.core jackson-databind 2.14.2 💡 스프링부트에서는 의존성이 자동으로 포함되어 있음. @ResponseBody Controller에서 응답처리를 JSP로 하지 않고 JSON 형식으로 처리가 가능하다. 즉, 자바클래스를 리턴하면 자동..

WebServer/Spring Boot

[스프링부트] JSP 사용하는 SpringBoot MVC

프로젝트 생성 ① 의존성 등록 스프링부트 MVC에서 필요한 web starter 패키지 등록 내장 tomcat이 설치됨 (기본 port는 8080) 스프링부트 mvc에서 기본 화면처리는 JSP가 아니다. ➜ JSP 사용 위해서 의존성 추가 필요 💡 포트번호 변경은 application.propeties에서 server.port=8090 을 통해 변경 org.springframework.boot spring-boot-starter-web org.apache.tomcat.embed tomcat-embed-jasper javax.servlet jstl ② 웹 구조 생성 JSP 사용 시, 명시적으로 폴더 생성해야함 ③ InternalResourceViewResolver 등록 스프링부트에서는 application..

WebServer/Spring Boot

[스프링부트] AOP (Aspect Oriented Programming)

AOP의 자세한 설명은 아래 글 참고 [Spring] AOP (Aspect Oriented Programming) AOP 보안이나 로그, 트랜잭션과 같이 비즈니스 로직은 아니지만, 반드시 처리가 필요한 부분을 스프링에서는횡단 관심사라고 한다. AOP는 이러한 횡단 관심사를 모듈로 분리하는 프로그래밍의 패 gangintheremark.tistory.com 실습 의존성 AOP starter 패키지 등록 필수 org.springframework.boot spring-boot-starter-aop @EnableAspectJAutoProxy 이용 어노테이션을 사용하는 방식이다. @SpringBootApplication @EnableAspectJAutoProxy public class Application { pu..