본문 바로가기
반응형

분류 전체보기1065

[Docker] : Docker Private Registry, 사설 레지스트리 컨테이너 생성하기 사설 레지스트리 컨테이너 생성 Docker Private Registry(도커 사설 레지스트리)를 사용하면 개인 서버에 이미지를 저장할 수 있는 저장소를 만들 수 있다. docker run -d --name myregistry \\ -p 5000:5000 \\ --restart=always \\ registry:2.6 이 레지스트리는 컨테이너로 구현되서 도커에서 공식적으로 제공하는 이미지가 존재한다. run 명령어로 간단하게 사용만 하면 된다. —restart는 컨테이너가 종료되었을 때 재시작에 대한 정책을 설정합니다. always는 컨테이너가 정지 될 때 마다. 다시 시작하도록 설정하기 때문에 도커 호스트나 도커 엔진을 재시작하면 컨테이너도 함께 재시작 된다. —restart의 다른 입력은 on-fai.. 2022. 2. 23.
[TIL] : 119 일일 배움을 위한 Today I Learned ! Spring Boot 스프링 부트 공부를 했다. 서블릿 HTTP 세션을 활용해 로그인을 처리했고, 세션을 활용해 타임 아웃이나 설정하기도 한다. 2022.02.22 - [Framework/Spring Boot] - [Spring Boot] : 서블릿 HTTP 세션을 활용해 로그인 처리하기(1) 2022.02.22 - [Framework/Spring Boot] - [Spring Boot] : 서블릿 HTTP 세션을 활용해 로그인 처리하기(2) 2022.02.22 - [Framework/Spring Boot] - [Spring Boot] : Session TimeOut 설정하기 2022.02.22 - [Framework/Spring Boot] - [Sprin.. 2022. 2. 22.
[Docker] : 도커 허브(docker hub) 저장소를 통한 이미지 배포 📝 ← 도커 허브 저장소이다. 여기서도 마찬가지로 docker search 명령어를 입력한 것과 비슷하게 이미지를 검색할 수 있다. 회원 가입을 하고 레포지토리 생성 탭을 눌러준다. 설정해 주고 저장소를 생성한다. 비공개 저장소는 1개만 무료이다. 그 이상 사용을 원하면 결제가 필요하다. 정상적으로 생성이 되었다. docker run -i -t --name commit_container1 ubuntu:14.04 echo my first push >> test docker commit commit_container1 ohju96-image:0.0 방금 생성한 저장소에 이미지를 올려본다. ubuntu:14.04 이미지에 test라는 파일을 생성해 변경 사항을 만들고 ohju96-image:0.0이라는 이미지.. 2022. 2. 22.
[Docker] : 도커 이미지 배포하기 이미지를 생성해 다른 도커 엔진으로 배포할 떄 save나 export 명령어를 통해 배포하면 배포가 어려울 수 있다. 또한, 도커의 이미지 구조인 레이어 형태를 이용하지 않으면 매우 비효율적이다. 이것을 해결하기 위해 도커에서 공식적으로 제공하는 도커 허브 이미지 저장소를 사용하면 좋다. 쉽게 이미지를 저장하는 클라우드 서비스라고 이해하면 된다. 사용자는 이미지를 올리고(docker push) 내려받기(docker pull)만 하면 되서 매우 간단하다. 하지만 비공개는 유료라는 단점이 있다. 다른 방법으로는 도커 사설 레지스트리를 사용하는 것으로 사용자가 직접 이미지 저장소를 만드는 것이다. 하지만 사용자가 서버, 저장 공간을 관리해야 해서 도커 허브보다 사용하기 어렵다. 만약, 회사의 내부망 같은 곳에.. 2022. 2. 22.
[Docker] : 도커 이미지 추출하기 docker save -o ubuntu_14_04.tar ubuntu:14.04 도커 이미지를 단일 바이너리 파일로 저장해야 할 떄 docker save 명령어를 통해 컨테이너의 커맨드, 이미지 이름, 태그 등 이미지의 모든 메타데이터를 포함해 하나의 파일로 추출할 수 있다. -o 옵션은 추출될 파일명을 입력한다. docker load -i ubuntu_14_04.tar 추출된 이미지는 load 명령어로 도커에 다시 로드할 수 있다. load시 이전 이미지와 완전 동일한 이미지가 도커 엔진에 생성된다. save, load와 비슷한 명령어로 export, import가 있다. docker commit 명령어로 컨테이너를 이미지로 만들면 컨테이너 변경사항, detached 모드, 커맨드 등 설정도 이미지와 .. 2022. 2. 22.
[Docker] : 도커 이미지 이해 이미지 구조 이해 docker inspect ubuntu:14.04 docker inspect commit_test:first docker inspect commit_test:second inspect 명령어를 통해 컨테이너뿐만 아니라 네트워크, 볼륨, 이미지 등 모든 도커 단위의 정보를 얻을 수 있다. 이 명령어에서 가장 중요한 부분은 Layers 항목이다. docker images에서 위에 3개의 이미지가 각각 188MB로 출력이 되어도 188MB 크기의 이미지가 3개 존재하는 것은 아니다. 전체 이미지의 실제 크기는 188MB + first 파일의 크기 + second 파일의 크기가 된다. docker history commit_test:second 레이어의 구조는 history명령어를 통해 조금 .. 2022. 2. 22.
[JavaScript 30일 챌린지] : 26일차 마우스를 올리면 dropdown 방식으로 메뉴가 펼쳐지는 프로젝트이다. 홈페이지를 돌아다니다 보면 많이 보이는 방식인데 메뉴에 따라 크기도 알아서 바뀌는 모습을 볼 수있다. 2022. 2. 22.
[회고] : 22년 2월 이야기 1. 나와 나를 비교하는 회고 2. 하고 싶은 것이 늘었다. 3. 열심히 하지 않았다. 4. 전체적으로 공부하는 습관을 다시 한 번 잡고 가는 시기 5. TO-DO-LIST 6. 3월에 나는 어떤 공부를 할 것인지 7. 이상하게 요즘 너무 끌리는 게 있다. 8. 작년 딱 오늘, 내가 글을 쓰는 지금 이 날, 1. 나와 나를 비교하는 회고 방학의 끝이자 곧 입학해서 프로그래밍을 배운지 1년이 되는 날이 오고 있다. 2월의 회고는 나와 나를 비교하는 회고가 될 것이다. 1월과 비교하고 앞으로 올 3월과 비교할 것이다. 비교를 통해 얼마나 달라지지 않았고 얼마나 달라질 것인지에 대해 다시 한 번 생각을 해보는 회고가 될 것이다. 2. 하고 싶은 것이 늘었다. 1월과 2월을 비교했을 때 가장 먼저 머릿속에 떠오.. 2022. 2. 22.
[Spring Boot] : Servlet Filter 인증 체크하기 이번 강의에서 인증 체크 필터를 개발했다. 공모전을 진행할 때 Filter를 전혀 알지 못 하고 있었는데.. 역시 좋은 기술은 많다. private static final String[] whitelist = {"/", "/members/add", "/login", "/logout", "/css/*"}; 화이트 리스트라는 것을 우선 만들어 주었다. private boolean isLoginCheckPath(String requestURI) { return !PatternMatchUtils.simpleMatch(whitelist, requestURI); } 화이트 리스트는 이 로직을 통해 검증이 된다. 화이트 리스트일 경우 인증 체크를 하지 않도록 하여 로그인 페이지나 로그아웃 페이지 등 화이트 리스트에 .. 2022. 2. 22.
[Spring Boot] : Servlet Filter 요청 로그 확인하기 필터가 정상 작동하는지 확인하기 위해 모든 요청을 남기는 필터를 개발했다. public class LogFilter implements Filter 먼저 필터는 Filter 인터페이스를 구현해야 한다. ublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HTTP 요청이 오면 doFilter가 호출된다. ServletRequest request는 HTTP 요청이 아닌 경우까지 고려한 인터페이스인데 HTTP를 사용하면 HttpServletRequest httpRequest = (HttpServletRequest) request; 이렇.. 2022. 2. 22.
[Spring Boot] : Servlet Filter 컨트롤러에서 로그인 여부를 판단하려면 체크 로직을 일일이 전부 다 넣어줘야 했다. 실제로 내가 진행했던 팀 프로젝트에서 그런 식으로 로그인 체크 여부를 판단했는데 이렇게 했을 때 문제가 있다. 일단 바꿔줘야 하는 부분이 많으면 노가다성 작업이 필요하다는 것과 적용해야 하는 부분이 많으면 역시 노가다성 작업이 들어가야 하는 것...그리고 혹시 모를 놓치는 부분이나 코드가 바뀌는 경우가 생길 수 있다는 문제이다. 이렇게 전체적으로 적용해야 하는 부분을 공통 관심사라고 한다.(cross - cutting concern) 이런 공통 관심사는 스프링의 AOP로도 해결할 수 있지만 웹과 관련된 공통 관심사는 서블릿 필터나 스프링 인터셉터를 활용하는 것이 좋다고 한다. 서블릿 필터나 스프링 인터셉터는 HttpServ.. 2022. 2. 22.
[Spring Boot] : Session TimeOut 설정하기 세션이 제공하는 정보들을 로그를 찍어 확인해 본다. log.info("sessionId={}", session.getId()); log.info("maxInactiveInterval={}", session.getMaxInactiveInterval()); log.info("creationTime={}", new Date(session.getCreationTime())); log.info("lastAccessedTime={}", new Date(session.getLastAccessedTime())); log.info("isNew={}", session.isNew()); 위에서 부터 세션 ID, JESSIONID의 값 세션의 유효 시간 , 1800초 (30분) 세션 생성 일시 세션과 연결된 사용자가 최근에 .. 2022. 2. 22.
[Spring Boot] : 서블릿 HTTP 세션을 활용해 로그인 처리하기(2) @SessionAttribute를 통해 스프링에서 세션을 조금 더 편리하게 사용할 수도 있다. 이미 로그인 된 사용자를 찾을 때는 다음과 같이 사용하면 된다. @SessionAttribute = "loginMember", required=false) Member loginMember 이런 형식으로 사용하면 되는데 강의에서 활용한 것은 아래와 같다. public String homeLoginV3Spring( @SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { 전에 만들어둔 상수를 넣어준다. 세션에 회원 데이터가 없으면 home if (loginMember == null) .. 2022. 2. 22.
[Spring Boot] : 서블릿 HTTP 세션을 활용해 로그인 처리하기(1) 세션은 대부분 웹 애플리케이션에 필요한 개념이다. 서블릿은 세션을 위해 HttpSession이라는 기능을 제공하고 우리가 직접 구현한 것 보다 더 잘 구현되어 있다. | HttpSession 소개 서블릿이 제공하는 HttpSession도 강의에서 만들어 본 SessionManager와 같은 방식으로 동작한다. 서블릿을 통해 HttpSession을 생성하면 쿠키의 이름이 JSESSIONID이고 값은 UUID와 같은 값을 생성하게 된다. public static final String LOGIN_MEMBER = "loginMember"; 데이터를 보관하고 조회할 때 중복 사용되므로 상수 하나를 정의했다. //세션이 있으면 있는 세션 반환, 없으면 신규 세션 생성 HttpSession session = req.. 2022. 2. 22.
[TIL] : 118 일일 배움을 위한 Today I Learned ! Docker 도커 컨테이너 CPU 제한과 이미지에 대해서, 그리고 이미지를 생성하는 방법을 공부했다. 2022.02.21 - [Server & System/Docker] - [Docker] : 도커 컨테이너 CPU 제한 / --cpu-shares 활용하기 2022.02.21 - [Server & System/Docker] - [Docker] : 도커 컨테이너 CPU 제한 / --cpuset-cpu 활용하기 2022.02.21 - [Server & System/Docker] - [Docker] : 도커 컨테이너 CPU 제한 / --cpu-period, --cpu-quota 활용하기 2022.02.21 - [Server & System/Docker] - [D.. 2022. 2. 21.
[Spring Boot] : 직접 만든 세션 적용하여 로그인 처리하기 private final SessionManager sessionManager; 우선 전에 만든 sessionManager를 주입 받는다. @PostMapping("/login") public String loginV2(@Valid @ModelAttribute LoginForm form, BindingResult bindingResult, HttpServletResponse response) { if (bindingResult.hasErrors()) { return "login/loginForm"; } Member loginMember = loginService.login(form.getLoginId(), form.getPassword()); if (loginMember == null) { binding.. 2022. 2. 21.
[JavaScript 30일 챌린지] : 25일차 Event Capture, Propagation, Bubbling and Once에 대한 프로젝트이다. Bubbling은 요소의 이벤트가 시작되면 부모 요소부터 쭉 동작하게 된다. 마치 거품이 물 속에서 위로 올라가는 것과 비슷하다. once:true를 주면서 1회만 실행이 되도록 설정했다. 📝 이 페이지를 참고해서 공부했다. 2022. 2. 21.
[Docker] : 도커 이미지 생성 도커 이미지 생성 docker search를 통해 검색한 이미지를 pull 명령어로 내려받아 사용할 수도 있지만 도커로 개발하는 경우 컨테이너에 애플리케이션을 위한 특정 개발 환경을 직접 구축하고 사용자만의 이미지를 직접 생성해야 할 것이다. 이것을 위해 컨테이너에서 작업한 내용을 이미지로 만드는 방법을 알아본다. 이미지로 만들 컨테이너를 생성하고 컨테이너 내부에 first라는 이름의 파일을 생성해 기존 이미지로부터 변경 사항을 만들어 둔다. 호스트를 빠져나와 아래 명령어를 입력해 컨테이너를 이미지로 만들어 준다. commit_test라는 컨테이너를 commit_test:first라는 이름의 이미지로 생성한다. 장소 이름은 입력하지 않아도 상관은 없지만 이미지의 태그를 입력하지 않으면 자동으로 lates.. 2022. 2. 21.
[Docker] : docker images, 도커 이미지 및 이미지 검색 모든 컨테이너는 이미지를 기반으로 생성이 된다. 데비안 운영체제에서 apt-get install을 실행하면 apt 레포지토리에서 패키지를 내려받고, 레드햇 운영체제에서 yum install을 실행하면 yum 레포지터리에서 패키지를 내려받듯이 Docker Hub라는 중앙 이미지 저장소에서 이미지를 내려받는다. docker create, docker run, docker pull의 명령어로 이미지를 내려받을 때 도커는 도커 허브에서 해당 이미지를 검색한 뒤 내려받는다. 이미지는 대부분 도커 허브에서 공식적으로 제공하거나(ubuntu:14.04, centos:7 등) 다른 사람들이 도커 허브에 이미 올려놓은 경우(Apache Tomcat, Hadoop 등)가 대다수라 애플리케이션 이미지를 직접 만들지 않아도 .. 2022. 2. 21.
[Docker] : 도커 Block I/O 제한 컨테이너를 생성할 때 아무런 옵션도 설정하지 않으면 컨테이너 내부에서 파일을 읽고 쓰는 대역폭에 제한이 설정되지 않습니다. --device-write-bps --device-read-bps --device-write-iops --device-read-iops 위 옵션으로 입출력을 제한할 수 있다. Direct I/O의 경우에만 블록 입출력이 제한되고 Buffered I/O는 제한되지 않는다. --device-write-bps --device-read-bps 는 쓰고 읽는 작업의 초당 제한을 설정하고 kb, mb, gb 단위로 제한할 수 있다. docker run -it \\ --device-write-bps /dev/xvda:1mb \\ ubuntu:14.04 1MB로 초당 쓰기 작업의 최대치를 제한했다.. 2022. 2. 21.
[Docker] : 도커 컨테이너 CPU 제한 / --cpus 활용하기 --cpus --cpus 옵션은 --cpu-period, --cpu-quota와 동일한 기능을 하지만 조금 더 직관적으로 CPU의 개수를 직접 지정한다는 점에서 다르다. --cpus 옵션에 0.5를 설정하면 --cpu-period=100000, --cpu-quota=50000과 동일하게 컨테이너의 CPU를 제한할 수 있다. 컨테이너를 생성해 주고 확인을 해보면 CPU의 약 50%를 점유하고 있는 것을 확인할 수 있다. 병렬 처리를 위해 CPU를 많이 소모하는 워크로드를 수행해야 한다면 --cpuset-cpu 옵셩르 사용하는 것이 좋다. 특정 컨테이너가 특정 CPU에서만 동작하는 CPU 친화성을 보장할 수 있고 CPU 캐시 미스 또는 컨텍스트 스위칭과 같이 성능을 하락시키는 요인을 최소화 할 가능성이 높아.. 2022. 2. 21.
반응형