Learn business

    AWS EC2 Java 설치

    Java 설치 가능한 리스트 검색 yum list java* 로컬 개발 환경에서 java11 버전을 사용하고 있기 때문에 java-11-amazon-corretto.x86_64를 설치합니다. 설치 sudo yum install java-11-amazon-corretto.x86_64 확인 java -version

    JWT란?

    JSON Web Token 이란? JSON Web Token은 아래와 같은 형태로 보여집니다. (가독성을 위해서 개행이 포함됐습니다.) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9. eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWV9. TJVA95OrM7E2cBab30RMHrHDcEfxjoYZgeFONFh7HgQ 위 문자열은 아주 간결하고, claim들을 출력(표현)할 수 있도록 대표하며, 문자열 자체의 진위를 검증하는 서명을 포함하고 있습니다. JWT("jot")는 당사자 간(Server ↔ Client, MSA 등)에 정보(claims)를 JSON 객체로 안전하게 전송하기 위한 간결한 개방형 표준(RFC 75..

    Packet Switching을 사용하면 왜 Loss나 Delay가 발생할까?

    컴퓨터가 없는 세상은 상상도 못할 만큼 우리 생활 깊숙히 자리잡고 있습니다. 컴퓨터를 통해 다른 사람과 소통하는건 너무나도 자연스럽고 당연한 일입니다. 이렇게 컴퓨터를 통해 각지의 세계 사람들과 소통하고 수 많은 정보를 습득할 수 있는 것도 바로 네트워크 덕분입니다. 네트워크란 무엇일까요? 네트워크는 net과 work가 합쳐진 말입니다. 하드웨어끼리 마치 그물망 처럼 연결되어 데이터들을 주고 받는 집단 이라고 볼 수 있습니다. Network-Core / Network-Edge / Link 위 그림을 보면 수많은 점들이 연걸되어있습니다. 위 그림을 크게 Network-Core / Network-Edge / Link로 나눠볼 수 있습니다. Network-Core 흔히 말하는 Router들이 존재합니다. (R..

    Enum과 Generic 함께 사용하기

    개요 코드를 단순하게 만들면서 가독성을 높히기 위한 개발을 하다보면 Enum 타입을 사용하는 것은 흔하게 일어납니다. 또한 if / else 문 사용을 지양하는 방향으로 코드를 만들다 보면 Enum 클래스에 추상 메소드나 인터페이스를 구현하는 일도 마주하게 될 것입니다. 저 역시 조금 더 클린한 코드를 만들기 위해 Enum 클래스를 많이 사용하는데요. 최근에 회사에서 맡은 프로젝트를 진행하면서 Enum 타입을 생성하고 인터페이스를 상속 받아서 각 타입별로 상속 받은 메소드를 구현하고 있었습니다. 그런데 Enum 타입에 정의한 상수별로 각각 다른 타입의 객체를 리턴해주고 싶은 니즈가 생겼습니다. 그 내용을 아래에 공유하고자 합니다. 인터페이스를 구현한 Enum 클래스 ViewAreaBanner 인터페이스를..

    Bash Terminal을 세련되게(Mac)

    👍 이번 블로그에서는 테마, Powerline, 폰트, Powerline-gitstatus를 추가하여 위의 첨부한 이미지와 같이 일반 Base Terminal을 아름답고 유용하게 보이게 하는 방법을 단계별로 살펴 보겠습니다. Mac에서 아마 기본 Terminal.app을 실행시키면 위와 같은 모습일 것입니다. 자, 그럼 바로 테마와 폰트 등을 적용해봅니다. 💪 Step 1. 새로운 테마 적용하기 첫 번째는 새로운 테마를 적용해 보는 것입니다. 기본 Terminal.app을 이용해서 개발을 하기에는 약간 개발력(?)이 떨어집니다. 그리고 무엇보다 저와 같은 서버 개발자들은 Terminal.app을 사용할 일이 많기 때문에 이왕이면 간지(?)가 나는 Terminal.app으로 개발하고 싶을 것으로 예상합니다..

    자바 클래스패스

    이전부터 스프링으로 웹 서비스를 개발할 때 테스트 코드를 짜는 것에 대한 중요성은 일찍히 알고 있었다. 테스트 코드를 만들다 보면 항상 봉착하는 문제가 있었는데 내가 설정한 빈 파일 혹은 JSON과 같은 파일을 어떻게 찾아야 하는지였다. 이럴 땐 항상 이미 성공한 다른 코드를 복붙하기에 바빴다. 그러면서 클래스 패스가 무엇인지 정확하게 모른 채 넘어갔었는데 이번 기회에 부셔보자. 1. 클래스 패스(classpath) 클래스 패스는 쉽게 말해 JVM이 프로그램을 실행할 때 클래스를 찾기 위한 기준이 되는 경로라고 생각하면 간단하다. 만약 클래스 패스를 설정하지 않았다면 디폴트는 현재 경로를 바라보게 된다. 우리가 많이 사용하는 intellij IDE도 클래스 패스를 설정하지 않으면 기본적으로 현재 경로에서..

    Java Socket Server/Client (TCP 통신)

    HTTP 스터디 과제로 Client로부터 요청 받은 내용을 그대로 출력하는 Echo Server를 만드는 과제를 진행하였다. 인터넷 검색을 하면 자료가 워낙 많아서 쉽게 찾아할 수 있었지만, 역시나 내 것으로 만드려면 포스팅이 제맛이다. HTTP는 OSI에서 Application 계층에서 동작하는 프로토콜이다. 이미 학부 시절 네트워크 수업에서 배웠겠지만 Client와 Server의 네트워크 통신은 OSI 계층 구조를 가지고 있으며 Client 프로세스와 Server 프로세스의 통신이라고 보면 된다. 데이터를 보내는 경우 상위 계층에서 하위 계층으로 데이터는 멀티플렉싱되며, 데이터를 받는 입장에서는 하위 계층에서 상위 계층으로 디멀티플렉싱된다. java.net.* 패키지에서 제공해주는 인터페이스를 통해서..

    CORS 이슈 해결 :: Spring Security

    프로젝트를 진행하면서 CORS 이슈가 발생하여 포스팅을 하면서 정확히 이해하였다. 그러나 스프링 시큐리티를 쓰는 프로젝트에서 Preflight 방식에 이슈가 생겨서 그 내용을 공유하고자 한다. 이전 포스팅의 방식대로 CORS 정책에 맞게 코딩을 하였다. 그러나 Spring Security를 사용하는 서비스에서 Preflight Request 방식으로 요청을 할 때, OPTIONS 메소드 방식으로 요청을 하면 Spring Security에서 권한이 없다고 AccessDeniedExeption을 발생시키는 이슈였다. 이번 포스팅에서 Spring Security에서 Preflight Request 방식을 어떻게 해결하였는지 공유하고자 한다. 문제의 시작 위 코드를 보면, Filter를 상속 받아서 CORS 정..

    CORS 이슈 해결

    CORS 이슈가 발생한 상황을 예제 코드를 통해서 확인하고 서버 사이드에서 해당 이슈를 어떻게 해결하는지 확인해도록 하자. 이전 포스팅은 CORS에 대한 개념에 대한 전반적인 내용 설명이었다면, 이번엔 예제 코드를 통해서 눈으로 직접 확인해보자. 참고로 웹 브라우저는 Firefox를 사용하였다. 그 이유는 Chrome에서는 기본적으로 Access-Control-Max-Age의 최소 값을 10분(600초)으로 설정해놔서 테스트를 하면서 계속 기다려야했기 때문이다. Chrome에서 Access-Control-Max-Age를 설정한 이유는 이전 포스팅에서도 언급하였지만, Preflight Request는 많은 리소스를 소비하기 때문이다. 예제 테스트는 UI서버와 API서버를 포트를 다르게 로컬에서 띄운 상태에..

    CORS 정책

    어드민의 GNB(Global Navigation Bar) 영역을 개발하면서 script 태그 내에서 Cross-Origin 으로 요청을 보내야하는 상황이 있었는데, 구글링을 통해서 해결책을 찾았지만 원하는 대로 되지 않아서 고생한 적이 있다. 앞으로 같은 상황일 때 삽질하는 시간을 줄일 수 있도록 포스팅을 한다. CORS은 Cross-Origin Resource Sharing 의 약자로 W3C에서 내놓은 정책이다. 의미를 해석을 해보면 Cross-Origin의 Resrouce를 공유하는 정책이라고 볼 수 있을 것 같다. 모질라에 있는 CORS의 정의를 빌려오자면 CORS는 특정 헤더를 통해서 브라우저에게 한 출처(origin) 에서 실행되고 있는 웹 애플리케이션이 다른 출처(cross-origin)에 원..