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 '비밀번호'; 권한 부여 # 모든 데이터베이스의 ..
JPA(Java Persistence API)는 자바를 이용하여 데이터베이스와의 상호 작용을 쉽게 만들어주는 프로그래밍 인터페이스이다. JPA를 사용하면 객체와 관계형 데이터베이스 간의 매핑을 쉽게 처리할 수 있으며, 데이터베이스에서 객체를 저장하고 검색하는 등의 작업을 보다 간편하게 수행할 수 있다. 💡 JPA는 JAVA에서 ORM(Object-Relational Mapping)기술 표준으로 사용하는 인터페이스 모음 JPA를 사용하는 이유 객체 지향적인 방식으로 데이터를 다루면서 데이터베이스를 효과적으로 활용 SQL 쿼리를 직접 작성하는 대신 JPA가 데이터베이스 간의 매핑을 처리 ➜ 개발자가 비즈니스 로직을 구성하는데만 집중 가능 RDB를 변경하더라도 SQL에 의존적이지 않기 때문에 변경 용이 MyB..
바이너리 인덱스 트리(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..
💡 PriorityQueue 2075번: N번째 큰 수 첫째 줄에 N(1 ≤ N ≤ 1,500)이 주어진다. 다음 N개의 줄에는 각 줄마다 N개의 수가 주어진다. 표에 적힌 수는 -10억보다 크거나 같고, 10억보다 작거나 같은 정수이다. www.acmicpc.net 우선순위 큐를 구현하는 방식인 힙(Heap)에서 데이터를 넣었다가 꺼내는 작업은 정렬하는 작업과 동일하다. 이 경우 시간복잡도는 O(NlogN)이 된다. 따라서 순서 상관없이 주어진 데이터를 우선순위 큐에 넣기만 하면 루트노드는 가장 우선순위가 큰 값을 가지고 먼저 제거된다. 문제에서는 N번째로 큰 수를 찾는 문제로 Collections.reverseOrder()메서드를 활용하여 높은 숫자가 우선순위가 될 수 있도록 한다. import ja..
우선순위 큐 (PriorityQueue) 우선순위 큐는 우선순위가 가장 높은 데이터를 가장 먼저 삭제하는 자료구조이다. 우선순위 큐를 구현하는 방법은 다양하다. ① 단순히 리스트를 이용하여 구현 ② 힙(Heap)을 이용하여 구현 데이터의 개수가 N개일 때, 구현 방식에 따라 시간 복잡도가 다르다. 우선순위 큐 구현 방식 삽입 시간 삭제 시간 리스트 O(1) O(N) 힙(Heap) O(logN) O(logN) 단순히 N개의 데이터를 힙에 넣었다가 모두 꺼내는 작업은 정렬과 동일하다. 이 경우 시간 복잡도는 O(NlogN) 이다. 힙(Heap)의 특징 힙(Heap)은 완전이진트리의 일종 힙(Heap)에서는 항상 루트노드를 제거한다. 최소 힙(min heap) 루트노드가 가장 작은 값을 가진다. 따라서 값이 ..
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에 객체를 저장 ..
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..
문서(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(문서) #..
배열 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'..
@RequestBody @ResponseBody 는 XML이나 JSON과 같은 메시지 기반의 커뮤니케이션을 위해 사용된다. @ResponseBody가 메서드 레벨에 부여되면 메서드가 리턴하는 객체는 뷰를 통해 결과를 만들어내는 Model로 사용되는 대신, 메시지 Converter를 통해 바로 HTTP 응답의 메시지 본문으로 전환된다. @RequestBody @ResponseBody를 위한 jackson 라이브러리 필요 com.fasterxml.jackson.core jackson-databind 2.14.2 💡 스프링부트에서는 의존성이 자동으로 포함되어 있음. @ResponseBody Controller에서 응답처리를 JSP로 하지 않고 JSON 형식으로 처리가 가능하다. 즉, 자바클래스를 리턴하면 자동..
프로젝트 생성 ① 의존성 등록 스프링부트 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..
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..