목록분류 전체보기 (82)
고딩왕 코범석
Garbage Collection C / C++언어와 달리, 자바는 개발자가 직접 객체를 메모리 공간에서 해제할 일이 없다. 더 이상 참조하지 않는 객체를 자동으로 삭제하는 작업을 Garbage Collection 이라고 부르며, JVM에서 수행한다. 참고로 GC를 해도 더이상 사용 가능한 메모리 영역이 없는데 계속 메모리를 할당하려 하면, OutOfMemoryError가 발생하여 WAS가 다운될 수 있다. JVM의 Runtime Date Area는 Method, Heap, Method Stack, PC Register, Native Method Stack 이렇게 5개의 영역이 존재하지만 GC는 Heap 영역만 다룬다. 일반적으로 메모리 영역에 해제되는 객체는 다음과 같다. 객체가 Null인 경우 블럭 ..
Java Virtual Machine 역할? 자바 애플리케이션을 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행하며, Java와 OS 사이에서 중개자 역할을 담당하여, OS에 구애받지 않고 재사용이 가능하다. 그리고 전반적으로 메모리 관리, Garbage Collection 기능을 수행한다. 실행 과정 프로그램 실행 시, JVM은 OS로 부터 이 프로그램이 필요로 하는 메모리를 할당 받음. 이 때, JVM은 이 메모리를 용도에 따라 여러 영역으로 나눠 관리 자바 컴파일러(javac)가 자바 소스 코드(XXX.java)를 읽어 들여 바이트코드(.class)로 변환 Class Loader를 통해 .class 파일들을 JVM으로 로딩 로딩된 class 파일들은 실행 엔진에 의해 해석 해석된 바이트코드는..
안녕하세요! 이번 포스팅에서는 AWS VPC 환경을 구축해보겠습니다. 먼저 이번 포스팅 진행 순서는 VPC 개념 VPC 구축 의 순서로 진행해보겠습니다. VPC 개념 VPC(Virtual Private Cloud) 개념 VPC는 사용자가 정의하는 가상 네트워크 입니다. 만약, EC2를 VPC 없이 생성하게 된다면 구분 없는 연결로 인해 복잡도가 늘어나며 비효율적일 것입니다. 만약 이 VPC를 통해 하나의 네트워크 공간에 묶어서 자원들을 할당한다면 묶은 네트워크 공간을 구분할 수 있고, 이 공간에 따라 설정할 수 있을 것입니다. 그림으로 표현해보면 아래와 같습니다. 이 VPC를 구축하기 위해서는 사설 아이피 대역으로 맞춰야합니다. 사설 아이피는 우리끼리 사용하는 아이피 주소 대역이며, 내부 네트워크 내에서..
안녕하세요! 이번 포스팅에서는 1편에 이어 로그인, 로그아웃, 토큰 재발급, 권한 체크를 위한 간단한 회원 정보 조회를 구현해보겠습니다. 보다 자세한 코드는 제 깃허브 를 참조해주세요! JWT 기반으로 요청 및 토큰이 만료되었을 경우에 대한 플로우를 그림으로 표현해보았습니다. 이 과정에 필요한 기능은 다음과 같습니다. 로그인 (accessToken을 발급 받고, refreshToken을 Redis에 저장하기 위해) 로그아웃 (accessToken의 남은 유효기간 동안 redis에 logoutAccessToken을 저장하여 해당 토큰으로 접근 하는 것을 금지시키기) 토큰 재발급 (토큰은 유효 기간이 있기 때문에, 기간이 지났을 경우를 위해 redis에 저장한 refreshToken의 남은 만료 기간에 따라..
안녕하세요! 이번 시간에는 Spring Security와 Redis를 활용하여 JWT 기반 로그인 기능을 구현해보겠습니다. 저는 예전에 Spring Security로 JWT만 주는 부분까지 구현한 적이 있습니다. 하지만 Redis를 활용하여 Refresh 토큰을 주는 기능과 로그아웃을 구현하지 못했습니다. 이번에 소마에서 저와 같이 프로젝트한 백엔드 동료가 Redis를 활용해 refresh, logout까지 구현을 해서 시큐리티 복습을 겸해 포스팅을 진행하겠습니다. 보다 자세한 코드는 제 깃허브 를 참조해주세요! 우선, 이번 포스팅에서 개발할 기능은 다음과 같습니다. 설정과 기본 프로젝트 셋팅 회원가입 설정과 기본 프로젝트 셋팅 build.gradle plugins { id 'org.springf..
안녕하세요! 이번 포스팅에서는 Querydsl로 하나의 부모 객체에 있는 여러 자식들을 DTO로 받아보는 시간을 가져보겠습니다. 우선, 예제에 사용될 엔티티 클래스들과 구조를 살펴보겠습니다. 그림으로 먼저 확인한 다음 엔티티 코드를 보겠습니다. 하나의 회원은 여러 주소를 가질 수 있고, 여러 게시글을 가질 수 있는 구조입니다. 이 구조를 바탕으로 전체 회원들의 주소와 게시글들을 DTO로 가져오는 예제를 만들어보겠습니다. 코드를 보면 명확하게 이해될겁니다 :) Member.java @Entity @Getter @NoArgsConstructor(access = PROTECTED) @AllArgsConstructor(access = PROTECTED) @Builder public class Member { @..
안녕하세요! 이번 포스팅에서는 JPA에서 Insert를 할 경우 여러 데이터들을 어떻게 한번의 네트워크 통신으로 Insert하는지 알아보겠습니다. 사전 준비 JPA 프로젝트 MySQL 그리고, 디렉토리와 코드들은 다음과 같습니다. applicatoin.yml spring: datasource: url: jdbc:mysql://localhost:3306/test username: root password: driver-class-name: com.mysql.cj.jdbc.Driver Api.java @RestController @RequiredArgsConstructor public class Api { private final ArticleService articleService; private fina..
안녕하세요! 이번 포스팅에서는 스프링에서 주로 사용되는 디자인 패턴인 템플릿 메서드 패턴, 전략 패턴, 템플릿 콜백 패턴에 대해 정리해보려 합니다. 가정 상황 이 세 가지 패턴을 설명드리기 앞서 이 포스팅에서는 두 수와 연산(더하기, 빼기 등등..)명령을 입력 받고 수식을 출력한 후 그에 대한 결과를 출력해야하는 상황을 가정하고 디자인 패턴을 설명드리겠습니다. 템플릿 메서드 패턴 정의 동작 상의 알고리즘의 뼈대를 정의하고, 알고리즘의 구조를 변경하지 않고 변하는 부분을 다시 정의할 수 있는 디자인 패턴 우선, 해당 패턴에서 두 수와 연산 명령을 입력받고 연산식과 결과를 출력하는 함수를 추상 클래스로 두겠습니다. @Slf4j public abstract class AbstractCalculate { pub..