개발바닥곰발바닥
반응형
article thumbnail
[JAVA] Reflection (리플렉션)이란?
JAVA 2022. 11. 17. 03:56

Java Reflection 리플렉션 이란? 리플렉션은 Java의 기능으로 구체적인 클래스 타입을 알지 못하더라도 그 클래스의 메서드, 필드, 타입 등에 접근할 수 있도록 도와주는 API이다. 리플렉션은 직접 접근할 수 없는 private 인스턴스 변수와 메서드에 접근할 수 있다. 리플렉션의 사용처 리플렉션은 클래스를 런타임에 동적으로 사용해야 할 때 필요하다. 컴파일 시점에는 어떤 클래스를 사용해야 할지 모르는 경우 런타임 시점에 클래스를 가져와서 실행해야 할 때 사용한다. 대표적으로 사용되는 곳으로는 IntelliJ의 자동완성, Hibernate, Spring Framework의 BeanFactory 등의 프레임워크나 라이브러리에서 주로 사용되고 있다. 리플렉션의 원리 Java에서는 모든 .class..

article thumbnail
Servlet과 ServletContainer
JAVA/Spring 2022. 11. 3. 02:01

Servlet 서블릿이란 클라이언트 요청을 처리하고, 그 결과를 반환하는 웹 프로그래밍 기술로 자바로 구현된 CGI (Common Gateway Interface)이다. 이전의 웹 프로그램들은 클라이언트의 요청에 대한 응답으로 이미 만들어진 정적인 페이지를 넘겨주었지만 웹 프로그래밍이 발전하면서 동적인 페이지를 제공할 수 있게 되었다. 동적인 페이지를 제공하기 위해서는 웹 서버가 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 한다. 여기서 웹 서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 애플리케이션이 CGI이다. Servlet의 특징 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트 html을 사용하여 요청에 응답한다. Ja..

[Java] HashMap과 HashTable의 차이점
JAVA 2022. 10. 31. 01:16

Java에서 Key-Value 쌍을 저장하는 자료구조로 HashTable과 HashMap이 있다. HashTable 또는 HashMap을 사용할 때 키와 키에 연결하려는 값을 지정하면 키가 해시되고 결과 해시코드가 테이블 내에서 값이 저장되는 인덱스로 사용된다. 그렇다면 기본적인 구조는 비슷한 두 자료구조의 차이점은 무엇인지 알아보도록 하자 HashMap vs HashTable HashMap은 동기화되지 않기 때문에 thread-safe 하지 않아 싱글 스레드 환경에서 사용하는 것이 좋다. HashTable은 동기화를 보장하여 멀티 스레드 환경에서 thread-safe 하다. HashMap은 하나 또는 여러개의 null 키를 허용하는 반면 HashTable은 키 또는 값에 null 값을 허용하지 않는다...

Spring Data JPA 원하는 필드만 Select하기(Projection)
JAVA/Spring 2022. 10. 29. 19:31

Spring Data JPA 원하는 필드만 Select 하기(Projection) JPA를 사용해서 Repository에서 Select 할 때, 보통 Entity를 통째로 조회하게 되는데, 일부 값만 필요한 경우 불필요한 데이터까지 모두 조회하게 된다. 오늘 진행하고 있는 프로젝트 기능 중에서 회원의 점수별로 정렬하여 조회하는 쿼리가 필요했는데, Member의 모든 필드를 가져올 필요가 없다고 생각하여 Projection을 사용해 보았다. Projection을 사용해서 원하는 필드만 가져올 수 있는데 기본적인 방법은 인터페이스를 이용하여 Projection 하는 방법이지만, DTO Class를 많이 사용하기 때문에 Class Projection도 사용이 가능하다. 오늘은 두 방법에 대해 알아보도록 하자...

[JAVA]정적 팩토리 메서드 (Static Factory Method)
JAVA 2022. 10. 29. 02:26

Item1. 생성자 대신 정적 팩토리 메서드를 고려하라 클래스는 클라이언트에 public 생성자 대신 (혹은 생성자와 함께) 정적 팩토리 메서드를 제공할 수 있다. 이 방식에는 장점과 단점이 모두 존재한다. 장점 1. 이름을 가질 수 있다. class BigInteger { //public 생성자 방식 public BigInteger(int bitLength, int certainty, Random rnd) { BigInteger prime; if (bitLength < 2) throw new ArithmeticException("bitLength < 2"); prime = (bitLength < SMALL_PRIME_THRESHOLD ? smallPrime(bitLength, certainty, rnd..

[Spring] GlobalExceptionHandler와 Custom Exception으로 전역 예외처리하기
JAVA/Spring 2022. 10. 26. 23:39

GlobalExceptionHandler와 CustomException으로 전역 예외 처리하기 Spring을 사용해서 웹 애플리케이션 개발을 하다 보면, 예외가 발생했을 때 예외 종류에 따라 클라이언트 측에 다른 응답을 보내줘야 한다. 이때, 일일히 Controller마다 예외 처리해서 Response를 던져주는 작업을 하게 되면 서비스가 커질수록 중복 코드가 늘어나고 유지보수가 힘들어진다. 이를 해결하기 위해 Exception Handling을 전역적으로 관리할 수 있는 방법을 알아보자 ErrorCode Enum 에러에 대해서 Response를 전달할 때, 에러 메시지를 같이 전달하게 되는데 이 때 메시지를 String 값으로 하드 코딩하게 되면 관리가 힘들어진다. 그러므로 Http 상태 코드와 메시지..

[Spring Security] BCryptPasswordEncoder란?
JAVA/Spring 2022. 10. 15. 03:50

👀BCryptPasswordEncoder란? BCryptPasswordEncoder는 Spring Security 프레임워크에서 제공하는 클래스로 비밀번호를 암호화(해시)하는 데에 사용한다. 해시 함수에는 MD5나 SHA 등의 종류가 있지만 BCrypt는 단순히 입력을 1회 해시시키는 것이 아니라 솔트(salt)를 부여하여 여러번 해싱하므로 더 안전하게 암호를 관리할 수 있다. BCrypt는 같은 비밀번호를 암호화하더라도 해시 값은 매번 다른 값이 도출된다. 따라서 BCryptPasswordEncoder에서는 사용자가 제출된 비밀번호와 암호화되어 저장된 비밀번호의 일치 여부를 확인하는 메소드가 제공된다. BCryptPasswordEncoder는 BCrypt의 로그 라운드라고도 하는 강도(strength)..

Spring No property 'desc' found for type 'LocalDateTime’ 오류
JAVA/Spring 2022. 10. 8. 14:05

Spring Data JPA를 사용하는중, 생성 일자로 정렬을 하기 위해 아래와 같이 Repository에 선언을 했는데, No property 'desc' found for type 'LocalDateTime’라는 에러가 발생했다. Page findAllOrderByCreateDateDesc(Pageable pageable); LocalDateTime 타입에 desc 속성을 찾을 수 없다고 오류가 발생하는데, 해결 방법은 매우 간단하게 findAll 뒤에 'By'를 붙여주면 깔끔하게 동작한다. Page findAllByOrderByCreateDateDesc(Pageable pageable);

반응형