목록분류 전체보기 (718)
쌓고 쌓다
https://school.programmers.co.kr/learn/courses/30/lessons/134240?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 먼저 생수를 가운데 무조건 배치를 하므로 answer에 "0"을 추가해준다. 이제 현재 answer의 앞뒤로 음식들을 배치할 것이다. 목표하는 정답의 안쪽부터 음식을 채워 나갈 것이므로 음식 배열을 도는 반복문은 배열 끝부터 돈다. 이때 음식이 /2로 나눠지는만큼 answer의 앞뒤에 음식의 인덱스 i를 붙인다. (왜냐 양쪽 선수 앞뒤로 서로 하나씩 먹을려면 2..
비회원이 댓글 작성을 누르면 어떻게 에러 메시지를 띄울까 방법을 생각했다. 인터셉터로 처리하고싶었지만 댓글 작성은 AJAX로 이뤄진다. 먼저 서버에서 세션을 통해 비회원을 판별한다. @PostMapping(value = "/comment/write", consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public ResponseEntity commentWrite(@SessionAttribute(name= SessionConst.LOGIN_MEMBER, required = false) Member member, @RequestBody Comment comment) { Map m = new HashMap(); if(member==null) { m.put..
서블릿은 2가지 방식으로 예외 처리를한다. Exception(예외) response.sendError(HTTP 상태 코드, 오류 메시지) WAS 구조는 다음과 같이 볼 수 있다. 디스패처 서블릿이 서블릿 컨테이너와 스프링 컨테이너의 연결 짓는다. 1. Exception 자바 직접 실행 자바 메인 메서드를 실행하여 main이라는 이름의 쓰레드를 실행한다. 실행중 예외를 잡지 못해 Main 메서드를 넘어서 예외가 나오면 예외 정보가 나오고 쓰레드는 종료된다. 웹 애플리케이션 웹 애플리케이션에서는 사용자 요청별로 별도의 쓰레드가 할당되고, 서블릿 컨테이너 안에서 동작한다. 애플리케이션에서 try catch로 예외를 잡지 못하고 서블릿 밖인 WAS까지 예외가 넘어오게 되며 예외 페이지를 보이게 된다. 예외 발생..
https://school.programmers.co.kr/learn/courses/30/lessons/142086?language=cpp 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 Map을 사용한다. 문자열 s를 탐색하며 처음 나온 문자라면 Map에 해당 문자와 인덱스를 저장한다. 그리고 answer에 -1을 넣는다. 이미 존재하는 문자라면 현재 인덱스 i에서 해당 문자의 가장 최근의 위치인 m[s[i]]를 빼서 몇번째 앞에 있는지 계산한다. 그 값을 answer에 push 그리고 Map에 저장된 해당 문자의 가장 최근 위치를 갱신해준다...
로그인하지 않은 유저가 게시글 작성을 시도하는 경우, 게시글 작성 컨트롤러를 호출하지 못하게 해보자. 먼저, 스프링 인터셉터의 흐름을 보자. HTTP 요청 -> WAS -> 필터 -> 서블릿(디스패처 서블릿) -> 스프링 인터셉터 -> 컨트롤러 스프링 MVC의 시작점이 디스패처 서블릿이고 스프링 인터셉터 또한 스프링 MVC의 기술이기에 디스패처 서블릿 이후에 사용된다. 스프링 인터셉터를 통해 사용자의 요청을 제한할 수 있는데. 로그인 유저와 비 로그인 유저의 요청이 어떻게 처리 되는지 보자. 1. 로그인 사용자 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 -> 컨트롤러 2. 비 로그인 사용자 HTTP 요청 -> WAS -> 필터 -> 서블릿 -> 스프링 인터셉터 (적절한 요청이..
Ajax로 서버에 데이터를 전송하는 코드이다. let memos = []; let selectPlaces = []; $.ajax({ ... data: JSON.stringify({"content": selectPlaces, "memos": memos}), ... }) 나는 이렇게 전송한 데이터를 서버에서 아래의 형태로 같이 받길 원했다. @PostMapping("...") public String makeSchedule(@RequestBody List content, @RequestBody List memos) { ... } @RequestBody를 여러개 작성하여 받는 방법은 없다. 그래서 전달 받을 VO(Value Object)를 만들어 받는것이 올바른 방법이다. 물론 Map을 사용하여 Key, Va..
https://school.programmers.co.kr/learn/courses/30/lessons/131705 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr 풀이 방법 BruteForce 방식으로 풀었다. number 길이가 최대 13이기에 가능한 모든 조합을 탐색하여 풀 수 있다. cnt로 몇개의 번호를 받은 상태인지 상태를 체크하고, sum으로 총합을 관리한다. 이때 cnt가 3이고 sum이 0이라면 삼총사를 구한것이므로 answer++ 해준다. cnt가 3인 상태에서 반복문을 돌려봐야 cnt가 4이상이 됨으로 삼총사는 구할 수 없으므로 retu..
먼저 Comment, Poster, UploadFile 엔티티를 보자. Comment @Entity @Data public class Comment { ... @ManyToOne @JoinColumn(name="poster_id") private Poster poster; } Poster @Entity @Getter @Setter @ToString public class Poster { ... @ManyToOne @JoinColumn(name="writer") private Member writer; @JsonBackReference @OneToMany(mappedBy = "poster", cascade = {CascadeType.PERSIST, CascadeType.REMOVE}) private Lis..