목록전체 글 (269)
Coding Planet
✨ 문제 💻코드 class Solution { public long solution(long n) { //1. 숫자를 문자열로 변환 char[] chars = Long.toString(n).toCharArray(); //2&3. 배열을 내림차순으로 정렬 java.util.Arrays.sort(chars); StringBuilder sb = new StringBuilder(new String(chars)); //4. 문자열을 다시 정수로 변환 return Long.parseLong(sb.reverse().toString()); } } 👩💻 풀이 방법 Long.toString(n) : long타입의 변수 n을 문자열로 변환한다. String.valueOf(n)을 쓸 수도 있다. java.util.Array..
| 버블정렬(Bubble Sort)이란? 간단한 정렬 알고리즘 중의 하나로 이름에서 알 수 있듯이, 이 알고리즘은 큰 값이 마칠 "버블"처럼 배열의 끝으로 "떠오르게"하는 방식으로 작동한다. | 버블정렬(Bubble Sort)의 작동원리 1) 첫 번째 항목부터 마지막 항목까지 순차적으로 이동하면서 인접한 항목을 비교한다. 2) 인접한 두 항목을 비교하면서 왼쪽 항목이 오른쪽 항목보다 크면 두 항목의 위치를 바꾼다. 3) 위의 과정을 배열의 모든 항목에 대해 반복한다. 4) 위의 3단계를 배열의 항목 수만큼 반복하면 배열이 정렬된다. 예시) 1 5 3 9 7 배열이 버블 정렬되는 과정을 단계별로 살펴보겠습니다. 초기 배열 1 5 3 9 7 1차 반복 (i=0) 1과 5를 비교: 정렬이 필요하지 않습니다. ..
| 시간복잡도(Time Complexity)란? 시간 복잡도는 알고리즘이 문제를 해결하는 데 걸리는 시간을 나타내는 척도이다. 알고리즘의 실행 시간은 입력 데이터의 크기나 특성에 따라 다를 수 있기 때문에, 시간 복잡도는 일반적으로 최악의 경우, 평균 경우, 최선의 경우로 나누어 평가된다. 빅-오 표기법(Big O Notation) : 시간 복잡도를 표현하는데 가장 일반적으로 사용되는 표기법이다. 빅 오 표기법은 알고리즘 성능에 가장 큰 영향을 미치는 부문만을 고려하여 나타낸다. 예를 들어, 동전을 던져 뒷면이 나올 확률을 이야기할 때 운이 좋으면 1번에 뒷면이 나오지만 운이 안좋을 경우 n번 만큼 동전을 던저야 한다. 이런 확률에서 최악의 경우를 계산하는 방식을 빅오 표기법이라 한다. 자주 사용되는 시..
이전 포스트(https://sharonprogress.tistory.com/231)에서 플리케이션의 운영 중인 상태와 행동을 모니터링하고 관리하는 기능을 제공하는 라이브러리인 Spring Boot Actuator에 대해서 알아봤다. 이 경우 endpoint을 통해서 어플리케이션에 대한 정보를 허가 없이도 접근할 수 있다. 이런 점은 보안상 좋지 않다. 이를 해결하기 위해 보안(Security)설정이 필요하다. 다만 이 포스트에는 가장 기본적인 보안 관련 환경 설정만을 알려준다. 1. pom.xml에 dependency 추가 org.springframework.boot spring-boot-starter-security 2. 디폴트 아이디 및 비밀번호 확인 1) ID와 패스워드 확인하기 엔드포인트에 접근하..
아이템7 : 다 쓴 객체 참조를 해제하라 C, C++ 언어는 메모리를 직접 관리하지만 자바의 경우 가비지 컬렉터가 이 역할을 해주기 때문에 다 쓴 객체는 알아서 회수된다. 하지만 이 것이 메로리 관리를 신경쓰지 않아도된다는 의미는 아니다. 1. 메모리 누수가 일어나는 위치는 어디인가? public class Stack { private Object[] elements; private int size = 0; private static final int DEFAULT_INITIAL_CAPACITY = 16; public Stack() { elements = new Object[DEFAULT_INITIAL_CAPACITY]; } public void push(Object e) { ensureCapacity(..
Spring Boot Actuator는 Spring Boot 애플리케이션의 운영 중인 상태와 행동을 모니터링하고 관리하는 기능을 제공하는 라이브러리이다. | Spring Boot Actuator 의 장점 애플리케이션을 모니터링하고 관리하기 위한 엔드포인트를 제공한다. 추가적인 설정이나 조정, 수정없이 DevOps 기능을 사용할 수 있다. POM 파일에 의존성을 간단하게 추가함으로써 사용할 수 있다. REST 엔드포인트가 애플리케이션에 자동으로 추가된다. | Spring Boot Actuator 설정하기 POM 파일에 의존성을 간단하게 추가한다. 기본적으로 "/health"만 설정되어 있다. 아래 application.properties에서는 /health, /info를 추가했다. 모든 endpoints를..
데이터 형식이 JSON일 경우 가독성이 높다. 크롬에서 JSON 출력을 위한 JASON Formatter 익스텐션을 추가해보자! | Raw Data vs JSON 형식 데이터 Spring boot actuator에서 info를 출력할 때 JSON 형식을 경우 훨씬 가독성이 높다. | JSON Formatter Extension 추가하기 https://chrome.google.com/webstore/detail/json-formatter/bcjindcccaagfpapjjmafapmmgkkhgoa/related JSON Formatter Makes JSON easy to read. Open source. chrome.google.com 새로고침할 경우 raw data가 JSON 형식으로 수정된다. 데이터 형..
스프링부트 어플리케이션 개발 과정에서 만약 소스 코드를 수정한다면 이 수정된 상황을 적용하기 위해 어플리케이션을 다시 실행해야한다. Spring Boot Dev Tools는 소스 코드가 수정될 경우 어플리케이션을 자동으로 다시 시작해준다. | Spring Boot Dev Tools 환경설정 pom.xml에 아래와 같이 dependency를 추가하면 된다. 그 외에 다른 추가적인 코드는 필요없다. 다만 IDE로 IntelliJ를 사용하는 경우 추가적인 환경 설정이 필요하다. org.springframework.boot spring-boot-devtools | Spring Boot Dev Tools 환경설정 IntelliJ Community의 경우 DevTools를 기본으로 제공하지는 않는다. Prefere..
`src/main/webapp` 디렉토리는 전통적으로 WAR 포맷의 웹 애플리케이션을 위한 디렉토리 구조이다. WAR (Web Application aRchive) 파일은 서블릿 컨테이너나 애플리케이션 서버 (예: Tomcat, Jetty, WildFly, GlassFish 등)에서 실행될 수 있는 웹 애플리케이션을 패키징하기 위한 포맷이다. 그러나 스프링 부트와 같은 프레임워크에서는 내장된 서블릿 컨테이너를 사용하여 JAR 파일로 웹 애플리케이션을 패키징하고 실행하는 방식이 인기를 얻고 있다. 이런 경우, JAR로 패키징된 웹 애플리케이션에서 `src/main/webapp` 디렉토리는 다음과 같은 이유로 권장되지 않는다 1. 리소스 로딩 JAR 파일 내에서 `src/main/webapp`의 리소스는 전..
| Maven Standard Directory Structure src/main/java :자바 소스 코드 저장 경로 src/main/resources : properties, config 등의 설정파일 src/test/java : 유닛 테스트 소스 코드 target : 프로젝트 빌드 과정에서 발생하는 모든 출력물과 중간 파일을 저장하는 디렉토리 ex) 컴파일된 클래스 파일, 패키징된 아티팩트, 테스트 결과, 문서화 등 ** 참고(jar로 패키징된 어플리케이션에 src/main/webapp 디렉토리를 쓰지 말라는 이유) https://sharonprogress.tistory.com/228) | Maven Wrapper files mvnw : Maven Wrapper의 일부이다. 이 기능은 사용자가 특정..