BackEnd 62

📑 Spring Security 총 정리

매번 프로젝트를 시작하는 과정에서 스프링 시큐리는 늘 말썽처럼 에러를 내곤 했다. 정확한 개념 정리 없이 하던 내용으로만 개발을 하다보니 새로운 버전의 릴리즈를 사용할 때면 항상 난항을 겪곤 했다. 이번 기회에 시간날때마다 제대로 공식 사이트의 가이드 문서를 분석하여 개념정리를 해볼까 한다. 참고한 가이드 문서의 버전은 스프링 시큐리티 5.8.8버전이다. 1. Spring Security란? Spring Security는 Spring 기반의 애플리케이션의 보안(인증, 권한, 인가 등)을 담당하는 스프링 하위 프레임워크이다. Spring Security는 인증과 권한에 대한 처리를 Filter의 흐름에 따라 처리하고 있다. Filter는 Client에서 보낸 HTTP 요청이 Dispatcher Servle..

📑 테스트 프로젝트 생성_사원관리

본격적으로 queryDsl을 학습하기 전에 학습에 필요한 간단한 사원관리 프로젝트를 생성하고자 한다. 그동안은 스프링 부트의 버전을 2.7.x 버전을 사용했지만 이번에는 3.0대 버전으로 업그레이드 하여 생성을 한 후에 그동안 했던 설정들이 변경된 부분을 동시에 학습해보고자 한다. 1. 프로젝트 생성 - (spring boot 3.0.12, java version 17) - build.gradle(dependency), aplication.yml(spring, jpa, log 셋팅) 2. 엔티티 생성 - 엔티티를 생성 후에 프로젝트를 실행하여 로그 상에서 jpa가 테이블을 만들어주는 지 확인 - ddl-auto를 create로 설정하여 엔티티 설정에 맞게 테이블을 생성하고, data.sql로 데이터 초기..

📑 LIST의 .toArray() 메서드

평상시에 코드를 개발하던 중 인텔리제이에서 자주 보이는 경고에 대해 자세히 알아보았다. List 컬렉션은 정말 없으면 안 될 정도로 실무에서도 많이 사용을 하는데, 해당 컬렉션을 배열 형태로 바꾸어 사용하고자 할 때, toArray()메서드를 자주 사용한다. 리스트의 요소 타입이 Integer나 String 같은 기본 Wrapper 타입이라면 단순하게 Stream을 활용해 변환할 수 있겠지만, 개인적으로 만든 클래스 객체의 인스턴스에 대해서는 캐스팅의 문제로 불가능하다. 그래서 결론적으로 toArray를 많이 사용하게 된다. 상식적으로 생각했을 때, 리스트를 배열로 전환하려면 리스트의 요소 개수 만큼 배열의 크기를 지정해야 하기 때문에 리스트의 사이즈 만큼 지정하면 매번 아래와 같은 경고가 발생하여 의문..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP 상태코드

[ HTTP 상태 코드 ] 클라이언트가 보낸 요청의 처리 상태를 응답에서 알려주는 기능 목차 1xx (Informational) : 요청이 수신 되어 처리중 2xx (Successful) : 요청 정상 처리 3xx (Redirection) : 요청을 완료하려면 추가 행동이 필요 4xx (Client Error) : 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음 5xx (Server Error) : .서버 오류, 서버가 정상 요청을 처리하지 못함 만약 클라이언트가 인식할 수 없는 상태코드를 서버가 반환한다면? - 클라이언트는 상위 상태 코드(큰 범위)로 해석해서 처리한다. - 따라서 미래에 새로운 상태코드가 추가된다고 하여도 클라이언트를 변경하지 않아도 된다. - 예) 299 ??? ..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP 메서드 활용

[ HTTP 메서드 활용 ] 목차 클라이언트에서 서버로 데이터 전송 HTTP API 설계 예시 1. 클라이언트에서 서버로 데이터 전송 - 데이터 전달 방식은 크게 2가지 쿼리 파라미터를 통한 데이터 전송 GET 주로 정렬 필터(검색어) 메시지 바디를 통한 데이터 전송 POST, PUT, PATCH 회원가입, 상품 주문, 리소스 등록, 리소스 변경 - 1. 정적 데이터 조회 정리 이미지, 정적 텍스트 문서 조회는 GET 사용 정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로를 단순하게 조회 가능 - 2. 동적 데이터 조회 정리 주로 검색, 게시판 목록에서 정렬 필터(검색어) 조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용 조회는 GET 사용 GET은 쿼리 파라미터를 사용해서..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP 메서드

[ HTTP 메서드 ] 목차 HTTP API를 만들어보자 HTTP 메서드 - GET, POST HTTP 메서드 - PUT, PATCH, DELETE HTTP 메서드의 속성 1. HTTP API를 만들어보자. - 요구사항 및 API URI 설계 회원 정보 관리 API를 만들어라. 회원 목록 조회 /read-member-list (x) /members (o) 회원 조회 /read-member-by-id (x) /members/{id} 회원 등록 /create-member (x) /members/{id} 회원 수정 /update-member (x) /members/{id} 회원 삭제 /delete-member (x) /members/{id} - 좋은 URI 설계 -> 가장 중요한 것은 리소스 식별 리소스의 의..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_HTTP기본

