전체 글299 [T.I.L]DAY43 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.03.01 - [개발 개념/이론] - [개발개념] SQLD 시험준비 2022.03.01 - [서버/도커] - [도커] 컨테이너 제한 2022. 3. 1. [개발개념] SQLD 시험준비 1장 데이터 모델링의 이해 요약 모델링 : 현실세계를 단순화하여 표현하는 것 특징 추상화 : 일정한 형식에 맞춰 표현함 단순화 : 제한된 표기법이나 언어로 표현함 명확성 : 이해가 쉽게 표현함 관점 데이터 관점 : 업무와 데이터 및 데이터 사이의 관계 프로세스 관점 : 진행되고 있거나 진행되어야 하는 업무 상관 관점 : 데이터에 대한 업무 처리 방식의 영향 데이터 모델링 : 정보 시스템 구축을 위한 데이터 관점의 업무 분석 기법 목적 : 1) 정보에 대한 표기법을 통일하여 업무 내용 분석 정확도 증대 2)데이터 모델을 기초로 DB 생성 기능 : 1) 가시화 2) 명세화 3) 구조화된 틀 제공 4) 문서화 5) 다양한 관점 제공 6)구체화 중요성 파급효과 (Leverage) 간결한 표현 (Concisene.. 2022. 3. 1. [도커] 컨테이너 제한 컨테이너 메모리 제한 docker run 명령어에 —memory를 지정하여 컨테이너의 메모리를 제한할 수 있다 명령어는 다음과 같이 입력한다 docker run -d \\ --memory="1g" \\ --name memory_1g \\ nginx 스왑 메모리 docker run -it --name swap_500m \\ --memory=200m \\ --memory-swap=500m \\ ubuntu:14.04 스왑 메모리는 기본적으로 메모리의 2배로 자동 설정되지만 —memory-swap 명령어로 따로 설정해줄 수 있다 컨테이너 CPU 제한 —cpu-shares 옵션은 컨테이너에 가중치를 설정해 해당 컨테이너가 CPU를 상대적으로 얼마나 사용할 수 있는지를 나타낸다 쉽게 말해서 CPU를 하나씩 할당하.. 2022. 3. 1. [T.I.L]DAY42 2022.02.28 - [서버/도커] - [도커] json-file 로그 사용하기 2022.02.28 - [서버/도커] - [도커] fluentd 로깅 [도커] fluentd 로깅 fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구이다 fluentd는 데이터 포맷으로 JSON을 사용하기 때문에 쉽게 사용할 수 있을뿐만 아니라 수집되는 데이터를 AWS S3, HD yikanghee2.tistory.com 도커 로그찍는 법에대한 공부를 했다 2022. 2. 28. [도커] fluentd 로깅 fluentd는 각종 로그를 수집하고 저장할 수 있는 기능을 제공하는 오픈소스 도구이다 fluentd는 데이터 포맷으로 JSON을 사용하기 때문에 쉽게 사용할 수 있을뿐만 아니라 수집되는 데이터를 AWS S3, HDFS (Hadoop Distributed File System), MongoDB 등 다양한 저장소에 저장할 수 있다는 장점이 있다 fluentd와 몽고DB와 연동해 데이터를 저장해보겠다 로그가 수집되는 순서 도커 서버 → 로그 수집 → fluentd 서버 → 로그 저장 → MongoDB 서버 위와 같은 순서를 적용하기 위해서 서버를 다음과 같이 설정해준다 도커 서버: 192.168.0.100 fluentd 서버 : 192.168.0.101 몽고DB 서버 :192.168.0.102 fuentd .. 2022. 2. 28. [도커] json-file 로그 사용하기 컨테이너 내부에서 어떤 일이 일어나는지 아는것은 운영 측면에서 굉장히 중요하다 우선 컨테이너를 생성해서 간단한 로그를 남겨보자 docker run -d --name mysql \\ -e MYSQL_ROOT_PASSWORD=1234 \\ mysql:5.7 -d 옵션을 사용하여 백그라운드 모드로 컨테이너를 실행 따라서, 어플리케이션이 잘 구동되는지 여부를 알 수 없지만 docker logs 명령어를 써서 컨테이너의 표준 출력을 확인함으로써 어플리케이션 상태를 알 수 있음 docker logs mysql 만약 -e 옵션을 안쓰고 컨테이너를 만들경우 docker start를 해도 컨테이너는 다시 시작되지 않음 이때 docker logs mysql을 사용하여 문제가 무엇인지 알 수 있음 이렇게 원인을 알 수 없는.. 2022. 2. 28. [T.I.L]DAY41 2022.02.25 - [서버/도커] - [도커] 도커 네트워크 2022.02.25 - [서버/도커] - [도커] 브리지 네트워크와 —net-alias 2022.02.25 - [프레임워크/JPA] - [JPA] JPQL (Java Persistence Query Language)이란? [JPA] JPQL (Java Persistence Query Language)이란? JPQL (Java Persistence Query Language)은 뜻을 해석하면 독립적인 객체 지향 언어라는 뜻이다 JPA를 사용할 때에 개발자는 엔티티 객체를 중심으로 개발하고 데이터베이스에 대한 처리는 JPA가 대신해주게 yikanghee2.tistory.com JPA와 도커에 대한 호기심이 생겨서 공부하고있다 매일 조금이지만 성.. 2022. 2. 25. [JPA] JPQL (Java Persistence Query Language)이란? JPQL (Java Persistence Query Language)은 뜻을 해석하면 독립적인 객체 지향 언어라는 뜻이다 JPA를 사용할 때에 개발자는 엔티티 객체를 중심으로 개발하고 데이터베이스에 대한 처리는 JPA가 대신해주게 되는데 이때, 등록, 수정, 삭제, 한건 조회는 SQL를 전혀 사용하지 않지만, 검색할 때에는 SQL 쿼리를 작성해야 한다 여기서 문제가 발생한다. JPA는 엔티티 객체를 중심으로 개발을 하여 검색할 때에 테이블이 아닌 엔티티 중심으로 검색을 해야 하는데 엔티티 대상으로 검색을 하려면 데이터를 애플리케이션으로 불러와서 엔티티 객체로 변경한 뒤 다시 검색해야 한다 로직이 상당히 어렵다 이걸 해결할 수 있는 방안이 JPQL이라는 쿼리 언어이다 JPQL은 다음과 같이 동작한다 Str.. 2022. 2. 25. [도커] 브리지 네트워크와 —net-alias 브리지 타입의 네트워크와 run명령어의 —net-alias 옵션을 함께 쓰면 특정 호스트 이름으로 컨테이너를 여러개 접근할 수 있음 docker run -i -t -d --name network_alias_container \\ --net mybridge \\ --net-alias alicek106 ubuntu:14.04 docker run -i -t -d --name network_alias_container2 \\ --net mybridge \\ --net-alias alicek106 ubuntu:14.04 docker run -i -t -d --name network_alias_container3 \\ --net mybridge \\ --net-alias alicek106 ubuntu:14.04 세.. 2022. 2. 25. [도커] 도커 네트워크 도커 네트워크 구조 도커는 컨테이너 내부 ip를 순차적으로 할당한다 이 ip는 컨테이너를 재시작할 때마다 변경될 수 있다 내부 ip는 도커가 설치된 호스트, 즉 내부 망에서만 쓸 수 있는 ip이므로 외부와 연결될 필요가 있다 이 과정은 컨테이너를 시작할 때마다 호스트에 veth(vitual) 라는 네트워크 인터페이스를 생성하면서 이루어진다 veth 인터페이스는 사용자가 직접 생성할 필요는 없으며 컨테이너가 생성될 때 도커 엔진이 자동으로 생성함 이말은 즉, 실행중인 컨테이너 수만큼 veth로 시작하는 인터페이스가 생성된다 이때 docker() 브리지도 같이 생성되는데 브리지의 역할은 각 veth 인터페이스와 바인딩돼 호스트의 eth() 인터페이스와 이어주는 역할을 한다 도커 네트워크 기능 컨테이너를 생성.. 2022. 2. 25. [T.I.L]DAY40 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.02.24 - [서버/도커] - [도커] 도커 볼륨 2022. 2. 24. [도커] 도커 볼륨 도커 볼륨 도커의 문제점 도커에서 이미 생성된 이미지는 어떤 경로도 변경되지 않으며, 컨테이너 계층에 원래 이미지에서 변경된 파일시스템 등을 저장함 이미지에 mysql을 실행하는데 필요한 어플리케이션 파일이 들어있다면 컨테이너 계층에는 워드프레스에서 쓴 로그인 정보나 게시글 등과 같이 데이터베이스를 운용하면서 쌓이는 데이터가 저장됨 여기서 도커의 치명적인 단점이 발견이되는데 내가 쓰고 있는 mysql을 삭제하면 계층에 저장되어있던 데이터베이스의 정보도 삭제된다 도커는 컨테이너 생성과 삭제가 매우 쉬우므로 실수로 컨테이너를 삭제하면 데이터를 복구할 수 없게된다 해결방법 컨테이너의 데이터를 영속적 데이터로 활용하는 방법이다 그 중 하나가 도커 볼륨이다 도커 볼륨 호스트와 볼륨을 공유한다 불륨 컨테이너를 활용.. 2022. 2. 24. [T.I.L]DAY39 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.02.23 - [프레임워크/JPA] - [JPA] JPA CRUD 기본 동작 2022.02.23 - [프레임워크/JPA] - [JPA] JPA 영속성 컨텍스트 2022. 2. 23. [JPA] JPA 영속성 컨텍스트 JPA 영속성 컨텍스트 엔티티 매니저 팩토리와 앤티티 메니저 웹 어플리케이션을 개발할때 엔티티 메니저 팩토리를 사용해서 사용자의 요구가 들어올때마다 엔티티 매니저를 만들고 CONNETION 을 사용해서 DB를 사용함 영속성 컨텍스트란 엔티티를 영구 저장하는 환경이다 영속성 컨텍스트는 논리적인 개념인데 엔티티 매니저를 통해서 엔티티 컨텍스트에 접근한다 엔티티 매니저를 생성하면 1:1로 영속성 컨텍스트를 생성한다 엔티티 생명주기 비영속 //JPA와 관계없는 비영속 상태 Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 영속 //객체 생성 후 EntityManager em = emf.createEntityManag.. 2022. 2. 23. [JPA] JPA CRUD 기본 동작 JPA에서는 CRUD 기본 동작을 획기적으로 가볍게 바꿔준다 다음 코드를 보면 감탄이 저절로 나온다 INSERT 엔터티를 저장하기위한 persist() 메소드에 저장할 엔터티를 넘겨주면 끝이다 String id = "id"; Member member = new Member(); member.setId(id); member.setUsername("kk"); member.setAge(2); //등록 em.persist(member); JPA는 회원 엔티티의 매핑 정보를 분석해서 다음과 같은 SQL을 만들어서 데이터베이스에 전달한다 INSERT INTO MEMBER (ID, NAME, AGE) VALUES ('id', 'kk', 2); UPDATE UPDATE는 단순히 엔터티의 값만 변경해주면 완성이다. St.. 2022. 2. 23. [T.I.L]DAY38 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.02.22 - [개발 개념/이론] - [개발 개념] JPA 매핑정보 어노테이션 2022.02.22 - [프레임워크/스프링] - [스프링]Bean Validation 2022.02.22 - [코딩테스트/풀이] - [코딩 테스트] 마구간 정하기 (결정 알고리즘) 파이썬 [코딩 테스트] 마구간 정하기 (결정 알고리즘) 파이썬 마구간 정하기 (결정 알고리즘) 파이썬 N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3 .... 개의 좌표를 가지며, 마구간간에.. 2022. 2. 22. [개발 개념] JPA 매핑정보 어노테이션 JPA 매핑정보 어노테이션 JPA를 사용할때 매핑을 하기 위해 사용하는 어노테이션 정리 @Entity 이 클래스를 테이블과 매핑한다고 JPA에게 알려준다. 이렇게 @Entity가 사용된 클래스를 엔터티 클래스라고 한다 @Table 엔터티 클래스에 매핑할 테이블 정보를 알려준다. 이 어노테이션을 생략하면 클래스 이름을 테이블 이름으로 매핑한다 @Id 엔터티 클래스의 필드를 테이블의 기본(Primary key) 키에 매핑한다. 이렇게 @Id가 사용된 필드를 식별자 필드라고 한다 @Columm 필드를 컬럼에 매핑한다 매핑정보가 없는 필드 매핑 어노테이션을 생략하면 필드명을 사용해서 컬럼명으로 매핑한다 2022. 2. 22. [스프링]Bean Validation Bean Validation이란 어노테이션 하나로 검증 로직을 매우 편리하게 적용할 수 있게 도와줌 사용법 build.gradle 에 spring-boot-start-validation 라이브러리 추가 implementation 'org.springframework.boot:spring-boot-starter-validation' 기존에 있던 프로퍼티 객체에 어노테이션을 추가해줌 @NotBlank @NotNull @Range(min = , max = ) @Max(9999) 에러를 모아놓은 프로퍼티에 메시지를 등록 NotBlank={0} 공백이 있으면 안 됩니다 Range={0} , {2} ~ {1} 허용 Max={0}, 최대 {1} 글로벌 오류를 해결하는 방법 @Data @ScriptAssert(lang.. 2022. 2. 22. [코딩 테스트] 마구간 정하기 (결정 알고리즘) 파이썬 마구간 정하기 (결정 알고리즘) 파이썬 N개의 마구간이 수직선상에 있습니다. 각 마구간은 x1, x2, x3 .... 개의 좌표를 가지며, 마구간간에 좌표가 중복되는 일은 없다 현재 C마리의 말을 가지고 있는데, 이 말들이 서로 가까이 있는 것을 좋아하지 않는다 각 마구간에는 한 마리의 말만 넣을 수 있고, 가장 가까운 말의 거리가 최대가 되게 말을 마구간에 배치하고 싶다 C마리의 말을 N개의 마구간에 배치했을 때 가장 가까운 두 말의 거리가 최대가 되는 그 최대 값을 출력하는 프로그램 결정 알고리즘의 핵심은 시작과 끝을 정하여 최적의 답을 구하는 것이다 이 문제에서 최적에 값을 구하기 위해서는 시작값과 끝값을 더해서 2로 나눈 뒤 중간값으로 설정한 뒤 앞 뒤로 최적의 값을 구해나가면 된다 n, c = .. 2022. 2. 22. [T.I.L]DAY37 ------------------------------------------------------------ [T.I.L] ------------------------------------------------------------ 2022.02.21 - [프레임워크/스프링] - [스프링] BindingResult 2022.02.21 - [서버/도커] - [도커] 컨테이너 어플리케이션 구축 웹 서버 바인딩 2022. 2. 21. [스프링] BindingResult 웹에서 값을 입력 받을때 오류 메시지를 띄워주는 것은 사용자에게 편의를 제공하는 중요한 일이다 BindingResult 스프링이 제공하는 검증 오류를 보관하는 객체 검증 오류가 발생하면 여기에 보관하면 된다 BindingResult가 있으면 @ModelAttribute에 데이터 바인딩 시 오류가 발생해도 컨트롤러가 호출된다 원래는 400오류로 페이지를 띄우주지 않는다 BindingResult의 객체에 타입 오류 등으로 바인딩에 실패하는 경우 스프링이 지원하는 FiedError를 생성해서 BindingResult에 넣어준다 public String addItemV2(@ModelAttribute Item item, BindingResult bindingResult, RedirectAttributes redi.. 2022. 2. 21. 이전 1 ··· 5 6 7 8 9 10 11 ··· 15 다음