JVM이란 Java Virtual Machine의 줄임말로 자바를 실행하기 위한 가상 머신이라고 할 수 있다. Java는 OS에 종속적이지 않다는 특징을 가지고 있는데 그 이유는 JVM이 OS 위에 있는 구조 이기 때문이다.Java 컴파일러는 .java 파일을 .cla
실제로 개발을 하면서 많이 발생하는 예외 중 하나가 NPE(NullPointerException)이다. NPE를 예외 처리 하기 위해서는 null 여부를 확인해야 하는 처리가 많이 들어가게 되는데 그러한 경우에는 코드가 복잡하거나 지저분해 질 수 있다. 그래서 Java
String, StringBuffer, StringBuilder는 문자열을 관리하는 클래스로 각 각의 특징이 있는데 그 특징을 한번 정리를 해보았다.String 클래스의 가장 큰 특징은 불변성이다. 여기서 불변성이란? 객체가 생성된 이후 그 상태를 변경할 수 없는 것을
primitive type은 Java에서 변수를 비교할 수 있는 기능을 제공해 주지만 새로운 클래스 객체를 만들어 비교하고자 할 때 객체는 사용자가 기준을 정해주지 않는 이상 어떤 객체가 더 높은 우선순위를 갖는지 판단 할 수가 없다. 이러한 문제를 해결 하기 위해 등
메서드의 이름은 같고 매개변수의 갯수나 타입이 다른 함수를 정의하는 것을 의미한다.리턴값만을 다르게 갖는 오버로딩은 작성 할 수 없다.상위 클래스의 메서드를 하위 클래스가 재정의 하는 것이다.메서드의 이름은 물론 파라메터의 갯수나 타입도 동일해야 하며, 주로 상위 클래
추상 클래스는 하위 클래스들의 공통점들을 모아 추상화하여 만든 클래스추상 클래스는 다중 상속이 불가능하여 단일 상속만 허용한다.추상 클래스는 추상 메소드 외에 일반클래스와 같이 일반적인 필드, 메서드, 생성자를 가질수 있다.같은 추상화인 인터페이스와 다른점은, 추상 클
euqals와 == 은 기본적으로 두 개의 대상을 비교해 boolean 타입으로 반환한다는 공통점이 있다.그리고 분명한 차이점도 있는데 그 내용을 정리해 보았다.== 은 연산자 중에 하나이며, equals는 메소드이다. 사용 방법은 밑과 같다.==은 비교하고자 하는 대
클래스 내에 static 키워드가 붙은 변수이다.JVM이 실행되면서 클래스가 로드 될 때 부터 프로그램이 종료될 때 까지 유지된다.클래스가 로드될 때 처음 한 번만 생성된다.모든 클래스에 공유된다.객체가 생성될 때 변수가 생성된다.객체가 사라지면 변수도 사라진다.
자바의 메인메서드를 작성할 때는 위와 같은 구조로 작성을 한다. 그 이유가 무엇인지 정리를 해보았다.public은 접근제어자로 어느 클래스에서든 해당 객체를 참조할 수 있다는 뜻 이다. JVM(Java Virtual Machine)이 접근 하기 위해서 public을 사
가비지 컬렉션은 불필요한 메모리를 정리를 해주는 프로세스로 알고 있다. 이번에는 가비지 컬렉션에 대해 더 자세히 알아보고 정리를 해보았다.메모리가 언제 해제되는지 정확하게 알 수 없다.가비지 컬렉션이 동작하는 동안에 다른 동작을 멈추기 때문에 오버헤드가 발생한다.GC를
이번에는 Annotation을 정리를 해보았다. Annotation은 사전적 의미로 주석을 의미한다.하지만 일반적인 주석과 다르게 Annotation은 코드를 작성할 수 있다.Annotation은 주석이기 때문에 런타임에 판단해서 값을 넣을 수 가 없으므로 컴파일러 수
이번에는 함수를 호출 할 때 파라미터를 넘기는 방법으로 Call by Value와 Call by Reference에 대해서 정리를 해보았다.파라미터로 복사한 값을 넘기는 방법으로 인수와 파라미터가 서로 다른 변수로 존재하는 방식이다.파라미터로 넘어온 값을 수정을 하여도
알고리즘을 공부하면서 입력값을 받을 때 Scanner, BufferedReader를 사용하게 된다. 이번에 알고리즘 문제를 풀면서 메모리 초과가 났을 때 입력 방식을 Scanner에서 BufferedReader로 교체 하니 메모리 문제가 해결이 되었다.이를 계기로 Sc
프로세스란 애플리케이션을 실행하면 운영체제로부터 실행에 필요한 메모리를 할당받아 애플리케이션이 실행되는데, 이를 프로세스라고 한다. 하나의 애플리케이션은 멀티 프로세스를 만들기도 합니다. 예를 들어 메모장 애플리케이션을 2개 실행했다면 2개의 메모장 프로세스가 생성된
알고리즘 문제를 풀이하면서 시간초과가 발생하는 경우가 있다. 그런 경우에는 풀이를 위한 알고리즘 선택이 잘못된 경우도 있지만 출력에서 시간이 오래걸리는 경우도 있다.백준 1406번 에디터 문제를 풀면서 생겼던 문제점과 이를 해결하는 과정을 기록해보았다.문제의 내용은 링
이 번에는 equals() 작동에 궁금점이 생겨 공부한 내용을 정리해보겠다.equals()하면 == 과의 비교가 대표적으로 떠오른다. equals()는 값에 대한 비교를 하며 == 은 참조하는 주소를 비교한다. 그럼 equals()는 실제로 값 비교를 어떻게 하는 지에
알고리즘을 공부하면서 HashMap에 대해서 학습하고 사용해 본 경험이 있습니다. 그런데 최근에 레퍼런스를 참고하는 과정에서 LinkedHashMap을 자주 보게되었습니다. 이번 기회에 LinkedHashMap에 대해서 학습한 내용을 정리해보겠습니다. LinkedHashMap LinkedHashMap에 대해서 정리하기 전에 간단하게 Map에 대해서 정리해...
이 번에는 안전한 멀티 스레드 환경을 만들기 위해 Java에서 제공하는 ConcurrentHashMap에 대해 학습한 내용을 정리해보겠습니다.ConcurrentHashMap은 Java에서 동시성 기능을 제공하는 Map 자료구조입니다. 먼저 간단하게 테스트를 진행한 후에
JWT 새로운 토이 프로젝트를 하면서 JWT를 도입하였습니다. 앞으로 시리즈로 각 단계별 과정을 정리해보겠습니다. 우선 프로젝트에서 인증을 진행하는 과정은 다음과 같습니다. 프론트엔드에서 소셜 로그인 처리를 한 후 로그인이 성공하면 유저 정보를 백엔드로 보낸다.
지난 편에서는 Access Token 발급을 구현하였고 포스트맨으로 Access Token 값이 정상적으로 반환되는 것을 확인할 수 있었습니다.이번에는 발급 받은 Access Token을 활용하여 인증을 처리하는 로직을 구현하고 테스트를 해보겠습니다.MemberSecu
저번 시간까지 Access Token 발급, 인증 처리를 구현하였습니다. 이번에는 Refresh Token 발급에 대해 구현을 하고 테스트를 진행해보겠습니다.Refresh Token이 도입된 배경은 다음과 같습니다.Access Token을 짧은 유효 기간으로 설정하면
저번 시간에는 Refresh Token 발급에 대해 구현을 하고 테스트를 진행하였습니다.이번에는 Refresh Token을 활용해서 Access Token을 재발급 받는 로직을 구현하고 테스트를 진행해보겠습니다.AuthController는 재발급을 처리하는 기능이 있습
지난 시간을 끝으로 JWT의 주요 기능은 구현을 마무리하였습니다. 이번에는 Refresh Token의 보안을 높일 수 있는 로직을 구현하고 테스트를 진행해보겠습니다. Refresh Token의 경우에는 유효기간이 Access Token과 비교하면 상당히 길게 설정되어있
마지막 Logout입니다. 클라이언트에서 로그아웃을 요청했을 때 지금까지 구현된 내용에서는 별도로 처리를 해주어야 하는 필요가 있습니다.서버에서는 현재 Redis에 저장된 Refresh Token을 삭제해주고 쿠키를 초기화해주는 작업이 필요합니다.로그아웃을 처리하기 위
JAVA 비동기