전체 글 34

[TWIL] 웹 어플리케이션 아키텍처의 기초 (EC2/WAS/DOCKER)

📌 개요하나의 웹 어플리케이션을 완성시키기 위해서 각각의 구성요소들이 어떤 역할을 하는지 정확히 알아야 한다고 생각한다.'EC2에 내 스프링부트 프로젝트를 올리기만 하면, 웹 서버 만든거 아님?' 이라고 생각했던 과거의 나 자신을 반성하며간단히 Amazon EC2, WAS, Docker에 대해 알아보고자 한다. 1️⃣  EC2EC2(Amazon Elastic Compute Cloud)는 단순히 AWS로부터 컴퓨터 한대를 빌려서 쓰는 개념이다.조립식 컴퓨터를 첫 구매했을때를 떠올려보라. 열심히 조립하고 부팅하면 정말 아무것도 없는 것을 볼 수있다. EC2도 마찬가지로 운영체제(Ubuntu, Amazon linux) 등을 설치 후에WAS와 DB를 올리고 나서야 애플리케이션을 실행할 수 있는 환경이 조성된다..

Programming/TWIL 2025.02.16

[Java/Spring] 리플렉션이 DI컨테이너에서 동작되는 과정

DI 컨테이너에서 리플렉션의 실제 동작(1) 클래스 정보를 로드DI 컨테이너는 애플리케이션 시작 시, 관리할 클래스(스프링에서는 @Component, @Service 같은 어노테이션이 붙은 클래스)를 탐색합니다.리플렉션을 사용해 클래스의 정보를 읽어들입니다.(2) 의존성 정보 추출리플렉션으로 클래스의 필드, 생성자, 메서드 등을 탐색하여 의존성을 추출합니다.예를 들어, 특정 필드에 @Inject 어노테이션이 붙어 있다면, DI 컨테이너는 해당 필드가 주입 대상임을 알게 됩니다.(3) 객체 생성클래스의 생성자를 리플렉션으로 호출하여 객체를 생성합니다.예를 들어, UserRepository가 필요하면 DI 컨테이너는 UserRepository의 Class 객체를 이용해 런타임에 인스턴스를 만듭니다.(4) 의..

[Java] 컴파일 시점과 런타임 시점의 차이

DI 컨테이너가 리플렉션을 사용하여 동작하는 원리에 대해 읽다가,문득 컴파일 시점과 런타임 시점이 나뉜 이유가 궁금해졌다. 근본적으로 컴파일/런타임을 이해하지 못해서 리플렉션도 잘 이해하지 못하고 있는 것 같아서두 개의 차이를 알아보고자 한다.1. Complie과 Runtime컴파일 시점 (Compile-Time)코드가 작성된 후, 컴파일러에 의해 바이트코드로 변환되는 시점이다.주요 작업:문법 오류 체크.타입 검증 (예: 변수 타입과 메서드 호출이 올바른지 확인).클래스 파일(.class) 생성.결과물: JVM이 실행할 수 있는 바이트코드(.class 파일)가 생성된다.런타임 시점 (Runtime)컴파일된 바이트코드를 JVM이 실행하는 시점이다.주요 작업:JVM이 클래스 로더(ClassLoader)를 통..

[Servlet/Spring] Filter, Interceptor, AOP의 차이

필터(Filter):서블릿 컨테이너 레벨에서 동작.스프링 프레임워크와 독립적으로 동작하며, DispatcherServlet 이전에 요청을 처리합니다.주로 인증, 로깅, CORS 설정 등에 사용.인터셉터(Interceptor):Spring MVC 레벨에서 동작.DispatcherServlet과 컨트롤러 사이에서 요청을 처리하거나 가로챕니다.주로 요청 전/후의 처리 로직에 사용.AOP:스프링 컨테이너 내부의 스프링 빈에만 적용됩니다.특정 메서드 호출 전/후 또는 예외 발생 시 로직을 삽입합니다.주로 트랜잭션 관리, 로깅, 권한 검사, 캐싱 등에 사용됩니다.

[Java] Java 버전에 따른 핵심 변경 사항 (Java8)

