목록분류 전체보기 (279)
HwangHub
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/q4iEM/btsoxqhoDNp/ipZOVKfKo9ub1vZKrksm7K/img.png)
우리는 도커허브로부터 이미 만들어진 이미지만 받아서 사용할 수 있는 게 아니고, 우리가 직접 이미지를 만들어서 사용하거나, 도커 허브에 올려서 공유할 수도 있습니다. 우리가 지금까지 학습한 컨테이너는 도커 이미지를 통해 생성하며, 컨테이너 생성 명령어는 아래와 같습니다. docker create 그렇다면 도커 이미지는 어떻게 생성할까요? 1. Dockerfile 작성 도커파일은 도커 이미지를 만들기 위한 config 파일입니다. 컨테이너가 어떻게 행동해야 하는지에 대한 설정값들을 정의해줍니다. 2. 도커 클라이언트에 전달 도커 파일에 입력된 것이 도커 클라이언트에 전달합니다. 3. 도커 서버에 전달 도커 서버는 도커 클라이언트에 전달된 중요한 작업들을 모두 처리하는 곳으로, 위 단계에서 도커 클라이언트에..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bYW6UM/btsowtZS1wA/sDPGy7oQkoe6IwJeLygt4K/img.png)
현재 실행중인 컨테이너 나열 : ps docker ps 여기서 ps는 process status라는 의미 컨테이너 생성 후 실행 : run (== create + start) docker run == docker create + docker start create 명령어를 통해 반환된 로그가 컨테이너 아이디입니다. 이를 일부만 복사하여 start -a 커맨드 뒤에 이어 붙여둬도 도커가 알아서 알아듣습니다. 여기서 옵션 a는 attach를 의미합니다. 옵션 a는 도커 컨테이너가 실행이 될때, 실행되는 컨테이너에 붙어서 반환되는 값들을 콘솔에 보내줍니다. 컨테이너 중지 : stop & kill 컨테이너를 중지하기 위해서는 다음 명령어를 사용할 수 있습니다. 1. docker stop 2. docker kil..
![](http://i1.daumcdn.net/thumb/C150x150/?fname=https://blog.kakaocdn.net/dn/bXg0vI/btsowcRx3B6/mnCF9XNFZaaKmnhAMmcHx1/img.png)
도커는 기본적으로 CLI에 커맨드를 입력하는 방식으로 사용할 수 있습니다. 내부적으로는 도커에서 제공하는 CLI를 이용하여 도커 데몬이라고 불리는 도커 서버에 명령을 내려서 이미지를 생성, 컨테이너 실행과 같은 작업을 수행하게 됩니다. 커맨드 입력해보기 1. 도커 데스크탑이 실행되고 있는지 확인합니다. Docker Desktop이 실행되고 있어야 도커 커맨드를 사용할 수 있습니다. 2. 윈도우 기준 git bash 터미널을 열고, docker run hello-world 명령어를 입력해봅니다. 위 명령어를 뜯으면 다음과 같습니다. - docker : 도커 클라이언트 호출 - run : 컨테이너 생성 및 실행 - hello-world : 컨테이너 생성을 위한 이미지 지정 run hello-world 명령어..
도커를 요즘 여기저기서 상당히 대중적으로 사용하고 있는데, 도대체 도커가 뭐길래 대다수의 회사에서 적용하고 있는 걸까요? 도커란 무엇인가? 도커는 프로그램을 실행하는 환경이 달라서 발생할 수 있는 이슈를 최소화하기 위해 도와주는 도구입니다. 즉, 도커를 활용하면 사용자가 프로그램을 실행하는 환경을 도커의 "이미지"와 "컨테이너"를 통하여 개발자의 의도에 맞게 실행 환경을 통제할 수 있게 됩니다. 다시 제대로 설명하자면, 도커는 "컨테이너"를 사용하여 어플리케이션을 더 쉽게 제작 및 배포, 실행할 수 있도록 도와주는 오픈소스 가상 플랫폼입니다. 따라서 "컨테이너"라는 개념을 이해할 수 있어야 합니다. 개발을 어느정도 하다보면 내 컴퓨터에서는 잘 되던 프로그램이 동일한 소스코드를 가지고도 다른 컴퓨터에서는 ..
기본적으로 두 좌표 사이의 거리의 제곱을 구하는 문제이므로 피타고라스 정리를 이용할거기 때문에 맨해튼 거리를 활용하고자 했다. 1차 시도 : 실패 실수했던 점은, 맨해튼 거리로 구하는 과정에서 답을 도출하기 전에 좌표간의 x거리와 y거리가 둘다 더 작은 경우에만 더 짧은 거리가 나올 거라고 가정한 것이다. 이제와서 생각하면 당연하게도, x거리가 기존에 구해둔 비교 대상의 거리보다 길어도 y거리가 현저히 짧으면 두 점 사이의 거리는 더 작아질 수 있다. 이를 간과하고 로직을 설계했었다. 2차 시도 : 성공 package 코드트리.완전탐색.물체탐색; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamRead..
정말 많은 백엔드 엔지니어 공고를 보면 레디스 사용 유무에 대한 우대를 확인할 수 있습니다. 그렇다면 현업에서는 레디스를 적극적으로 도입하고, 사용하고 있다는 것인데요. 레디스가 도대체 무엇이길래 현업에서 이를 하나의 솔루션으로써 활용하는지를 알아보려고 합니다. Redis란 무엇인가? 레디스(Redis; REmote Dictionary Server)는 시스템 메모리를 활용하여 Key-Value 형식으로 비관계형 데이터를 저장하는 데이터베이스(NoSQL)인 데이터 관리 시스템입니다. 모든 데이터를 메모리에 저장하기 때문에 Relational DB (ex. RDS) 또는 Document DB (ex. MongoDB) 와 같은 데이터베이스를 활용하여 데이터를 처리하는 것보다 훨씬 빠르고 가볍게 데이터를 조회할..
많은 이들이 김영한님의 JPA 강의를 시작으로 스프링 첫걸음을 떼기 때문에, 자연스럽게 엔티티 모델링을 진행할 때 wrapper class를 사용하는 것이 익숙할 겁니다. 하지만 한번쯤은 고민해볼 필요가 있는 것이 wrapper class 사용의 이유 입니다. 왜 우리는 지금까지 wrapper class로 필드를 구성해온 것일까요? Wrapper class wrapper class는 자바가 기본적으로 제공하는 원시 타입의 자료형을 '객체'로서 사용하기 위해 고안된 클래스입니다. 여기서 우리가 주목해야 할 차이점은 wrapper class는 초기화하지 않으면 null이 되지만, 원시 타입은 0과 같이 기입된다는 점입니다. 즉, 원시 타입으로 엔티티 필드를 구성하면 null 가능성이 아예 차단되는데, wra..
우리가 프로젝트를 진행할 때, 로컬 환경에서 테스트할 때와 개발 단계에서 프론트엔드와의 협업을 위해 개발 서버에 배포할 때나, 그리고 실제 릴리즈를 진행했을 때 모두 그 실행 환경이 다른 경우가 많다. 따라서 스프링에서는 이를 "프로파일 분리"라는 개념으로 환경 설정을 구분하여 적용할 수 있게 하였다. 근데 이게 스프링부트 버전업이 진행됨에 따라, 2.4버전에서 급격하게 변화가 있었나보다. 단적인 예시로, 이전에는 spring.profiles 또는 include를 이용하여 프로파일 설정을 하였다고 한다. 나는 미래를 살아가는 개발자로서, 굳이 deprecated된 기능을 연구해볼 필요는 없을 것 같고, 현재 어떻게 활용할 수 있는지만 보려고 한다. (물론 과거의 패턴 또한 알면 좋지만, 내가 지금 알아야..
출처: https://cerulean85.tistory.com/149 객체와 인스턴스의 차이 * 자의적인 해석이므로 논란의 여지가 있음 객체와 인스턴스의 차이를 알아보니 블로그마다 말이 다르다. 어떤 블로거는 인스턴스는 객체와 같지만, 관계적인 측면에서 이야기할 때 객체 대신 cerulean85.tistory.com 객체(Object)는 소프트웨어 세계에 구현할 대상이고, 이를 구현하기 위한 설계도가 클래스(Class)이며, 이 설계도에 따라 소프트웨어 세계에 구현된 실체가 인스턴스(Instance)이다. 객체(Object)는 현실의 대상(Object)과 비슷하여, 상태나 행동 등을 가지지만, 소프트웨어 관점에서는 그저 콘셉(concept), 즉 사유의 결과일 뿐이다. 소프트웨어에서 객체를 구현하기 위해..
입력 조건이 아래와 같으므로 완전탐색을 하기에 충분하였다. 1 ≤ N,H ≤ 100 1 ≤ T ≤ min(N,10) 0 ≤ 밭의 높이 ≤ 200 풀이 코드 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Arrays; import java.util.NoSuchElementException; import java.util.StringTokenizer; public class Main { private static int[] arr; private static int[] ans; public static void main(String[] args) throws ..