🥑

초보 개발자의 일상

개발 45

.of() 메서드

강사님이 작성해준 소스코드를 분석하는데 어려운 용어 투성이다..of() 메서드를 보았는데 객체를 쉽게 만들 수 있게 해주는 거라는 설명을 보았다.깊게는 설명을 읽지 않았는데 아래 소스코드를 보고 의문이 들었다.인스턴스를 만드는건데 안에 .of() 메서드를 사용해서 또 객체를 만든다는 말인가? 혼란스러웠다.그래서 chat gpt한테 설명과 예시를 몇가지 들어달라고 했다.ErrorResponse errorResponse = ErrorResponse.of(e.getErrorCode());of() 메서드는 ErrorResponse 객체를 간편하게 생성하기 위한 팩토리 메서드입니다. 즉, 이 메서드를 통해 ErrorResponse 객체를 쉽게 생성하고, 필요한 데이터(예: e.getErrorCode())를 넣어줄..

개발/SpringBoot 2024.11.06

@RestController, @RequestMapping, ResponseEntity, @RequestBody, ResponseEntity.ok()

예외처리 관련해서 수업을 나갔는데 어려운 것 투성이다.메모를 해놓고 그 당시에 아, 이런 내용이구나! 라고 이해해놓고선 다음에 또 마주치면 '아.. 무슨 내용이었는데..'하면서 다시 찾아보게된다. 언제쯤 익숙해지려나.. 계속 반복적으로 작성하고 생각하는 방법 밖에는 없겠지. (눈물)@RestControllerSpring MVC에서 RESTful 웹 서비스를 구현할 때 사용되는 어노테이션.HTTP 응답 본문에 객체를 JSON 또는 XML 형식으로 자동 변환하여 반환.@RequestMapping("/경로")Spring MVC에서 HTTP 요청을 특정 메서드나 클래스에 매핑하는 데 사용되는 어노테이션.HTTP 메서드(GET, POST 등)와 URL 경로를 지정하여 요청을 처리예시: @RequestMapping..

개발/SpringBoot 2024.11.05

Collection, Collections의 차이

생각권한 부여에 대하여 수업을 듣는 도중 UserDetails 관련하여 클래스를 작성하다가 return문에서 Collections.singletonList(new SimpleGrantedAuthority(user.getRole()))); 이 부분에서 Collection이라고 오타를 냈다. Collection은 인터페이스이고 Collections는 유틸리티 클래스로 설명이 있는데 비슷한 글자인데 무슨 차이가 있는지 궁금해서 찾아보았다.Collection설명: Collection은 자바의 컬렉션 프레임워크에서 제공하는 인터페이스 중 하나다. 여러 객체를 그룹으로 다루기 위해 사용된다.용도: 리스트, 세트 등 다양한 컬렉션의 기본 인터페이스로, 여러 가지 컬렉션 클래스가 이 인터페이스를 구현하고 있다.예시: ..

개발/Java 2024.10.29

[SpringBoot] Thymeleaf에서 Spring Security가 동작을 안 하는 현상

문제로그인, 로그아웃 같은 기능은 잘 동작하는데 Thymeleaf에서 Spring Security가 동작을 안 하는 현상이 발생했다.dependencies 추가도 해줬는데 왜 안돼는 건가 싶었다.시도project clean을 해보고, 의존성을 삭제하고 gradle refresh하고 다시 추가하고 gradle refresh를 했다.그래도 변함이 없었따.해결Spring Security 의존성을 1개만 추가했다. implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity6'이 의존성을 추가하지 않은 것이다..!! 완전 어이없는 실수.. 잊지말자!thymeleaf에서 spring security를 사용하기 위해서는 security 말고도 thyme..

CustomUserDetails 클래스Builder 적용, JPA 활용한 UserEntity

