본문 바로가기
반응형

전체 글1065

[Kubernetes] : 디플로이먼트를 사용하는 간단한 이유 디플로이먼트를 사용하는 이유는 애플리케이션의 업데이트와 배포를 편리하게 하기 위함이다. 디플로이먼트는 컨테이너 애플리케이션을 배포하고 관리하는 역할을 담당한다. 쿠버네티스에서도 공식적으로 디플로이먼트를 사용할 것을 권장하고 있다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 3. 21.
[Kubernetes] : 디플로이먼트 사용하기 레플리카셋으로 마이크로서비스 구조의 컨테이너를 구성할 수 있을 것 같지만 실제 쿠버네티스 운영 환경에서 레플리카셋을 YAML 파일에서 사용하는 경우는 거의 없다. Deployment라는 오브젝트를 YAML 파일에 정의해서 사용한다. 이 디플로이먼트 오브젝트는 레플리카셋의 상위 오브젝트여서 생성 시 이에 대응하는 레플리카셋도 생성된다. kubectl get deploy 생성된 디플로이먼트의 목록을 확인한다. kubectl get replicasets kubectl get pods 포드 개수를 유지시켜주는 것은 레플리카셋이다. 디플로이먼트와 같이 레플리카셋이 생성된 것임을 알 수 있다. kubectl delete deploy my-nginx-deployment 디플로이먼트를 삭제하면 레플리카셋과 포드도 삭제.. 2022. 3. 21.
[JPA] : 영속성 컨텍스트(1) 영속성 컨텍스트는 JPA를 이해하는데 가장 중요한 용어로 “엔티티를 영구 저장하는 환경”이라는 뜻이다. EntityManager.persist(entity); 엔티티 매니저와 영속성 컨텍스트가 무엇일까? 영속성 컨텍스트는 논리적인 개념으로 눈에 보이지 않고 엔티티 매니저를 통해 영속성 컨텍스트에 접근하는 것이다. 엔티티 매니저가 생성하면 1:1로 영속성 컨텍스트가 생성이 된다. 즉, 엔티티 매니저 안에 눈에 보이지 않는 영속성 컨텍스트가 생기게 되는 것이라고 보면 된다. 엔티티의 생명주기도 알아두면 좋은데 비영속, 영속, 준영속, 삭제가 있다. 비영속은 new 상태라고 하고 영속성 컨텍스트와 전혀 관계가 없는 새로운 상태이다. 영속은 Managed 상태로 영속성 컨텍스트에 관리되는 상태이다. 준영속은 d.. 2022. 3. 21.
[TIL] : 145 ​일일 배움을 위한 Today I Learned ! JPA JPA를 h2데이터베이스에 연동해서 테스트 해 봤다. 강의를 듣다가 JPQL에 대해서도 언급을 했는데 뒤에서 다시 배운다고 한다. 2022.03.20 - [Data Base/JPA] - [JPA] : JPA 간단 개발과 JPQL 확인하기 예약과 발행이 동시에 실행되서.. 00시가 지나서 등록이 되었다. 2022. 3. 21.
[JPA] : JPA 간단 개발과 JPQL 확인하기 데이터베이스에 데이터를 넣어 테스트를 하는 강의를 진행했다. @Entity public class Member { @Id private Long id; private String name; 객체와 테이블을 생성하고 매핑을 먼저 해준다. Entity는 JPA가 관리할 객체이고 Id는 PK설정으로 데이터베이스 PK와 매핑된다. EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // 팩토리는웹 서버가 올라오는 시점에 DB당 하나만 생성된다. EntityManager em = emf.createEntityManager(); // 고객의 요청이 올 때 마다 썼다가. 버렸다가. 반복해서 동작한다. 때문에 쓰레드간에 공유를 하면 안.. 2022. 3. 20.
[TIL] : 144 일일 배움을 위한 Today I Learned ! JPA Spring Boot MVC2편 강의를 끝내고 JPA강의를 수강한다. 2022.03.19 - [Data Base/JPA] - [JPA] : SQL 중심 개발의 문제와 JPA에 대해서.. 2022.03.19 - [Data Base/JPA] - [JPA] : JPA 사용을 위한 프로젝트 셋팅과 간단 설명 Kubernetes 레플리카셋에 대해서 공부하고 있다. 전에 학교에서 실습할 때 잠시 사용해 본 경험은 있지만.. 따라서 해 본 것에 불과하기 때문에 정식으로 사용하기 위해서는 더 깊은 공부가 필요하다. 2022.03.19 - [Server & System/Kubernetes] - [Kubernetes] : 레플리카셋의 동작 원리 2022.03.19 .. 2022. 3. 19.
[Kubernetes] : 레플리케이션 컨트롤러 vs 레플리카셋 이전 쿠버네티스에서는 레플리카셋이 아니라 레플리케이션 컨트롤러(Replication Controller)라는 오브젝트를 통해 포드의 개수를 유지했다. 하지만 지금은 레플리카셋을 사용한다. 이 두 오브젝트의 차이는 표현식 기반의 라벨 셀럭터를 사용할 수 있다는 것이다. 예를 들면 아래와 같다. selector: matchExpressions: - key: app values: - my-nginx-pods-label - your-nginx-pods-label operator: In template: ... key가 app인 라벨을 가지고 있는 포드들 중 values 항목에 정의돈 값들이 존재(In)하는 포드들을 대상으로 한다는 의미이다. app: my-nginx-pods-label 라벨을 가지는 포드뿐만 아.. 2022. 3. 19.
[Kubernetes] : 레플리카셋의 동작 원리 레플리카셋의 동작 원리 레플리카셋을 생성,삭제하면 포드도 생성,삭제가 되니 연결된 것 처럼 보이지만 실제로는 연결되어 있지 않고 느슨한 연결을 유지하고 있다. 이런 느슨한 연결은 Label Selector를 통해 이루어진다. 라벨은 포드 등 쿠버네티스 리소스를 분류할 때 유용하게 사용할 수 있는 메타데이터이다. 라벨은 쿠버네티스 리소스의 부가적인 정보를 현할 수 있고 서로 다른 오브젝트가 서로를 찾아야 할 때 사용되기도 한다. 레플리카셋은 정의된 라벨을 통해 생성해야 하는 포드를 찾는다. 예를 들어 A라벨을 가지는 포드의 개수가 replicas항목에 3개로 정의되어 있는데 개수가 일치하지 않다면 포드를 정의하는 포드 템플릿 항목의 내용으로 포드를 생성한다. kubectl apply -f nginx-pod.. 2022. 3. 19.
[JPA] : JPA 사용을 위한 프로젝트 셋팅과 간단 설명 Spring Boot MVC2편을 마치고 JPA 로드맵을 수강한다. 먼저, http://www.h2database.com/html/main.html에서 H2 데이터베이스를 설치하고 실행해 주었다. 윈도우는 /h2/bin/h2.bat을 실행시켜주면 된다. 명령 프롬프트로 실행을 시켜주니 바로 콘솔이 나온다. H2는 실습용으로 강력 추찬하고 있다고 한다. 왜냐하면 일단 가볍고, 웹용 쿼리 툴을 제공한다. MySQL과 Oracle 데이터베이스 시뮬레이션 기능이 있고 시퀸스와 AUTO INCREMENT 기능을 지원하기 때문이다. 이번 프로젝트는 Maven을 사용한다. 메이븐은 자바 라이브러리, 빌드를 관리하고 라이브러리 자동 다운로드 및 의존성을 관리한다. JPA파일 중 일부를 가져왔다. JPA 설정 파일은 고.. 2022. 3. 19.
[TIL] : 143 일일 배움을 위한 Today I Learned ! Spring Boot 파일을 올리고, 올린 파일을 다운로드하는 실습 코딩을 진행했다. 간단히 파일을 올린다고 생각했지만 서버에 저장되는 이름이 같으면 충돌이 나는 문제는 떠올려 보지 못 한 부분이다. 2022.03.18 - [Framework/Spring Boot] - [Spring Boot] : 파일 업로드, 파일 다운로드 구현하기 Kubernetes 레플리카셋 사용을 적용해 봤다. 2022.03.18 - [Server & System/Kubernetes] - [Kubernetes] : 레플리카셋 사용 2022. 3. 18.
[Kubernetes] : 레플리카셋 사용 Nginx 포드를 생성하는 레플리카셋을 만들어본다. apiVersion: apps/v1 kind: ReplicaSet metadata: name: replicaset-nginx spec: replicas: 3 selector: matchLabels: app: my-nginx-pods-label template: metadata: name: my-nginx-pod labels: app: my-nginx-pods-label spec: containers: - name: nginx image: nginx:latest ports: - containerPort: 80 replicaset-nginx.yaml 파일을 작성한다. 리소스의 고유한 이름은 쿠버네티스 오브젝트에서도 설정이 가능하다. kubectl apply.. 2022. 3. 18.
[Spring Boot] : 파일 업로드, 파일 다운로드 구현하기 파일 업로드와 파일 다운로드를 구현해 봤다. private String uploadFileName; private String storeFileName; public UploadFile(String uploadFileName, String storeFileName) { this.uploadFileName = uploadFileName; this.storeFileName = storeFileName; uploadFileName는 고객이 업로드한 파일명이다. storeFileName는 서버 내부에서 관리하는 파일명이다. 서로 다른 고객이 같은 파일을 업로드할 때 충돌날 수 있어서 서버에는 이름이 겹치지 않게 저장해야 한다. 때문에 파일명을 분리했다. @Value("${file.dir}") private St.. 2022. 3. 18.
[TIL] : 142 일일 배움을 위한 Today I Learned ! Kubernetes 레플리카 셋과 pod에 대해 공부하기 시작했다. 전에 레플리카 셋을 학교에서 실습해 본 적이 있는데 아직은 잘 모르겠다. 2022.03.17 - [Server & System/Kubernetes] - [Kubernetes] : 완전한 애플리케이션으로서의 pod 2022.03.17 - [Server & System/Kubernetes] - [Kubernetes] : Replica Set, 레플리카 셋을 사용하는 이유 CentOS CentOS에 MongoDB를 설치하고 로그 저장 위치 수정이나 방화벽 등 설정 셋팅을 진행했다. Robo 3T를 통해 외부 접속도 성공했지만 Studio 3T로 해 볼 예정이다. 2022.03.17 - [Ser.. 2022. 3. 17.
[Spring Boot] : 스프링과 파일 업로드 스프링은 MultipartFile 이라는 인터페이스로 매우 편리하게 지원을 한다. @PostMapping("/upload") public String svaeFile(@RequestParam String itemName, @RequestParam MultipartFile file, HttpServletRequest request) throws IOException { log.info("request={}", request); log.info("itemName={}", itemName); log.info("multipartFile={}", file); if (!file.isEmpty()) { String fullPath = fileDir + file.getOriginalFilename(); log.info.. 2022. 3. 17.
[Spring Boot] : 서블릿과 파일 업로드(2) 서블릿이 제공하는 Part 에 대해 공부하고 실제 파일도 서버에 업로드 하는 실습을 진행했다. 먼저 파일이 저장될 경로를 만들어 준다. C:\\git\\core_Study\\MVC2\\upload\\file 나는 이런 경로를 가지고 왔다. 이 경로를 어디에 적냐면 file.dir=C:/git/core_Study/MVC2/upload/file/ application.properties에 적어준다. 여기서 주의 할 점으로는 마지막에 / 를 넣어줘야 한다는 점이다. @Value("${file.dir}") private String fileDir; 컨트롤러에서 아까 저장한 경로 변수를 Value로 넣어주면 알아서 파일 위치를 확인한다. //데이터 읽기 InputStream inputStream = part.ge.. 2022. 3. 17.
[소경관] : 프로젝트 요구사항 완전 변경 및 재시작 학교에서 개인 프로젝트 과제로 만들려고 생각해 두다 방학 때 진행하려 했으나 요구사항이 자꾸 바뀌어 진행하지 못 했었다. 이제 개강하고 과제의 최종 요구사항이 결정되어 앞으로 몇 가지의 수정 작업을 진행하고 개발 설계 산출물부터 천천히 작성하고 깃 레포지토리도 비우고 다시 시작해야 한다. 처음에 스프링 프레임워크 레거시버전으로 만든다 했었으나 교육 과정 개편(?)으로 스프링 부트로 만들게 되었다. 기존에 메이븐 사용도 그레이들로 바꿔서 적용할까도 생각중이고.. 아직 개발 설계 산출물이 작성되지 않은 만큼 뚜렷하지 못 한 상태이다. 3월 말 까지 설계 산출물을 제출해야 하니까 그 전에 구상은 마칠 예정이다. 2022. 3. 17.
[Spring Boot] : 서블릿과 파일 업로드(1) 파일을 업로드 하려면 파일은 문자가 아니라 바이너리 데이터를 전송해야 한다. 하지만 여기서 이름,나이,첨부파일을 보낼 때 바이너리 데이터뿐만아니라 문자 데이터도 전송해야 하는데 이 문제를 해결하기 위해 HTTP는 multipart/form-data 라는 전송 방식을 제공한다. 먼저 서블릿을 통한 파일 업로드 실습을 진행했다. @PostMapping("/upload") public String saveFileV1(HttpServletRequest request) throws ServletException, IOException { log.info("request={}", request); String itemName = request.getParameter("itemName"); log.info("item.. 2022. 3. 17.
[Kubernetes] : Replica Set, 레플리카 셋을 사용하는 이유 포드는 여러 컨테이너를 추상화해 하나의 애플리케이션으로 동작하게 하는 컨테이너 묶음이다. YAML에 포드만 정의해 생성하면 이 포드의 Lifecycle은 어떻게 될까? kubectl delete -f nginx-pod-ubuntu.yaml kubectl get pods kubectl delete pods my-nginx-pod 포드를 삭제하면 그 포드의 컨테이너도 삭제되어 쿠버네티스에서 영원히 사라지게 된다. 이렇게 YAML에 정의해 생성하면 오직 쿠버네티스 사용자에 의해 관리된다. 하지만 외부 사용자의 요청을 처리해야 하는 마이크로 서비스 구조의 포드면 이런 방식을 사용하기 어렵다. 이렇게 YAML 파일에 정의해 사용하는 것은 여러 문제와 한계가 있고 이런 점을 해결해 사용하기 위해 replica se.. 2022. 3. 17.
[Kubernetes] : 완전한 애플리케이션으로서의 pod 완전한 애플리케이션으로서의 포드 K8s는 1개의 컨테이너로 구성된 포드를 사용하는 경우가 많다. 그렇다면 왜 하나의 포드에 여러 개의 컨테이너가 포함되어야 하는지 의문점이 생기게 된다. 여기서 유의점은 하나의 포드는 하나의 완전한 애플리케이션이라는 점이다. Nginx 컨테이너는 그 자체로 완전한 애플리케이션이다. 떄문에 하나의 포드에 2개의 Nginx 컨테이너가 정의되는 것은 옳지 못 하다. 하지만 Nginx 컨테이너가 실행되기 위해 부가적인 기능이 필요하다면 추가 컨테이너를 포드에 포함시킬 수 있다. 이렇게 포드에 정의된 부가적인 컨테이너를 Sidecar(사이드카) 컨테이너라고 한다. 사이드카 컨테이너는 포드 내 다른 컨테이너와 네트워크 환경을 공유한다. 포드에 포함된 컨테이너들은 모두 같은 워커 노드.. 2022. 3. 17.
[CentOS] : MongoDB 간단 정의 및 yum을 통한 설치와 설정 셋팅 MongoDB 간단 정의 및 yum을 통한 설치와 설정 ( CentOS) MongoDB란? NoSQL에서 가장 많이 사용되는 데이터베이스이다. 높은 수준의 Java 기반 API를 제공하고 Spring Framework와 연동이 가능하다. MongoDB 버전은 Community 와 Enterprise Server로 구분된다. Enterprise Server의 추가 기능은 In-Memory Storage Engine(데이터 저장소를 메모리로 사용 가능)를 지원한다. 추가로 저장된 데이터를 암호화 하거나 LDAP, Kerveros를 통한 접근 제어가 가능하다. MongoDB 4.xx 변화도 있다. ACID(원자성,일관성,고립성,지속성)을 제공하고 트랜젝션을 제공한다. 특히 4.2 버전부터 (샤딩을 통한)분산된.. 2022. 3. 17.
[TIL] : 141 일일 배움을 위한 Today I Learned ! Spring Boot 포맷터 사용에 대해 공부하고 코딩했다. 2022.03.16 - [Framework/Spring Boot] - [Spring Boot] : Formatter, 포맷터 적용하기 2022.03.16 - [Framework/Spring Boot] - [Spring Boot] : 포맷터를 지원하는 컨버젼 서비스 2022.03.16 - [Framework/Spring Boot] - [Spring Boot] : 포맷터를 웹 애플리케이션에 적용하기 2022.03.16 - [Framework/Spring Boot] - [Spring Boot] : Spring이 제공하는 기본 포맷터 Kubernetes 포드에 대해 알아봤다. 2022.03.16 - [.. 2022. 3. 16.
반응형