@GetMapping("/posts/{id}") public String showPost(Model model, @PathVariable Long id, @AuthenticationPrincipal UserDetailsImpl userDetails){ Post post = postRepository.findById(id).orElseThrow( () -> new IllegalArgumentException("게시글을 찾을 수 없습니다.") ); model.addAttribute("username", userDetails.getUsername()); model.addAttribute("id", id); model.addAttribute("title", post.getTitle()); model.addAtt..
@PostMapping("/api/products") public Product createProduct(@RequestBody ProductRequestDto requestDto, @AuthenticationPrincipal UserDetailsImpl userDetails){ Long userId = userDetails.getUser().getId(); Product product = new Product(requestDto, userId); return productRepository.save(product); } @AuthentiationPrincipal 로그인한 유저의 정보를 가져옴. API 접근 권한 제어 이해 회원 상세정보 (UserServiceImpl) 를 통해 "권한 (Authority..
지수 복잡도(expnential) 복잡도. 2^N의 비율로 일의 양이 빠르게 증가. 암호 기법에 사용되는 알고리즘은 특정 계산 과제를 수행하는 일이 지수 복잡도를 갖도록 하는데 기반을 둠. 하나하나 푸는데 계산상으로 불가능할 정도로의 큰 N을 기반으로 복호화를 방지 지수복잡도의 대표적인 예 하노이의 탑 한 번의 하나의 원판만 이동할 수 있다. 맨 위의 있는 원판만 이동이 가능하다. 크기가 작은 원판위에 큰 원판이 쌓일 수 없다. 중간의 막대를 임시적으로 이용할 수 있으나 앞의 조건들을 지켜야 한다 재귀를 이용한 피보나치 수열 def fibo(n): if n==1 : return 1 if n==2 : return 1 return fibo(n-1)+fibo(n-2) P, NP문제 답이 YES 아니면 NO로 ..
웹의 인증 및 인가의 개념 인증 (Authentication): 사용자 신원을 확인하는 행위 인가 (Authorization): 사용자 권한을 확인하는 행위 쿠키와 세션 쿠키와 세션 모두 HTTP 에 상태 정보를 유지(Stateful)하기 위해 사용됩니다. 즉, 쿠키와 세션을 통해 서버에서는 클라이언트 별로 인증 및 인가를 할 수 있게 됩니다. 쿠키 클라이언트에 저장될 목적으로 생성한 작은 정보를 담은 파일 입니다. 세션 서버에서 일정시간 동안 클라이언트 상태를 유지하기 위해 사용 서버에서 클라이언트 별로 유일무이한 '세션 ID' 를 부여한 후 클라이언트 별 필요한 정보를 서버에 저장 서버에서 생성한 '세션 ID' 는 클라이언트의 쿠키값('세션 쿠키' 라고 부름)으로 저장되어 클라이언트 식별에 사용됨 클..
게시글 API 기능 Method URL request response 로그인 토큰 전체 게시글 목록 조회 API GET / Page X 게시글 작성 API POST /posts Post Post O 게시글 수정 API PUT /posts/{id} id, Post id O 게시글 삭제 API DELETE /posts/{id} id O 게시글 눌러보기 GET /posts/{id} post.html X 검색어를 포함하는 게시글 목록 조회 API GET /search?query= String query Page X 회원관리 API 기능 Method URL request response 로그인 토큰 회원가입 페이지 GET /user/signup - singup.html X 회원가입 POST /user/signup..
HTTP 메세지 규약 1. 시작줄 (start line) Response에선 상태줄(status line) 2. 헤더 3. 본문 Request 메시지 시작줄: API 요청 내용 GET **naver.com** HTTP/1.1 헤더(메타 정보, 추가적인 정보) "Content type" 없음 HTML 태그로 요청 시 Content type: application/x-www-form-urlencoded AJAX 요청 Content type: application/json 본문 GET 요청 시: (보통) 없음 POST 요청 시: (보통) 사용자가 입력한 폼 데이터 name=홍길동&age=20 Response 메시지 상태줄: API 요청 결과 (상태 코드, 상태 텍스트) HTTP/1.1 **404** **Not..
Request GET: DB 정보를 화면에 보여주고 싶을 때 POST: 입력한 정보를 DB에 보내주고 싶을 때 PUT: 특정 id에서 입력한 정보를 수정하고 싶을 때 PATCH: 특정 id에서 입력한 정보를 부분 수정하고 싶을 때 DELETE: DB의 데이터를 삭제하고 싶을 때 전체 게시글 목록 조회 API GET /api/posts List 게시글 작성 API POST /api/posts Post Post 게시글 수정 API PUT /api/posts/{id} id, Post id 게시글 삭제 API DELETE /api/posts/{id} id 게시글 눌러보기 GET /api/posts/{id} Posts 검색어를 포함하는 게시글 목록 조회 API GET /api/search?query= String..
JSON 데이터를 매개변수(파라미터)로 넣어줄 때 JSON.stringfiy() 해주는 것이 필요하다. Uncaught SyntaxError때문에 하루종일 고생함... paging thymeleaf 타임리프에서 자바스크립트 함수를 호출하고 싶다면 th:onclick="|javascript:showPost('${post.id}')|" 와 같은 처리가 필요하다 id password 받기 url: `/api/posts/${id}`, 에 모든 id password 모든 정보를 받으면 안 되니까 Dto를 따로 설정. data를 ajax로 받을시 url 검색으로 확인할 수 있으니. 패스워드 체크는 서버사이드렌더링으로...오류가 많이난다