의문점 공부하기 102

☁️ 12factor 란?

12factor는 클라우드 애플리케이션을 개발하는 데 유용한 방법론 중 하나입니다. 이 방법론은 클라우드에서 애플리케이션을 개발하는 데 있어 다음과 같은 12가지 원칙을 제시합니다. 코드베이스: 코드 저장소를 하나만 유지한다. 종속성: 종속성을 명확하게 선언하고, 격리된 환경에서 실행한다. 설정: 설정 정보는 환경변수를 통해 전달한다. 백엔드 서비스: 백엔드 서비스는 호스트 이름으로 연결한다. 빌드, 릴리스, 실행: 빌드, 릴리스, 실행 단계는 분리되어야 한다. 프로세스: 애플리케이션은 하나 이상의 무상태 프로세스로 실행된다. 포트 바인딩: 포트 바인딩을 통해 애플리케이션에 접근한다. 동시성: 애플리케이션은 동시성을 고려하여 설계되어야 한다. 확장성: 애플리케이션은 수평적으로 확장 가능해야 한다. 흐름:..

📌 String str ="i"와 String str = new String("i")가 동일 할까?

String str = "i"와 String str = new String("i")는 동일하지 않다. 두 개의 선언 방식은 서로 다른 방식으로 문자열을 생성한다. String str = "i"의 경우, 리터럴(literal) 표기법이 사용되며, "i"라는 문자열이 JVM의 intern pool이라는 메모리 공간에 저장된다. 이후 다시 "i"라는 문자열이 선언될 때는 이전에 저장된 문자열을 참조한다. String str = new String("i")의 경우, 새로운 String 객체가 생성되며, "i"라는 문자열이 저장된다. 이때 intern pool에 저장된 문자열과는 다른 객체가 생성된다. 따라서 두 개의 선언 방식은 서로 다른 객체를 생성하므로 동일하지 않다. ++) 문자열을 비교할 때는 equal..

📌 문자열을 반전시키는 가장 좋은 방법은 무엇일까?

