본문 바로가기

분류 전체보기64

[백준 S2] 헌내기는 친구가 필요하다 https://www.acmicpc.net/problem/21736💡문제 분석 요약  1. N x M 크기의 캠퍼스에서 상/하/좌/우 이동을 한다. 2.첫째 줄에는 캠퍼스의 크기를 나타내는 두 정수 N (1≤𝑁≤600$) , M (1≤𝑀≤600) 이 주어진다. 둘째 줄부터 캠퍼스의 정보들이 주어진다. O는 빈 공간, X는 벽, I는 도연이, P는 사람이다. I가 한 번만 주어짐이 보장된다. 💡알고리즘 설계  1. 도연이의 위치 좌표를 저장한다. 2. 저장한 도연이의 위치좌표에서 상/하/좌/우로 탐색해가며 P(사람)을 찾는다. 1. 도연이의 좌표를 DFS 메서드의 인자로 전달한다.2. 새로운 좌표를 'true'로 방문처리한다.3.  If문을 이용하여 새로운 좌표에 'P'가 있을 경우(찾고자 하는 것.. 2024. 5. 7.
EC2 환경에서 Docker 를 이용하여 Mysql 컨테이너 접속 및 실행 / 어플리케이션 실행 📍 1. EC2 환경에서 관리자 권한으로 변경 후 docker login(docker login 후 username 과 password를 입력한다)sudo su - // 관리자 권한으로 변경docker login // 도커에 로그인  📍  2. 현재 mysql container가 실행되고 있는지 확인 후, 실행되지 않고 있을 경우, 실행시켜준다    컨테이너 실행 후, mysql에 로그인 한다.docker ps // 현재 실행되고 있는 컨테이너 목록 // EC2 인스턴스를 처음 연결할 경우, 실행되고 있는 컨테이너가 없을것이다 따라서 아래 명령어를 입력 docker ps -a // 모든 컨테이너 목록docker start [Container name] // 해당 [.. 2024. 4. 27.
BFS / DFS 정리 (진행중) DFS : Root Node 혹은 다른 임의의 Node에서 다음 분기(Branch)로 넘어가기 전에 해당 분기를 완벽하게 탐색하는 방법이다. Stack 혹은 재귀함수(Recursion) 으로 구현된다. 경로를 탐색할 때 한 방향으로 갈 수 있을 때까지 계속 가다가 더 이상 갈 수 없게되면 다른 방향으로 다시 탐색을 진행 모든 노드를 방문하는 경우에 이 방법을 사용한다.재귀 함수를 사용할 때에는 종료 조건을 꼭 명시해야 함 재귀 함수를 사용할 때에는 종료 조건을 꼭 명시해야 함 BFS : Root Node 혹은 다른 임의의 노드에서 인접한 노드를 먼저 탐색하는 방법이다. Queue를 사용해서 구현한다. 2024. 4. 19.
스프링 환경설정 셋팅 1. Build and run using, Run tests using 2개의 값을 IntelliJ IDEA로 변경하면 인텔리제이가 직접 자바 프로젝트를 실행하고, 조금 더 빨리 로드됩니다. 2. 스프링 부트 3.2부터 자바 컴파일러에 -parameters 옵션을 넣어주어야 애노테이션의 이름을 생략할 수 있다. 주로 아래의 애노테이션을 사용할 때 문제가 발생한다. @RequestParam, @PathVariable, @Autowired, @ConfigurationProperties 해결 방안1) 애노테이션에 이름을 생략하지 않고 다음과 같이 이름을 항상 적어준다. @RequestParam("username") String username @PathVariable("userId") String userId.. 2024. 4. 18.
[Docker] Java17 + Spring Boot + Docker + AWS EC2에 배포하기 스프링부트 프로젝트를 도커를 통해서 EC2에 배포하고자 한다 과정을 살펴보면 아래와 같다. 1. 로컬에서 스프링부트 프로젝트를 빌드하여 review-0.0.1-SNAPSHOT.jar 파일 생성 2. 위의 빌드한 파일을 도커 이미지로 만든 후 Docker Hub Repository에 push 3. EC2에서 Docker Hub Repository를 통해 이미지 pull 4. 배포 완료 📍 1. Dockerfile 생성하기 FROM openjdk:17 # JAR_FILE 변수 정의 -> 기본적으로 jar file이 2개이기 때문에 이름을 특정해야함 ARG JAR_FILE=./build/libs/review-0.0.1-SNAPSHOT.jar # JAR 파일 메인 디렉토리에 복사 COPY ${JAR_FILE} .. 2024. 4. 14.
페이징 쿼리 최적화 들어가기 전에... 지금 부터 설명할, 두 코드 모두 전체 데이터를 가져오는데 사용할 수 있지만, 성능 면에서 차이가 있다. 첫번째 방법의 경우 query.fetch().size()를 사용하여 전체 데이터 개수를 가져온다. 이는 쿼리를 실행하여 모든 결과를 가져온 후 리스트의 크기를 반환하는 방식이다. 이렇게 하면 전체 결과를 메모리로 가져오기 때문에 가져올 데이터가 매우 큰 경우, 성능이 저하될 수 있다. 또한, fetch().size() 메서드 호출이 실제로는 모든 결과를 가져오기 때문에 성능적으로 비효율적이다. 두 번째 방법에서는 count 쿼리를 사용하여 전체 레코드 수를 가져온다. count 쿼리는 실제 데이터를 가져오지 않고 단순히 데이터 개수만을 반환하므로, 성능상의 이점이 있다. 또한, 전.. 2024. 4. 6.