분류 전체보기
[Jenkins] Docker + Jenkins + SVN Pipeline 구축
[Jenkins] Docker + Jenkins + SVN Pipeline 구축
2023.03.21도커 컨테이너에 젠킨스를 띄워놓고 SVN과 연결해 파이프라인을 구축해보자. 1. 도커 작업 docker pull jenkins/jenkins:latest docker container run -d -p 8092:8080 -v jenkins-data:var/jenkins_home —name jenkins-container jenkins/jenkins 젠킨스 이미지를 받아와서 컨테이너를 실행하자. 이 때 도커 볼륨을 추가해야 젠킨스 (컨테이너) 내부에서 플러그인들을 설치할 수 있고, 컨테이너를 삭제하더라도 데이터를 보존할 수 있다. 2. 필요한 플러그인 설치 추천하는 플러그인은 모두 설치하고 추가로 SVN, pmd, maven 플러그인을 설치해주자. 3. SVN 계정 추가 연동할 SVN의 권한을 가진 계정을..
[Jenkins] SVN과 Jenkins 연결
[Jenkins] SVN과 Jenkins 연결
2023.03.20Jenkins에서 SVN 플러그인을 설치하고 진행하자. 해당 방법으로는 GUI로 간단한 기능을 사용할 수 있다. 좀 더 세분화된 작업을 위해서는 Pipeline을 구축하는해 스크립트를 작성하는 편이 합리적이다. Repostiory URL : 사용하는 SVN 리포지토리의 주소를 입력한다. Credentials : Username과 Password에는 사용하는 SVN의 계정 이름과 비밀번호를 입력한다. Local module directory : SVN에서 체크아웃 받을 위치를 입력한다. Repository Depth - Infinity : SVN 저장소 전체를 체크아웃 - Empty : SVN 저장소의 루트 디렉토리만 체크아웃 - Files : SVN 저장소의 파일들만 체크아웃 - Immediate : 루..
[Docker] 도커 파일 시스템과 볼륨
[Docker] 도커 파일 시스템과 볼륨
2023.03.09도커에서 관리되는 컨테이너들은 모두 독립된 파일 시스템을 가진다. 파일 시스템은 단일 디스크이고, 이 디스크는 이미지 레이어와 기록 가능 레이어로 구성된다. 여기서 이미지 레이어는 모든 컨테이너가 공유하지만, 기록 가능 레이어는 컨테이너마다 다르다. 같은 데이터베이스 엔진 이미지로 실행된 두 컨테이너가 전혀 다른 데이터를 담을 수 있는 이유도 바로 이 부분 때문이다. 기록 가능 레이어는 컨테이너와 같은 생애주기를 가지고, 컨테이너가 삭제될 때 함께 삭제되는 방식으로 동작한다. 이미지 레이어를 기록 가능 레이어로 복사한 후 이미지 레이어를 수정하는 방식을 사용하면 읽기 전용인 이미지 레이어도 수정할 수 있다. 컨테이너로 데이터베이스를 실행해서 사용하고 있는데, 데이터베이스 버전을 업데이트한다고 생각해보자...
[Docker] 도커 활용하기
[Docker] 도커 활용하기
2023.03.08도커를 활용하면 다양한 이점을 얻을 수 있다. 크게 세 가지로 나뉠 수 있는데, 예시를 통해 각 요소들을 살펴보자. 1. 회사에서 여러 프로젝트를 진행했고, 프로젝트들마다 개발 환경이 각자 달라서 여러 컴퓨터로 해당 프로젝트를 관리할 경우 각각의 컴퓨터에 프로젝트별로 개발 환경을 설정해 줘야 하는 불편함이 있다. 여기서 도커를 도입해보자. A 프로젝트 : Java7 / MySQL / SpringBoot / Thymeleaf (SSR) B 프로젝트 : (Backend) Java17 / MongoDB (Frontend) Vue.js / Quasar (CSR) C 프로젝트 : Java11 / MariaDB 이런 식으로 프로젝트가 있으면, 한 컴퓨터에서 각각의 프로젝트를 유지보수 해 줄 때 마다 프로젝트별로 다..
[Docker] 도커와 컨테이너 기술
[Docker] 도커와 컨테이너 기술
2023.03.07도커는 컨테이너 기술을 사용해 애플리케이션의 실행 환경을 구축하는 플랫폼이다. 컨테이너는 호스트 운영체제 상에 애플리케이션을 작동시키는데 필요한 요소들을 모아서 별도의 서버인 것 처럼 동작하는 것을 말한다. 컨테이너 기술을 사용하지 않으면 여러 애플리케이션들이 같은 시스템 리소스를 사용하기 때문에 미들웨어나 라이브러리의 버전이 다른 경우는 각 애플리케이션이 서로 영향받을 수 있다. 하지만, 컨테이너를 도입하면? 호스트 운영체제의 리소스를 분리시키고, 여러 컨테이너가 사용해 시스템 리소스를 각 애플리케이션들이 독점적으로 점유하고 있는 것 처럼 보이게 할 수 있다. 도커는 애플리케이션의 실행에 필요한 환경을 이미지로 취합하고, 그 이미지를 활용해 다양한 환경에서 애플리케이션의 실행 환경을 구축한다. 이미지를..
[Docker] 시스템 기초 지식
[Docker] 시스템 기초 지식
2023.03.06본격적으로 도커를 학습하기 전 필요한 지식들을 정리하자. 도커는 리눅스의 기능을 사용한 기술이기에 리눅스 기초 지식도 따로 공부해야 한다. 하드웨어 물리적인 요소로 서버 장비 본체나 데이터센터의 설비를 의미한다. (컴퓨터 본체, 데이터센터 등) 네트워크 시스템의 사용자가 원격으로 액세스 할 수 있도록 서버들을 연결하기 위한 요구사항이다. 운영체제 하드웨어나 네트워크 장비를 제어하기 위한 기본 소프트웨어로 리소르와 프로세스를 관리한다. (윈도우, Unix 등) 미들웨어 운영체제와 업무 처리를 수행하는 애플리케이션 사이에 들어가는 소프트웨어이다. (데이터베이스 서버, 웹 서버 등) MAC 주소 48비트의 주소로 앞 24비트는 네트워크 부품의 제조업체를 식별하는 번호이고, 뒤의 24비트는 제조업체마다 중복되지..
[시스템 프로그래밍] Malloc Lab Explicit (2)
[시스템 프로그래밍] Malloc Lab Explicit (2)
2023.01.167. free 함수 구현 할당된 메모리를 가용 가능한 상태로 만드는 free 함수를 구현하자. free 함수는 반환할 블록의 위치를 인자로 받고 해당 블록의 가용 상태로 바꾸는 역할을 한다. 이제 다시 테스트를 돌려 보자. 성능에 변화가 없다 -_- 아마도 free로 블록을 가용 상태로 만들었지만 coalescing 작업을 수행하지 않아 가용 리스트에 free 된 블록이 들어가지 않아 아무 효과를 얻지 못하는 것 같다. 8. place 함수 수정 + free 함수 수정 free 함수에 coalesce 작업을 추가해 가용 리스트에 가용 블록을 넣어 주자. implicit에서 작성한 것처럼 place 함수를 수행할 때 블록을 나눌 수 있는 경우 나눠서 공간을 확보하자. implicit 때와 다르게 가용 리스..
[시스템 프로그래밍] Malloc Lab Explicit (1)
[시스템 프로그래밍] Malloc Lab Explicit (1)
2023.01.14explicit 방식은 implicit 방식의 단점을 보완한다. 가용블록을 위와 같이 디자인한다. header 4바이트 / pred + succ 16바이트 / footer 4바이트로 총 24바이트의 크기를 가진다. pred와 succ 포인터를 통해 힙 공간 중 가용 가능한 공간들만 linked list 형태로 관리하는 방식을 사용한다. 할당된 블록은 위와 같이 디자인한다. (implicit과 동일) 가용 가능 블록들에 대해서는 prev와 succ포인터를 추가해야 해서 메모리를 조금 더 사용해야 하지만 그만큼의 이점이 있다. implicit 방식으로 first fit을 구현할 때는 최악의 경우 전체 블록을 모두 조사해야 가용 블록을 찾을 수 있지만, explicit 방식을 사용하면 조사 대상을 전체 블록 ..
[시스템 프로그래밍] Malloc Lab Implicit (2)
[시스템 프로그래밍] Malloc Lab Implicit (2)
2023.01.116. coalesce() 함수 구현 사용하는 이유는 위에서 살펴봤고.. 바로 구현해보자. 1. 이전 블록과 다음 불록이 모두 할당 된 상태 -> 합칠 수 없으니 그대로 반환한다. 2. 다음 블록이 가용 상태 -> 다음 블록과 합치고 반환한다. 3. 이전 블록이 가용 상태 -> 이전 블록과 합치고 반환한다. 4. 이전과 다음 모두 가용 상태 -> 둘 모두 합치고 반환한다. extend_heap 함수를 사용할 때 coalesce 함수를 호출하도록 설정했다. 다시 한 번 테스트 해 보자. 점수가 정말 낮지만 오류는 발생하지 않았다. 가용 블록을 합치지 않아 크기가 제대로 정렬되지 않았다고 생각한 게 맞았나보다. 이제 성능을 끌어올려보자. 7. place 함수 수정 place 함수로 블록을 할당할 때 할당할 크..
[QueryDSL] 활용 (Spring Data JPA + QueryDSL)
[QueryDSL] 활용 (Spring Data JPA + QueryDSL)
2023.01.11웬만한 기능은 Spring Data JPA가 제공해주고, 동적 쿼리 등 복잡한 구현이 필요할 때 QueryDSL 기술을 사용한다. 따로 Repository를 하나 만들어서 기능을 구현하자. MemberRepositoryCustom을 인터페이스로 만들고 구현할 기능을 선언한 후 MemerRepositoryImpl에 기능을 구현한다. public class MemberRepositoryImpl implements MemberRepositoryCustom { private final JPAQueryFactory queryFactory; public MemberRepositoryImpl(EntityManager em) { this.queryFactory = new JPAQueryFactory(em); } @Ov..
[QueryDSL] 활용 (JPA + QueryDSL)
[QueryDSL] 활용 (JPA + QueryDSL)
2023.01.11실제로 애플리케이션을 설계할 때는 Repository 계층을 만들고 Repository를 통해 데이터베이스와 상호작용한다. 먼저 Spring Data JPA 기술 없이 순수 JPA와 QueryDSL 만 사용해서 Repository를 설계해보자. @Repository public class MemberJpaRepository { private final EntityManager em; private final JPAQueryFactory queryFactory; public MemberJpaRepository(EntityManager em) { this.em = em; this.queryFactory = new JPAQueryFactory(em); } public void save(Member member..
[시스템 프로그래밍] Malloc Lab Implicit (1)
[시스템 프로그래밍] Malloc Lab Implicit (1)
2023.01.10이론에서 배운 것들을 활용해 Malloc Lab을 해결해보자. WSIZE : 메모리 블록의 header와 footer 크기이다. (word 크기) DSIZE : WSIZE의 두 배 크기. CHUNKSIZE : 초기 가용 블록의 크기와 힙을 확장할 때 사용되는 값이다. OVERHEAD : header와 footer를 더한 크기이다. MAX, MIN : 말 그대로.. 두 수를 비교한다. PACK : 크기(size)와 할당 비트(alloc)을 통합해 하나의 워드로 묶는다. header와 footer에 값을 저장 할 때 사용한다. GET : 포인터 p가 가리키는 위치에서 word 크기의 값을 읽어온다. PUT : 포인터 p가 가리키는 위치에서 word 크기의 값을 val 만큼 쓴다. GET_SIZE : head..