Old Posts226 [Linux] DNS에서 'CNAME'과 'A 레코드(A Record)'의 차이 블로그의 2차 주소를 관리할 때, 가비아나 후이즈 같은 DNS를 이용한다. DNS에서 커스텀 도메인을 사용할 때, 서브 도메인을 등록하기 위해서 CNAME과 A 레코드 같은 정보를 관리 페이지에서 등록하게 된다. CNAME과 A 레코드 모두 서브 도메인을 등록하기 위해 필요한 정보인데 정확히 어떤 차이가 있는지 알아 둘 필요가 있다. DNS (Domain Name System) 우선 DNS(Domain Name System)부터 알아야한다. 인터넷을 구성하고 있는 서버들은 IP 주소가 할당되어 있다. IPv4의 경우 192.168.0.1 같은 숫자로 구성되어 있다. 이 IP 주소를 알면 특정 서버에 접속할 수 있다. 하지만 IP 주소는 의미가 없는 유니크 값에 불과하다. 때문에 사용자들이 외우기 힘들다... 2021. 2. 16. [Linux] 톰캣(Tomcat) 재시작 명령 아파치 톰캣을 이용하는 시스템을 운영하다가 배포에 문제가 생겼다. 구동중인 톰캣을 재시작해야 할 일이 생겼는데, 어떤 명령으로 톰캣을 재시작 할 수 있는지 찾아봤다. 톰캣이 설치된 디렉토리를 $TOMCAT_HOME이라고 할 때, 톰캣과 관련된 바이너리는 $TOMCAT_HOME/bin 디렉토리에 모여있다. 톰캣을 재시작하는 명령은 이곳에 있는 스크립트를 실행하는 것으로 대체할 수 있다. $ $TOMCAT_HOME/bin/shutdown.sh $ $TOMCAT_HOME/bin/start.sh 종료후 시작 명령을 날려주면 된다. $ ps -aux | grep {user id} | grep tomcat 이 명령을 실행하면 현재 머신에서 로그인한 사용자 계정으로 구동시킨 톰캣 서버의 프로세스 정보를 확인할 수 있.. 2021. 2. 11. [Java] computeIfAbsent 예제 Map을 사용할 때 굉장히 빈번하게 사용하는 코드 패턴이 있다. Map map = new HashMap(); Value value = map.get(key); if (value == null) { value = getNewValue(key); map.put(key, value); } Map에서 특정 키에 해당하는 값이 존재하는지 확인한 후, 없으면 새로 만들어서 넣어주는 형태의 코드다. Key 값에 해당하는 Value가 존재하면 가져와서 사용하고 없으면 새로 만들어주는 패턴의 코드를 위해 Java 8에서는 computeIfAbsent()라는 메소드를 이용해서 짧게 구현할 수 있다. Map map = new HashMap(); Value value = map.computeIfAbsent(key, k -> .. 2021. 1. 19. Base64 인코딩이란? '인코딩(Encoding)'이란 데이터로 저장되어 있는 정보는 유지하면서 데이터의 형태를 바꾸는 과정을 의미한다. 데이터의 표현을 다른 형태로 변경하는 것을 인코딩이라고하며, 반대로 원상태로 되돌리는 것을 '디코딩(Decodning)'이라고 한다. 동영상을 특정 포맷으로 변환하는 것처럼 데이터의 표현 방식을 변환하는 것을 '인코딩'이라고 한다. Base64 인코딩 Base64는 바이너리 데이터를 텍스트 형태로 변환해주는 인코딩 알고리즘이다. Base64를 그대로 직역하면 64진법이라는 뜻이다. 바이너리 데이터를 64진법으로 변환한 다음 64개의 숫자에 64개의 문자(A-Z, a-z, 0-9 등)를 대응해서 텍스트로 만드는 인코딩 방식이다. Base64 인코딩은 다음과 같이 진행된다. 3바이트 바이너리를 .. 2021. 1. 8. Java NIO - Pipe 파이프(Pipe)는 두 스레드를 연결해주는 'One-way' 데이터 커넥션이다. 파이프(Pipe)에는 데이터를 쓸 수 있는 싱크채널(Sink Channel)과 데이터를 읽어가는 소스채널(Source Channel)이 있다. 싱크채널에 데이터를 써주면 파이프를 통해 소스채널로 전달되고, 다른 스레드가 소스채널을 통해 데이터를 읽을 수 있다. Pipe pipe = Pipe.open(); 우선 파이프 객체를 가져온다. Pipe.SinkChannel sinkChannel = pipe.sink(); String data = "Send message"; ByteBuffer buffer = ByteBuffer.allocate(64); buffer.clear(); buffer.put(data.getBytes()); b.. 2021. 1. 6. Java NIO - 네트워크 입출력 (SocketChannel, ServerSocketChannel, DatagramChannel) Java NIO를 이용해서 네트워크 입출력을 구현할 수도 있다. 파일 입출력과 함께 핵심적인 기능이다. Java NIO에서 제공하는 네트워크 관련 채널은 다음과 같다. SocketChannel (TCP 클라이언트) ServerSocketChannel (TCP 서버) DatagramChannel (UDP 통신) 1. SocketChannel Java NIO는 SocketChannel을 통해 TCP 연결을 지원한다. SocketChannel을 만드는 방법에는 두 가지가 있다. connect() 메소드로 서버 연결 accept() 로 클라이언트 연결 SocketChannel channel = SocketChannel.open(); channel.connect(new InetSocketAddress("local.. 2021. 1. 5. Java NIO - 파일 다루기 (Files 클래스) Java NIO에는 파일을 손쉽게 다룰 수 있는 유틸성 메소드를 모아둔 Files 라는 클래스가 있다. 주로 Path 인터페이스와 함께 사용해서 파일과 디렉토리를 다루는데 사용된다. Files.exists() 주어진 Path에 해당하는 파일이 파일시스템에 존재하는지 여부를 확인한다. Path path = Paths.get("/tmp/test.txt"); boolean exists = Files.exists(path, LinkOption.NOFOLLOW_LINKS); Path 객체를 가져와서 Files.exists() 메소드의 첫 번째 인자로 넘겨준다. 두 번째 인자로 준 LinkOption.NOFOLLOW_LINKS는 exists() 메소드가 파일 경로를 찾아갈 때 심볼릭 링크는 따라가지 않겠다는 의미다.. 2021. 1. 3. Java NIO - 파일 읽기 쓰기 (FileChannel, Path) Java NIO를 이용해서 파일을 다룰 수 있는 클래스와 예제 코드를 소개하겠다. 1. FileChannel 파일에서 데이터를 읽고 쓸 수 있는 채널이다. 파일 채널을 생성하기 위해서는 IO의 FileInputStream, FileOutputStream의 getChannel()메소드를 호출하거나 RandomAccessFile의 getChannel() 메소드로 열 수도 있다. // RandomAccessFile 이용 RandomAccessFile file = new RandomAccessFile("testFile.txt", "rw"); FileChannel channel1 = file.getChannel(); // FileInputStream 이용 FileInputStream fis = new FileIn.. 2021. 1. 2. Java NIO - Selector '셀렉터(Selector)'는 하나의 스레드가 여러개의 채널을 관리할 수 있게해주는 NIO 컴포넌트다. NIO는 셀렉터라는 메커니즘을 제공하여 하나 이상의 NIO 채널들을 모니터링하고, 데이터 전송이 가능해지는 상황을 인지할 수 있게 해준다. Java NIO - 셀렉터를 사용하는 이유 3개의 클라이언트 연결이 붙어 있는 서버 프로그램을 생각해보자. 서버에는 3개의 소켓채널(SocketChannel)이 열려있을 것이다. 클라이언트는 자기가 보내고 싶을 때 요청을 보내기 때문에 서버는 클라이언트의 요청을 기다려야한다. 가장 쉬운 방법은 클라이언트마다 스레드를 생성해서 붙여주는 방법이다. 각 스레드는 클라이언트와 연결된 채널에서 기다린다. 즉, 새로운 요청이 올 때까지 채널에 블로킹되어 있다. 서버 프로그램을.. 2021. 1. 1. 이전 1 ··· 21 22 23 24 25 26 다음