2024년 돌아보기
·
잡담
1/ 2024년 돌아보기 - 12024.01.15 - [잡담] - 나는 우물 안 개구리가 아니라 올챙이다 이 글을 작성한 지 어느덧 1년이 되어간다. 카르페디엠의 마음으로 앞으로 1년을 보내겠다는 포부가 담긴 − 오글거리는 − 글이다. 기말고사가 끝나며 여유가 생긴 지금, 문득 나는 무엇을 경험하고 배웠을까? 하는 궁금증에 연말정산 느낌으로 작성한다. 한 해 동안의 크고 작은 이벤트들을 나열해보려고 한다.  January프로젝트.. 어떻게 하는 거예요? 학교 선배 형님의 추천으로 프로젝트에 참여하게 되었다(감사합니다!!) 백엔드 파트를 맡게 되었는데, 프로젝트를 어떻게 진행해야 할지 너무 막막했다. 어떤 방식으로 진행해야 할지, 프론트엔드와 협업은 어떻게 해야 하는지.. 여기저기 물어도 보고, 팀원분들께..
유연한 게시물 필터링을 위한 Spring JPA Specification 리팩토링 일지
·
개발 일지
유연한 필터링이 필요해개인 프로젝트를 진행하던 중, [내가 쓴 글]과 [내가 좋아요 한 글]에 대한 검색 기능이 필요했다. 이미 전체 게시글에 대해서 검색하는 API가 있었는데, 이 API는 오직 "전체 게시글"을 바탕으로 응답해 주는 형태였다.  만약, 아래 그림과 같이 필요한 경우의 API를 일일이 작성하게 된다면 정말이지 골때리는 코드가 될 것이다. 추후에 카테고리를 통한 필터 기능도 추가할 예정이기 때문에, 그때가 되어서 저 3가지 API를 붙잡고 수정할 순 없는 노릇이다.  게시글 응답 API는 하나만 사용해보자세 유형의 요청을 하나의 API로 요청받고, 내부적으로 쿼리 파라미터에 따라서 다른 응답을 하기로 했다. 쿼리 파라미터에 따라 다른 응답을 제공하기 위해서는 각 조건에 따라 Specifi..
[Java] 감시 15683
·
문제풀이/백준
package 백준.자바.감시_15683;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class Main { static final int MAX_N = 8; static final int MAX_M = 8; // val은 현재 사각지대의 개수 static int N, M, val; static int[] dx = {-1, 1, 0, 0}; static int[] dy = {0, 0, -1, 1}; static int[][] map = new int[MAX_N][MAX_M]; static int[][][] directions = { ..
멋쟁이 사자처럼 대학 12기 해커톤 후기
·
잡담
해커톤 출발하다 저는 올해 멋쟁이 사자처럼 대학 12기에 가입하여 활동을 하고 있습니다 멋쟁이 사자처럼 가입하면서 가장 기대했던 행사가 바로 중앙 해커톤이었는데요 무려 전국 대학에서 1500명 이상의 아기사자가 모여 무박 2일 동안 주제에 맞는 프로젝트를 개발하고 발표하는 행사였습니다.  2시부터 입장할 수 있었는데, 저희 팀이 첫 번째로 줄을 서 입장했네요 ㅋㅋㅋ  해커톤 입장과 이벤트 즐기기  입장하여 명찰, 티셔츠를 받고 환복 후 바로 이벤트 부스로 달려갔습니다!! 이벤트 부스에서 여러 가지 사은품을 잔뜩 챙겼습니다 ㅎ   행사 시작  행사 시작인 오후 5시가 되자 널널하던 행사장이 꽉 차게 되었습니다. 사진만 봐도 사람이 정말 많지 않나요.. 사진에 다 담기지 않을 정도로 저 반대편에도 많은 사람..
hibernate가 기존 DB 테이블을 재생성하는 문제
·
트러블 슈팅
문제점스프링 서버와 DB를 두 개의 컨테이너로 생성하여 운영환경에서 배포할 계획이었다.DB 컨테이너는 컨테이너 생성 시 init.sql을 통해 [유저 권한, DB 생성, Table 생성, 레코드 삽입] 동작이 수행된다.스프링 서버와 DB를 Docker Compose를 통해 컨테이너를 생성하고나니, DB에 init.sql을 통해 생성해 두었던 레코드가 삭제되어 있었다.  원인 모색두 가지 원인으로 생각해 보았다.DB 컨테이너의 init.sql가 정상적으로 수행되지 않았다.DB 컨테이너의 init.sql은 정상적으로 수행되었으나, 스프링 컨테이너 시작 시 hibernate에 의해 수정되었다.  1.  DB 컨테이너의 init.sql이 정상적으로 수행되지 않았다 ?유저 권한 및 DB, Table 생성은 잘 되..
SSAFY 인턴 1기 수료 후기
·
잡담
싸피 인턴이번 SSAFY 모집에서는 12기 모집과 더불어 SSAFY 1년 과정을 2주동안 체험해볼 수 있는 인턴쉽이 새로 생겼습니다. 평소 SSAFY 과정에 대한 관심이 많았기에 지원하게 되었고, 운이 좋게도 합격하게 되었습니다.  의도치 않은 갓생 살기6 to 9이라고 들어보셨나요..? 아침 6시에 일어나 출발해 교육이 끝난 후 집에 오면 7시였고, 이후 운동까지 하고 오니 9시였습니다. 평소 백수 생활에 익숙하던 저에게는 너무 피곤하고 힘들었지만, 교육 중후반부에 도달하니 어느정도 익숙해졌던 거 같네요  간단한 후기SSAFY에 지원한 열정적인 사람들 속에서 많은 것들을 느낄 수 있었고(정말 멋진 사람들이 많았어요)개발자로써 어떻게 성장해야 할 지에 대한 인사이트를 얻을 수 있어 너무 좋은 경험이었습니..
JPA Entity 매핑 관련 오류(java.sql.SQLNonTransientConnectionException)
·
트러블 슈팅
문제 상황도커를 이용해 스프링 서버와 DB를 각각 컨테이너에 띄워 관리하기 위해 도커 설정을 하고, 컨테이너로 띄웠다.그런데, 실행 이후 서버 컨테이너가 다음과 같은 오류와 함께 종료되었다. java.sql.SQLNonTransientConnectionException: Socket fail to connect to host:address=(host=docker-route-guide-db-1)(port=3306)(type=primary). Connection refused 내가 생각했던 원인도커에서 DB 관련 설정이 잘못되었다.스프링에서 DB 관련 설정이 잘못되었다.Dialect 호환이 잘못되었다.DB 컨테이너와 스프링 컨테이너간의 통신이 되지 않는다 1. 도커에서 DB 관련 설정이 잘못되었다?Docke..
DB 연동을 위한 도커 경로 설정 문제
·
트러블 슈팅
문제 상황작성된 스프링 프로젝트를 도커를 이용해 배포하려던 상황이었다.로컬에서는 간편한 테스트를 위해 H2 DB를 사용하고 있었고, 배포 환경에서는 따로 DB 컨테이너를 띄워 MariaDB와 연동하려고 했다.H2와 MariaDB는 application.yml 파일 설정이 다르므로 상황마다 매 번 yml 파일을 수정해야하는 점이 불편하여두 개의 설정 파일을 두고, 실행 시 상황에 따라 바꿀 수 있도록 시도했다.이후 도커를 이용하여 서버와 DB 컨테이너를 띄우고 나니, 서버 컨테이너에서 다음과 같은 오류가 발생했다.java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1 at org.mariadb.jdbc.HostAddre..
Docker build context와 파일 인식
·
트러블 슈팅
문제 상황DB 컨테이너와 JAVA 컨테이너를 하나의 Compose 파일로 묶어서 관리하는 과정에서 문제가 생겼다. 문제 상황 docker-compose up 으로 컨테이너 생성 시 configweb의 Dockerfile에서 COPY 경로를 찾을 수 없다는 오류가 발생했다 오류 발생 당시 소스코드 COPY 경로를 담고 있는 변수는 JAR_FILE이므로, JAR_FILE의 경로가 잘못되었다는 의미이다. Dockerfile Build 과정에서 설정한 context 위치는 Docker/configweb 이다.따라서, JAR_FILE의 상대 경로 또한 Docker/configweb을 기준으로 삼으니 설정된 경로는 문제될 것이 없어보였다. 열심히 검색해본 결과.. 경로는 문제가 없었지만, context의 위치가 문..
보물섬 2589
·
문제풀이/백준
2589번: 보물섬 첫째 줄에는 보물 지도의 세로의 크기와 가로의 크기가 빈칸을 사이에 두고 주어진다. 이어 L과 W로 표시된 보물 지도가 아래의 예와 같이 주어지며, 각 문자 사이에는 빈 칸이 없다. 보물 지도의 www.acmicpc.net package 백준.자바.보물섬_2589; import java.io.*; import java.util.*; public class Main { private static int N, M; private static boolean[][] visited; private char[][] map; class Pair{ int x; int y; int dist; public Pair(int x, int y, int dist){ this.x = x; this.y = y; ..
OSNIE
osnie