생각기존 UserDetails 인터페이스의 인스턴스가 가진 필드 외에 email을 추가한 커스텀 UserDetails 클래스를 만들어 달라고 했다. 그 결과 아래와 같은 소스코드를 만들어 줬다.일반 CustomUserDetails 클래스1. CustomUserDetails 클래스 import org.springframework.security.core.GrantedAuthority;import org.springframework.security.core.userdetails.UserDetails;import java.util.Collection;public class CustomUserDetails implements UserDetails { private final String username; ..

개발/SpringBoot 2024.10.28

UserDetailsService, UserDetails, GrantedAuthority, SimpleGrantedAuthority, stream

생각관리자 페이지와 관리자 권한 설정, 부여에 대하여 수업을 듣는데 @Service 단에서 클래스를 만드는데 UserDetailsService 인터페이스를 상속받는 클래스로 만들었다. 설명을 해주셨지만 처음보는 인터페이스라 금방 까먹었다. 하하. 그래서 공부할 겸 정리해본다.왜 이렇게 어렵냐.. ㅠUserDetailsServiceUserDetailService는 Spring Security에서 사용자 정보를 가져오는데 사용되는 인터페이스이다.주요 역할은 애플리케이션의 사용자 정보를 제공한다.사용자의 인증과 권한 부여에 사용된다.사용자 정보 로드UserDetailsService는 특정 사용자의 정보를 데이터베이스나 다른 저장소에서 가져오는 메서드를 정의한다. 주로 사용자의 이름(username)으로 해당 ..

개발/SpringBoot 2024.10.28

@Configuration, @Bean, @EnableWebSecurity, SecurityFilterChain, HttpSecurity

생각spring security에 대해서 수업을 듣다가 사용자 권한에 들어가면서 특정 클래스에 @Configuration 어노테이션을 정의해줬다. 그래서 이게 정확히 무엇인지 궁금했다.그리고 찾아보니 @Bean과 같이 사용되는데 각 Bean의 인스턴스는 컨테이너 내에서 하나만 존재 한다는 설명을 듣고 이해가 안 갔다. 하나만 존재한다는 말이 무슨 말인지 이해가 가지 않아서 관련 내용을 더 찾아보았다.@Configuration, @Bean, @EnableWebSecurity, SecurityFilterChain, HttpSecurity의 중요성Spring Security에서 보안 관련 기능을 추가하려면 SecurityFilterChain 인터페이스를 사용해야한다.그리고 SecurityFilterChain ..

개발/SpringBoot 2024.10.28

@Param

생각Mapper에서 @Param 어노테이션을 사용하여 값을 xml로 전달한다고는 이해하고 있는데 정확히 알지는 못하여서 정리하고자 글을 작성한다. @ParamMyBatis에서의 @Param은 SQL 쿼리에서 사용하는 파라미터를 지정하는데 사용된다.여러 개의 파라미터를 메소드에 전달할 때 각각의 파라미터에 이름을 붙여 SQL 쿼리에서 사용할 수 있게 한다. 예시 1// Controller 예시public interface UserMapper { User getUser(@Param("id") int id, @Param("name") String name);}// xml 예시 SELECT * FROM user_table WHERE id = #{id} AND name = #{name} ..

개발/SpringBoot 2024.10.28

@ModelAttribute

생각@ModelAttribute 어노테이션은 객체를 바인딩한다고 알고 있다. 객체라면 내가 만든 DTO 라고 해야하나..여하튼 좀 더 자세히 알고 싶어서 정리해두면 좋을 거 같아서 글을 작성한다. @ModelAttribute HTTP 요청의 파라미터를 객체에 바인딩할 때 사용한다.주로 폼 데이터를 처리할 때 유용하다. 등록// Controller 예시@PostMapping("/register")public String register(@ModelAttribute User user) { // user 객체에 폼 데이터가 바인딩됩니다. return "Registration successful for " + user.getName();} 폼 데이터에서 입력한 값이 User 데이터 타입의 user ..

개발/SpringBoot 2024.10.28

@RequestParm

생각@RequestParam을 과 , 을 통해 입력한 값을 HTTP 형태로 받는 정도로만 이해하고 있어서 혹시라도 잘못 이해하고 있지 않을가 싶어서 @RequestParam에 대해서 찾아보았다. @RequestParamHTTP 요청의 쿼리 파라미터나 폼 데이터로부터 값을 바인딩할 때 사용한다. Submit 이런 예시인 경우 input 태그에 안녕하세요. 입력하고 button 태그를 클릭하면 input에 입력한 값이 브라우저 화면에 이 출력된다.// Controller 예시@GetMapping("/message") public String message(@RequestParam String message) { return "Hello, " + message;} 코드 흐름사용자가 필드에 "안녕하세요"라고..

개발/SpringBoot 2024.10.28