본문 바로가기

Java , Spring60

[Spring] 인증, 인가 - (쿠키, 세션, 토큰) 인증 식별 가능한 정보로 등록된 유저신원을 입증하는 과정 (회원가입/로그인) 인가 인증된 사용자에 대한 자원 접근 권한을 확인하는 과정 (권한부여) 즉 자원을 적절한 사용자에게 전달하기 위한 방법이다. (인증이 선행되어야 한다.) 구현하는방법은? stateless한 HTTP에서 인증과 인가를 어떻게 구현해야 할까? 크게 3가지 방법이 있다. 쿠키 세션 토큰 쿠키 1. 사용자가 로그인 요청을 서버에 보낸다, 서버에서 로그인 정보를 확인한다. 2. 인증이 완료되면 쿠키에 ID,PW(로그인 정보)를 담아서 사용자에게 전달한다. 이후 요청 부터는 사용자가 해당 쿠키를 이용하면 로그인 정보를 입력할 필요가없다 문제점 사용자의 정보를 쿠키에 담아서 사용하기 때문에 보안상 매우 취약하다 세션 1. 사용자가 로그인 요.. 2024. 2. 8.
[Java] UncheckedException과 CheckedException (Error와 Exception) Error와 Exception 먼저 Error와 Exception의 차이에 대해 알아보자 Error(오류)는 시스템이 종료되어야 할 수준의 상황과 같이 수습할 수 없는 심각한 문제를 의미한다. 개발자가 미리 예측하여 방지할 수 없다. Exception(예외)는 개발자가 구현한 로직에서 발생한 실수나 사용자의 영향에 의해 발생한다. 오류와 달리 개발자가 미리 예측하여 방지할 수 있기에 상황에 맞는 예외처리(Exception Handle)를 해야한다. Error의 예시 StackOverflowError : 호출의 깊이가 깊어지거나 재귀가 지속되어 stack overflow 발생 시 던져지는 오류 OutOfMemoryError : JVM이 할당된 메모리의 부족으로 더 이상 객체를 할당할 수 없을 때 던져지는 .. 2024. 1. 22.
[Spring] 선언적 트랜잭션 @Transactional @Transactional에 대해 알아보기 전에 트랜잭션이 무엇인지 먼저 알아보자 트랜잭션이란? 데이터베이스의 상태를 변화시키기 해서 수행하는 작업의 단위이다. 트랜잭션의 특징 (ACID) 원자성 (Atomicity) 트랜잭션 내에서 실행한 작업들은 하나의 작업으로 처리해야한다. (모두 성공하거나 모두 실패하거나) 일관성 (Consistency) 모든 트랜잭션은 일관성있는 데이터베이스 상태를 유지해야한다. (데이터베이스의 규칙을 지켜야한다) 지속성 (Durability) 트랜잭션이 성공적으로 끝나면 그 결과가 항상 기록되어야 한다. 격리성 (Isolation) 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 격리한다. 트랜잭션은 원자성, 일관성, 지속성을 보장하지만 격리성을 완벽히 보장하기 위해서.. 2024. 1. 22.
[Java] 커넥션풀과 데이터소스(DataSource) 데이터베이스 커넥션 데이터베이스 커넥션을 얻기 위해서는 매우 복잡한 과정이 필요하다.(TCP/IP의 3 way handshake 등) 데이터 베이스에 접근하기 위해 접근할때 마다 커넥션을 만들어서 사용하면 속도가 매우 느려진다. 커넥션풀 해당 문제를 해결하기위해 커넥션을 미리 생성해두고 필요할떄 해당 커넥션을 할당 받아 사용하는 커넥션풀 방식을 사용한다. DataSource DataSource는 커넥션을 획득하는 방법을 추상화한 인터페이스이다. 커넥션을 얻는 방법이 변경될때 코드를 변경해야하는 문제를 해결하기 위해 DataSource 인터페이스를 만들었다. 핵심 기능은 커넥션을 조회하는 getConnection 이다. public interface DataSource { Connection getConn.. 2024. 1. 19.
[Java] 서블릿과 스프링에서의 MVC HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 서블릿 이란? 서블릿이란 동적 웹페이지를 만들때 사용되는 자바 기반의 웹 어플리케이션 프로그래밍 기술이다. urlPatterns의 URL이 호출되면 서블릿 코드가 실행된다. HTTP 요청 정보를 사용할 수 있는 HttpServletRequest와 응답 정보를 제공하는 HttpServletResponse 객체가 있다, 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다. 웹 브라우저에서 HTTP 요청메시지를 보낸다. WAS에서 해당 요청메시지를 기반으로 request와 response 객체를 만들어서 servlet 객체를 호출한다. 호출한 servlet 객체에 request, response 객체를 같이 넘겨준다. r.. 2024. 1. 18.
[Java] call by value, call by reference 함수를 호출 방법은 Call by value(값에 의한 호출), Call by reference(참조에 의한 호출)이 있다. Call by value 함수 호출시 넘기는 인자값이 매개변수에 복사돼서 함수 내에서 매개변수의 값을 변경해도 복사된 값이 변경되는것이다. 즉, 함수 내에서 값을 변경해도 원본값은 변경되지 않는다. Call by reference 엄밀히 말하면 call by reference도 인자의 값이 매개변수에 복사가 되지만, 복사되는 값이 데이터의 주소값이라는 차이점이 존재한다. c에서 call by value를 사용하고 원본값의 변경을 위해 call by reference를 사용할떄는 포인터를 이용해서 사용했었다. Java Java에서는 객체를 전달 받고 해당 객체를 수정하면 원본도 같이.. 2024. 1. 18.
[Java] String.valueOf() 와 toString() String.valueOf() String.valueOf()는 모든 데이터 타입을 안전하게 문자열로 변환할 수 있는 일반적인 방법 특히 null 값을 처리할 때 유용하다. String.valueOf(null)은 "null" 문자열로 변환되어 예외를 방지할 수 있다. 기본적인 문자열 변환에 사용되며, 추가적인 형식이나 사용자 정의 문자열 표현이 필요하지 않은 경우에 유용합니다. toString() toString()은 기본적으로 객체의 클래스 이름과 해시 코드를 나타낸다. 오버라이드를 하여 자유롭게 구현할 수 있다. (자유도가 높다) null값 처리 불가 ⭢ NPE 발생 class Person { private String name; private int age; public Person(String na.. 2024. 1. 17.
[Java] Garbage Collection Garbage Collection이란 가비지 컬렉션이란 자바의 메모리 관리 방법으로 JVM의 Heap영역에서 동적으로 할당된 메모리중 필요 없어진 메모리 객체를 자동으로 주기적으로 제거하는 프로세스이다. Garbage Collection의 장단점 장점 메모리 누수를 방지할수있다. 이미 해제한 메모리를 다시 해제하거나, 해제한 메모리에 다시 접근하는 오류들을 방지할수있다. 단점 개발자가 메모리가 언제 해제되는지 정확히 알수가 없다, 오버헤드로 인한 성능저하가 발생할수있다. Garbage Collection 대상 그렇다면 어떤 객체가 GC의 대상이 되는것일까? 객체는 Reachable과 Unreachable 로 나누어지는데 객체가 참조되고 있는 상태면 Reachable, 참조되고있지않으면 Unreachabl.. 2024. 1. 15.
[Java] JIT 컴파일러 (인터프리터와 컴파일) JVM을 공부하다 보니 JIT 컴파일러에 대해 나와 찾아보게되었다.https://bangbaeking.tistory.com/87 [Java] JVM , Java compiler, Java 코드 실행과정 JDK,JRE,JVMJVM이란? Java Virtual Machine 자바 가상 기계이다. Java는 운영체제에 종속적이지 않고, 작성된 Java 코드가 JVM에서 OS가 해석할수있는 bytecode로 변환해준다. ( OS에 종속적이지 않다 - 맥에서 작성된 Javabangbaeking.tistory.com 파이썬 같은 언어는 인터프리터 방식을 사용하고 한줄씩 기계어로 변환, C/C++은 컴파일러를 사용하고 한번에 전체를 기계어로 변환한다. 정도로 알고있었는데 Java는 어떤 방식으로 진행되는지, JIT .. 2024. 1. 12.