분류 전체보기26 프로그래머스 - 섬 연결하기 : Java 문제 n개의 섬 사이에 다리를 건설하는 비용(costs)이 주어질 때, 최소의 비용으로 모든 섬이 서로 통행 가능하도록 만들 때 필요한 최소 비용을 return 하도록 solution을 완성하세요. 다리를 여러 번 건너더라도, 도달할 수만 있으면 통행 가능하다고 봅니다. 예를 들어 A섬과 B 섬 사이에 다리가 있고, B 섬과 C 섬 사이에 다리가 있으면 A섬과 C섬은 서로 통행 가능합니다. 제한사항 섬의 개수 n은 1 이상 100 이하입니다. costs의 길이는 ((n-1) * n) / 2이하입니다. 임의의 i에 대해, costs[i][0] 와 costs[i][1]에는 다리가 연결되는 두 섬의 번호가 들어있고, costs[i] [2]에는 이 두 섬을 연결하는 다리를 건설할 때 드는 비용입니다. 같은 연결.. 2023. 8. 29. Garbage Collection - 2 : Garbage Collector 종류 개요 Garbage Collection - 1에서 가비지 컬렉션의 절차에 대해서 이야기 했었습니다. https://style-tech.tistory.com/23 Garbage Collection - 1 개념 JAVA로 작성한 코드를 컴파일하고 실행하려면 CPU로부터 메모리를 할당받아야합니다. Java는 JVM에서 이 과정을 수행합니다. 그리고 JVM에서 CPU로부터 메모리를 할당받습니다. 하지만 실행될 style-tech.tistory.com 가비지 컬렉션을 하는 과정에서 Stop The World 현상이 발생하고 애플리케이션이 지연되는 시간이 있다고 이야기했습니다. 지연현상은 자바의 발전과 애플리케이션의 크기가 증가하면서 Heap 영역의 크기가 커졌고, Heap 영역을 비우는 시간이 길어졌습니다. 가비.. 2023. 8. 28. Garbage Collection - 1 : GC 과정 개념 JAVA로 작성한 코드를 컴파일하고 실행하려면 CPU로부터 메모리를 할당받아야합니다. Java는 JVM에서 이 과정을 수행합니다. 그리고 JVM에서 CPU로부터 메모리를 할당받습니다. 하지만 실행될 프로그램에서 사용될 메모리를 미리 정확하게 할당하기는 어렵습니다. 실행환경에 따라 필요한 메모리는 동적으로 변화하기 때문입니다. 그래서 JVM은 메모리를 동적으로 할당받습니다. 그리고 동적으로 할당했던 메모리 영역 중 필요 없게 된 메모리 영역을 주기적으로 삭제합니다. 이것을 Garbage Collection이라고 부릅니다. C나 C++같은 프로그래밍언어에서는 Garbage Collection과 같은 일을 하는 요소가 없어서 개발자가 직접 필요한 순간마다 메모리할당과 해제를 해줘야합니다. 그래서 개발자 .. 2023. 8. 27. JVM(JAVA Virtual Machine) 개념 JAVA는 OS에 종속적이지 않다 자바를 처음 접했을 때 들었던 말입니다. 실제로, 제가 윈도우 환경에서 개발한 프로젝트들을 컴파일해서 리눅스 서버에 올려도 동일한 버전의 자바만설치되어 있다면 자연스럽게 동작합니다. 그래서 JVM은 자바 프로그램 실행환경을 만들어주는 소프트웨어라고 할 수 있습니다. JVM은 JRE에 포함되어 있습니다. JVM은 어떻게 운영체제에 관계없이 JAVA가 동작하도록 실행환경을 구성하는 건지 알아보겠습니다. 우선 C언어의 경우 윈도우환경과 리눅스환경에서 어떻게 동작하는지 알아보겠습니다. C언어로 작성된 Test.c 파일을 윈도우 컴파일러가 컴파일을 하면 Test.exe 파일이 생성됩니다. 하지만 Test.exe 파일은 윈도우에서만 동작합니다. 리눅스에서는 동작하지 않습니다... 2023. 8. 27. Spring - Pageable 최대 페이지 크기 제한 0. 들어가며 Spring MVC에서 페이징 기능을 구현할 때 Pageable을 통해서 많이 구현합니다. Pageable은 Spring에서 페이징 기능에서 자주 사용하는 기능들을 정의해 놓은 인터페이스입니다. 클라이언트에서 어떤 리소스의 요청결과값이 굉장히 많은 경우, 전체 데이터를 한 번에 반환하는 것이 아니라 전체 개수를 일정한 크기의 Page로 나누고 Page의 번호로 Page를 구분하는 형태로 구현되어 있습니다. 페이징 API를 구현할 때, 컨트롤러에서 Pageable 타입으로 파라미터를 전달받아서 넘기면 Spring Data JPA를 사용한다면, 따로 다른 객체로 변환해 줄 필요 없이 바로 사용할 수도 있고 여러 가지 장점이 많습니다. 그래서 페이징 기능을 구현할 때 Pageable을 많이 사용.. 2023. 8. 26. @ModelAttribute 어노테이션을 생략했을 때 파라미터가 바인딩되는 과정 들어가며 Spring MVC 구조에서 컨트롤러 코드를 작성할 때, 클라이언트에서 넘어온 정보를 DTO 클래스를 만들어서 바인딩하는 경우가 많습니다. 이렇게 구현하면 파라미터가 많은 경우 하나의 클래스에 모아서 관리하기 편하고, 비즈니스 로직을 처리할 서비스 계층에서도 다루기 편하기 때문에 많이 사용됩니다. 코드로 작성하면 아마 다음과 비슷한 구조겠죠. @GetMapping("/api/v1/admin/users") public ResponseEntity list(UserSearchRequest userSearch, Pageable pageable) { Page result = userViewService.findAll(userSearch, pageable); List responseContent = res.. 2023. 8. 25. SpringBoot JSON 형태의 날짜타입 LocalDateTime 으로 받기 오늘은 기억보단 기록을 블로그를 참조하여 공부한(이라 쓰고 '따라한'으로 읽는) 내용을 정리하려고 합니다. 작성한 코드는 모두 Github 에 있습니다. 0. 시작하며 Spring을 사용해서 API 서버 혹은 웹 프로젝트를 개발하면서 Controller에서 요청을 받거나 응답을 주는 DTO에서 날짜 혹은 시간과 관련된 정보를 String 으로 선언한 필드로 받아서 LocalDateTime으로 변환하는 것을 많이 보았고, 얼마 전까지 저 또한 그렇게 처리했습니다. 그렇게 변환하면서도 비효율적이라고 많이 생각하고 고민하며 찾아보다가 좋은 방법을 찾아서 공유하려고 합니다. 저는 다음과 같은 개발환경에서 진행하였습니다. - SpringBoot 2.7.5 - Java 11 - Gradle7 - spring-boo.. 2022. 11. 17. Gradle 멀티 모듈 관리 안녕하세요. 오늘은 gradle 을 활용해서 여러개의 모듈을 관리하는 방법인 멀티 모듈에 대해서 공부하려고 합니다. 모듈은 오라클 자바 문서에서 다음과 같이 정의하고 있습니다. 모듈은 패키지의 한 단계 위의 집합체이며, 관련된 패키지와 리소스들의 재사용할 수 있는 그룹 조금 더 직관적으로 표현하면 프로젝트 하위의 특정한 패키지와 리소스들을 하나의 단위로 묶은 것이라고 볼 수 있습니다. 이것들을 묶어서 빌드하여 jar 파일로 만들어 다른 프로젝트의 라이브러리 처럼 활용할 수도 있고, 하나의 프로젝트 안에서 불러와 코드관리에 도움을 주기도 합니다. 프로젝트의 규모가 커지고 서비스가 복잡해질수록 단일 프로젝트로 구성되는 경우는 많지 않습니다. 우리가 흔히 접하는 서비스들도 여러개의 모듈을 두어 관리하고 있는 .. 2022. 10. 27. EC2 아마존 리눅스 2 서버 생성 시 해야 할 일 (CentOS 7) 2020년 11월을 기준으로 AWS EC2 서비스에서 서버 생성 시 AMI(Amazone Machine Image) 목록에서 더 이상 Amazon Linux 1 AMI 을 지원하지 않습니다. 그래서 처음 AWS를 접하는 사람들이 프리티어 AMI 중 많이 이용하던 아마존 리눅스 1서버는 더이상 이용할 수가 없습니다. 아마존 리눅스 2 가 이 자리를 대체하고 있습니다. 하지만 아마존 리눅스2는 CentOS7 버전을 기반으로 하고 있어서 설정법에 조금의 차이가 있습니다. 그래서 이 글에서는 AWS EC2 인스턴스 생성 시 해야하는 설정들을 아마존 리눅스2 에 맞춰서 살펴보도록 하겠습니다. 아마존 리눅스 2 서버 생성 시 꼭 해야 할 설정 배포하려는 어플리케이션에 사용된 언어 설치 배포하려는 어플리케이션에 사용.. 2021. 1. 19. 이전 1 2 3 다음