Java
-
내가 선택한 DB 동시성 해결방법Java 2021. 12. 28. 23:19
내가 선택한 DB 동시성 해결방법 서론 오랜만에 블로그 포스팅이다. 포스팅 아이템들은 넘처나는데, 시간이 없어서(핑계) 작성할 시간은 없었던 것 같다. 마침 진행하던 프로젝트에서 동시성 이슈가 터졌고, 이를 해결하는 여정을 공유해보려고 한다. 대외비가 걱정되어 작성을 고민했지만, 알고보니 아주 흔하디 흔한 동시성 문제이고 생각보다 내가 생각한 방식으로 많이들 해결하고 있다기에 작성을 망설이지 않았다. 시작해보자 배경 지식 이커머스 프로젝트를 진행할 때, 이벤트 상품 또는 물량이 제한되어있는 상품이 있을 것이다. 간단한 예를 하나 들어보도록 하자. 커머스에서 맥북 pro m1 max 를 100개 10만원에 한정 판매(가지고싶다) 한다고 하자. 그리고 이 이벤트는 다가올 2021년 1월 1일 07시 00분에..
-
[Java-36] 자바 제네릭, < >Java 2021. 2. 24. 14:35
Java Generic Generic, 제네릭 기본기 generic 을 알아보기전에, 만약 제네릭이 없었을 때를 생각해보자. 일단 ArrayList 에서 또한 우리가 알고 있는 제네릭이다. 그렇다면 없었을 경우에는 ArrayList list = new ArrayList(); 와 같은 방법으로 리스트 선언이 가능했다. 마치 파이썬에서 리스트를 선언하듯이 일정의 타입없이 사용이 가능하다는 것이다. 코드를 보도록 해보자. public static void main(String[] args){ ArrayList list = new ArrayList(); list.add("Hello"); String str = (String) list.get(0); } 문제는 이와 같다. list 에서 꺼내야 하는 타입을 타입 ..
-
[Java-35] Lombok @Getter, @Setter 직접 만들어 보자Java 2021. 2. 10. 14:17
Java Annotation Q : 왜 롬복을 만들어 보려고 하는가? 우리는 롬복을 정말 많이 사용하고는 한다. 하지만, 이 롬복이 실제로 어떻게 작동하는지에 대해서 아는사람은 많이 적을 거라고 예상한다. 나 자신도, 롬복은 그저 마법 같은 존재였을 뿐이었고, 보통 이렇게만 사용하는구나, 라고만 생각했다. 우연히 백기선님의 'The JAVA, 코드를 조작하는 다양한 방법' 의 소개 영상에서 롬복의 밑단에서 어떤 일이 발생하는지에 대해, 우리가 사용하는 코드 밑단에서 무슨일이 발생하는지에 대해서 강의가 오픈되었다고 한다. 이 강의에 끌리기 시작했고, 무작정 강의를 듣기 시작했다. 재밌게 잘들었지만, 롬복에 대한 호기심은 사라지지 않았고, 직접 롬복을 비슷하게 만들어본 사람이 있을까? 찾아봤지만, 한국에서는..
-
[Java-34] Enum 기본 (열거 타입)Java 2021. 1. 27. 13:17
Java Enum 열거타입, Enum 정의 하는법 데이터를 저장할 때 우리는 가끔 한정된 값으로만 데이터를 저장해야할 때가 많이 있을 거시다. 예를 들어서 4계절 을 따져볼 때, FourSeason(Spring, Summber, Fall, Winter) 이 4가지를 제외하고 다른 계절이 올 수 없을 것이다. 그럼 우리는 public static void main( String[] args ) { String season = "winter"; } 다음과 같이 직접 String타입의 필드를 선언해주고, 리터럴을 입력해줘야 하지만, Enum(열거타입)을 사용하게 되면, 이를 *enum 타입으로 정의할 수 있다. * enum 정의 하는 법 enum.java public enum Season { SPRING, /..
-
[Java-33] java 스레드(Thread) 기본기Java 2021. 1. 19. 16:39
Java Thread java Thread , Multi Thread Multi Thread 란 Thread class, Runnable interface 사실 이 둘은 궁극적으로 멀티 쓰레드를 지원하기 위한 녀석들이다. 이 둘을 알아보기 전에 우리는 멀티스레드에 대해서 좀더 알아봐야할 필요가 있다. 나는 처음에 멀티쓰레드에 대해서 잘 이해하지 못했다. 한거번에 2가지의 일을 한다는게 이게 말이 되는 걸까..? 간단하게 생각해보자 인간은 태초에 선형으로 생각하고 행동해 왔다. 다음의 그림으로 예를 들어보도록 하자. 사람은 기본적으로 다음과 같이 행동하게 된다. 밥을 먹으면서 낮잠을 잔다거나, 잠을 자면서 공부를 한다는게 말이 안되는 것이다. 하지만 컴퓨터는 가능하다. 아니 가능한 것처럼 보이게 했다. 이..
-
[Java-32] java 예외처리 기본기Java 2021. 1. 12. 00:14
Java Exception 자바가 제공하는 계층구조 우리는 java 코드를 작성하면서, 또는 개발을 하면서 많은 에러를 봐왔을 것이다. 그 중 우리는 자바에서 어떤 에러들이 있고, 그리고 자바에서는 어떻게 에러를 관리하는지에 대해서 알아보도록 하자 왜 Error에 대해서 공부해야 하는가? 만약 자바 에러처리에 대해서 배우기전에, 왜 에러에 대해서 알아야 하는가? 또는 자신은 개발을 하면서 에러문을 일기 않는다. 라고 했을 때, 다음 동영상을 꼭 보도록 하자. 자바에서 코드를 작성하면서 문제가 될 때는 크ㅈ게 2가지로 나눌 수 있다. 일단 모든 예외의 계층 구조에 대해서 한눈에 보도록 하자 Exception 과 Error 의 다른 점 예외와 오류는 모드 Throwable 클래스 의 하위 클래스인데, 에러는..
-
[Java-31] java8 이전 의 인터페이스Java 2021. 1. 7. 23:39
Java interface java 인터페이스 정의 하는 방법 인터페이스는 .java 형태로 컴파일러를 걸치면 클래스 형태로 컴파일 되기 때문에, 실질적으로 형태는 클래스와 동일하다고 할 수 있다. 인터페이스 선언 public interface Example{ // do something } 여기까지는 클래스와 정의하는 방법이 별반 다른거 없이 보일 수 있지만, 몇가지 다른 점들이 있다. 클래스 인터페이스 필드 상수 생성자 - 메소드 메소드 (자바 8 이전에는 추상 메소드) public interface Excample{ //상수 타입 상수명 = 값; //추상 메소드 타입 메소드명(매개변수, ...); } 물론 여기서 더 추가가 될 수 있는 default, static, private이 있지만 이는 이 ..
-
[Java-29] 자바 패키지, 접근제한자 & 클래스패스Java 2020. 12. 31. 01:06
Java Package, 접근제한자, classPath, 환경 변수 package 와 접근제한자, 클래스패스 에 관하여 우리가 실제로 개발하면서, 정말 많은 클래스를 만들거나, 이미 만들어져 있는 클래스를 사용할 수 있다. 패키지란 이 클래스들을 정리하는 폴더 라고 생각하면 된다. 뒤죽박죽 되어 있는 파일들을 정리하기 위해서 폴더가 필요하 듯이, 정리가 되어있지 않은 클래스들을 정리하기 위해서는 패키지 를 사용하여야 한다. 단 한가지 다른점이 있다면, 패키지는 폴더 그 이상의 역할을 한다. 모든 자바의 클래스는, package 이름.class이름 이다. package org.example.test1; //tset1 패키지 public class Foo { }package org.example.test2;..