전체 글 45

Chapter 03. 연산자

3.1 부호/증감 연산자 부호 연산자는 변수의 부호를 유지하거나 변경한다. 주의할 점은 부호 변경 후의 타입이다. 정수 타입 (byte, short, int) 연산의 결과는 int 타입이다. 부호를 변경하는 것도 연산이므로 부호 변경 후, 타입은 반드시 int에 대입해야 한다. 🏷 ++ 연산자, -- 연산자 int x = 1; int y = 1; int result1 = ++x + 10; // x를 1 증가 -> int result1 = 2 + 10 int result2 = y++ + 10; // y + 10 -> y를 1 증가 부호 + 피연산자 피연산자의 값을 1 증가시킨다. 피연사자 + 부호 다른 연산을 수행한 후에 피연산자의 값을 1 증가시킨다. 3.2 산술 연산자 산술 연산자는 (+, -, *, ..

Chapter 02. 변수와 타입

🏷 2.1 변수 선언 변수 하나의 값을 저장할 수 있는 메모리 번지에 붙여진 이름 변수를 통해 프로그램은 메모리 번지에 값을 저장하고 읽을 수 있다. 타입 별로 그에 해당하는 타입을 저장 할 수 있다. 변수의 메모리 할당 변수 선언 시, 메모리에 할당이 되는 것이 아니고, 변수에 최초로 값이 할당 될 때 메모리에 값이 저장된다. 변수에 최초로 값을 대입하는 행위를 변수 초기화 라고 하며, 초기화 되지 않은 변수는 아직 메모리에 할당되지 않았기 때문에 변수를 통해 메모리 값을 읽을 수 없다. 🏷 2.1 정수 타입 변수는 선언 시 타입에 따라 저장할 수 있는 값의 종료와 허용 범위가 달라진다. 정수 , 실수 , 논리 값을 저장할 수 있는 기본(primitive) 타입 8개를 제공한다. 정수 : byte, c..

정적 메서드(static method)

❓정적 메서드는 언제 사용할까 static 키워드에 대해 공부를 하다보니, static method를 언제 사용을 할까에 대해 의문이 들었다. 보통 유틸 관련 메서드에서 많이 사용한다. 라고 들었지만, 유틸 관련 메서드가 아닌 다른 곳에서 쓰일 일이 있을까? 라는 의문점도 같이 찾아왔다. ✅ static 메서드의 특징 및 장점 static으로 선언되어 있는 메서드 들은 해당 메서드를 사용할 때, 인스턴스 생성 없이 호출이 가능하다. JVM이 시작될 때 static 영역에 저장되어 프로그램이 끝날 때 까지 사라지지 않고 메모리에 남아있다. 속도가 빨라지고 공유(반복적인 사용)에 효율적이다. 생성자를 호출 할 필요가 없으니 속도는 당연 빨라질 수밖에 없다. static 메서드를 호출하기 위해서 필요한 것은 ..

네번 째, 주니어 개발 일기🙂

💡오늘의 이슈💡 ✅ 주문 프로세스 내에서 중복 호출에 대한 비즈니스 로직 대응 나의 회사에서는 C2C 거래를 중점적으로 진행하고 있다. 오늘 발생 한 이슈는 구매자 결제 완료 판매자 판매 수락 / 구매자 취소 이 두가지가 거의 동시간대에 요청이 된 이슈였다. 좀 더 자세하게 설명하자면, 구매자가 취소를 하고 취소 process를 타는 동안 판매자는 client 단에서 새로고침 없이 주문확인 버튼이 눌러 요청되었고 최종 상태는 pg사 취소 까지 모두 완료되었지만 주문 상태가 '주문확인' 상태였다. 해당 이슈를 분석 해본 결과 판매 수락 API 내에서도 취소에 대한 데이터 체크가 필요하다고 판단하였다. 📘 해결과정 모든 취소 로직 내의 docDb에 취소 데이터에 대한 이력을 저장하고 있다. 취소 로직 시, ..

싱글턴 패턴 (SingleTon Pattern)

