전체 글455 [Apache Server] 리버스 프록시_CentOS, Ubuntu 프로젝트 막바지에 이상한 요구사항이 하나가 전달되었다. 외부에 노출되어야 하는 네 개의 모듈 즉 네 개의 서로 다른 웹사이트가 존재하는데, 외부로 나갈 수 있는 포트는 하나 뿐이니 하나의 포트 안에서 네 개의 모듈을 모두 서빙하라는 요구사항이었다. 처음에는 "이게 무슨 헛소리지..."하면서 당황했었다. 그렇다고 을의 입장에서 "헛소리 하지 말고 포트 네 개 열어주십쇼." 라고 말하기도 뭐했다. 그래서 이를 해결하기 위해 같이 프로젝트를 진행하는 다른 회사의 개발자와 이야기를 하던 중 리버스 프록시로 해결할 수 있을 것 같다는 이야기를 들었다. 그 말을 듣고 옛날에 포트 하나로 두 개의 모듈을 서빙할 때 과장님께서 "리버스 프록시를 활용하라"고 알려주셨던 게 기억이 났다. 때마침 서버 안에 static 파.. 2023. 9. 28. View와 Materialized View 갑자기 궁금한 게 생겼다. 바로 "View에도 인덱스를 걸 수 있나?" 였다. 그리고 궁금점에 대한 답을 찾아보던 중 몰랐던 개념을 알아냈다. 바로 MATERIALIZED VIEW였다. 얼추 어떤 것인지는 알아냈지만, "알았다!" 하고 아무것도 안하면 분명 까먹을 것이 분명하기에 적어놓으려고 한다. VIEW 우선 VIEW는 데이터베이스의 테이블에서 가져온 결과 세트에 대한 저장된 쿼리이다. 실제 데이터를 저장하지 않고, 특정 쿼리에 대한 결과를 제공하는 "가상 테이블"로 생각하면 된다. 예를 들어서 다음과 같은 DB가 있다고 가정하자. 우선 위 세 개의 테이블에 대한 CREATE와 테스트용으로 사용할 더미 데이터를 입력한다. 참고로 MariaDB는 Materialized View를 지원하지 않아 Post.. 2023. 7. 24. Batch Insert/Delete 사용자에게 적게는 수 개에서 많게는 수만 개의 데이터를 받아 일괄적으로 처리하는 CRUD API를 개발한 경험이 있다. 처음으로 다량의 데이터를 받아 처리해야 하는 기능을 맡게 되었었다. 그래서 경험이 없어 고민을 했던 게 있다. 그건 바로 "어떻게 하면 보다 빠르게 CRUD가 완료될까"에 대한 고민이었다. 우선 로직은 아래와 같았다. 사용자에게 데이터 리스트를 입력받는다. 데이터를 하나하나 검증해보며 양식에 맞지 않거나 잘못 들어온 데이터를 식별한다. 검증된 정상적인 데이터만 골라내 DB에 Upsert한다. 검증 실패 데이터와, 검증 성공 및 db 정상 입력 데이터를 각각의 리스트에 담아 return한다. JAVA 내부에서는 어쨌든 전달받은 데이터를 개별적으로 검증하는 작업을 해야 하므로 속도를 극대화.. 2023. 7. 22. Spring Batch 조금 옛날 일이긴 한데, 데이터 코어라는 모듈을 개발하던 중 적게는 수 개에서 많게는 수만 개의 데이터를 일괄적으로 전송받아 처리하는 Batch 모듈을 개발한 경험이 있다. 사실 이 때 이름도 이름인지라 개발을 "Spring Batch"로 하려고 했던 적이 있다. Spring Batch에 대한 경험은 없었으나, 그냥 이름이 동일하고 대량의 데이터를 처리하기 적합한 기술이라는 것 정도는 알고 있었기 때문이다. 하지만 실제로는 Spring Batch로는 이를 구현할 수 없었다. 컨트롤러에서 받은 사용자의 입력을 스프링 배치로 선언한 job에 넣어주려고 보니, 도저히 넣을 수 있는 파라미터 설정 방법이 보이지 않았다. 스프링 배치는 애초에 컨트롤러에서 데이터를 받아 이를 처리하는 모듈이 아니라, 그냥 내부에서.. 2023. 7. 19. OSIV JPA를 사용하다보면, 종종 특수한 상황에서 LAZY LOADING을 사용해야하는 경우가 있다. 한 번에 관계 데이터까지 가져오기에는 데이터가 너무 대용량인 경우 너무 복잡한 관계를 가진 데이터인 경우 자주 사용하지 않는 데이터를 관계로 가진 경우 그런데 이렇게 LAZY LOADING을 채택해서 Domain 클래스를 구성했을 때 종종 발생하는 에러가 있다. 바로 LazyInitializationException 에러이다. 지연 로딩은 객체가 실제로 필요한 시점에 DB에서 데이터를 로딩하는 방식이다. 그런데 위의 에러는 DB에서 데이터를 로딩해서 세션(영속성)이 종료된 후인데, 다시 한 번 DB에 접근해서 필요한 데이터를 불러오려고 해서 발생하는 문제이다. 즉, View에서 데이터를 보여줄 때 이미 DB에.. 2023. 7. 14. [JAVA] 코테용 함수들 코딩테스트를 하다보면 List, Set, Map 등의 자료구조를 가져와서 써야할 때가 많다. 대부분은 평소 개발을 하거나 코딩테스트 연습 문제를 풀때는 딱히 인식을 하지 않아도 그냥 손가락이 알아서 쳐주는 함수들인데, 이상할 정도로 코딩 테스트만 가면 기억이 안나는 경우가 허다하다. 그래서 "언젠가는 정리해놓아야지..." 하다가 이제서야 정리를 한 번 해볼까 한다. List 형변환 일단 가장 먼져 형변환 코드이다. array list // array if(true) { // array > list String[] arr = new String[] {"a", "b", "c"}; List list = Arrays.asList(arr); System.out.println(list); // list > arra.. 2023. 7. 8. [JAVA] 누울 자리를 찾아라_1652 https://www.acmicpc.net/problem/1652 1652번: 누울 자리를 찾아라 첫째 줄에 방의 크기 N이 주어진다. N은 1이상 100이하의 정수이다. 그 다음 N줄에 걸쳐 N개의 문자가 들어오는데 '.'은 아무것도 없는 곳을 의미하고, 'X'는 짐이 있는 곳을 의미한다. www.acmicpc.net 누울 자리를 찾아라 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 128 MB 16911 6805 5749 41.777% 문제 일 년 동안 세계일주를 하던 영식이는 여행을 하다 너무 피곤해서 근처에 있는 코레스코 콘도에서 하룻밤 잠을 자기로 하고 방을 잡았다. 코레스코 콘도에 있는 방은 NxN의 정사각형모양으로 생겼다. 방 안에는 옮길 수 없는 짐들이 이것저것 많이 있어서 영.. 2023. 7. 7. [PostgreSQL] 컬럼의 Length를 지정해야 하는 이유 이번 프로젝트에서 데이터 코어 구축 후 데이터 마트까지의 구축을 담당했다. 원래대로라면 데이터 마트 내 테이블의 컬럼들 각각에 length를 부여해줬을 것이다. 하지만 이번에는 구체적인 데이터의 양식이 주어지지 않았고, 그저 협력업체로부터 각 테이블에 들어갈 샘플 데이터 몇 개만 전달받았다. 그래서 데이터의 구체적인 도메인과 Length를 파악할 수 없었다. *협력업체에 문의했는데 자기들도 모른단다. 그래서 어떻게 해야하나 생각을 하던 중 때마침 데이터 마트 구축으로 사용한 DB가 PostgreSQL라는 사실이 생각났다. PostgreSQL은 VARCHAR 등의 칼럼에 굳이 Length를 지정해주지 않아도 됐고, 그래서 컬럼에 length를 지정해주지 않았다. 그러다 감리 진행 중 length를 지정하지.. 2023. 7. 5. [JAVA/DP] 01타일_1904 https://www.acmicpc.net/problem/1904 1904번: 01타일 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이 www.acmicpc.net 01타일 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 0.75 초 (추가 시간 없음) 256 MB 87457 28450 22585 31.680% 문제 지원이에게 2진 수열을 가르쳐 주기 위해, 지원이 아버지는 그에게 타일들을 선물해주셨다. 그리고 이 각각의 타일들은 0 또는 1이 쓰여 있는 낱장의 타일들이다. 어느 날 짓궂은 동주가 지원이의 공부를 방해하기 위해 0이 쓰여진 낱장의 타일들을 붙여.. 2023. 7. 5. [JAVA/BFS] 숨바꼭질_1697 https://www.acmicpc.net/problem/1697 1697번: 숨바꼭질 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 www.acmicpc.net 숨바꼭질 성공다국어 한국어 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 128 MB 206618 59816 37680 25.384% 문제 수빈이는 동생과 숨바꼭질을 하고 있다. 수빈이는 현재 점 N(0 ≤ N ≤ 100,000)에 있고, 동생은 점 K(0 ≤ K ≤ 100,000)에 있다. 수빈이는 걷거나 순간이동을 할 수 있다. 만약, 수빈이의 위치가 X일 때.. 2023. 7. 5. [JAVA/유클리드호제] 분수 합_1735 https://www.acmicpc.net/problem/1735 1735번: 분수 합 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를 뜻하는 두 개의 자연수가 순서대로 주어진다. 입력되는 네 자연수는 모두 30,000 이하이다. www.acmicpc.net 분수 합 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 128 MB 22129 10330 8855 48.175% 문제 분수 A/B는 분자가 A, 분모가 B인 분수를 의미한다. A와 B는 모두 자연수라고 하자. 두 분수의 합 또한 분수로 표현할 수 있다. 두 분수가 주어졌을 때, 그 합을 기약분수의 형태로 구하는 프로그램을 작성하시오. 기약분수란 더 이상 약분되지 않는 분수를 의미한다. 입력 첫째 줄과 둘째 줄에, 각 분수의 분자와 분모를.. 2023. 7. 4. [JAVA] 날짜 계산_1476 https://www.acmicpc.net/problem/1476 1476번: 날짜 계산 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타 www.acmicpc.net 날짜 계산 성공 시간 제한메모리 제한제출정답맞힌 사람정답 비율 2 초 4 MB 36047 23109 18674 66.295% 문제 준규가 사는 나라는 우리가 사용하는 연도와 다른 방식을 이용한다. 준규가 사는 나라에서는 수 3개를 이용해서 연도를 나타낸다. 각각의 수는 지구, 태양, 그리고 달을 나타낸다. 지구를 나타내는 수를 E, 태양을 나타내는 수를 S, 달을 나타내는 수를 M이라고 했을 때, 이 .. 2023. 7. 4. 이전 1 2 3 4 5 6 7 8 ··· 38 다음