목록개발공부/Spring (23)
개발자 도전기
회원 프로필 사진을 수정하는 메소드를 작성하던 도중 NoSuchFileException이 발생했다. C:\Users\user\AppData\Local\Temp\tomcat.8080.6497677539176642649\work\Tomcat\localhost\ROOT\upload_fbf7e74c_7d28_4e24_bc4f_97a5b0b6379a_00000008.tmp이 존재하지 않는다는 로그가 뜬다. @PutMapping("users/{id}")public ResponseEntity updateUser(User user, Authentication authentication, @RequestParam(value = "profileImage[]", re..

당연하다... 필드에 final을 붙이지 않았기 때문이다.... (지끈)
문제 Negative matches: ----------------- OAuth2ResourceServerJwtConfiguration.OAuth2SecurityFilterChainConfiguration: Did not match: - AllNestedConditions 1 matched 1 did not; NestedCondition on DefaultWebSecurityCondition.Beans @ConditionalOnMissingBean (types: org.springframework.security.web.SecurityFilterChain; SearchStrategy: all) found beans of type 'org.springframework.sec..

문제 cors 설정 중 CorsFilter의 빈을 찾을 수 없다는 오류가 발생했다 원인 SecurityConfiguration에서 CorsFilter 의존성을 주입할 때import org.apache.catalina.filters.CorsFilter; 를 그대로 import했는데, 나는 CorsConfig 클래스에 @Configuration 어노테이션을 붙여 CorsFilter를 @Bean으로 등록했기 때문이다 해결private final CorsConfig corsConfig; CorsConfig를 의존성 주입받고 corsConfig.corsFilter() 형태로 사용했다 .addFilter(corsConfig.corsFilter())

🚨 ERRORCaused by: java.lang.NullPointerException: Parameter specified as non-null is null @Value 어노테이션으로 주입한 값이 null인 오류가 발생했다. 💣 CAUSEpublic SmsUtil() { this.messageService = NurigoApp.INSTANCE.initialize(apiKey, apiSecret, "https://api.coolsms.co.kr");} 생성자를 통해 field에 값을 주입해주었는데 의존성 주입 전에 생성자가 호출되는 문제 때문에 null 값이 들어가게 되었다💡 SOLVE@PostConstruct를 사용하였습니다@PostConstruct를 사용하면 의존성 주입이 이루어진 후 초..

요청 경로로 302 Found와 /login 경로로 304 Not Modified 요청이 함께 뜬다면스프링 시큐리티가 막고 있는 것이니 @SpringBootApplication에 exclude = SecurityAutoConfiguration.class 추가해주자@SpringBootApplication(exclude = SecurityAutoConfiguration.class)public class BackendApplication { public static void main(String[] args) { SpringApplication.run(BackendApplication.class, args); }} csrf가 막고 있어서 그렇다,, 시큐리티 자동 설정 해제하니 200 응..
비밀번호를 암호화해서 저장했는데도 다음과 같은 경고가 뜬다면 passwordEncoder.matches() 파라미터 위치가 바뀌지 않았는지 확인해보자. matches는 첫번째 파라미터는 평문, 두번째 파라미터는 암호화된 비밀번호를 인자로 받는다. if (db != null) { String inputPassword = member.getPassword(); // 평문 String dbPassword = db.getPassword(); // 암호화 if (passwordEncoder.matches(inputPassword, dbPassword)) { // 토큰 발급 등 로그인 로직 }} 😂

Ajax( Asynchronous JavaScript and XML )란?Javascript와 XML을 사용한 비동기적 정보 교환 방법입니다브라우저의 XMLHttpRequest을 이용해 페이지를 갱신하지 않고 부분적으로 업데이트하는 방법을 말합니다Jquery, 브라우저의 fetch() 메소드 등 여러 방법으로 구현할 수 있습니다 fetch()를 사용해 Ajax 요청하기회원 가입 시 페이지를 갱신하지 않고 이메일 중복 확인을 하는 예제입니다# 가독성을 위해 bootstrap은 일부 생략회원가입 이메일 중복 확인 이메일 입력창과 중복 확인 버튼을 부트스트랩의 input..

Service란?Controller 대신 비즈니스 로직을 처리합니다. 대규모 프로그램일수록 Controller와 Service의 분산 작업이 중요합니다.간단한 프로그램으로 Controller, Service, Mapper의 실행 흐름만 알아보겠습니다 실행 흐름1. Controller가 요청을 분석하고 가공합니다2. Service가 비즈니스 로직을 실행합니다3. Mapper가 데이터 CRUD를 처리하고, 결과값을 DTO에 담아 서비스에 보냅니다4. Service가 DTO를 Controller에 전달합니다5. Controller는 결과값을 모델에 담고 view로 포워딩 합니다 DTO(Data Transfer Object, 데이터 전송 객체)프로세스 간에 데이터를 전달하는 객체를 의미합니다. 사용 예제S..
서브쿼리 하나의 SQL문 안에 있는 포함되어 있는 또 다른 SQL문을 말합니다. 서브쿼리를 포함하고 있는 쿼리를 외부쿼리(outer query)라 부르며 서브쿼리는 내부쿼리(inner query)라고도 부릅니다 1) 단일행 서브쿼리(SingleRow Subquery)쿼리 결과가 하나의 열과 하나의 행만을 리턴하는 서브쿼리입니다주로 연산자를 사용해 값을 비교합니다# 서브쿼리 사용하지 않았을 때SELECT AVG(Price)FROM Products;SELECT *FROM ProductsWHERE Price >= 28.866364;# 서브쿼리로 변환SELECT *FROM ProductsWHERE Price >= (SELECT AVG(Price) FROM Products); 2) 다..