no image
python GC(Garbage Collector)
python Garbage Collector 기본적으로 Reference Counting으로 해제하면서 Generational Garbage Collection이 세대별 임계점마다 동작하는 듯 하다. Reference Counting 참조하는 카운트가 0이 되면 garbage를 정리한다. Generational Garbage Collection 순환 참조의 경우 카운트가 0이 될 수 없는 문제를 해결할 수 있는 GC이다. 세대와 임계점이라는 개념이 있다. import gc print(gc.get_threshold()) #(700, 10, 10) 튜플의 첫 번째부터 0세대, 1세대, 2세대를 나타낸다. 0세대 객체의 수가 700개(임계값)를 넘지 않으면, 순환 참조를 비롯한 garbage들은 메모리에 할당..
2023.10.22
no image
spring mapstruct
mapstructdto entity 사이를 변환하는 코드를 생성해 주는 패키지다.//build.gradledependencies {... compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' //mapstruct를 lombok 보다 뒤에 implementation 'org.mapstruct:mapstruct:1.5.5.Final' annotationProcessor 'org.mapstruct:mapstruct-processor:1.5.5.Final'...} 주의getter, setter, builder 등 lombok을 사용한다면 lombok 코드 생성이 먼저 실행된 후에 mapstruct가 동작..
2023.10.15
no image
spring lombok SuperBuilder
SuperBuilder 생성 코드 @SuperBuilder @ToString public class BuilderTestDto { private String one; private String two; } ====================== @SuperBuilder @ToString(callSuper = true) public class BuilderTestDto2 extends BuilderTestDto{ private String three; } 부모와 자식 둘 다 붙여야하고 사용했을 때 컴파일 된 코드는 아래와 같다. public class BuilderTestDto2 extends BuilderTestDto { private String three; protected BuilderTestDt..
2023.10.08
no image
spring mongodb repository
mongodb connecting // application.properties spring.data.mongodb.host= ~~ spring.data.mongodb.port=27017 spring.data.mongodb.database=test spring.data.mongodb.username=root spring.data.mongodb.password=1234 spring.data.mongodb.authentication-database=admin authentication admin 설정 없을 시, authentication 관련 예외가 발생했다. Collection 정의 @Document(collection = "testCollection") @Getter @Setter @ToString pu..
2023.10.01
no image
JDBC, JPA, Hibernate, Spring Data JPA
JDBC (Java Database Connectivity) : DB에 접근할 수 있도록 자바에서 제공하는 API (인터페이스) JPA ( Java Persistence API ) : 자바 ORM 기술에 대한 표준 명세이다. (인터페이스) Hibernate : JPA의 구현체 중 하나 Spring Data JPA : JPA의 구현체를 한 층 더 추상화하여 비즈니스 로직에 더욱 집중한다. 다만 DB의 독립적 개발은 어려워진다. Repository 인터페이스를 사용 implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'mysql:mysql-connector-java:8.0.28' spring-data-jpa..
2023.09.28
no image
교착상태 Deadlock
교착상태 발생 조건 상호 배제 - 하나의 자원은 하나의 프로세스에 의해서만 사용된다. 점유와 대기 - 하나의 자원을 점유한 상태로 추가 자원 요청 비선점 - 점유된 자원에 대해 경쟁할 수 없다. 환형 대기 - 자원의 점유와 대기가 원형을 구성한 상태 해결 방법 예방 - 상호 배제를 제외한 나머지 발생 조건을 부정하는 방법 * 점유 자원 해제 후 새 자원 요청 * 이미 점유된 자원 경쟁 가능 * 원형 구성이 안되도록 하나의 프로세스 요청을 먼저 다 처리하기 회피 - 데드락이 발생하지 않도록 어떻게든 알고리즘을 잘 짜라 (예방보다 덜 엄격한 제한) * 은행가 알고리즘 발견, 복구 - 알고리즘으로 교착 상태를 감지하고 해결한다. * 자원할당 그래프 (발견) * 프로세스 kill (복구) - 프로세스를 순차적으..
2023.09.18
no image
stack/heap memory
Stack Memory 함수의 호출과 관계되는 지역 변수와 매개변수가 저장되는 영역이다. 함수가 호출되면 호출이 끝난 뒤 돌아갈 반환 주소값, 함수의 매개변수, 함수에서 선언된 지역 변수 등이 스택에 저장되고 호출이 완료되면 소멸한다. stack memory의 모든 과정은 컴파일 타임에 미리 결정된다. 즉, 개발자가 코드를 작성하지 않는다. stack은 독립적인 스레드에서 실행된다. stack은 heap보다 할당/해제가 빠르다. why => 스택은 미리 예약된 메모리이기 때문에 메모리 할당이 따로 필요없으며, 사용한 메모리를 굳이 반납하지 않고 (= 삭제 작업을 거치지 않고) 단순히 스택 포인터를 감소시킴으로써 스택 공간을 제한시킨다. 스택 포인터를 감소시키면서 남아있던 데이터는 스택 포인터가 다시 증가..
2023.09.16
no image
TCP/UDP Socket Protocol, Programming
TCP/UDP Socket Protocol 흐름 Socket Interface 를 통해 TCP, UDP 통신 프로토콜을 사용할 수 있다. Socket Interface 는 특정 OS 및 프로그램 언어에 종속돼서 제공된다. TCP Socket Programming 흐름 서버는 Socket을 생성하고 주소를 할당(Bind)한다. 그 후 연결 요청을 기다리고(Listen) 연결을 허용(Accept)한다. 연결은 유지되며 통신하다가 로직에 따라 연결을 해제한다. UDP Socket Programming 흐름 TCP와 다르게 Listen(), Accept() 가 없다. UDP는 연결된 채로 sendto() 를 실행하지 않기에 하나의 sendto()에 하나의 recvfrom()이 호출된다. 예시로 Server의 r..
2023.09.15
no image
Nosql MongoDB를 알아보자
시작 현재 메신저 서비스를 보면 다른 테이블에서 Message 테이블을 참조할 일은 딱히 보이지 않는다. Message를 FK로 사용할 일이 없다면 관계형보단 일반적으로 I/O가 빠른 Nosql을 사용해도 되지않을까? MongoDB를 알아보자. Document는 JSON {} 형태로 구성된다. Field는 Column처럼 고정되지 않고 자유로운 key : value 형태이다. value는 boolean, array([ ]), null, nested한 document({ }) 등이 가능하다. Document { _id: ObjectId('64f9eb1cdb80f40007827e02'), text: '안녕하세요', 'boolean': true, array: [ 1, 2, 3, 4 ], empty: null ..
2023.09.08