분류 전체보기 172

JPA에서 MyBatis로의 전환: 구조적 차이와 느낀 점

https://github.com/99duuk/woosan-JPA-to-MyBatis더보기 |  도입 우산 프로젝트에는 JPA를 사용했다.프로젝트 설계 단계에서부터 최대한 간단하게 ERD를 그리고, QueryDSL과 MyBatis의 사용은 배제했고, 쿼리 작성 없이 Spring data JPA로 기능을 구현했다.  굳이 전환할 필요는 없었지만 프로젝트를 되돌아보니, 코드를 작성하며 "이거 그냥 쿼리 쓰면 금방인데..." 라고 떠올렸던 순간이 퍽 많이 떠올랐다. 프로젝트를 마무리한 뒤, 내가 작성했던 기능을 JPA에서 MyBatis로 전환해보았고, 전환하면서 겪은 차이점과 느낀 점을 작성해본다.   |  구조적 차이ORM vs SQL 매퍼JPA는 객체-관계 매핑(ORM)을 사용하여 자바 엔티티 클래스를 데..

Projection을 사용한 명명 메서드: 성능 비교와 느낀 점

| 배경24년 05월 수행했던 비트캠프 3차 프로젝트에서 ORM에 관한 공부 없이 무작정 QueryDSL을 사용해 API를 만들었다. 연관관계도 제대로 이해하지 못하고 무작정 쿼리만 쓰다보니, 어떤 메서드에서는 프로젝션이 되고 어떤 메서드는 돌아가지도 않아서 급하게 프로젝션 적용하지 않고 새로 만들고 했다. 돌아보면 어떻게 작성해서 뭘 하려고 했던 건지도 헷깔릴 만큼 요상한 시도였다. 당시 명명 메서드는 별로야! 라는 이상한 편견에 휩싸여서 모든 조회를 쿼리단에서 처리하려고 아둥바둥 했는데, 당시에 조회에 필요한 테이블이 4~5개였고, 지나고 나서 보니 그게 "한방 쿼리" 비슷한 걸 시도했던 거였다. 그래서 이번엔 최대한 명명 메서드를 사용해서 프로젝션도 사용하고 깔끔하게 코드를 작성해보고 싶었다. 그래..

[docker] 컨테이너 볼륨 백업

1. Docker 컨테이너 볼륨 백업먼저, Docker 컨테이너가 사용하는 볼륨을 백업한다. 여기서는 my-jenkins 컨테이너의 볼륨을 백업했다.1.1. 컨테이너 볼륨 확인컨테이너의 볼륨을 확인하기 위해 docker inspect 명령어를 사용한다docker inspect my-jenkins  {"Type": "bind", "Source": "/mnt/jenkins-storage/jenkins_home", "Destination": "/var/jenkins_home", "Mode": "", "RW": true, "Propagation": "rprivate"}  /mnt/jenkins-storage/jenkins_home 디렉토리를 확인할 수 있다..1.2. 백업 디렉토리 생성백업 파일을 저장할 디렉토..

docker 2024.07.24

CS_운영체제_멀티프로세스, 스레드와 멀티 스레딩

| 프로세스 (Process) 메모리에 적재되고 CPU 자원을 할당받아 프로그램이 실행되고 있는 상태   | 멀티 프로세스 하나의 애플리케이션을 여러 프로세스로 구성하여 각 프로세스가 하나의 작업을 처리하도록 하는 것여러 프로세스가 동시에 실행되는 것을 말한다. 각 프로세스가 독립적으로 실행되며, 프로세스 간에 메모리를 공유하지 않는다. 각각의 프로세스는 별도의 주소 공간을 가지고 독립적으로 실행된다. | 멀티 프로세싱두 개 이상의 cpu 또는 코어가 동시에 여러 프로세스를 실행하는 것을 말한다. 멀티 프로세싱은 병렬 처리를 가능하게 하며, 성능 향상과 높은 처리량을 제공한다. 특정 프로세스의 메모리, 프로세스 중 일부에 문제가 생겨도 다른 프로세스를 이용할 수 있으므로 신뢰성이 높다.    | IPC ..

