목록Java/SpringBoot (40)
사이먼's 코딩노트

[REST API 적용]앞선 포스팅 'REST API (1)'에서는 개념 소개를 했다면, 이번에는 실제로 REST API를 적용하기 위해 코드에 적용해봅시다.구현된 코드는 저번 JWT 토큰 발급때 진행했던 리포지터리에서 작업을 이어갈 예정이기 때문에 전체 코드는 해당 리포지터리 주소를 통해 참고 부탁드립니다.리포지터리 URL 주소 : https://github.com/psm817/jwt_review GitHub - psm817/jwt_reviewContribute to psm817/jwt_review development by creating an account on GitHub.github.com [기본 세팅]먼저 REST API 적용을 하기 위해 build.gradle에 아래와 같이 시큐리티, 유효성..

[REST란?]REST는 인터넷과 같이 복잡한 네트워크 통신이 등장함에 따라, 이를 관리하기 위한 지침으로 만들어졌다.대부분의 애플리케이션은 다양한 태스크를 수행하기 위해 다른 내부 애플리케이션 및 서드 파티 애플리케이션과 통신을 해야한다.최근 서버 프로그램은 다양한 브라우저와 스마트폰과 같은 모바일 디바이스에서도 통신을 할 수 있어야하기 때문에 이러한 멀티플랫폼에 대한 지원을 위해 서비스 자원에 대한 아키텍처를 세우고 이용하는 방법을 모색할 결과, REST에 관심을 가지게 되었다.REST는 Representational State Transfer의 약어로써 자원을 이름으로 구분하여 해당 자원의 상태를 주고받는 모든 것을 의미한다.HTTP URI를 통해 자원을 명시하고, HTTP Method(GET, P..

[JWT 토큰 발급]SpringBoot를 통해 JWT 인증 구현 코드를 구현하기 전에 다시 한번 JWT 인증의 내용을 정리해봅시다.서버가 최초로 접속하는 브라우저에게 쿠키의 세션 키 정보를 담는 방식으로 각각의 사용자를 구분한다.초창기 어플리케이션은 쿠키 기능이 없어 ID와 PW를 저장해두었다가, 모든 요청에 한 번에 응답했다.서버에서 신원확인용 토큰을 발급하여, 앱에서 사용하도록하면 해킹 발생 시에 PW를 바꾸지 않아도 된다.JWT 토큰은 정보를 담을 수 있고, 유효성 체크에 DB 조회를 수반하지 않는다.JWT 토큰을 만들 때 Secret key로 흔적을 남기고, JWT 토큰에서 정보를 얻을 때, Secret key로 그것이 오명되지 않았음을 인증한다.JWT 토큰은 한 번 만들면 만료시킬 수 없고, 그..

[인증과 인가]이번 포스팅에서는 웹 어플리케이션의 인증 방식에 대해서 몇 가지 알아보고자 합니다.인증 방식을 알아가기에 앞서 인증과 인가가 무엇인지, 웹 어플리케이션 인증에는 어떤 특수성이 있는지 살펴봅시다.인증이란 해당 사용자가 실제 사용자인지 인증하는 개념으로써, 사용자의 신원을 검증하는 프로세스다. 우리가 흔히 접하는 ID와 비밀번호로 로그인을 하는 동작들이 인증에 해당된다.인가는 인증 이후에 프로세스로, 인증된 사용자가 어떠한 자원에 접근할 수 있는지 확인하는 절차다. 흔히 웹 어플리케이션에서 관리자에게 부여되는 권라자 권한이 인가에 해당된다. [웹 어플리케이션 인증의 특수성]일반적으로 서버와 클라이언트 구조로 되어있다.HTTP 프로토콜을 이용하여 통신하기 때문에 비연결성과 무상태의 특징을 지닌다..

[이메일 발송 적용]웹 페이지를 구현할 때 임시 비밀번호 발송이나 회원가입 완료 시 가입 환영 메일 등과 같이 프로그램에서 메일을 발송하는 기능이 필요할 때가 있을 것이다.이번에는 위와 같은 이메일 발송 중 구글 지메일을 이용한 방법을 알아봅시다.앞서 진행했던 SBB 프로그램이 아닌 임시로 만들어 둔 다른 프로젝트를 통해 구현할 예정이기 때문에 코드를 참고하고 싶으시다면 아래 깃허브 리포지터리 주소를 통해 참고 부탁드립니다.깃허브 리포지터리 주소 : https://github.com/psm817/sb_blog_2405 GitHub - psm817/sb_blog_2405Contribute to psm817/sb_blog_2405 development by creating an account on GitHu..

[소셜 로그인(카카오톡) 적용]웹 페이지를 구현할 때 카카오톡, 네이버, 구글 등을 이용한 소셜 로그인이 필요할 때가 있을 것이다.이번에는 위와 같은 소셜 로그인 중 카카오톡을 이용한 방법을 알아봅시다.앞서 진행했던 SBB 프로그램이 아닌 임시로 만들어 둔 다른 프로젝트를 통해 구현할 예정이기 때문에 코드를 참고하고 싶으시다면 아래 깃허브 리포지터리 주소를 통해 참고 부탁드립니다.깃허브 리포지터리 주소 : https://github.com/psm817/sb_blog_2405 소셜 로그인 세팅 - 카카오 · psm817/sb_blog_2405@17012f6psm817 committed May 27, 2024github.com [Kakao Developer 설정]웹 브라우저를 통해 카카오 디벨로퍼에 접속하여..

[검색 기능 구현하기]질문 목록 페이지인 localhost:8090/question/list에서 찾고자 하는 내용을 키워드로 검색하여 해당 검색어와 관련있는 질문을 조회할 수 있는 기능을 구현해봅시다.그러기 위해선 검색어를 입력할 수 있는 텍스트 창을 만들고 검색어를 입력하여 조회하면 검색어에 해당되는 질문들이 보여야 한다.검색 대상으로는 질문 제목, 질문 내용, 질문 작성자, 답변 내용, 답변 작성자가 되겠고 DB에서 직접 SELECT문으로 조회했을 때는 아래와 같은 쿼리문을 사용해야 한다.SELECT *FROM question AS QLEFT JOIN site_user AS QAON Q.author_id = QA.idLEFT JOIN answer AS AON Q.id = A.question_idLEF..

[앵커 이동 기능 추가]현재까지 구현된 SBB 프로그램에서 답변을 작성하거나 수정하면 자동으로 페이지 상단으로 스크롤이 이동해서 자신이 작성한 답변을 확인하려면 다시 스크롤을 내려서 확인해야 되는 문제점이 있다.해당 문제는 답변을 추천한 경우에도 발생하는데, 우리는 a태그를 활용하여 답변 등록, 수정, 추천 시 앵커 태그를 이용하여 원하는 위치로 이동시킬 수 있다.먼저 question_detaill.html 템플릿에서 아래와 같이 답변이 반복되는 구간에서 반복문이 들어간 div태그의 코드를 수정한다.앵커 태그의 id 속성은 반드시 유일한 값이어야 하므로 답변의 id값을 사용했다.앵커 태그의 id 속성이 유일하지 않고 중복된 값이 존재한다면 맨 처음 한 개를 제외한 나머지 앵커는 제대로 동작하지 않게된다...

[앵커 이동 기능 추가]현재까지 구현된 SBB 프로그램에서 답변을 작성하거나 수정하면 자동으로 페이지 상단으로 스크롤이 이동해서 자신이 작성한 답변을 확인하려면 다시 스크롤을 내려서 확인해야 되는 문제점이 있다.해당 문제는 답변을 추천한 경우에도 발생하는데, 우리는 a태그를 활용하여 답변 등록, 수정, 추천 시 앵커 태그를 이용하여 원하는 위치로 이동시킬 수 있다.먼저 question_detaill.html 템플릿에서 아래와 같이 답변이 반복되는 구간에서 반복문이 들어간 div태그의 코드를 수정한다.앵커 태그의 id 속성은 반드시 유일한 값이어야 하므로 답변의 id값을 사용했다.앵커 태그의 id 속성이 유일하지 않고 중복된 값이 존재한다면 맨 처음 한 개를 제외한 나머지 앵커는 제대로 동작하지 않게된다...

[질문 추천 기능 구현하기]보통 SNS에서 마음에 드는 게시물이나 컨텐츠에 '좋아요'와 같은 표시를 남기기 마련이다.SBB 프로그램에도 '좋아요' 버튼을 통해 질문이나 답변을 본 다른 사용자들이 반응을 남길 수 있도록 추천 기능을 구현해봅시다.질문에서 추천 기능을 구현하려면 질문을 추천한 사용자가 DB에 저장될 수 있도록 관련된 속성을 Question 엔티티에 추가해야 한다.Question 엔티티에 추천인을 저장하기 위한 voters라는 이름의 속성을 추가해봅시다.@ManyToManySet voters = new LinkedHashSet();public void addVoter(SiteUser voter) { voters.add(voter);}@ManyToMany 어노테이션을 사용한 이유는 한 명의..