일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 | 31 |
- MSA
- HTTP
- JPA
- 이분탐색이란
- 점근적 표기법
- 자료구조
- 알고리즘
- 완전이진트리
- 최대 힙
- 백준장학금
- SpringSecurity
- 힙트리
- 백준 장학금
- JVM
- spring
- 엔티티 그래프
- 멀티프로세서
- 연결리스트
- AVL트리
- heapq
- 운영체제
- 최소힙
- jpa n+1 문제
- 스케줄링
- python
- 강화학습
- 프로세스
- Kruskal
- 연결리스트 종류
- posix
- Today
- Total
목록분류 전체보기 (113)
KKanging

동시성 제어란동시성 제어가 왜 필요할까?위 이미지 처럼 2개의 트랜잭션이 실행되었다고 가정하자트랜잭션 A 는 x와 y를 더해 y값을 수정하고트랜잭션 B는 x와 y를 더해 x값을 수정한다.위 예시는 정상적인 흐름의 실행 예시이다.하지만 트랜잭션이 동시에 실행됐다고 가정해보자.위 이미지 과정처럼 트랜잭션 A가 실행하다가 다른 트랜잭션에 switching 될 수도 있고 꼭 트랜잭션이 동시에 시작하지 않더라도 동시에 실행되는 트랜잭션은 어떻게 switching되어 어떤 실행 결과가 나올지 예상할 수 없다.(이러한 동시성 문제를 운영체제에선 경쟁조건:race condition 이라고 부른다) 데이터베이스에서 동시성 문제를 어떻게 해결할까?데이터베이스에서 이러한 동시성 문제를 락으로 해결한다(운영체제에서도 존재하는..

java 의 enum 이란상수가 필요해!public class EnumClient { private static final int ONE = 1; public static void main(String[] args) { System.out.println(ONE); }}우리는 프로그래밍 하는 도중에 상수가 필요하다면 위에 처럼private static final 키워드를 사용해서 상수 선언을 한다.추상화 된 상수가 필요해!public class EnumClient { private static final int ONE = 1; private static final int TWO = 2; private static final int THREE = 3; public static void main(String..

AOP 적용 시점위빙이란AOP 적용 시점을 알기 위해서는 위빙(Weaving)이라는 단어를 알아야 한다.우리가 분리한 핵심 로직과 부가 기능 로직이 결합되는 시점을 의미한다.따라서 그 시점에 따라 다음과 같이 구분된다.AOP 적용 시점컴파일 타임 위빙(Compile-Time Weaving)컴파일 타임 위빙(Compile-Time Weaving)런타임 위빙(Runtime Weaving)자바에서 사용하는 대표적인 AOP 기법Spring AOP는 2가지 기법을 채택하였다.JDK Dynamic 프록시JDK Dynamic 프록시는 Reflection API 의 Proxy를 사용해서 구현한다.프록시 팩토리에 의해 런타임 시 다이나믹하게 만들어지는 오브젝트Target의 인터페이스를 상속하는 구조로 사용된다따라서 cl..

자바 개발자가 AOP를 공부 해야하는 이유관점 지향 프로그래밍 기법이란핵심 기능과 부가 기능우리가 개발할 때를 생각해보자도메인 로직을 개발할 때 보면 항상 “도메인 로직만” 개발할 수 있을까?컴포넌트 로깅을 위해 모든 메서드에 로그를 찍는다거나DB와 트랜잭션을 연결하기 위해 트랜잭션 connection 을 한다던가 하는일련의 핵심기능을 위해 해야하거나 부가적인 필요 때문에 해야하는 부가기능 로직이 항상 들어가게 된다.핵심 기능 : 해당 객체가 제공하는 고유의 기능부가 기능 : 핵심 기능을 보조하기 위해 제공되는 기능 ( ex: 로그 추적 기능, 트랜잭션 기능 )이러한 부가 기능을 바로 횡단 관심사라고 한다.객체 지향 프로그래밍으로 어느 정도 SRP를 따르면서 클래스의 책임을 분리할 순 있어도 도메인 로직..

리플랙션을 알기위한 사전 준비자바 프로그램은 어떻게 실행 될까?제일 처음 우리가 작성한 자바 소스 코드는 javac (jdk 포함되어 있음)에 의해 컴파일 된다.그럼 이제 JVM이 이해 할 수 있는 JAVA Byte Code (.class) 로 변환된다.그리고 이제 main 함수부터 클래스 로딩되어 Method Area 라는 메모리 영역에 올라간다.클래스 내부에 다른 클래스를 의존하면 해당 클래스는 처음에는 심볼릭 링크의 형태로 클래스를 참조한다.해당 심볼릭 링크 부분이 실행될 때 물리 주소로 변환된다.다음 클래스를 호출하면 해당 클래스가 런타임(실행 중)에 로딩되는 구조이다.우리가 작성한 코드가 변경된다고?위에는 우리가 작성한 소스코드가 실행될 때 과정을 아주 요약하였다.그런데 요약된 내용을 보면 작성..

GC이란C/C++ 같은 OS 의존도 높은 Native 언어와 Java 언어의 차이C/C++ 같이 프로그램 한 언어가 직접 OS가 실행하는 언어들은 Memory Leak 문제를 많이 겪는다. Memory Leak 란? “동적으로 할당한 메모리가 free(할당 해제)될 수 없는 상태가 된 것.” 이다. 즉, C/C++ 같은 Native 언어들은 heap을 할당하고 해제하는 해동을 오로지 개발자들의 코드로 이루어진다. 따라서 이러한 heap 메모리 관리를 잘못하여 동적으로 할당한 메모리가 더이상 free 할 수 없어서 사용하지도 않는 데이터가 메모리를 차지하여 성능 저하 및 심하면 프로그램 강제 종료가 되는 상황을 말한다. Java 언어에서는 메모리 해제한 적 없는데? 위 문제를 보고 이런 생각이 들 것이다...

멋쟁이 사자처럼 회고멋쟁이사자처럼 대학이란?멋쟁이사자처럼이라는 기업에서 주관하는 행사?인데, 우리나라 대학교 중에 많은 대학교에 연합 동아리 개념 단위로 운영되고 있다.무려 58개의 대학이 있고 그 중에 한개의 대학교에 백엔드 트랙 운영진을 맡고있었다. 멋쟁이사자처럼 대학 동아리에서 무슨 활동을 하는가? 멋대(멋쟁이사자처럼 대학을 줄여서 멋대라고 편의상 부르겠다;;) 에서는 기업에서 주관하기도 하고 많은 대학교가 참여하기도 해서 큰 행사가 있다.큰 행사로는 아이디어톤 과 중앙 해커톤이 있는데 이번글에는 중앙 해커톤 대회를 준비하면서 백엔드 개발을 맡은 느낀점과 배운점 그리고 아쉬운점을 끄적이겠다. 우리팀의 주제는?중앙해커톤 주제는 “IT 기술을 활용하여 현대인의 건강 (wellness) 문제를 해결할 수..

JVM의 클래스 로딩 과정JVM 의 바이트 코드 실행 전체 구조자바 소스 파일을 컴파일 하여 자바 바이트 코드로 변환하면 제일 먼저 메인 메서드의 클래스가 클래스 로더에 의해 로드 된다.클래스 로더에 의해 클래스의 정보 멤버 변수, 전역 변수, 상수, 메서드,, 등등이 Method Area에 점유하게 된다.실행 엔진에 의해서 실행을 한다이때 실행을 진행하다가 클래스가 참조 되어 있는 부분을 발견하면 클래스 로더로 로드 된 클래스인지 확인한다 (로드 된 클래스라면 그냥 Method Area에 가져다 쓸 것)만약 로드 되지 않았다면 클래스 로더가 해당 클래스를 로드하고 초기화 한다.다음 모든 경우에 클래스를 로드하고 초기화 한다.생성자 호출(클래스 생성)클래스의 메서드 호출(당연)클래스의 전역 메서드 호출클..

JVM Run Time Data AreaJVM 전체 구조JVM 은 다음 구조를 따른다Javac 가 컴파일한 자바 바이트 코드(.class) 를 Class Loader가 Load 한다.→ Load 할때Run Time Data Area 에 올린다.Load 된 데이터를 기반으로 Execution Engine (실행 엔진) 은 프로그램을 실행한다.실행할때 RunTimeDataArea를 실행시에 메모리로 사용하는데 이를 RunTimeDataArea 를 사용한다.이때 GC 가 힙 메모리에 불필요한 메모리를 삭제하고 메모리 주소 관리를 하는 등에 작업을 한다. RunTime Data AreaJVM의 메모리 구조이다.JVM이 실행되면 OS로 부터 메모리를 할당 받고 JVM은 메모리를 위 구조로 나누어 용도에 맞게 사용..

JDK, JRE, JVM 의 구분JVMJVM은 Java Virtual Machine 의 약자이다. 단순하게는 컴파일러라고 생각할 수 있음 하지만 C/C++ 같은 한번 컴파일로 번역하는 것이 아닌 .class 파일로 컴파일 한 후 JVM 이 한줄한줄 읽는 인터프리터 역할을 하면서 컴파일러가 많이 사용하는 코드는 미리 번역해놓는인터프리터 + 컴파일러 역할을 한다.추가로 JVM 은 메모리 관리 ( GC ) 그리고 최근에는 User 레밸 스케줄링의 역할도 관여한다. JAVA 의 모토는 "Write Once, Run Anywhere"(한 번 작성하면 어디서나 실행 가능) 현대의 언어는 웬만해서는 OS의 종속적이지 않지만 당시 java 의 위 슬로건은 혁명이었다.java 의 슬로건을 현실화 해준 것이 JVM이다.J..