Java&Spring
-
[모던 자바 인 액션] part 1 - 1Java&Spring/Java 2023. 11. 3. 16:24
"Stream 을 이용하면 에러를 자주 일으키며 멀티코어 cpu를 이용하는 것보다 비싼 synchorized 를 사용안해도 된다" "synchronized" 키워드는 다음과 같은 비용을 수반할 수 있다. 대기 시간(Wait Time): 한 스레드가 락을 획득하기 위해 다른 스레드가 락을 해제하기를 기다려야 할 때 발생합니다. 이는 특히 공유 자원에 대한 경쟁이 치열할 때 성능 저하를 가져온다. 컨텍스트 스위칭(Context Switching) 비용: 락을 기다리는 스레드들 사이에서 발생하는 컨텍스트 스위칭은 CPU 시간을 소비한다. 메모리 일관성 비용(Memory Consistency Costs): 락을 사용하여 메모리 캐시 사이의 데이터 일관성을 유지하는 데 있어 추가적인 메모리 배리어(memory b..
-
JVM ARCHITECTURE (배경 , 특징 , 컴파일 과정 등)Java&Spring/Java 2023. 9. 15. 18:07
JVM (Java Virtual Machine) 2022 9월 28일 부터 지속적으로 글을 업데이트 중입니다. Java의 특징 : "OS 에 종속 적이지 않고 실행 가능 하다" 배경 Java 로 작성한 코드는 JVM 에 의하여 동작을 하게 됩니다. 이로 인하여 이론상 OS 및 하드웨어의 관계없이 자바 언어로 어플리케이션 개발이 가능합니다. JVM 은 많은 개발자의 C/C++ 로 개발시 복잡한 메모리의 할당 , 해제고민들로 부터 자유로워지게 만들었고 , OS 별로 고민을 해야할 많은 상황에서 자유롭게 만들었습니다. 주관적인 의견으로 개발의 난이도가 낮춰저 많은 인원이 하나의 서비스를 편하게 개발하는 단계가 시작이 되었다라고 생각합니다. * GC 로 인하여 메모리가 할당된 객체,변수를 신경쓰지 않아도 된다하..
-
Genric 이 타입 일반화인 줄 만 알면, 주니어입니다.Java&Spring/Java 2023. 9. 4. 20:32
Generic : 클라스나 메소드에서 사용할 내부 데이터 타입을 외부에서 지정하는 기법 이다. - 하나의 값이 다양한 타입을 지정 받기 위하여 사용 한다. API 의 response class 가 정해져 있지 않은 상황에서 API 의 data body 를 Generic 으로 선언 후 개발을 진행 하고 완료후 타입을 강제 할 수 가 있다. - 컴파일 타임에 타입이 정해짐으로 따로 캐스팅을 해줄 필요가 없다. [자세한 내부 동작은 글 하단에서 다룬다.] 예시의 모든 설명은 다음과 같은 상속 관계를 갖는다. 클라스 Object
-
자료구조 Stack , add vs pushJava&Spring/Java 2023. 9. 4. 18:15
자바의 스택 자료 구조는 다음과 같이 선언 사용이된다. Stack stack = new Stack(); stack.add(1); stack.push(2); stack.add(0,71); stack.add(stack.size(),71); stack.add(stack.size()-1,74); System.out.println(stack.peek()); System.out.println(stack); stack.pop(); stack.add(stack.size() + 1,100); // out of index 보통의 자료구조인 stack 을 사용하는 것은 선입 후출의 개념으로 사용이 되며 , push , pop 의, 연산을 지원하지만. Java 의 Stack 의 경우 정말 독특한점은 add() 도 같이 지원을..
-
Sort : Arrays.sort() vs Collections.sort() & 배열 다중 정렬 및 출력Java&Spring/Java 2023. 9. 4. 17:40
Arrays.sort() vs Collections.sort 두개는 사용하는 정렬이 다르다. .... ? 정답 ) Collections.sort() 는 List 객체를 object 로 변환해서 Arrays.sort() 를 실행한다. Arrays.sort() 는 primitive type 의 경우 DualQuickSort , 아닌 경우 Merge Sort 를 변형시킨 TimSort 를 사용한다. QuickSort() 의 경우는 안정성을 보장하지 않는다 . 1,4,3,3,5,3 일때 , 중복되는 숫자의 순서가 바뀔 수가 있다. - 원시 타입의 값들은 배열의 중복되는 값들의 순서가 중요하지 않는 경우이니 , 평균속도가 빠른 QuickSort 를 이용하고 - 안정성이 보장이 되어야 하는 "객체" , 중복값을 가..
-
GC 기본 개념 , 종류Java&Spring/Java 2023. 9. 4. 17:06
GC 의 동작 → Heap 영역에 존재하는 객체들에 대해 접근 가능한지 확인 한다. → GC Root 에서 부터 시작하여 참조 값을 따라가며 접근 가능한 객체들에 mark 하는 과정을 진행 → Mark 되지 않은 객체 즉 , 접근 할 수 없는 객체는 제거(Sweep) 대상이 되고 , 해당 객체들을 제거 mark sweep comapct algo Stop the world : GC 를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것 GC Root 가 가능한 대상 1. JVM 메모리의 stack 영역에 존재한는 참조 변수 2 . Method Area static 데이터 3 . JNI 에 의해 생성되는 객체 Serial GC - Single thread - stw 가장 김 - mark sweep coma..
-
@Transactional (1)Java&Spring/Spring 2023. 8. 9. 17:21
@Transactional 은 Aop 의 관점에서는 사용하기는 편리하지만 , 개발자가 동작원리를 이해를 기반으로 해야 효과적인 troubleshooting 이 가능하다 라고 생각한다. 학생 Id 를 이용하여 , 10 명의 학생 객체를 만들려고 한다. 식별자는 db 에서 생성을 받는다하자. 다음 코드가 동작을 정상적으로 할까 ? @Service public class SomeService { @Transactional public void methodA(int studentId) { Student member = new Student(studentId) } @Transactional public void methodB() { for(int i = 0 ; i < 10 ;i++) { methodA(i) } }..
-
Q . SpringBoot 에서 경로를 어떻게 인식을 하는 것인가 ? part 1Java&Spring/Spring 2023. 8. 5. 15:29
질문이 나온 배경글이다. https://chosunghyun18.tistory.com/126 경로 에러 추가 하기 프로젝트 중 경로를 잘못 입력했을때 500 에러가 나는 것을 확인 했다. api 를 설계하는데 있어 사용자에게 서버 로직에러인 500 에러를 알려주는것은 좋은 설계가 아니라고 한다. 이를 바꿔 보자. chosunghyun18.tistory.com SpringBoot 프래임워크를 사용하여 간단하게 어노테이션을 통하여 지금 까지 URL 경로들을 설정해 주었다. 원리가 뭘까 ? 어노테이션을 먼저 따라가 보자. 프렌젠테이션 레이어의 컨트롤러 코드의 예시이다. @RestController @RequestMapping("/place") @RequiredArgsConstructor public class..