# 개념 private final JwtUtil jwtUtil;public MyService(JwtUtil jwtUtil) { this.jwtUtil = jwtUtil;} - 단 한 번만 할당 가능- 생성자에서 반드시 초기화해야 함- setter가 없어도 되고, 불변 객체로 설계 가능 한 번 정해진 값은 절때 바뀌지 않아야, 프로그램이 예측 가능하고 안전하게 돌아감 # 불변하지 않을 때 생기는 문제 1. 값이 어디에서 바뀌었는지 모른다public class UserService { private User user; public void updateName() { user.setName("철수"); } public void resetName() { u..
@RestController 개념- final 필드나 @Nonnull 애노테이션이 붙은 필드만을 파라미터로 받는 생성자를 자동으로 생성해줌(기본생성자 생성 X) - Lombok 라이브러리에서 제공하는 애노테이션 중 Java 클래스에서 필수 필드를 초기화하는 생성자를 자동으로 생성해주는 기능 # 사용예시@RequiredArgsConstructorpublic class MemberService { private final MemberRepository memberRepository; private final PasswordEncoder passwordEncoder; private String optionField;} 위 코드에서 @RequiredArgsConstructor 는 생성..
Spring Security: 인증(Authentication)과 권한(Authorization)을 처리하기 위한 강력한 프레임워크 스프링 시큐리티를 구현에 필요한 SimpleGrantedAuthority, UserDetails, UserDetailsService 에 대해 중점적으로 정리 SimpleGrantedAuthority - 사용자가 가진 권한(Role)을 문자열 형태로 표현하는 클래스 public final class SimpleGrantedAuthority implements GrantedAuthority - GrantedAuthority 인터페이스의 구현체- 문자열 기반의 권한( ex: "ROLE_USER", "ROLE_ADMIN")을 저장- 권한 체크 시 비교 기준이 됨 - 주로 U..

Spring Security 를 사용할때, 아무런 세팅도 하지않은 초기 username은 "user" 이고 password 는 콘솔에 찍힌 password를 사용한다. 초기 username이 user 라는건 도대체 어디에 명시해두었을까 ?! Spring Security 관련 설정은 UserDetailsServiceAutoConfiguration 클래스에서 정의하고 있다. 다음은 해당 클래스의 코드 일부이다.@Bean@ConditionalOnMissingBean( type = "org.springframework.security.core.userdetails.UserDetailsService")public InMemoryUserDetailsManager inMemoryUserDetailsMan..
AOP(Aspect-Oriented Programming) 가 프록시 기반으로 동작하는 원리 - AOP 는 Spring의 프록시 기반 방식으로 동작하기 때문에 @Controller 이든 @RestController 이든 @Component 이든 Spring이 관리하는 Bean 이면 적용된다. @Controller vs @RestController 차이점- @Controller : 주로 View(HTML,JSP) 반환하는 MVC 컨트롤러- @RestController : JSON 데이터를 반화하는 REST API 컨트롤러(@ResponseBody 가 기본 적용) 동작 예시 ) [ AOP 적용 전 ]@Servicepublic class SampleService { public void doSomethi..
해당 글에서는 @Autowired로 주입된 빈을 static 메서드에서 사용하려고 할 때 NullPointerException 이 발생하는 원인과 해결방안에 대해 다루려고 한다. 문제 상황 static 메서드 exctractBrandName() 에서 @Autowired로 주입된 someDAO를 사용하여 실행하면 NullPointerException이 발생한다. @Slf4j@Service("dataService")public class DataService { @Autowired private someDAO someDAO; public static String extractBrandName(String input) throws Exception { List brandNam..
참조의 의미와 자바의 GC(가비지컬렉터)가 어떻게 동작하는지 초보자의 시점에서 알아보자 참조(Reference)란? 어떤 객체를 가리키고 있다는 뜻 - 객체의 주소를 기억해서 그 객체에 접근할 수 있게 해주는 역할 예시 ) public class Example { public static void main(String[] args) { Person person = new Person(); // 'person'은 Person 객체를 참조하고 있음 person.setName("John"); Person anotherPerson = person; // 'anotherPerson'도 같은 Person 객체를 참조함 ..

자바의 메모리 구조중에 Stack 영역과 Heap 영역에 대해서 알아보자 Stack 영역 각 메소드가 호출될 때마다 그 메소드 내에서 사용되는 지역 변수(로컬 변수)들이 저장됨메소드가 끝나면 그 메소드에 대한 스택 영역은 사라짐일시적인 데이터들(메소드 실행 중에만 유효한 데이터)을 저장하는 공간빠르게 접근 가능 public class Example { public static void main(String[] args) { int x = 10; // Stack에 저장되는 지역 변수 int y = 20; // Stack에 저장되는 지역 변수 int sum = add(x, y); // Stack에 메소드 호출 정보 저장 System.out.prin..