분류 전체보기 120

[CSV to JSON] 공공데이터 자료 변환 후 mongoDB에 넣기

1. 문제점 이번 프로젝트에서 공공데이터를 활용해서 DB에 넣을 필요가 있었다 이때 주어진 csv 파일이 문제가 있었는데, 정규화가 하나도 안된 상태였다 사용한 공공데이터는 아래 링크에서 볼 수 있다 https://www.data.go.kr/data/3038404/fileData.do?recommendDataYn=Y 한국산업인력공단_국가기술자격 종목별 시험정보_20220620 국가기술자격의 종목별 시험정보(종목명, 개요, 변쳔과정, 수행직무, 진로 및 전망, 취득방법)에 대한 데이터입니다. www.data.go.kr 우선 엑셀로 파일을 열어서 확인해봤는데 아래와 같았다 Column이 3개로만 나누어져있었으며 type이라고 정의한 곳에는 사실 column으로 가야하고 contents는 각 컬럼에 맞게 내용..

Project/Python 2022.07.30

[Spring boot + MongoDB + MySQL] DB 2개 연동하기

Springboot에 Mysql과 MongoDB 연결하기 1. 연결이유 프로젝트 중, RDBMS로 기본적인 것들은 다 구현해 놨는데, 서비스 배포시 사용자들의 로깅이나 결제 데이터가 쌓이면 Document기반인 관리하기 더 편한 NoSQL로 넣는게 좋을것 같다는 생각이 들었다 따라서 구조는 Springboot에 Mysql과 MongoDB둘다 연결되어 있는 구조이다 이번 글에서는 MongoDB에 AOP로 사용자 접근 로그를 저장하도록 하겠다 Collection이름은 user_history이다 2. 코드 1) build.gradle 수정 가장 아랫줄 코드가 mongodb를 추가한 부분이다 2) User History Entity 수정 //@Entity @Document(collection="user_hist..

Back-end/Spring 2022.07.26

Java Basic

Java Basic JVM(Java Virtual Machine) 동작 방식 (1) Class Loader JVM내로 클래스 파일을 로드하고, 링크를 통해 배치하는 작업 수행 (2) Execution Engine class loader를 통해 JVM 내의 Runtime Data Area에 배치된 바이트 코드드을 명령어 단위로 읽어서 실행함 (3) Garbage Collector heap 메모리 영역에 생성된 객체들 중 참조되지 않은 객체들을 탐색 후 제거하는 역할 (4) Runtime Data Area JVM의 메모리 영역으로 자바 애플리케이션을 실행할 때 사용되는 데이터들을 적자하는 영역 - Method Area: 모든 스레드가 공유하는 메모리 영역으로 class, interface, method, f..

Language/Java 2022.07.22

Spring Basic