Java는 크게 Java8, Java11, Java17 에서 핵심 기능이 변경되었다.먼저 Java8의 핵심 변경 사항부터 알아보자.🤍 Lambda Expression (람다식)람다식은 익명함수를 정의하는 간결한 방법이다. 즉, 이름이 없는 함수를 표현하기 위한 문법이다.기본 문법 (매개변수) -> {실행코드}사용람다식은 함수형 인터페이스을 통해 사용됨함수형 인터페이스메소드가 하나만 존재하는 인터페이스@FuctionalInterface 애노테이션함수형 인터페이스임을 명시적으로 표현🤍Stream AP스트림(Stream)스트림은 데이터의 흐름이다.스트림은 한 번만 소비할 수 있다.스트림의 특징선언적 프로그래밍: '무엇을 할 것인가'에 집중하며, '어떻게 구현할 것인가'는 신경쓰지 않음.원본 데이터를 변경하..

[JavaScript] JS 기초 중에서 기초, DOM 구조에 대해서 알아보자

사이드 프로젝트를 진행하며 프론트에 백엔드 api를 연동하려고 하니document라는 객체를 상당히 자주 사용하게 되었다.document라는 객체는 무엇일까? 이 객체를 알기 위해선 DOM 구조 먼저 알아야한다. 🤍DOM(Document Object Model)이란?HTML 문서를 브라우저가 읽었을 때, JavaScript가 접근하기 쉬운 객체 구조로 변환한 것을 DOM이라고 한다.  안녕하세요 저는 LazyCat입니다.위에 HTML 문서를 브라우저가 읽으면 아래와 같은 DOM 구조로 변환된다. document       ㄴhtml               ㄴhead                      ㄴtitle               ㄴbody                      ㄴ..

[Git] Git의 3가지 영역

🤍Git의 3가지 영역 Working Directory (= Working tree)설명: 개발자의 작업 공간파일 상태: Untracked -> Modified Staging Area설명: 커밋이 되기 전에 변경된 파일들을 모아두는 임시 영역Working Directory에서 git add 명령어를 통해 파일을 이동시킬 수 있음파일 상태: Staged Repository설명: 최종적으로 파일이 커밋되어 버전 이력으로 저장되는 공간git commit 명령어를 통해 옮겨진 파일들파일 상태: Committed

JPA의 변경감지를 이용한 회원 수정 메소드 변경

🤍JPA의 '변경감지'란?영속성 컨텍스트에 의해서 관리되는 엔티티들은, 별도의 save 메소드를 호출하지 않고도 엔티티의 상태가 변경되면 자동으로 DB에 반영됩니다.또한 변경감지는 @Transactional 내에서 작동합니다. 🤍@Transactional 이 필요한 이유@Transactional은 트랜잭션의 시작과 종료를 관리하며, JPA의 변경 감지(Dirty Checking)가 제대로 작동하도록 보장합니다. 트랜잭션이란?- 여러 작업을 하나의 작업 단위로 묶음- ACID(Atomiciy, Cosistency, Isolation, Durability) 속성 보장- 작업 중 예외 발생시 롤백 처리 영속성 컨텍스트란?- JPA에서 엔티티를 관리하는 캐시 영역- 엔티티가 영속성 컨텍스트에 들어오면 영속상..

[Spring] HandlerMethodArgumentResolver

🤍 HandlerMethodArgumentResolver 인터페이스Spring MVC에서 컨트롤러 메소드의 매개변수를 동적으로 바인딩하기 위해 사용되는 인터페이스입니다.  🤍 사용 목적Spring MVC는 HTTP 요청이 컨트롤러로 들어올 때, 요청 데이터를 기반으로 컨트롤러 메서드의 매개변수를 생성하고 주입하는데, 이 과정에서 기본 제공되는 바인딩 로직 외에 사용자 정의 로직을 추가하고 싶을 때 이 인터페이스를 사용합니다. 간단히 말해서, 지원하지 않는 매개변수 바인딩 로직을 구현하기 위해 사용됩니다. 🤍 주요 메소드1. supportsParameter(MethodParameter parameter)특정 매개변수가 이 리졸버에 의해 처리될지 결정한다true 반환 시, 해당 매개변수는 이 리졸버에서..

회원가입 API 중복 요청 방지: Redis를 활용한 해결법

🤍 문제상황회원가입 버튼을 두번 연속으로 눌렀다가, 쿼리가 두번 연속으로 날아가며 중복된 email값이 데이터베이스에 저장됨.중복된 email 데이터로 인해 로그인 시 오류가 발생함  🤍 해결방법 : Redis회원가입 비즈니스 로직이 실행되는 순간, 이메일이 Redis에 10분간 저장되도록 코드 추가 public void signUp(SignupRequestDto signupRequestDTO){ String email = signupRequestDTO.getEmail(); //이메일 중복검사 isEmailDuplicate(email); //요청 중복 방지 isRequestDuplicate(email); //비밀번호 암호화 String passw..

반응형