싱글턴 패턴 이란? 클래스의 인스턴스가 하나만 만들어지고, 어디서든지 그 인스턴스에 접근할 수 있도록 하기 위한 패턴 클래스에서 자신의 단 하나뿐인 인스턴스를 관리하도록 만든다. 다른 어떤 클래스에서도 자신의 인스턴스를 추가로 만들지 못하도록 해야 한다. 책에서 나타나는 고전적 싱글턴 패턴의 구현법과 문제점에 대해 알아보자! public class Singleton { private static Singleton uniqueInstance; private Singleton() {} public static Singleton getInstance() { if (uniqueInstance == null) { uniqueInstance = new Singleton(); } return uniqueInstanc..

static의 모든 것

static 변수 public calss MyClass { static int myStaticVariable = 100; int myVariable = 200; } 위의 예제로 각 변수가 생성되는 공간에 대해 설명해본다. 자바 프로그램을 시작하면 JVM이 클래스 파일을 읽어 필요한 클래스와 변수/메서드들을 메모리에 생성한다. 이후 코드에서 그 클래스의 형을 가진 오브젝트를 생성하면 각 오브젝트마다 myVariable을 저장할 메모리 공간이 Heap이라는 메모리 공간에 생기게 된다. 모든 오브젝트는 Heap이라고 부르는 메모리 공간에 생긴다. 반면 static 변수는 Heap이 아닌 다른 공간에 생긴다. 이 공간의 이름은 MetaSpace이다. 위의 그림처럼 static 변수는 클래스에 귀속되지 각각의 오..

세번 째, 주니어 개발 일기🙂

💡오늘의 이슈💡 ✅ PG사 데이터 위/변조 테스트 진행 3차 검수인 위/변조 테스트로 수정 사항 없이 검수가 완료되었다. 하지만, 어떤 식으로 검수를 하였고 위/변조 테스트에 대해 직접 테스트해본 경험이 없었던 것 같아 로그롤 통해 분석해보았다. 큰 프로세스로 보면 3가지였다. 가격 변조 결제창 호출시 파라미터 변조 위/변조 테스트를 하며 느낀 것은 클라이언트가 임의적으로 값이 변경 될 수 있다는 점이고, 해당 테스트를 잘 넘어갈 수 있었던 것은 파라미터로 가격을 받아 결제 요청을 보내지 않고 최초로 주문서 진입 시 docdb에 넣은 결제 금액으로 결제 요청을 보냈기에 아무리 클라이언트에서 위/변조를 진행해도 변조된 가격으로 요청되지 않았다. 위의 테스트를 하며 느낀점은 결제와 같이 위/변조에 중요한 프..

팩토리 패턴 (Factory Pattern)

- 'new' 연산자가 눈에 띈다면 '구상'이라는 용어를 떠올려주세요. - 변화하는 무언가 때문에 new를 조심해서 사용해야 합니다. - 인터페이스를 바탕으로 만들어진 코드는 어떤 클래스든 특정 인터페이스만 구현하면 사용할 수 있다. 이것은 '다형성' 덕분이다. - 구상클래스를 바탕으로 만들어진 코드는 구상 클래스가 추가될때마다 코드를 고쳐야 하므라 '변경에 닫혀 있는' 코드가 된다. - 바뀌는 부분을 찾아내서 바꾸지 않는 부분과 분리해야 한다. Pizza orderPizza(String type) { Pizza pizza; if (type.equals("chesse")) { // 변경되는 부분 ... } pizza.prepare(); // 변경되지 않는 부분 ... } - 변경 되는 부분은 피자를 만드..

AWS Database Migration Workshop

👉🏻 DMS 각종 데이터베이스를 DMS를 사용하여 AWS Cloud로 마이그레이션하거나, 온-프레미스 인스턴스 간, 또는 클라우드와 온-프레미스 설정의 조합 간에 마이그레이션을 할 수 있다. 동종 마이그레이션 뿐, 아니라 이기종 데이터베이스 플랫폼 간의 마이그레이션도 지원해준다. 쉽게 말하여 DMS Migration은 기존 DB의 데이터를 새 DB에 옮겨주는 이삿짐 센터라고 생각하면 좋다. 👉🏻 마이그레이션 유형 전체 로드 (기존 데이터 마이그레이션) 기존 데이터를 복사할 수 있을 정도의 긴 중단을 감당할 수 있는 경우 전체 로드 및 CDC (기존 데이터 마이그레이션 및 변경 사항 복제) 전체 로드 완료 후, CDC 작업을 통해 변경된 데이터를 복제함 CDC Only 대량의 데이터 동기화를 위해 사용 ⁉..

구글 OAuth2 인증 방식

이처럼 웹 사이트 계정 인증에서 타 서비스의 계정을 사용하는 인증 방식을 OAuth 2.0 인증 방식이라고 한다. { "sub": "110248495921238986420", "name": "Aaron Parecki", "given_name": "Aaron", "family_name": "Parecki", "picture": "https://lh4.googleusercontent.com/-kw-iMgD _j34/AAAAAAAAAAI/AAAAAAAAAAc/P1YY91tzesU/photo.jpg", "email": "aaron.parecki@okta.com", "email_verified": true, "locale": "en", "hd": "okta.com" } 서비스 등록 특정 서비스의 OAuth 인증을..