[Java] 자바 컴파일 과정
·
Development & Projects/Java
자바는 다양한 운영체제에서 동일한 코드로 실행되는 OS에 독립적인 특징을 가지고 있습니다. 이것이 가능한 이유는 JVM(Java Vitual Machine) 덕분입니다. JVM(Java Vitual Machine)의 어떠한 기능 때문에 OS에 독립적으로 실행시킬 수 있는지 자바 컴파일 과정을 통해 알아보도록 하겠습니다. 자바 컴파일 과정 순서① .java 파일 작성개발자는 자바 소스코드 파일을 작성합니다.② javac 컴파일러 → 바이트코드 생성 (.class 파일)작성된 소스 파일은 자바 컴파일러(javac)에 의해 컴파일되어 .class 파일이 생성됩니다.이 .class 파일에는 바이트코드(Bytecode) 라는 중간 형태의 코드가 들어 있습니다.이 코드는 CPU가 직접 실행할 수 있는 기계어가 아..
[Spring Boot] @Valid 유효성 검사가 되지 않을 때
·
Development & Projects/Java
앱에서 비밀번호 재설정을 구현하던 중 비밀번호 유효성 검사가 되지 않고 있다는 것을 깨달았습니다 ..다시 확인해보니 기존에 회원가입 시 비밀번호 입력에도 유효성 검사가 되지 않았고, 회원가입을 구현할 때에 확인을 한 것 같았는데 다시 코드를 확인해보니 DTO도 문제가 없고 컨트롤러에도 @Valid가 적용되어 있음에도 유효성 검사가 되지 않았습니다 .. 패키지 import를 잘못한 건가 확인도 해봤지만 다 올바르게 되어 있었고, 해결 방법을 찾아보다 bulid.gradle에서 implementation 'org.hibernate.validator:hibernate-validator:6.0.13.Final' 를 제거하니 정상적으로 유효성 검사가 되었습니다. Spring Boot는 spring-boot..
[Spring boot] @Transactional 이란?
·
Development & Projects/Java
1. 트랜잭션이란?트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 작업 단위를 말합니다. 쇼핑몰에서 주문을 처리할 때, 주문 정보 저장, 재고 감소, 결제 처리가 모두 성공해야만 전체 주문이 완료됩니다. 이 세 가지 작업을 하나의 트랜잭션으로 묶어서 처리하면, 중간에 문제가 생겼을 때 모든 작업을 원래대로 되돌릴 수 있습니다.트랜잭션은 다음 네 가지 특성(ACID)을 가집니다.원자성(Atomicity): 트랜잭션 내의 모든 작업은 전부 성공하거나 전부 실패합니다.일관성(Consistency): 트랜잭션이 완료된 후에도 데이터베이스는 일관된 상태를 유지해야 합니다.격리성(Isolation): 동시에 실행되는 트랜잭션들은 서로 영향을 미치지 않습니다.지속성(Durability): 트랜잭션이 성공적으..
[Spring Boot] GlobalExceptionHandler 예외 처리
·
Development & Projects/Java
Global Exception이란?Global Exception(전역 예외 처리)이란, 애플리케이션 전반에서 발생하는 예외를 한 곳에서 통합적으로 처리할 수 있는 방식입니다.일반적으로 Spring MVC 기반 웹 애플리케이션에서는 컨트롤러나 서비스 계층에서 다양한 예외가 발생할 수 있습니다. 이를 각각의 코드에서 try-catch로 처리하다 보면중복 코드가 많아지고예외 메시지나 응답 포맷이 제각각이며유지보수 난이도가 올라갑니다.👉 이 문제를 해결하기 위해 스프링에서는 @ControllerAdvice (또는 @RestControllerAdvice)와 @ExceptionHandler를 활용하여 예외를 전역적으로 처리할 수 있습니다. 어노테이션설명@ControllerAdvice모든 컨트롤러의 예외를 가로채 ..
[Spring Security] UsernamePasswordAuthenticationFilter Authentication Flow
·
Development & Projects/Java
UsernamePasswordAuthenticationFilter는 Spring Security에서 사용자가 로그인할 때 인증을 처리하는 핵심적인 필터입니다. UsernamePasswordAuthenticationFilter가 Spring Security 인증 과정에서 어떻게 동작하는지 알아보겠습니다. 1. Spring Security와 인증 Spring Security는 Spring 기반 애플리케이션에서 보안을 처리하는 프레임워크로, 인증(authentication)과 권한 부여(authorization) 기능을 제공합니다. 이 중에서 인증 과정은 사용자의 아이디와 비밀번호를 확인하여 시스템에 접근할 수 있는지 판별하는 과정입니다. UsernamePasswordAuthenticationFilter는 S..
[Spring] Spring Security CSS 적용 안되는 오류
·
Development & Projects/Java
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { return http .authorizeHttpRequests((authorizeRequests) -> // 3. 인증, 인가 설정 authorizeRequests .requestMatchers("/login", "/signup", "/user").permitAll() // login, signup, user는 인증 없이 접근 가능 .anyRequest().authenticated..
[Spring] Spring Security
·
Development & Projects/Java
Spring SecuritySpring Security is a powerful and highly customizable authentication and access-control framework. It is the de-facto standard for securing Spring-based applications. Spring Security is a framework that focuses on providing both authentication and authorizspring.io  Spring Security는 강력하고 고도로 사용자 정의 가능한 인증 및 접근 제어 프레임워크이다. Spring 기반 애플리케이션의 보안을 위한 사실상의 표준이며, Java 애플리케이션에 인증과 권한 부여를..
[Spring] 개방-폐쇄 원칙 (OCP, Open Closed Principle)
·
Development & Projects/Java
* "김영한님의 코드로 배우는 스프링 부터, 웹 MVC, DB 접근 기술" 강의를 듣고 배운 점을 기록한 글입니다.  실습 중 기존 MemoryMemberRepository에서 JdbcMemberRepository로 교체하여 JDBC 기반의 데이터 저장소를 사용하도록 변경하였다. MemberRepository라는 추상화된 인터페이스를 사용해 확장 가능하도록 설계되었다. MemberRepository 인터페이스를 사용하여 의존성을 관리했기 때문에, 기존 코드(MemberService)를 수정하지 않고도 데이터 저장 방식을 변경할 수 있다. 소프트웨어 공학 시간에 배운 OCP를 준수하여 실제로 코드 구현까지 해보니 인터페이스를 활용한 설계의 중요성을 직접 체감할 수 있었다. +) 스프링의 DI를 활용하면 더..