본문 바로가기
[Spring] @RequestBody와 ArgumentResolver의 충돌 해결 📍 목표전 시간에 만들었던 @UserIp 애노테이션을 컨트롤러(핸들러)의 파라미터에서 일일이 쓰지 않고, @RequestBody로 User 이런식으로 객체를 JSON 형식으로 받아 바인딩할 때,  어디선가 User(UserLotto) 객체 안 ip(userIp) 필드에 사용자 IP 값을 알아서 넣어주도록 해보고 싶었다.   문제점내가 생각한 방안은 HandlerMethodArgumentResolver을 구현한 커스텀 ArgumentResolver 클래스에서, 파라미터에 User 객체가 들어오면 HttpServletRequest에서 사용자의 IP를 받아 값을 바인딩해주는 방식이었다. 그러나 커스텀 애너테이션과 @RequestBody는 함께 사용할 수 있지만, Spring MVC는 각 파라미터에 대해 하나.. 2024. 11. 3.
[Spring] ArgumentResolver와 커스텀 애노테이션 ☝🏻 목표나는 사용자 DTO에 사용자의 IP를 조회해서 값을 넣고싶었다.그래서 커스텀 애노테이션을 만들어서 사용하고자 했다. 그럴려면 ArgumentResolver도 정의해줘야 하는데,CustomArgumentResolver를 구현해보면서 동작 과정을 알아보자.    ArgumentResolver란?간단히 말하면, Spring MVC에서 컨트롤러 메서드의 파라미터를 다루기 위해 사용하는 인터페이스다.ArgumentResolver를 만들기 위해서는 클래스가 HandlerMethodArgumentResolver 인터페이스를 구현해야 한다.HandlerMethodArgumentResolver를 이용하여 컨트롤러(핸들러)가 필요로 하는 다양한 파라미터의 값(객체)을 생성하고, 파라미터의 값이 모두 준비되면 컨.. 2024. 11. 3.
IntelliJ IPv4 설정 아무것도 설정해주지 않았을 때 로컬 환경에서는 IP를 IPv6로 인식하고 있어서, IPv4로 변경해주어야 했다.ipv4의 127.0.0.1와 ipv6의 0.0.0.0.0.1은 같음 !   Run -> Edit Configurations...    Modify Options -> Add VM options들어가서 -Djava.net.preferIPv4Stack=true추가해주면 끝 !    참고https://adjh54.tistory.com/443#1)%20IP%20%EC%A2%85%EB%A5%98-1 [Java] IP 주소 반환받는 방법 : 클라이언트 IP, 외부 IP, 내부 IP, 호스트 IP해당 글에서는 Java 내에서 다양한 IP 주소를 반환받는 방법으로 클라이언트 IP, 외부 IP, 내부 IP, .. 2024. 11. 2.
[SQL] 프로그래머스 - 있었는데요 없었습니다 문제 링크https://school.programmers.co.kr/learn/courses/30/lessons/59043?language=mysql 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr 문제 요약ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블이 있다. 관리자의 실수로 일부 동물의 입양일이 잘못 입력되었습니다. 보호 시작일보다 입양일이 더 빠른 동물의 아이디와 이름을 조회하는 SQL문을 작성해주세요. 이때 결과는 보호 시작일이 빠른 순으로 조회해야합니다.  해결 방안1. INNER JOIN을 사용하여 각자 두 테이블에서 animal_id가 같은 데이터를 가져온다. 그래야 보호 시작일,.. 2024. 10. 31.
[SQL] JOIN 쿼리를 짜다보면 두 개의 테이블을 엮어야만 원하는 결과가 나오는 경우가 정말 많다. 그럴 때 쓰는 것이 바로 JOIN !조인을 쓰면 두 개의 테이블을 엮어서 원하는 데이터를 추출할 수 있다.JOIN에 대해 알아보자 !  SQL의 JOIN은 크게 4종류로 나눌 수 있다.INNER JOIN(내부 조인): 두 테이블을 조인할 때, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.OUTER JOIN(외부 조인): 두 테이블을 조인할 때, 1개의 테이블에만 데이터가 있어도 결과가 나온다.CROSS JOIN(상호 조인): 한쪽 테이블의 모든 행과 다른 쪽 테이블의 모든 행을 조인하는 기능이다.SELF JOIN(자체 조인): 자신이 자신과 조인한다는 의미로, 1개의 테이블을 사용한다.  INNER JOIN (내부.. 2024. 10. 31.
[Spring] MySQL 타임존과 9시간 차이날 때 (느릴 때) 내가 겪은 문제간략히 설명하면 MySQL의 타임존과 애플리케이션의 타임존이 달라서 일어났던 일이다.스프링부트 애플리케이션에서 사용하는 서버 타임존 설정도 spring.datasource.url=jdbc:mysql://localhost:3306/lotto_db?serverTimezone=Asia/Seoul 를 적어줌으로써 서버타임존 설정을 해주었는데, 실제 DB에 저장된 데이터를 보면 계속해서 -9시간이 된 시간이 저장되어있었다.(하지만 애플리케이션의 서버 타임존 설정이 맞는 방법이었다...^^!)그러면 왜 이랬을까?! 밑에서 좀 더 자세히 설명하겠다 !   잠깐 ! 타임존이 뭔지는 알고 가자 !Timezone 설명구분확인법기본값타임존운영체제의 시스템 타임존CLI > date사용자가 초기 설정함KSTMyS.. 2024. 10. 30.