본문 바로가기
반응형

분류 전체보기1065

[Docker] : docker network 기능 컨테이너를 생성하면 docker0 브리지를 통해 외부와 통신할 수 있지만 사용자 선택에 따라 여러 네트워크 드라이버를 사용할 수도 있다. docker network ls 명령어로 기본적으로 사용할 수 있는 네트워크가 무엇인지 확인해 볼 수 있다. 도커의 네트워크를 다루는 명령어는 docker network 로 시작한다. NAME을 보면 bridge, host, none 네트워크가 있는 것을 확인할 수 있다. bridge 네트워크는 컨테이너를 생성할 때 자동으로 연결되는 docker0 bridge를 활용하도록 설정되어 있다. 이 네트워크는 172.17.0.x IP대역을 컨테이너에 순차적으로 할당한다. docker network inspect bridge 위 명령어를 통해 네트워크의 자세한 정보를 확인할 수.. 2022. 2. 17.
[Docker] : docker network 구조 ifconfig 컨테이너 내부에서 명령어를 입력하면 컨테이너 네트워크 인터페이스에 eth0과 lo 네트워크 인터페이스가 있는 것을 확인할 수 있다. 도커는 컨테이너 내부 IP를 순차적으로 할당하고 이 IP는 컨테이너를 재시작할 때마다 변경될 수 있다. 그리고 이 내부 IP는 도커가 설치된 호스트 즉, 내부 망에서만 사용이 가능한 IP이다. 때문에 외부와 연결될 필요가 있다. veth 인터페이스는 사용자가 직접 생성할 필요가 없고 컨테이너가 생성될 때 도커 엔진이 자동으로 생성하게 된다. 도커가 설치된 호스트에서 ifconfig나 ip addr과 같은 명령어로 네트워크 인터페이스를 확인하면 실행 중인 컨테이너 수 만큼 veth로 시작하는 인터페이스가 생성된 것을 확인할 수 있다. 명령어의 출력 결과 중 e.. 2022. 2. 17.
[Spring Boot] : 로그인 기능 구현하기 이번에는 로그인 기능을 개발해 봤다. 로그인의 핵심 기능은 회원을 조회하고 파라미터로 넘어온 password와 비교해 같으면 회원을 반환하고 다르면 null을 반환하는 것이 로그인의 핵심 비즈니스 로직이라고 한다. Optional findMemberOptional = memberRepository.findByLoginId(loginId); Member member = findMemberOptional.get(); if (member.getPassword().equals(password)) { return member; } else { return null; } Optional을 통해 이렇게 서비스 로직을 작성했는데 강사님이 비추하고 람다식으로 코드를 작성하는 것을 추천하셨다. 그렇게 작성한 코드가 아래와.. 2022. 2. 17.
[Spring Boot] : 회원 가입 기능 구현하기 회원가입 기능 구현하기 @Data public class Member { private Long id; @NotEmpty private String loginId; //로그인 ID @NotEmpty private String name; @NotEmpty private String password; } 회원가입을 위한 객체 클래스를 만들어준다. @Slf4j @Repository public class MemberRepository { private static Map store = new HashMap(); //static 사용 private static long sequence = 0L; //static 사용 public Member save(Member member) { member.setId(++se.. 2022. 2. 17.
[Spring Boot] : Bean Validation HTTP message Converter @Valid와 @Validated는 HttpMessageConverter(@RequestBody)에도 적용할 수 있다. @ModelAttrubute는 HTTP 요청 파라미터(URP 쿼리 스트링, POST Form)를 다룰 때 사용하고 @RequestBody는 HTTP Body의 데이터를 객체로 변환할 때 사용한다. @Slf4j @RestController @RequestMapping("/validation/api/items") public class ValidationItemApiController { @PostMapping("/add") public Object addItem(@RequestBody @Validated ItemSaveForm form, BindingResult bindingResult).. 2022. 2. 17.
[Spring Boot] : Form 전송 객체 분리하여 개발하기 등록할 때 사용하는 검증과 수정할 때 사용하는 검증을 분리시켜 구현했다. 전에는 groups를 통해 분리를 해서 사용했지만 그렇게 사용할 경우 코드가 복잡해지기도 하고 내용이 많아지면 유지보수가 어려워진다는 문제가 있어서 이번에는 아예 분리를 했다. 현업에서도 이렇게 많이 사용을 한다고 한다. @Data public class ItemSaveForm { @NotNull @Max(value=9999) private Integer quantity; } 먼저 ItemSaveForm라는 DTO(데이터 전송 객체)를 만들어 준다. 등록에서 사용한다. @Data public class ItemUpdateForm { @NotNull private Long id; // 수정에서는 수량은 자유롭게 변경할 수 있다. pr.. 2022. 2. 17.
[JavaScript 30일 챌린지] : 21일차 Geolocation API를 사용해 위치 정보를 사용하는 프로젝트인데 컴퓨터로 테스트 하기가 애매해서 테스트는 못 해봤다. 📝 ← 여기서 MDN 공식 문서를 확인하면 좋을 것 같다. 2022. 2. 17.
[TIL] : 113 일일 배움을 위한 Today I Learned ! Docker 도커 볼륨과 볼륨을 사용하는 방법에 대해 알아봤다. 2022.02.16 - [Server & System/Docker] - [Docker] : host volume 공유, 호스트 볼륨 공유 2022.02.16 - [Server & System/Docker] - [Docker] : Volume Container, 볼륨 컨테이너 2022.02.16 - [Server & System/Docker] - [Docker] : Docker volume , 도커 볼륨 JavaScript 30일 챌린지 오늘은 마이크로 말을 하면 자동으로 채팅을 쳐주는 작은 프로젝트를 진행했다. 그냥 간단하게 따라서 코딩하는 정도에 그쳤다. 2022.02.16 - [Proje.. 2022. 2. 16.
[코딩&리뷰] : 스터디 7회차 7회차 스터디를 진행했다. 오늘은 한 쌤이 백신을 맞고 쉬시느라 못 나오셨고 세명에서 진행했다. 오늘은 저번주에 공부한 docker와 꾸준히 하고 있는 JS 챌린지를 언급했고 오늘 스터디 시간에 공부한 내용은 Spring Boot Bean Validation에 대해서 공부했다. 모인 쌤들 중 경력이 제일 많은 쌤이 피드백을 잘 해주셔서 항상 얻어가는 게 많다. 오늘도 Bean Validation에 대해 리뷰하면서 피드백을 해주셔서 얻어가는 게 많은 스터디였다. 자세한 내용은 블로그 상단에 TO-DO List에서 오늘 일자로 확인이 가능하다. Bean Validation 에러 코드 (1) Bean Validation Obejcet 오류 (1) Bean Validation 수정에 적용하기 (1) Bean V.. 2022. 2. 16.
[Spring Boot] : Bean Validation 한계와 해결하기 위한 groups Bean Validation 한계와 해결하기 위한 groups 만약 변경 사항이 들어와서 @Max(value = 9999) //수정 요구사항 추가 private Integer quantity; 수정 할 때에는 한계값이 없어야 한다. 간단하게 여기서 어노테이션을 수정할 수 있겠지 싶지만 사실 그렇게 되면 등록을 할 때에도 한계값이 사라지기 때문에 요구사항에 맞지 않게 된다. 어노테이션을 분리해서 적용해야 하는데 그렇게 하기 위한 기능이 groups 기능이라고 보면 된다. 먼저 인터페이스 두 개를 만들어주었다. public interface SaveCheck { } public interface UpdateCheck { } 인터페이스 자체에 코드가 들어가진 않는다. @Max(value = 9999, grou.. 2022. 2. 16.
[Spring Boot] : Bean Validation 수정에 적용하기 Bean Validation 수정에 적용하기 상품 수정에도 검증을 적용했다. public String edit(@PathVariable Long itemId, @Validated @ModelAttribute Item item, BindingResult bindingResult) Item 모델 객체에 @Validated를 추가해 줬다. //특정 필드 예외가 아닌 전체 예외 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if (resultPrice < 10000) { bindingResult.reject("totalPriceMin", new Obj.. 2022. 2. 16.
[Spring Boot] : Bean Validation Obejct 오류 특정 필드가 아닌 오브젝트 관련 오류는 @ScriptAssert()를 활용하면 된다. @ScriptAssert(lang = "javascript", script = "_this.price * _this.quantity >= 10000", message = "총 합이 만원이 넘게 해주세요.") 이렇게 어노테이션을 활용해서 써주면 되는데 기능이 너무 약해서 그냥 이 부분은 Java 코드로 가져오는 게 낫다고 한다. //특정 필드가 아닌 복합 룰 검증 if (item.getPrice() != null && item.getQuantity() != null) { int resultPrice = item.getPrice() * item.getQuantity(); if(resultPrice < 10000) { bin.. 2022. 2. 16.
[JavaScript 30일 챌린지] : 20일차 20일차 window.SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition; const recognition = new SpeechRecognition(); recognition.interimResults = true; recognition.lang = 'en-US'; let p = document.createElement('p'); const words = document.querySelector('.words'); words.appendChild(p); recognition.addEventListener('result', e => { const transcript = Array.from(e.results) .map.. 2022. 2. 16.
[Spring Boot] : Bean Validation 에러 코드 Bean Validation 에러 코드 Bean Validation이 제공하는 오류 메시지를 좀 더 자세히 변경하고 싶으면 Bean Validation을 적용하고 bindingResult에 등록된 검증 오류 코드를 본다. 오류 코드가 어노테이션 이름으로 등록이 되는데 typeMismatch와 유사하다. NotBlank라는 오류 코드를 기반으로 MessageCodesResolver를 통해 다양한 메시지 코드가 순서대로 생성된다. NotBlank={0} 공백X 이렇게 적었을 때 공백 x 라는 메시지가 뜨지만 조금 더 자세히 하고 싶을 경우 NotBlank.item.itemName=상품 이름을 적어주세요. 이렇게 적어주면 상품 이름을 적어주세요.가 나오게 된다. Bean Validation이 메시지를 찾는 순.. 2022. 2. 16.
[Docker] : Docker volume , 도커 볼륨 도커 볼륨 docker volume 명령어를 사용해서 볼륨을 활용할 수도 있다. 즉, 도커 자체에서 제공하는 볼륨 기능을 활용해 데이터를 보존할 수도 있다. 볼륨을 다루는 명령어는 docker volume로 시작하고, docker volume create 명령어로 볼륨을 생성할 수 있다. docker volume create --name myvolume myvolume이라는 볼륨을 생성한다. docker volume ls 명령어를 통해 생성된 볼륨을 확인힌다. docker run -i -t --name myvolume_1 \\ -v myvolume:/root/ \\ ubuntu:14.04 echo hello, volume! >> /root/volume 위 코드로 생성되는 컨테이너는 볼륨을 컨테이너의 /r.. 2022. 2. 16.
[Docker] : Volume Container, 볼륨 컨테이너 볼륨 컨테이너 볼륨을 사용하는 두 번째 방법은 -v 옵션으로 볼륨을 사용하는 컨테이너를 다른 컨테이너와 공유하는 것이다. docker run -i -t \\ --name volumes_from_container \\ --volumes-from volume_overide \\ ubuntu:14.04 ls /home/testdir_2/ —volume-from 옵션을 통해 여러 개의 컨테이너가 동일한 컨테이너에 볼륨을 공유해서 사용할 수도 있다. 📖 ← [ 시작하세요! 도커/쿠버네티스 ] 책을 참고하여 공부하였습니다. 2022. 2. 16.
[Docker] : host volume 공유, 호스트 볼륨 공유 호스트 볼륨 공유 docker run -d \\ --name wordpressdb_hostvolume \\ -e MYSQL_ROOT_PASSWORD=password \\ -e MYSQL_DATABASE=wordpress \\ -v /home/wordpress_db:/var/lib/mysql \\ mysql:5.7 docker run -d \\ -e WORDPRESS_DB_PASSWORD=password \\ --name wordpress_hostvolume \\ --link wordpressdb_hostvolume:mysql \\ -p 80 \\ wordpress 두 명령어를 통해 mysql 데이터베이스 컨테이너와 워드프레스 웹 서버 컨테이너를 생성한다. 워드프레스 컨테이너에 -p 옵션으로 컨테이너의 8.. 2022. 2. 16.
[TIL] : 112 일일 배움을 위한 Today I Learned ! Docker 컨테이너 애플리케이션 구축과 도커 볼륨에 대해 공부했다. 도커 볼륨을 활용하는 부분도 천천히 코딩해 볼 생각이다. 2022.02.15 - [Server & System/Docker] - [Docker] : 도커 애플리케이션 구축하기 2022.02.15 - [Server & System/Docker] - [Docker] 도커 볼륨, docker volume JavaScript 30일 챌린지 19일차를 진행했다. 웹 캠을 보이게하고 사진을 찍고 효과를 주게끔 만드는 코드였는데 이해가 잘 가지 않는다. 일단 1차 목표는 JS 문법과 친해지는 것이 목표인데 애매한 것 같다. 2022.02.15 - [Project/JavaScript 30일 챌린지] .. 2022. 2. 15.
[JavaScript 30일 챌린지] : 19일차 function getVideo() { navigator.mediaDevices.getUserMedia({ video: true, audio: false }) .then(localMediaStream => { console.log(localMediaStream); video.srcObject = localMediaStream; video.play(); }) .catch(err => { console.error(`OH NO!!!`, err); }); } function paintToCanvas() { const width =video.videoWidth; const height =video.videoHeight; canvas.width = width; canvas.height = height; return.. 2022. 2. 15.
[Docker] 도커 볼륨, docker volume 도커 이미지로 컨테이너를 생성하면 이미지는 읽기 전용이 되고, 컨테이너의 변경 사항만 별도로 저장해서 각 컨테이너의 정보를 보존한다. 즉, 도커 이미지는 읽기만 가능하고 그 위에 컨테이너 레이어가 있어서 도커 컨테이너는 쓰기가 가능하도록 한 구조이다. 이미 생성된 이미지는 어떤 경우에도 변경되지 않는다. 컨테이너 계층에 원래 이미지에서 변경된 파일 시스템 등을 저장하게 된다. 도커 이미지에 mysql을 실행하는데 필요한 애플리케이션 파일이 들어있다면 도커 컨테이너에는 wordpress에서 쓴 로그인 정보, 게시글 등 데이터베이스를 운용하며 쌓이는 데이터가 저장이 되게 되는 것이다. 하지만 단점이 있다. myslq 컨테이너를 삭제하면 컨테이너 계층에 저장되어 있는 데이터베이스의 정보도 삭제가 된다. 도커의.. 2022. 2. 15.
[Docker] : 도커 애플리케이션 구축하기 docker run -d \\ --name wordpressdb \\ -e MYSQL_ROOT_PASSWORD=password \\ -e MYSQL_DATABASE=wordpress \\ mysql:5.7 mysql 이미지를 사용해 데이터베이스 컨테이너를 생성한다. docker run -d \\ -e WORDPRESS_DB_HOST=mysql \\ -e WORDPRESS_DB_USER=root \\ --name wordpress \\ --link wordpressdb:mysql \\ -p 80 \\ wordpress 미리 준비된 워드프레스 이미지를 통해 워드프레스 웹 서버 컨테이너를 생성한다. docker ps 명령어로 호스트의 어느 포트와 연결이 되었는지 확인할 수 있다. docker port word.. 2022. 2. 15.
반응형