본문 바로가기

분류 전체보기447

[JAVA] 디펜스 게임 https://school.programmers.co.kr/learn/courses/30/lessons/142085 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.PriorityQueue; import java.util.Collections; class Solution { public int solution(int n, int k, int[] enemy) { int answer = 0; // 막은 적들을 내림차순으로 저장 PriorityQueue pq = new PriorityQueue(Collections.reverseOr.. 2024. 2. 22.
[JAVA/DP] 연속 펄스 부분 수열의 합 https://school.programmers.co.kr/learn/courses/30/lessons/161988# 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr class Solution { public long solution(int[] sequence) { // 16, 19, 20이 계속 에러가 나서 왜그런가 하고 봤더니 자료형을 int가 아니라 long으로 하면 해결됨 // https://school.programmers.co.kr/questions/45489 // +1을 먼저 곱할때와, -1을 먼저 곱할때의 경우의 수 // 사실 굳이 이렇게할 .. 2024. 2. 22.
[JAVA/BFS] 석유 시추 https://school.programmers.co.kr/learn/courses/30/lessons/250136 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr import java.util.*; class Solution { // 각 열별로 얻을 수 있는 석유의 총양 int[] total; // 탐색 여부 private boolean[][] visited; // 정답 private int max = 0; public int solution(int[][] land) { // 입력된 land의 크기에 따라 필요한 배열 크기 지정 total = new in.. 2024. 2. 22.
[PostgreSQL] VARCHAR 칼럼 내 일부 단어만 변경 한 테이블의 VARCHAR 칼럼 내 일부 단어를 다른 단어로 변경해야 하는 상황이 발생했다. 방법은 생각 외로 간단했다. 그냥 단순하게 REGEXP_REPLACE 함수를 사용하면 된다. 이제 테스트를 한 번 해보자. 단순한 단어 변경 테스트용 데이터를 아래와 같이 생성해보았다. CREATE TABLE IF NOT EXISTS replace_test ( -- SERIAL 사용 시 postgresql은 AUTO_INCREMENT가 자동 적용됨. serial_no SERIAL PRIMARY KEY, simple_str VARCHAR(100), detail_str VARCHAR(1000) ); INSERT INTO replace_test (simple_str, detail_str) VALUES ('this', .. 2024. 2. 5.
[DB] 두 개 컬럼을 인덱스로 묶고 그 중 하나로만 쿼리를 하면? 옛날부터 궁금한게 한 가지 있었다. 예를 들어, 한 테이블의 col1, col2 칼럼에 동시에 인덱스를 걸어놓았다. 이 떄 인덱스는 따로따로가 아니라 동시에 걸어놓는다. 무슨 말이냐 하면, 위 사진처럼 하나의 인덱스당 하나의 컬럼을 거는 것이 아니라, 아래의 사진처럼 하나의 인덱스에 두 개의 컬럼을 묶어놓는 식이다. 그리고 col2 칼럼을 기준으로 CRUD 쿼리를 실행시키면 과연 "Index가 정상적으로 작동할까?" 궁금한 건 못참으니, 한 번 테스트를 해볼까 한다. 참고로 MariaDB 11.2.2 를 사용했다. 테이블, 프로시저 생성 및 초기 데이터 입력 우선 테이블을 생성한다. 각 테이블은 동일하게 9개의 INT 컬럼으로 구성되어 있으며, 서로 다른 인덱스를 설정해 다섯 개의 테이블을 생성했다. 인.. 2024. 1. 16.
ON DELETE(UPDATE) 옵션 프로젝트 진행 전 프로젝트 세팅 과정에서 초기 테이블 생성용 schema.sql 을 작성하고 있었다. 테이블 CREATE 쿼리를 작성하며 외래키를 설정하고 요구사항에 따라 ON DELETE, ON UPDATE 옵션을 설정하는데 문득 의문이 들었다. "나 이게 뭔지 제대로 알고는 쓰나?" 물론 얼추 알기는 안다. 하지만 누군가 "이 옵션이 무슨 옵션이야" 라고 물었을 때 아무 고민 없이 나올 정도로 확실하게 알지는 못한다. 그래서 잠시 반성의 시간을 가졌고, 개념을 확실하게 공부해볼까 한다. 외래 키 (FK, Foreign Key) 외래 키는 데이터베이스 관리 시스템에서 두 테이블 간의 관계를 정의하는 데 사용되는 키이다. 한 테이블의 컬럼이 다른 테이블의 기본 키를 참조하는 것을 의미한다. 주로 참조 무.. 2024. 1. 10.
[Spring JPA] Dynamic Insert/Update 설정에 큰 신경을 쓰지않고 JPA를 사용해보면 거슬리는 부분이 하나 발견된다. 줄글로 설명을 하기는 뭐하니, 코드를 통해 확인해보자. 우선 아래 쿼리를 이용해 테이블을 생성했다. DROP TABLE IF EXISTS test_tbl; CREATE TABLE test_tbl ( row_id INT PRIMARY KEY, row_data_one VARCHAR(100), row_data_two VARCHAR(100) ); 그리고 위 테이블에 대한 도메인 클래스를 아래와 같이 생성해주었다. TestDomain.java import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.Id; import j.. 2023. 12. 19.
[Spring JPA] JPA에서도 PK가 변경될까? 내년 초에 시작될 신규 프로젝트에 대비해서 프로젝트 세팅 및 공부를 하던 도중 한 가지 사실을 알아냈다. 우선 내년 초에 시작될 신규 프로젝트는 Spring Webflux를 사용해사 개발할 예정이다. 그리고 Webflux를 사용하기에, DB 접근도 비동기식으로 접근하고자 R2DBC를 사용할 예정이었다. 그런데 프로젝트 세팅겸 도메인 클래스를 미리 생성하던 중 아래와 같은 이슈가 발생했다. 테이블 중에는 다중 PK값을 가지는 테이블이 존재했는데, 해당 테이블의 도메인을 설정하다보니, R2DBC는 @IdClass를 지원하지 않는다는 이슈를 발견한 것이다. 열심히 구글링도 해보고, 전지전능한 챗지피티에게도 문의해보았다. 하지만 돌아온 답변은 모두 "사용할 수 없음" 이었다. 뭐, 이 이슈는 그냥 jpql을 사.. 2023. 12. 18.
[Spring Webflux] HDFS에 파일 업로드 오늘은 Webflux 모듈에서 HDFS에 파일을 업로드 하는 코드를 작성해보고자 한다. 우선 모듈은 이전의 두 개 포스팅에서 작성한 모듈을 이어서 사용했다. https://123okk2.tistory.com/483 [Spring Webflux] Mybatis를 비동기로 돌리기 다음 프로젝트에서는 Spring Webflux 기반 프로젝트에 MaiaDB와 Hive를 동시에 연동시켜서 진행할 예정이다. 두 개의 DB에 대한 요구사항은 얼추 아래와 같이 구성할 수 있다. 프로그램 실행에 사용되는 123okk2.tistory.com 설정 추가 hdfs와의 연동을 위해 필요한 의존성을 추가한다. 참고로 설치된 하둡이 3.2.3 버전이라 3.2.3 버전의 디펜던시를 채택했다. pom.xml org.apache.had.. 2023. 12. 12.
[Spring Webflux] Mybatis를 비동기로 돌리기 다음 프로젝트에서는 Spring Webflux 기반 프로젝트에 MaiaDB와 Hive를 동시에 연동시켜서 진행할 예정이다. 두 개의 DB에 대한 요구사항은 얼추 아래와 같이 구성할 수 있다. 프로그램 실행에 사용되는 데이터는 MariaDB에 저장한다. 사용자가 입력하는 데이터는 Hive에 저장한다. Hive 테이블 구조는 사용자가 직접 설정하며, 해당 구조는 MariaDB에 저장된다. 즉 Hive에 데이터 입력은 고정된 형식으로만 제공되지 않으며, 동적으로 DDL과 DML 설정이 가능해야 한다. 전체 요구사항을 말할 수 없어 이렇게만 적으면 "무슨 소리지" 싶을 수 있겠지만, 아무튼 그렇다. 위 요구사항 만족을 위해 MariaDB는 일반적인 방법으로 r2dbc를 사용해 해결할 수 있다. 하지만 Hive는.. 2023. 12. 5.
[Spring Webflux] MariaDB CRUD API 지금까지는 대부분의 어플리케이션을 Spring MVC로 개발했다. 하지만 다음 해 진행할 프로젝트에서는 기술회의 중 Spring Reactiive (Webflux)를 사용하기로 결정되었다. Webflux 경험이 전무하지는 않다. 한 번의 프로젝트를 Webflux로 개발한 경험이 있고, 개인적으로 공부를 하기도 했었다. 하지만 MVC처럼 실무에서 다양하게 사용해보지는 못해서 당연히 이해도가 많이 떨어져 활용법을 제대로 알지 못했고, 또 프로젝트를 한 지 한참이 지나 까먹은 내용이 대부분이기에 잠시 시간이 난 틈을 타서 사용방법을 공부해보았다. 이어지는 다음 프로젝트에서 사용할 수 있도록 공부한 내용을 포스팅해놓을까 한다. Spring Webflux 웹플럭스는 비동기, 논블로킹을 지원하는 방식이다. 이미 앞.. 2023. 12. 3.
[JAVA] 금고털이 https://softeer.ai/practice/6288 Softeer - 현대자동차그룹 SW인재확보플랫폼 루팡은 배낭을 하나 메고 은행금고에 들어왔다. 금고 안에는 값비싼 금, 은, 백금 등의 귀금속 덩어리가 잔뜩 들어있다. 배낭은 W ㎏까지 담을 수 있다. 각 금속의 무게와 무게당 가격이 주어졌을 softeer.ai 언어별 시간/메모리 JavaScript 3초 256MB C 1초 256MB C++ 1초 256MB Java 2초 256MB Python 3초 256MB C# 2초 256MB Kotlin 2초 256MB Go 2초 256MB Swift 2초 256MB 루팡은 배낭을 하나 메고 은행금고에 들어왔다. 금고 안에는 값비싼 금, 은, 백금 등의 귀금속 덩어리가 잔뜩 들어있다. 배낭은 W ㎏까지 .. 2023. 11. 20.