목록프로그래밍 (408)
쌓고 쌓다
목표 기능 html을 보여주는데 로그인 여부에 따라 일부 태그만 교체하길 원한다. 먼저 아래와 같이 세션을 통해 "LOGIN_MEMBER" 세션이 존재에 따라 상단 바를 달리하길 원한다. 로그인한 사람을 위한 상단 바를, 게스트라면 게스트 바를 replace 해보자. HomeController @GetMapping("/") public String home(@SessionAttribute(name = SessionConst.LOGIN_MEMBER, required = false) Member loginMember, Model model) { if (loginMember == null) { model.addAttribute("isLogin", false); } else { model.addAttribute..
먼저 코드를 한번 읽어보자. 간단히 미리 설명하자면 버튼 클릭 이벤트 등록시 등록 당시의 sequence의 값을 이용해 deleteButtonAndPatch 함수를 수행하길 원한다. let sequence = 0; function example() { sequence++; let btn = document.createElement('button'); btn.addEventListener('click', () => { deleteButtonAndPatch(sequence); }) } function deleteButtonAndPatch(idx) { console.log(idx); } 버튼 태그인 btn에 클릭 이벤트를 등록했다. 클릭시 이벤트 등록 당시의 sequence 값을 deleteButtonAndP..
input 태그의 type 속성 값을 date로하면 날짜를 입력 받는 양식을 제공 받을 수 있다. 기간 설정 완료 Failed to convert value of type 'java.lang.String' to required type 'java.time.LocalDateTime' 서버에서 @RequestParam LocalDateTime으로 받으려고하면 타입 에러가 발생한다. input 태그의 date는 폼 전송시 String으로 날라온다. 아래와 같이 한번 수정해서 받아온 파라미터를 출력해보자. @PostMapping("/schedule") public String makeSchedule(@RequestParam String startDate, @RequestParam String endDate) {..
스프링 인터셉터 스프링 인터셉터 흐름 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 스프링 인터셉터는 스프링 MVC가 제공하는 기능이기에, 디스패처 서블릿 이후에 등장한다. 인터셉터 체인으로 인터셉터 다음에 인터셉터를 축 스프링 인터셉터 제한 1. 로그인 사용자 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 2. 비 로그인 사용자 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터(적절하지 않은 요청이라 판단, 컨트롤러 호출 X) 스프링 인터셉터 인터페이스 public interface HandlerInterceptor { default boolean preHandle(HttpServletRequest re..
다양한 소셜 플랫폼을 통해 로그인하는 회원을 어떻게 저장하면 좋을까? 소셜 로그인 방법이 카카오, 네이버, 구글 등으로 다양하고 서비스 자체 회원가입 방법이 존재할 수 있다. 이 상황을 고려하여 DB를 간단히 설계해봤다. Member 테이블 CREATE TABLE MEMBER ( id bigint AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, sns_identifier VARCHAR(255), member_type VARCHAR(255) NOT NULL, PRIMARY KEY (id) ); sns_identifier : 소셜 로그인 플랫홈에서 제공하는 고유한 키를 저장 member_type : 일반 회원, 카카오, 네이버..
static/js/ 경로에 kakaoButton.js 파일을 작성했다. 위의 js 파일을 html에 연결하여 사용하기 위해 아래의 코드를 작성했다. 그런데 404에러가 발생한다. 404 Not Found는 서버에 제공하지 않는 URL을 탐색했을 경우 발생하는 에러이다. 즉, 요청한 페이지나 데이터가 없을 경우인것이다. 인텔리제이에서 경로에 파일이 존재하기에 이렇게 파일 목록을 보여주는데 왜 못 찾는걸까.. 위의 경로도 찾질 못한다. 해결 방법 스프링 부트는 기본적으로 /src/main/resources/static에 위치한 JS, CSS 등의 정적 파일의 경로를 /로 설정된다. 즉, "../static/js/kakaoButton.js" => /js/kakaoButton.js 올바른 경로
application.properties client_id = abc123 application.properties에 키와 값을 정의한다. Java 필드 import org.springframework.beans.factory.annotation.Value; @Controller public class KakaoUser { @Value("${client_id}") private String client_id; } @Value 어노테이션을 사용하여 application.properties에 정의한 값을 불러 필드에 주입할 수 있다.
먼저 상황은 이랬다. 사용자는 중복된 값(여행지)을 선택할 수 있다. 선택한 값 리스트중 원하는 요소(여행지)를 삭제할 수 있어야한다. 중복된 값을 선택할 수 있기에 현재 삭제를 원하는 요소를 가지고 현재 선택된 요소들을 돌며 비교 연산으로 삭제하면 먼저 만나는 값을 삭제해버리는 상황이다. 딱 원하는 순서의 요소를 삭제할 수 있어야하는게 원하는 기능이다. let selectPlaces = []; // 선택된 여행지 여행지는 리스트에 보관하고 있으며 추가와 삭제가 자유로워야하고 삭제한 순번에 맞춰 리스트의 인덱스 값도 삭제해야하는 상황이다. 먼저 여행지 추가시 보이는 화면의 HTML에 추가하고 선택된 여행지 리스트에 담아주는 코드이다. function addPlace(addPlace) { selectPla..