[ HTTP ] 목차 모든 것이 HTTP 클라이언트 서버 구조 STATEFULL, STATELESS 비 연결성(CONNECTIONLESS) HTTP 메시지 1. 모든 것이 HTTP(Hyper Text Transfer Protocol) HTTP 메시지에 모든 것을 전송할 수 있다. - HTML, TEXT - Img, 음성, 영상, 파일 - JSON, XML(API) - 거의 모든 형태의 데이터 전송 가능 - 서버간에 데이터를 주고 받을 때도 대부분 HTTP 사용 (1) HTTP 역사 - HTTP/0.9 1991년 : GET 메서드만 지원, HTTP 헤더X - HTTP/1.0 1996년 : 다른 메서드와, 헤더 추가 - HTTP/1.1 1997년 : 가장 많이 사용, 우리에게 가장 중요한 버전 - RFC20..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_URI와 웹 브라우저 요청 흐름

[ URI와 웹 브라우저 요청 흐름 ] 목차 URI 웹 브라우저 요청 흐름 1. URI ( Uniform Resource Identifier ) - URI? URL? URN? URI는 로케이터(locater), 이름(name) 또는 둘 다 추가로 분류될 수 있다. URI : 자원(RESOURCE) 자체를 식별하는 방법. URL : 자원의 위치 URN : 자원의 이름 (거의 사용하지 않는다.) UNIFORM : 리소스를 식별하는 통일된 방식 RESOURCE : 자원, URI로 식별할 수 있는 모든 것 (제한 없음) IDENTIFIER : 다른 항목과 구분하는데 필요한 정보 URL - LOCATOR : 리소스가 있는 위치를 지정 URN - NAME : 리소스에 이름을 부여 위치는 변할 수 있지만, 이름은 변..

📑 모든 개발자를 위한 HTTP 웹 기본 지식_인터넷 네트워크

[ 인터넷 네트워크 ] 목차 인터넷 통신 IP TCP, UDP PORT DNS 1. 인터넷 통신 클라이언트와 서버가 유선적인 케이블로 연결된 것이 아닌 이상 복잡한 인터넷 망을 통해 통신이 진행된다. 어떤 규칙으로 넘어가는가? 수많은 복잡한 노드를 거쳐서 어떻게 목적지로 도착하는가? 에 대한 의문을 갖고 학습해 보자. 2. IP(인터넷 프로토콜) - 역할 각 PC에 고유한 IP 주소가 부여되는데, 지정된 IP주소에 데이터를 전달한다. 패킷이라는 통신 단위로 메시지 전달 - IP 패킷 규칙 정보 출발지 IP, 목적지 IP, 기타..., 전송데이터 클라이언트와 서버사이의 노드끼리 목적지로 가기 위한 노드가 어디 있나? 하면서 소통을 진행하고, 서로 전달하면서 목적지에 도달한다. 이렇게 인터넷 망의 노드끼리 ..

📑 SpringBoot Day 2

빌드해서 실행파일 만들기 콘솔로 이동 빌드시킬 프로젝트가 있는 폴더로 이동한다. C:\Users\yhn03\intelliWork\exam gradlew build를 입력하면 필요한 라이브러리를 다운받는다. cd build/libs로 이동한다. java -jar exam-0.0.1-SNAPSHOT.jar를 입력하면 프로젝트를 실행한다. 실행확인(인텔리제이를 실행한 상태에서 콘솔로 빌드 후 실행하면 서버 포트가 중복되어 에러가 발생하기 때문에 반드시 서버를 종료한 후에 실행하도록 하자)

📑 SpringBoot Day1

프로젝스 생성 https://start.spring.io/ 1. 위의 사이트를 접속하여 아래 이미지와 같이 설정한다. generate 지정한 workspace에 압축 해제 > intelliJ 켜기 > open project > 압축 해제한 폴더중에서 build.gradle파일을 열어서 open project하기 > 필요한 파일을 다운로드 하느라 약간의 시간이 소요됨 기존에 jdk1.8을 사용했던 사람은 반드시 JAVA_HOME의 환경변수를 jdk11로 바꾸어야 한다. 프로젝트 실행해보기 ExamApplication의 main함수를 실행하면 아래와 같은 결과가 콘솔에 등장한다.. 두둥 콘솔에 위와 같이 성공적으로 실행이 되었다면 브라우저에 http://localhost:9090/를 검색해보자. 아래와 같은..

📑 SpringMVC_게시판_기능정리_국비

[ 조회수 증가 ] 생각보다 간단하게 구현할 수 있는 조회수 증가는 고려해야 할 오점이 하나 있다. 게시글을 클릭하기 했을 때마다 update로 조회수를 1씩 증가시키면 특정 게시물을 한 번만 보더라도 해당 게시물에서 새로고침을 할 때마다 무의미하게 조회수가 계속 올라간다. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 @RequestMapping("view.do") public String view(Model model, int b_idx) { //b_idx에 해당되는 게시물 정보를 얻어온다 BoardVo vo = board_dao.selectOne(b_idx); //이 게시물을 안봤으면.. 증가시켜라 if(session.getAttribut..