CS 2024.06.30

CS_운영체제_교착상태

| 락 (Lock)여러 스레드나 프로세스가 공유 자원에 동시 접근하지 못하도록 제어하는 매커니즘이다.락을 사용하면 임계 영역을 보호하여 데이터의 무결성을 유지할 수 있다.  상호 배제를 보장하는 락인 뮤텍스,   자원의 접근을 제어하는 세마포어,   바쁜 대기 상태를 유지하는 스핀락  | 교착상태 (Deadlock)둘 이상의 프로세스가 서로 가진 자원을 기다리면서 무한정 대기하는 상태를 말한다. 즉, 각 프로세스가 다른 프로세스가 점유하고 있는 자원을 요청하며 대기하므로, 아무런 작업도 처리되지 않는 상태다.  예시프로세스 A가 자원 1을 가지고 있고, 자원 2를 기다리는 중이다. 동시에 프로세스 B는 자원 2를 가지고 있고, 자원 1을 기다리는 상황이다. 이 경우, 두 프로세스 모두 무한정 대기하게 된..

CS 2024.06.30

CS_동기화(Synchronization)_스핀락, 뮤텍스, 세마포어

데이터 접근과 동기화데이터 접근은 운영체제에서 프로그램이나 프로세스가 파일, 데이터베이스, 메모리 등에 저장된 데이터를 읽고 쓰는 과정을 의미한다. race condition(경쟁 조건)은 여러 프로세스/스레드가 동시에 같은 데이터를 조작할 때, 타임이이나 접근 순서에 따라 결과가 달라질 수 있는 상황을 말한다.동기화는 여러 프로세스/스레드를 동시에 실행해도 공유 데이터의 일관성을 유지하는 것을 말한다.  동기화 없이 동시 접근이 이루어지면 데이터 불일치, 충돌, 경합 등이 발생할 수 있다.    | 상호배제 (Mutual Exclusion)임계 영역(critical section) : 공유 데이터의 일관성을 보장하기 위해 하나의 프로세스/스레드만 진입해서 실행 가능한 영역을 말한다. 여기서 하나의 프로..

CS 2024.06.30

CS_운영체제_Paging: Smaller Table

Paging: Smaller Table이란?Paging: Smaller Table은 프로세스가 필요한 페이지 수가 TLB의 용량을 초과하는 경우에도 효율적으로 메모리를 관리하기 위한 기술이다. 페이지 테이블을 더욱 효율적으로 관리하여 메모리 공간을 절약하고 성능을 향상시키는 다양한 방법을 포함한다. 이 방법은 특히 대규모 주소 공간을 사용하는 시스템에서 중요한 역할을 한다.Paging: Smaller Table에 대한 비유페이지 테이블을 대형 도서관의 도서 목록이라고 생각해보자. 만약 도서관이 너무 커서 단일 목록으로 관리하기 어렵다면, 도서 목록을 여러 작은 목록으로 나누는 방식을 사용할 수 있다. 대형 도서관: 전체 페이지 테이블작은 목록: 더 작은 페이지 테이블 또는 다중 레벨 페이지 테이블도서관 ..

CS 2024.06.25

CS_운영체제_TLB

MMU란?메모리 관리 유닛(MMU, Memory Management Unit)은 CPU의 구성 요소로, 가상 주소를 물리 주소로 변환하고 메모리 보호를 제공하는 역할을 한다.주소 변환이란?주소 변환(Address Translation)은 가상 주소를 물리 주소로 변환하는 과정이다. 이 과정은 주로 페이지 테이블을 참조하여 수행된다.TLB의 등장 배경페이지 테이블은 가상 메모리 시스템에서 주소 변환을 가능하게 하지만, 매번 페이지 테이블을 참조하는 것은 시간과 자원을 소모한다. 특히, 프로세스가 많은 페이지를 사용하는 경우, 페이지 테이블 조회는 큰 성능 저하를 초래할 수 있다. TLB는 이러한 문제를 해결하기 위해 도입되었으며, 페이지 테이블의 일부를 고속 캐시에 저장하여 자주 접근하는 페이지를 빠르게 ..

CS 2024.06.25