BackEnd/Spring 20

📑 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로 데이터 초기..

📑 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..

📑 SpringLegacyProject_SpringSecurity적용하기

오늘은 Spring Legacy Project에서 Spring Security를 적용해보기 위해 환경설정부터 간단한 실습을 진행해보도록 하겠다. 기본적으로 oracle, eclipse, tomcat, spring sts가 설치되어있다는 가정 하에 진행하겠다. 먼저 Spring MVC 프로젝트를 생성해보자 . 패키지 네이밍 룰에 맞춰서 자유롭게 작성하도록 하자. 생성한 프로젝트를 우클릭하여 Run as -> Run on server를 클릭해서 등록한 톰캣으로 실행을 해주자. 실행을 하면 home.jsp가 실행되는데 아래의 코드를 추가하면 인코딩이 맞게 되어 한글이 깨지지 않는 결과가 나온다. 아래의 이미지를 보았다면 기본적인 프로젝트 셋팅은 완료되었다. server.xml에서 path를 수정하자. 이제 S..

📑 Spring기초_Day6_웹 개발 모델

[ 모델 1 ] 크롬이나 익스플로어같은 브라우저를 사용하여 네이버에게 Request(요청)을 하면 JSP파일안에서 DB와 연동하여 데이터를 가공하고 사용자에게 Response(응답)한다. JSP에서 비즈니스 로직(로그인 요청을 했을때, 입력한 아이디와 비밀번호가 DB에 있는지 확인하는 작업 등), View 모두 처리(로그인 이후에 보여지는 화면) 구조가 단순하여 익히기 쉬움 구현이 익숙하고, 작은 단위의 어플리케이션에 적합 출력을 위한 뷰와 로직 처리를 위한 자바 코드가 섞여 있기 때문에 JSP 코드의 복잡성이 증가 -> 스파게티 코드 업무 분업이 어려움 JSP가 모든 일을 담당한다. [ 모델 2 ] JSP에서 모든 것을 담당하던 모델1 방식과 달리 뷰를 담당하는 JSP페이지와 비즈니스 로직을 위한 서블..

📑 Spring_Day5_SpringLifeCycle

Life Cycle = 생명주기, 생애주기 = 시작부터 끝까지 스프링 컨테이너의 생명주기 스프링 컨테이너 생성 스프링 컨테이너 설정 스프링 컨테이너 사용 스프링 컨테이너 종료 Bean Life Cycle 관리방법 인터페이스를 통한 구현(지정된 메서드명을 사용해야 한다. 스프링에서만 사용가능하다.) Bean 정의 시 메소드 지정(내가 원하는 메서드명을 사용할 수 있다. 스프링에서만 사용가능하다.) 어노테이션 지정(스프링이 아닌 컨테이너에서도 사용가능하다.) 세 가지의 경우의 수를 하나의 클래스에서 사용하지는 않겠지만 만약 그렇다면 어노테이션 -> 인터페이스 -> 메소드 지정 순서로 실행된다. 어플리케이션 설계와 프로젝트 특성에 맞게 사용 [ AOP가 적용된 어플리케이션 구현 방식 ] [ AOP 용어 ] A..

📑 Spring_Transaction_국비_Day89

더보기 감시 지점을 지정하는 것 - PointCut, 지점의 정보를 가지고 있는 것 - JoinPoint [ Spring Transaction ] DML명령중에서 Select문을 제외한 나머지만 명령이 실행되고, 바로 DB에 저장되는 것이 아니고, Transaction Log에 저장되었다가, 커밋 또는 롤백이 된다. 이는 DML명령이 실행되다가 중간에 에러가 나서 앞에 실행한 명령은 수행되고, 에러 이후에 명령은 수행되지 않는 결과를 방지하기 위함이다. 이러한 성질을 All or Nothing 즉, 모든 DML이 커밋되거나, 하나라도 잘못되면 모두 취소하거나(roll back)이라고 한다. 가장 간단한 예를 들면 결제에서의 트랜잭션을 생각해볼 수 있다. 간단한 결제의 과정을 보면 사용자가 단가가 5000..

📑 Spring_AOP_국비_Day87

[ AOP의 개요 ] 서비스 개요 객체지향 프로그래밍(Object Oriented Programming)을 보완하는 개념으로 어플리케이션을 객체지향적으로 모듈화 하여 작성하더라도 다수의 객체들에 분산되어 중복적으로 존재하는 공통 관심사가 여전히 존재한다. AOP는 이를 횡단관심으로 분리하여 핵심관심과 엮어서 처리할 수 있는 방법을 제공한다. 로깅, 보안, 트랜잭션 등의 공통적인 기능의 활용을 기존의 비즈니스 로직에 영향을 주지 않고 모듈화 처리를 지원하는 프로그래밍 기법 OOP의 단점 : 예를 들어 로깅처리를 위해 특정 메서드의 수행 시간을 측정하려고 할 때, 객체 지향 프로그래밍은 객체를 기반으로 프로그래밍 하기 때문에 같은 결과를 도출하는 중복된 코드를 모든 클래스에 작성해야 한다. 이는 이후에 수행..

📑 Spring_국비_Day86

이후에 스프링 부트를 사용하게 되면 모든 의존성 주입이 자동으로 이루어지게 된다. 하지만 처음으로 스프링을 학습할 때는 이 xml파일을 통해 무슨 객체가 생성이 되고, 의존성이 어떻게 주입되는지 이해를 하고 사용하기 위해서 적응이 되기 전까지는 수동으로 생성해서 직접 의존성을 주입해준다. 기본적으로 생성자 주입과 세터 주입방법이 있다. 이론상으로는 생성자 주입이 속도적인 면에서 조금 더 빠르고 효율적이라고 한다. 쉽게 생각해보자. 객체를 생성할 때 가장 먼저 실행되는 것이 무엇인가? 맞다 생성자가 먼저 실행되고, 그 내부에 있는 멤버변수에 접근하기 위해 세터메서드를 실행한다. 하지만 생각해보면 스프링에서 생성하는 객체는 소스코드가 드러나진 않지만, 싱글톤의 구조를 가지고 있다. 가장 처음 프로젝트를 실행..

📑 SpringFileUpload_국비_Day86

오늘은 스프링 레거시 프로젝트에서 파일 업로드 기능을 사용하는 방법을 배웠다. 모델2에서 학습한 실습 예제를 스프링 레거시 프로젝트로 변경하는 작업을 진행하고 있는데, 생각보다 어려웠는데 오늘 배움으로써 말끔히 해결되었다. 알다시피 파일 업로드를 사용하기 위해서는 파일 업로드를 처리해주는 전용 객체(MultipartRequest)를 사용해야 한다. 이를 스프링이 사용할 수 있도록 객체를 만들어 주어야 하는데 기본적인 스프링 DB환경설정을 마친 상태에서 DispatcherServlet이 참고하는 파일에 아래의 소스코드를 추가하도록 하자. 더보기 1 2 3 4 5 6 Colored by Color Scripter cs 위의 소스코드를 추가했다면, pom.xml에 CommonsMultipartResolver를..