- 문자열을 문자 배열로 변환하여 반전시킨 후 다시 문자열로 변환하는 방법: public String reverseString(String str) { char[] chars = str.toCharArray(); // 문자열을 문자 배열로 변환 int left = 0; int right = chars.length - 1; while (left < right) { char temp = chars[left]; chars[left] = chars[right]; chars[right] = temp; left++; right--; } return new String(chars); // 문자 배열을 문자열로 변환 } - StringBuilder나 StringBuffer를 사용하여 문자열을 반전시키는 방법 publi..

☁️ Saga 패턴이란?

커리어리에서 MSA에 대한 내용을 읽다가 발견한 Saga패턴, 이건 무엇이며, 어디에 쓰는걸까? saga 패턴은 분산 애플리케이션에서 일관성을 유지하고 여러 마이크로서비스 간의 트랜잭션을 조정하여 데이터 일관성을 유지하는 데 도움이 되는 장애 관리 패턴이라고 한다 DB는 하나인데 라이브중 장애가 발생한다면 ? 이라는 문제 때문/ 그래서 DB는 보통 미리 동기화 해놓거나, 백업을 해놓는것이 매우 중요하다 아래는 gpt의 대답 클라우드 사가(Saga) 패턴은 분산 시스템에서 여러 서비스 간의 트랜잭션 처리를 보장하기 위한 패턴. 클라우드 환경에서 여러 서비스가 분산되어 동작하고, 각 서비스가 독립적으로 데이터를 관리하는 경우에 사용 일반적으로 트랜잭션은 모놀리틱 아키텍처에서 단일 데이터베이스에서 처리되지만 ..

📌 String은 기본 데이터 타입일까?

▶Java에서 String은 기본 데이터 타입(primitive data type)이 아닌 참조 타입(reference type) 기본 데이터 타입은 int, double, boolean 등과 같은 원시적인 데이터를 나타내는 타입이며, 메모리에 직접 값을 저장한다 반면 String은 문자열을 나타내는 참조 타입이므로 객체로 취급된다. String 변수는 실제 문자열 데이터가 저장된 메모리 위치를 가리키는 참조(reference)를 저장한다 즉, String 변수는 문자열 데이터가 저장된 메모리 위치를 가리키는 포인터와 유사한 역할 ▶String은 객체이며 메모리 상에서 해당 객체를 참조하는 변수를 통해 사용된다

📌 자바에서 문자열을 조작하는 클래스는 무엇이 있을까? 각 클래스의 차이점은?

▶String 클래스: -불변(immutable): String 인스턴스는 한 번 생성되면 변경할 수 없다. -> 문자열을 변경하려면 새로운 String 객체를 생성해야 한다 -스레드 안전하지 않음: 여러 스레드가 동시에 String 객체를 수정하려고 할 때, 동기화를 관리해야 한다. -문자열 조작 메서드 제공: 문자열 연결, 잘라내기, 대소문자 변환 등의 작업을 수행하는 메서드를 제공 ▶StringBuilder 클래스: -가변(mutable): StringBuilder 인스턴스는 문자열을 동적으로 변경할 수 있다. 같은 객체에서 문자열을 수정하고 추가할 수 있다. -스레드 안전하지 않음: 여러 스레드가 동시에 StringBuilder 객체를 수정하려고 할 때, 동기화를 관리해야 한다 -문자열 조작 메서..

💻 Gradle 이란?

빌드 자동화 툴 - 컴파일 ,라이브러리 다운, 패키징, 테스팅 등을 자동화 할 수 있다 빌드 자동화를 왜 사용할까? -> 반복작업에서 시작 // 그애들은 자바, 그루비, 스칼라 등 JVM에서 실해되는 언어의 빌드 자동화를 위해 사용 그래들 공식 문서에서 그래들을 의도적으로 많은 기능을 제공하지 않는다고 한다/ 대신 플러그인을 통해 그래들을 확장해 사용 할 수 있는데 이게 java java를 컴파일하려면 그래들 자바 플러그인이 필요하고, 플러그인의 id 'java'는 자바이며, 이는 빌드를 위해 자바 플러그인을 사용함을 명시한다

📌 Java에서 final의 기능은 무엇인가?

final은 3가지 용도로 사용된다 ▶ final 클래스 final이 클래스 이름앞에 사용되면 클래스를 상속받을 수 없음을 지정한다. final class FinalClass{ ...... } class Subclass extends finalClass{ //컴파일 오류 발생 ..... } -위 예시코드의 경우 FinalClass를 상속받아 Subclass를 만들 수 없다 ▶ final 메소드 메소드 앞에 final이 붙으면 이 메소드는 더이상 오버라이딩 할 수 없음을 지정한다 자식 클래스가 부모 클래스의 특정 메소드를 오버라이딩하지 못하게 하고 무조건 상속 받아 사용하도록 하고자 한다면 final로 지정하면 된다 Public class Superclass { protected final int fina..

📌 두 객체가 동일한 hashCode를 가지면 Equals()가 참이어야 한다?!

▶ hashCode 란?! 객체를 식별 할 수 있는 하나의 고유 정수 값 앞서 '==' 과 'equals'의 차이를 비교했는데, '==' 는 reference가 같은지 검사했다. 이는 동일성 : 주소 값을 비교 ( == ) , equals는 내용이 같은지 검사 했다. 이는 동등성 : 객체 내부의 값을 비교 (equals와 hashCode를 재정의 하여 비교) equals로 같은 객체라면 반드시 hashCode도 같은 값이여야 한다 하지만 반대로 hashCode가 같은 값이더라도 equals로 같은 객체가 아닐 수 있다는 것을 유의해야 한다. ++같은 파라미터를 이용해야 한다 +++equals()와 hashCode는 모든 Java 객체의 부모인 Object 클래스에 정의되어 있기 때문에, Java의 모든 ..