가상화란? 하나의 물리적인 컴퓨터 하드웨어를 사용하여 여러 개의 가상적인 환경을 생성하고 실행하는 기술이나 방법을 말합니다. 이러한 가상 환경은 가상 머신(VM, Virtual Machine)이라고도 불리며, 각 가상 머신은 독립된 운영체제와 응용 프로그램을 실행할 수 있습니다. 하나의 물리머신 상에서 복수의 시스템(게스트 OS)을 동시 운영한다. 가상화 이전에는 하나의 애플리케이션만 운영할 수 있었음. 가상화 이후에는 애플리케이션들이 OS위에 바로 올라가는 것이 아니라 각기 다른 가상 머신 위에 올라갑니다. 그럼 어떻게 다른 OS들을 사용할 수 있을까? 각각의 OS는 ‘커널’이라는 것이 존재하는데, 커널은 하드웨어 리소스를 관리하고, 명령어를 해석하는 역할을 합니다. 하지만, OS마다 명령어를 해석하는..
저번 포스팅에서는 세션 기반 인증 방식의 문제점에 대해서 알아봤습니다. https://doreree.tistory.com/27 세션 인증 방식과 토큰 인증 방식 하나의 서버로 이루어진 단일 서버 환경에서는 Session을 이용한 로그인 유지에 대해 불편함을 못 느꼈습니다. 하지만, Scale Out을 통해 백엔드 서버를 총 3대를 운영하고 있는 상태에서 새로운 사 doreree.tistory.com 서버 요청에 따라 Scale Out 했을 경우 세션 불일치 문제가 발생합니다. 이번 포스팅에서는 Spring Boot를 통한 코드 작성과 직접 서버에 배포하는 과정을 통해 어떻게 세션 불일치 문제가 발생하는지 알아보도록 하겠습니다. 세션관리 테스트 환경 서비스는 Spring Boot로 작성하였습니다. Spri..
Jenkins Jenkins CI/CD의 장점 Jenkins는 오픈소스 CI/CD 도구로 다양한 플러그인과 함께 빌드 자동화 기능을 제공합니다. 우리의 소스코드는 GitHub나 GitLab에서 관리되고 Jenkins에서는 WebHook 이벤트를 통해 CI/CD가 가능합니다. 다양한 설정 옵션을 제공하며 팀의 요구사항에 맞게 자유롭게 구성할 수 있습니다. Jenkins CI/CD의 단점 Jenkins를 위한 별도의 서버와 설치 번거로움이 존재합니다. CI/CD를 담당하는 별도의 서버가 필요하며 설치 시 Context Path 문제로 Nginx의 Reverse Proxy가 제대로 동작하지 않는다는 문제와 다양한 플러그인 설치 등 해야 할 작업들이 많았습니다. 배포 스크립트 문법 배포 파이프라인 작성을 위해 ..
MyBatis MyBatis는 데이터베이스와 자바 객체 간의 매핑을 쉽게 처리하기 위해 개발된 오픈 소스이며 ORM(Object-Relational Mapping) 프레임워크입니다. 기존의 JDBC(Java Database Connectivity)를 이용한 방식을 간결하고 편리하게 사용할 수 있도록 도와주는 도구입니다. ORM이란?? ORM은 Object-Relational Mapping 약어로 객체와 관계형 데이터베이스 간의 매핑을 자동화해주는 프로그래밍 기법을 의미합니다. 객체 지향 프로그래밍 언어는 클래스와 객체로 구성된 구조를 가지고 있습니다. ORM은 이 둘 간의 패러다임 불일치를 해결하기 위해 사용됩니다. MyBatis와 ORM?? ORM은 객체와 관계형 데이터베이스 간의 매핑을 자동화하여 개..
객체 지향 프로그래밍의 장점 (실세계를 보고 경험을 바탕으로!) 프로그램을 보다 유연하고 변경이 용이하게 만들 수 있다는 장점이 있습니다. 마치 컴퓨터 부품을 갈아 끼울 때, 해당하는 부품만 쉽게 교체하는 것처럼요. 또한 코드의 재 사용을 통해 반복적인 코드를 최소화합니다. 객체(Object) 모든 실재하는 대상을 의미합니다. 객체는 속성과 기능으로 나누며 각각은 변수(variable)와 메서드(Method)로 정의하고 있습니다. [ 메서드 오버라이딩과 메서드 오버로딩 ] 1. 메서드 오버라이딩 (Method Overriding) 상속받는 클래스 메서드의 내용을 재정의 2. 메서드 오버로딩 (Method Overroading) 같은 이름의 메서드를 중복하여 정의하는 것 메서드 오버로딩의 예시 - 생성자 ..
하나의 서버로 이루어진 단일 서버 환경에서는 Session을 이용한 로그인 유지에 대해 불편함을 못 느꼈습니다. 하지만, Scale Out을 통해 백엔드 서버를 총 3대를 운영하고 있는 상태에서 새로운 사용자가 Server1에 접속하여 세션이 생성되었습니다. 이때 Server2, Server3는 해당 회원의 세션 정보를 알지 못합니다. 그럼 유저는 요청을 보낼 때마다 매번 인증을 위해 다시 로그인을 해야하는 문제가 발생합니다. 이렇게 서버 간에 세션을 공유하지 않는 상태를 Session 불일치 문제라고 합니다. Session 불일치 문제 해결하기 1. Sticky Session 방식 특정 유저의 요청을 최초로 그 요청을 처리해준 서버로만 보내주는 방식 예를 들어, 사용자가 Server1으로 세션을 생성하..
지난번 포스팅에서 JWT 토큰의 유효성 검사 로직을 처리하기 위해서 Filter와 Interceptor 중 어떤 것을 사용해야하는지 알아보았습니다. https://doreree.tistory.com/25 [Spring] Interceptor 와 Filter의 개념 및 차이점 JWT를 이용한 회원 인증같은 공통된 로직을 처리하기 위해 Spring에서 어떤 것을 사용해야하는지 의문이 들었습니다. Spring에서는 공통된 작업을 처리하여 중복 코드를 제거할 수 있도록 많은 기능 doreree.tistory.com 회원 API에 공통적으로 들어가있는 JWT 토큰의 유효성 검사 로직에 대한 중복 코드 문제를 Spring Interceptor를 이용해서 해결하려고 합니다. 아래는 중복 코드에 대한 예시입니다. 해당..
JWT를 이용한 회원 인증같은 공통된 로직을 처리하기 위해 Spring에서 어떤 것을 사용해야하는지 의문이 들었습니다. Spring에서는 공통된 작업을 처리하여 중복 코드를 제거할 수 있도록 많은 기능들을 제공하는데, 대표적인 필터(Filter) 와 인터셉터(Interceptor)의 개념과 차이에 대해 알아보려고 합니다. Filter (필터) 필터는 스프링의 독자적인 기능이 아닌 자바 서블릿에서 제공하는 기능입니다. 디스패처 서블릿 (Dispatcher Servlet)에 요청이 전달되기 전/후 url 패턴에 맞는 모든 요청에 대해 부가작업을 처리할 수 있는 기능을 제공합니다. 여기서 Dispatcher Servlet 이란 !? 스프링에 가장 앞단에 존재하는 Front Controller로 모든 클라이언트..