본문 바로가기

분류 전체보기

(56)
스프링 Race Condition 해결 방안 레이스 컨디션 해결방안 1. 메소드 선언 부에 synchronized 적용 사용방법 -> public synchronized void decrease(~~) 주의점 ! 메소드에 Transactional 적용되어 있으면 안됌, Transactional 이 있으면 클래스를 프록시로 만들어 decrease 메소드 위 아래로 트랜젹서널을 적용하는데 decrease 후 트랜잭셔널 닫히기 전 사이에 다른 스레드가 접근 가능해짐 , 또한 서버 1대가 아니라 2대 이상일 경우에도 단일 스레드가 보장되지 않는다. 2. Pessimistic Lock 서버 1이 락을 걸고 데이터를 가져가면 다른 서버는 데이터를 가져갈 수 없다. 데이터는 락을 가진 서버만 접근하다. Low나 Table 단위로 락을 걸 수 있음 사용방법 @L..
Java Queue 구현 Queue은? FIFO(Firs-In First-Out) 형태의 자료 구조 ✔ Queue 자료 구조 java로 구현해 보았다. -> MyNode라는 객체를 가지고 로직 구현을 함, MyNode는 입력데이터와 다음 MyNode의 주소 값을 가지고 있음 -> MyNode를 MyQueue 안에 정의하는 이유는 MyNode 의 private 필드를 접근하기 위함 ✔ Queue의 메소드 👀 ->add() : 맨 끝에다 데이터 추가 ->remove() : 맨 앞 데이터 꺼냄 ->peek() : 맨 앞 데이터 보는 것 ->isEmtpy() : Queue가 비었는지 확인 public class MyQueue { class MyNode { private T data; private MyNode next; public M..
Java Stack 구현 Stack은? LIFO(Last-In First-Out) 형태의 자료 구조 Stack 자료 구조 java로 구현해 보았다. -> MyNode라는 객체를 가지고 로직 구현을 함, MyNode는 입력데이터와 다음 MyNode의 주소 값을 가지고 있음 public class MyStack { class MyNode { private T data; private MyNode next; public MyNode(T data) { this.data = data; } } //-------------> Stack은 LIFO 구조로 top만 클래스안에서 직접 관리 private MyNode top; //-------------> push를 할때마다 top의 node를 바꿔줘야함 //-------------> (1). 기..
spring.jpa.open-in-view 란? 스프링 부트로 프로젝트로 만들고 실행을 시키면, WARN 이 하나 나온다. (spring.jpa.open-in-view is enabled by default. Therefore, database queries may be performed during view rendering. Explictily configure spring.jpa.open-in-view to disable this warning) application.properties에서 spring.jpa.open-in-view=false 로 하면 경고문은 사라지는데 그럼 여기서 open-in-view 설정은 뭐를 의미할까? (open-in-view의 기본 설정은 true) open-in-view 란? open-in-view는 JPA에서 영속..
자바 객체 타입은 불변으로, 비교 방법 (공유참조, 값 복사) 자바의 객체타입과 기본타입에 = 연산 시 다른점을 정리해보고자 한다. 🤔 // 기본타입 자바의 기본타입(primitive type) 종류 byte: 8비트의 정수 타입 short: 16비트의 정수 타입 int: 32비트의 정수 타입 long: 64비트의 정수 타입 float: 32비트의 부동 소수점 타입 double: 64비트의 부동 소수점 타입 char: 16비트의 유니코드 문자 타입 boolean: 논리 타입 -> 자바 기본 타입은 = 연산 시 값이 복사가 된다. int a= 10; int b = a; b = 4 // b 값을 바꿔도 a는 10 유지 따라서, 기본타입은 값이 복사되어 서로 영향을 받지 않는다. // 객체 타입 - 문제 파악 이제 객체타입을 보자. public class Main { p..
스프링 JPA 사용, 프록시 entity 확인 메소드 스프링 JPA 사용 시에 조회한 Entity 가 프록시인지, 초기화 됬는지 확인하는 메소드 정리 👀 EntityManagerFactory emf = Persistence.createEntityManagerFactory("name"); 프록시 초기화 여부 확인 emf.PersistenceUnitUtil.isLoaded(Objedct Entity) , ture false 로 나옴 프록시 클래스 확인 방법 entity.getClass() 출력 , javasist or HibernateProxy 나옴 프록시 강제 초기화 org.hibernate.Hibernate.initialize(entity) 👏
스프링 부트 동일 Apllication 여러 포트로 구동 with (인텔리제이) 인텔리제이로 스프링 부트 구동 시 application 을 다른 포트로 돌리는 방법 ✨ MSA 구조를 공부 하는 도중, 연습용으로 여러 포트의 어플리케이션 구동이 필요하였다. build를 한 후 터미널에서 java -jar를 통해 실행시킬 수도 있지만, 인텔리제이에서도 쉽게 구동할 수 있어 그 방법을 소개하려한다. 위와 같이 인텔리제이에서 같은 어플리케이션을 port 만 다르게 여러 서버를 쉽게 구동시킬 수 있다. 1. (1시 방향) Edit Configurations 열기 2. apllcation 클릭 후 Copy Configuration 클릭하여 복사 3. VM options 에 -Dserver.port=(원하는포트) 입력 후 apply -D는 자바 클래스를 실행함에 있어서 부가적인 옵션을 부가하는 ..
Spring Cloud (Netflix Eureka) 정리 MSA 아키텍처를 개발하는데 있어서 스프링은 Spring Cloud 프레임워크를 사용한다. Spring Cloud Netflix Eureka는 Spring Cloud 를 사용하는데 있어 넷플릭스가 만든 Eureka Server를 이용하는 것이다. Netflix는 심각한 DB손상으로 서비스 장애를 겪고 난 이후, 신뢰성 높고 수평확장이 가능한 Cloud System으로 MSA를 이루었고, 이때의 기술을 Spring에게 오픈소스로 풀었는데, 이것이 Spring Cloud Netflix Eureka Server 이다. Spring Cloud -> Service Discovery, Service Registry 두 가지가 핵심이다. Registry : 각각의 MSA 서버가 자기의 위치를 Spring Cloud ..

728x90
반응형