Spring DI & Bean Question List DI 종류는 어떤 것이 있고, 이들의 차이는? Autowiring 의 과정에 대해 설명해 보자 Bean/Component 어노테이션에 대해서 설명하고, 차이점에 대해 설명해보자 의존성과 설정값을 생성자 인자로 주입해야하는 이유는? IoC(Inversion of Control: 제어의 역전) 일반적으로 코드를 짤 때 개발자가 직접 의존성을 주입한다 public class IndexController{ private ARepository A= new ARepository(); } 위의 예시와 같이 직접 new 를 해서 의존성을 주입했다 하지만 제어의역전(IoC)의 경우 이와는 다르다 외부에서 의존성을 주입한다는 뜻이다 즉, DI(Dependency In..

CS 2022.07.22

[백준 7569] 토마토

문제설명 토마토가 상자안에 들어있다 가로M, 세로N, 높이 H로 상자가 주어진다 1은 토마토가 익어있다는 의미이고, -1은 빈 공간이다. 하루마다 익은 토마토를 기점으로 위,아래, 상,하,좌,우가 익는다 모든 토마토가 다 익는데 걸리는 최소한의 기간을 출력시킨다 단, 토마토가 원래 다 익어있는 경우에는 0을 출력하고, 토마토가 다 익지 못하는 경우는 -1을 출력시킨다 알고리즘 1. 입력 정보 받기 2. 그래프의 값이 1인(토마토가 익은경우) queue에 그 좌표값을 넣는다 3. bfs알고리즘을 사용하여 상,하,좌,우, 위, 아래를 모두 확인한다 4. 방문기록을 조회하여 0이 남아있는 경우 -1을 출력하고 그렇지 않은 경우엔 최대값을 출력시킨다 코드 #include #include #include usin..

Algorithm 2022.07.11

[백준 5525] IOIOI

문제설명 알고리즘 1. 입력받기 2. N으로 패턴 만들기 3. 주어진 문자열 S에서 N을 find함수로 찾기 4. 찾을때 마다 결과값 변수 1씩 증가, index를 업데이트 1. 입력받기 2. I를 만날때 마다 바로 뒤에 OI가 있으면 k증가, 문자열 index를 2씩 증가 3. OI가 I이후로 N번 나오면 패턴 매칭이 완료된 것이므로 결과 값 증가 , k 감소 4. 결과값 출력 코드 #include #include using namespace std; int main() { int N, M,cnt=0; cin >> N >> M; string S; cin >> S; /*string val; for (int i = 1; i

Algorithm 2022.07.11

[백준 1992] 쿼드트리

문제설명 알고리즘 1. 그래프 정보 입력 받기 2. 4등분 해서 해당 네모가 모두 같은 값으로 이루어진지 판단 3. 모두 같은 값이면 그 값을 출력하고 종료 4. 모두 같은 값이 아니면 또 4등분 해서 반복 코드 #include #include using namespace std; int graph[65][65]; void cut(int a, int b, int size) { int cnt_0 = 0, cnt_1 = 0; for (int i = a; i < a + size; i++)//모두 1이거나 모두 0 인경우 판단 { for (int j = b; j < b + size; j++) { if (graph[i][j]) cnt_1++; else cnt_0++; } } if (!cnt_0 && cnt_1) ..

Algorithm 2022.07.10

[백준 14503] 로봇 청소기

문제설명 알고리즘 1. 입력 받기 : 그래프 크기, 현재 위치, 방향, 그래프 형태 2. 방향 설계 -> 북 서 남 동 순으로 회전하기 때문에 dx,dy에 전진할때 발생하는 값을 정의해 둔다 3. 왼쪽으로 돌고, 안갔으면 간다. 단 갔으면 왼쪽으로 돈다 4. 4방향 다 돌았는데 갈 수 있는 곳이 없는 경우 그 자리에서 1칸 후진한다 5. 후진하려는데 그 뒤도 막혔으면 종료 코드 1) 시행착오 #include using namespace std; //탐색 int dx[4] = { 0,-1,0,1 }; //d=0 ~ 3일때 x의 이동 값 int dy[4] = {-1,0,1,0 }; //d=0 ~ 3일때 y의 이동 값 //후진 int bx[4] = { 1,0,-1,0 }; //d=0 ~ 3일때 x의 이동 값 ..

Algorithm 2022.07.03

[프로그래머스] 숫자 문자열과 영단어

문제설명 주어진 문자열을 입력 받고, 영단어로 된 단어를 숫자로 변환시켜 총 결과 숫자 값을 출력한다 알고리즘 1. 배열에 숫자영단어와, 숫자를 각각 저장해둔다 2. 반복문을 통해서 0부터 9까지 영단어가 있을때 숫자로 대체한다 3. 단, 같은 숫자가 나올 수 있기 때문에 반복하여 연산을 진행하되 탈출조건은 다음과 같다 3.1) 현재 연산중인 문자열을 정수로 바꾸고 다시 문자로 바꾸면 자릿수를 알 수 있다 -> 자릿수비교를 통해 동일하면 탈출 코드 #include #include #include using namespace std; string idx[10]={"zero","one","two","three","four","five","six","seven","eight","nine"}; string id..

Algorithm 2022.07.01