📖
Kyu9's Repo
  • Library of mameil
  • 이슈 경험
    • 20230220_트랜잭션
    • 20230306_캐싱이슈
    • 20230722_테스트코드에서 @Transactional
    • 20230807_deadlock
  • 인턴 스터디
    • Gradle
    • Stream, Optional, 람다식
    • JVM의 메모리 구조, Garbage Collector
    • RESTful API
    • Microservice Architecture
    • HTTP
    • 웹서버란 무엇인가
    • Git Branch
    • TDD
    • Redis을 이용한 캐시
    • Thymeleaf
    • 정리가 필요한 자료들
    • SpringBoot Management
    • 테스크 코드 분할
  • 동아리 스터디
    • 기본 SQL 공부
      • SQL의 기본 개념
      • SELECT 문장을 이용하여 원하는 데이터 출력하기
        • 집합 연산자 사용하기
        • where절에 비교 연산자를 사용해보기
        • SELECT_EX
        • 산술 연산자 사용해보기
      • 단일 행 함수 사용
        • lower/upper 함수 사용하기
        • length함수 사용하기
        • concat함수 사용
        • substr/mid/substring 함수 사용
        • instr함수 사용하기
        • lpad/rpad 함수 사용하기
        • trim/ltrim/rtrim 함수 사용하기
        • replace 함수 사용하기
        • round 함수 사용하기
        • truncate 함수 사용하기
        • mod함수 사용하기
        • ceil함수 사용하기
        • floor함수 사용하기
        • power 함수 사용하기
        • Date fn(날짜 함수)
        • 형 변환 함수
        • 일반함수란
    • a-ha 실습
    • 혼자서 만들어본 게시판
    • AWS 강의
  • 학교 나머지 공부 자료
    • 웹프레임워크(Spring)
      • Spring이란?
      • Webframework1-1
      • Webframework1-2
      • SpringBoot의 특징
      • SpringBoot 생성 방법
      • Spring Data JPA
      • SpringBoot Security
      • SpringBoot HATEOAS
  • 공부 자료들
  • WS 온라인 자바 스터디
    • Week1(JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가.)
    • Week2(자바 데이터 타입, 변수 그리고 배열)
    • Week3(연산자)
    • Week4(제어문)
    • Week5(클래스)
    • Week6(상속)
    • Week7(패키지)
    • Week8(인터페이스)
    • Week9(예외처리)
    • Week10(멀티쓰레드 프로그래밍)
    • Week11(Enum)
    • Week12(Annotation)
    • Week13(I/O)
    • Week14(Generic)
    • Week15(람다식)
  • 백준문제
    • 입출력과 사칙연산
      • We love kriii(10718)
      • 고양이(10171)
      • 개(10172)
      • A+B(1000)
      • A-B(1001)
      • AxB(10998)
      • A/B(1008)
      • 사칙연산(10869)
      • 나머지(10430)
      • 곱셈(2588)
    • for문
      • 구구단(2739)
      • A+B - 3(10950)
      • 합(8393)
      • 빠른 A+B(15552)
      • N 찍기(2741)
      • 기찍 N(2742)
      • A+B - 7(11021)
      • A+B - 8(11022)
      • 별 찍기 - 1(2438)
      • 별 찍기 - 2(2439)
      • X보다 작은 수(10871)
    • if문
      • 두 수 비교하기(1330)
      • 시험 성적(9498)
      • 윤년(2753)
      • 사분면 고르기(14681)
      • 알람 시계(2884)
      • 오븐 시계(2525)
      • 주사위 세개(2480)
      • 영수증(25304)
    • While문
      • A+B - 5(10952)
      • A+B - 4(10951)
      • 더하기 사이클(1110)
    • 1차원 배열
      • 최소, 최대(10818)
      • 최댓값(2562)
      • 숫자의 개수(2577)
      • 나머지(3052)
      • 평균(1546)
      • OX퀴즈(8958)
      • 평균은 넘겠지(4344)
    • 함수
      • 정수N개의 합(15596)
      • 셀프 넘버(4673)
      • 한수(1065)
    • 문자열
      • 아스키코드(11654)
      • 숫자의 합(11720)
      • 알파벳 찾기(10809)
      • 문자열 반복(2675)
      • 단어 공부(1157)
      • 단어의 개수(1152)
      • 상수(2908)
      • 다이얼(5622)
      • 크로아티아 알파벳(2941)
      • 그룹 단어 체커(1316)
    • 기본수학-1
      • 손익분기점(1712)
      • 벌집(2292)
      • 분수찾기(1193)
      • 달팽이는 올라가고 싶다(2869)
      • ACM 호텔(10250)
      • 부녀회장이 될테야(2775)
      • 설탕 배달(2839)
      • 큰 수 A+B(10757)
      • Fly me to the Alpha Centauri(1011)
    • 기본수학-2
      • 소수 찾기(1978)
      • 소수(2581)
      • 소인수분해(11653)
      • 소수 구하기(1929)
      • 베르트와 공존(4948)
    • 재귀
      • 하노이 탑 이동 순서(11729)
      • 피보나치 수 5(10870)
      • 별 찍기(2447)
    • 브루트 포스
      • 블랙잭(2798)
      • 분해합(2231)
      • 덩치(7568)
      • 체스판 다시 칠하기(1018)
      • 영화감독 슘(1436)
    • 집합과 맵
      • 숫자 카드(10815)
      • 문자열 집합(14425)
      • 숫자 카드2(10816)
      • 듣보잡(1764)
      • 대칭 차집합(1269)
      • 서로 다른 부분 문자열 갯수(11478)
    • 정렬
      • 수 정렬하기(2750)
      • 수 정렬하기 2(2751)
      • 수 정렬하기 3(10989)
      • 통계학(2108)
      • 소트인사이드(1427)
      • 좌표 정렬하기(11650)
      • 좌표 정렬하기2(11651)
      • 단어 정렬(1181)
      • 나이순 정렬(10814)
      • 커트라인(25305)
      • 좌표압축(18870)
    • 백트래킹
      • N과 M - 1(15649)
      • N과 M - 2(15650)
      • N과 M - 3(15651)
      • N과 M - 4(15652)
      • N-Queen(9663)
      • 스도쿠(2580)
      • 연산자 끼워넣기(14888)
      • 스타트와 링크(14889)
    • 이분 탐색
      • 수 찾기(1920)
    • 동적계획법
      • 피보나치 함수(1003)
      • 신나는 함수 실행(9184)
      • 01타일(1904)
      • 파도반 수열(9461)
      • RGB거리(1149)
      • 정수 삼각형(1932)
      • 계단 오르기(2579)
      • 1로 만들기(1463)
      • 쉬운 계단 수(10844)
      • 포도주 시식(2156)
      • 가장 긴 증가하는 부분 수열(11053)
      • 가장 긴 바이토닉 부분 수열(11504)
      • 전깃줄(2565)
      • LCS(9251)
      • 연속합(1912)
      • 평범한 배낭(12865)
      • 더하기(9095)
    • DFS와 BFS
      • 미로탐색(2178)
      • 바이러스(2606)
      • DFS와 BFS(1260)
      • 단지번호붙이기(2667)
      • 전쟁 - 전투(1303)
      • 숨바꼭질(1697)
      • 데스 나이트(16948)
      • 나이트의 이동(7562)
      • 녹색 옷 입은 애가 젤다지?(4485)
      • 음식물 피하기(1743)
      • A->B (16953)
      • 숨바꼭질 3(13549)
      • 숨바꼭질 2(12851)
    • 구현
      • 치즈(2636)
  • 프로그래머스 문제
    • SQL
      • Animal Table - Oracle
      • Animal Table - MySQL
      • Animal Table2 - Oracle
      • Animal Table 3,4 - Oracle
    • Lv1
      • 두 개 뽑아서 더하기
      • 제일 작은 수 제거하기
      • 문자열 내 p와 y의 개수
      • 예산
      • 자릿수 더하기
      • 두 정수 사이의 합
      • 같은 숫자는 싫어
      • 가운데 글자 가져오기
      • 수박수박수박수박수박수?
      • 나누어 떨어지는 숫자 배열
      • 2016년
      • 폰캣몬
      • 서울에서 김서방 찾기
      • 문자열을 정수로 바꾸기
      • 소수 만들기
      • 문자열 다루기 기본
      • 소수 찾기(에라토스테네스의 체)
      • 숫자 문자열과 영단어
      • 이상한 문자 만들기
      • 없는 숫자 더하기
      • 문자열 내림차순으로 배치하기
      • 문자열 내 마음대로 정렬하기
      • 약수의 개수와 덧셈
      • 콜라츠 추측
      • 자연수 뒤집어 배열로 만들기
      • 신규 아이디 추천
      • 비밀지도
      • 크레인 인형뽑기 게임
      • 실패율
      • 로또의 최고 순위와 최저 순위
      • 키패드 누르기
      • 정수 내림차순으로 배치하기
    • Lv2
      • 행렬의 곱셈
      • 영어 끝말잇기
      • 영어 끝말잇기
      • N개의 최소 공배수
      • 피보나치 수
      • 124 나라의 숫자
      • 짝지어 제거하기
      • 프린터
      • 다음 큰 숫자
      • 최댓값과 최솟값
      • 최소값 만들기
      • 숫자의 표현
      • JadenCase 문자열 만들기
      • 오픈채팅방
      • 영어 끝말잇기
      • 멀쩡한 사각형
      • 올바른 괄호
      • 위장
      • 기능개발
      • 더 맵게
      • 스킬트리
    • 완전탐색
      • 모의고사(Lv1)
      • 카펫(Lv2)
      • 소수 찾기(Lv2)
    • 정렬(Sorting)
      • K번째 수(Lv1)
      • 가장 큰 수(Lv2)
      • H-Index(Lv2)
    • 해시(Hash)
      • 완주하지 못한 선수(Lv1)
      • 전화번호 목록(Lv2)
    • 탐욕법(Greedy)
      • 체육복(Lv1)
      • 큰 수 만들기(Lv2)
      • 구명보트(Lv2)
    • 동적계획법(DP)
      • 정수 삼각형(Lv3)
    • 깊이/너비 우선 탐색(DFS/BFS)
      • 타겟 넘버(Lv2)
      • 네트워크(Lv3)
      • 단어 변환(Lv3)
  • 스프링부트 책
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
  • JPA 책
    • 프로젝트 세팅 및 기본설정
    • 영속성 관리 개념
    • 엔티티 매핑
      • 실습 예제
    • 연관관계 매핑 기초
      • 실습 예제
    • 다양한 연관관계 매핑
      • 다대일, 일대다 관계
      • 일대일, 다대다 관계
      • 실습 예제
    • 고급 매핑
      • 상속 관계 매핑
      • @MappedSuperclass
      • 복합 키와 식별 관계 매핑
      • 조인 테이블
    • 프록시와 연관관계 관리
      • 프록시
      • 즉시 로딩과 지연 로딩
      • 영속성 전이, 고아 객체
    • 값 타입
      • 임베디드 타입
      • 값 타입과 불변 객체
      • 값 타입의 비교, 컬렉션
    • 객체지향 쿼리 언어
      • JPQL part1
      • JPQL part2
      • JPQL part3
      • QueryDSL
      • NativeSQL
      • 객체지향 쿼리 심화
    • 응용 애플리케이션
      • 엔티티 설정
    • 스프링 데이터 JPA
      • 공통 인터페이스
  • Kotlin In Action
    • 코틀린의 특징
    • 코틀린의 기초
    • 함수 정의와 호출
    • 클래스, 객체, 인터페이스
    • 람다 방식
    • 코틀린 타입 시스템
    • 연산자 오버로딩과 기타 관례
    • 고차함수
    • 제네릭스
    • 애노테이션과 리플렉션
    • 코루틴
  • Oracle
    • Oracle 기본
    • Oracle 심화
  • SQL_연습
    • Revising the Select Query
    • Basic Select
    • Advanced Select
    • Basic Select 2
  • SQL 첫걸음(책)
    • Day 1
    • Day 2
    • Day 3
    • Day 4
    • Day 5
    • Day 6
    • Day 7
    • Day 8
    • Day 9
    • Day 10
    • Day 11
    • Day 12
    • Day 13
    • Day 14
    • Day 15
    • Day 16
    • Day 17
    • Day 18
    • Day 19
    • Day 20
    • Day 21
    • Day 22
    • Day 23
    • Day 24
    • Day 25
    • Day 26
    • Day 27
    • Day 28
    • Day 29
    • Day 30
  • 더 자바 코드를 조작하는 다양한 방법
    • JVM 이해하기
    • 바이트코드 조작
    • 리플렉션
    • 다이나믹 프록시
    • 애노테이션 프로세서
  • 더 자바, 애플리케이션을 테스트하는 다양한 방법
    • JUnit5
    • Mockito
    • 도커와 테스트
    • 성능, 운영이슈, 아키텍처 테스트
  • 이펙티브 자바
    • item1 - 생성자 대신 정적 팩토리 메소드를 고려하라
    • item2 - 생성자에 매개변수가 많다면 빌더를 고려하라
    • item3 - 생성자나 열거타입으로 싱글턴임을 보증하라
    • item4 - 인스턴스화를 막기 위해선 private 생성자를 사용하라
    • item5 - 자원을 직접 명시하지 말고 의존 객체 주입을 사용하라
    • item6 - 불필요한 객체 생성을 피하라
    • item7 - 다 쓴 객체 참조를 해제하라
    • item8 - finalizer와 cleaner 사용을 피하라
    • item9 - try-finally 보다 try-with-resources을 사용하라
    • item10 - equals는 일반 규약을 지켜 재정의하라
    • item11 - equals을 재정의하려면 hashCode도 재정의하라
    • item12 - toString을 항상 재정의하라
    • item13 - clone 재정의는 주의해서 진행하라
    • item14 - Comparable을 구현할지 고민하라
  • Elastic Search
    • 강의 Summary
    • Elastic Summary 개념 정리
    • Elastic Summary 적용 정리
  • 토비의 스프링 강의
    • 스프링부트 살펴보기
    • 독립 실행형 서블릿 애플리케이션
  • k8s
    • minikube 설치
    • jenkins 추가
  • Article
    • Choosing the Right MessageBroker
Powered by GitBook
On this page

Was this helpful?

  1. 학교 나머지 공부 자료
  2. 웹프레임워크(Spring)

Webframework1-1

스프링 MVC에 대한 것들의 노트

웹 프레임워크 : Inversion of Control

App구조 : 코드의 상당부분을 제공해준다 -> 핵심 로직에만 집중할 수 있다

스프링

​ Light Weight Java Application Framework

​ POJO - Plain Old Java Object 기반의 엔터프라이즈 App 개발을 쉽고 편하게

Dependency Injection

​ Bean Container가 bean을 만들게 되고 의존성 주입을 실행시켜준다.

​ Inversion of Conrol은 Dependency Injection이라고도 불리운다

The Spring Container의 주된 기능

​ 객체의 생성과 관리 - Inversion of Control

​ 객체의 의존성을 주입 - Dependency Injection

Spring Container의 configuration metadata(환경설정)

​ xml

​ java annotation

​ java-based configuration

  • Spring Conter의 종류

    • BeanFactory -> XMLBeanFactroy

    • ApplicationContext -> ClassPathXmlApplicationContext

    • ApplicationContext context = new ClassPathXmlApplicationContext("kr/ac/hansung/spring/beans/bean.xml");
      HelloWorld obj = (HelloWorld)context.getBean("helloWorld");
  • Advantages of DI

    • 의존성이 줄어든다 = 변화에 용이

    • 재사용률이 증가한다(Reuseable, Testable, Readable)

  • Beans : POJO를 bean이라고 부른다

    • 속성 : class, id, scope(singleton, prototype, request, session), constructor, property, init, destroy

      • scope에 singleton을 넣어주면 스프링컨테이너를 한번만 만들고

      • prototype은 새로운 요청을 받을때마다 생성

    • xml파일에서 선언시 내부에서 태그 안의 속성으로 어떤 빈의 의존성을 주입받을 것인지 정할 수 있따.

      • <constructor-arg태그 안에 type값을 줘서 type값대로 주입

      • constructor-arg태그 안에 index값을 줘서 자리를 구체화 시킨다

  • Annotation을 사용하기 위해서는

    • pom.xml(maven설정파일)에서

      • 태그를 넣어주거나

      • <context:annotation-config/>
    • @Required - 뭔가 빠트려도 @Required를 써둔게 안나오면 에러로 알려줌

      • Setter에만 사용이 가능

      • 엄격하게 xml에 존재하는지 확인한다

      • 이렇게 bean안에 넣어주고 @Required를 쓰게되면 setter함수의 property값이 xml에 있는지 확인해준다

    • @Autowired

      • 태그를 넣어준 함수의 타입을 bean에서 찾아서 자동으로 주입

      • 자동주입 대상에 Autowired를 적고 bean을 등록만하면 태그가 필요 없어짐

    • @Qualifier

      • @Qualifier(value=" ")여기 value값을 따라가서 xml에서 를 찾는다.

      • @Autowired를 해주고 @Qualifier를 해줘서 Autowired에서 헷갈리는 것을 처리해줌

    • @Resource(name="") 으로 이름으로 autowiring해준다

      • @Resource는 이름으로 autowire해주고

      • @Autowired는 타입으로 autowire한다

  • Maven

    • 원격 repository에서 자동으로 원하는 것을 의존성을 고려해서 다운로드해주는 소프트웨어

    • apache에서 제공하는 sw

    • 자동으로 많은 의존성을 가져올수 있음, 의존성관리툴

    • 과정은 compile -> plugin -> plugin:goal

    • pom.xml에서 작성을 해두고 실행을 하게되면 maven core를 통해 원격저장소에서 필요한 툴들을 가져와서 local repository에 저장하게 된다.

    • 만약 a->b b->c 이면 a->c인데 만약 a에서 c에 관한 툴이 필요없으면 으로 제외하는 것이 가능하다

      • 여기서 만약 b->c인데 c는 필수가 아닌 상태이고 여기서 a->b가 되면 a->c이냐

        • 이건 명시적으로 포함한다고 하지 않으면 포함되지 않는다

  • POM(Project Object Model)

    • 설정파일이라고 생각하면 된다

    • 이렇게 3개로 좌표세트이다

  • Super POM

    • 모든 POM은 default으로 super POM을 상속받는다.

    • POM간에서도 상속이 존재하고 상속에서의 부모는 로 표시, 여기 안의 에 받을 부모의 이름을 적어준다.

  • Build lifecycle : compile -> test -> package -> install -> deploy

  • Dependency Mechanism

    • 만약 같은 lib을 의존해서 자동으로 다운로드받게되면 가장 가까운 lib을 의존하게 된다

    • dependency scope :

      • provided : packaging시 빠지게 된다

      • runtime : run, test시에는 필요하지만 compile에는 필요없는 경우 / jdbc같은 파일

      • test : 평소에는 필요없지만 test compile시, execution시 필요

AOP(Aspect Oriented Programming) : 여러개에 거쳐있는 function들을 독립적으로 뺄 수 있음 = 재사용성이 올라감

  • 의의는 class들을 분리시켜두었다가 runtime시 주입해서 사용하겠다는 것

  • 장점

    • concern의 분리

    • 코드의 재사용성, 모듈화가능

    • 의존성이 약한 디자인

  • aop에서의 사용단어들 : Joinpoint, advice, PointCut

    • Aspect : concern을 구성하고 있는 클래스

    • JoinPoint : 우리 application안의 function

    • Pointcut : JoinPoint의 집합, advice가 실행되야 함

    • Advice : 실제로 실행될 메소드

      • before, after, after-returning, after-throwing, round

  • @Pointcut("execution(sound())")이렇게달아두고 => Advice에 @Before("@Pointcut해둔 함수") => @Pontcut안에 넣어둔 함수를 실행하게되면 @Before가 실행되고 나서 실행된다

  • Aspect의 선언방법으로는

    • XML 설정파일에서 선언하는 방법

      • spring-aspects or aspectjrt을 pom.xml에 선언해둬야함

        1. Aspect을 구현 -> 함수하나를 구현

        2. Aspect을 선언 ->

          1. <aop:config>
                <aop:aspect id="식별자" ref="1번에 구현한 함수">
            
            <bean id="1번에 구현한 함수" > 
            bean으로 등록한 후, aspect으로 등록
        3. Pointcut을 선언

          1. <aop:config>
                <aop:aspect>
                    <aop:pointcut id="함수"
        4. advice을 선언

          1. <aop:config>
                <aop:aspect>
                    <aop:pointcut
                        <aop:before
                        <aop:after
                        <aop:after-returning
                        <aop:after-throwing
    • @Aspect으로 설정하는 방법

        1. @Aspect주석을 달아준다

        2. @Aspect을 달아준 함수안에 @Pointcut("pointcut 표현식")을 넣어주고

        3. @Aspect을 달아준 함수안에 @Pointcut의 아이디에 해당하는 값를 함수로 만들어준다

        4. @Aspect을 달아준 함수 안에 @Before(함수)를 넣어서 joinpoint를 처리해준다

      • 이렇게 @Aspect을 사용하게되면 한 함수안에서 모든 것을 해결할 수 있다.

Spring JDBC : 라이브러리이고, DAO(Data Access Object)를 통해서 db와 연결한다.

  • 사용하기 위한 라이브러리(pom.xml에 넣어줘야하는 artifactId)

    • commons-dbcp2

    • mysql-connector-java

    • spring-jdbc

  • JDBC Template

    • spring-jdbc의 중요 클래스중 하나이다

    • 알아서 자동으로 모든 데이터베이스와의 통신을 해결해줌

    • 톰캣에는 request가 올때 처리해줄 스레드를 미리 만들어두고 있는데 DB connection pool에서도 똑같이 미리 db에 접속할때 필요한 스레드를 미리 생성해두고 대기

    • beans.xml에서 dataSource라는 빈을 설정하고 
      @Autowired로 dependency injection을 해주고
      public void setDataSource(DataSource dataSource){
          선언을 해주고
          this.jdbcTemplateObject = new JdbcTemplate(dataSource);
      }
      public List<Offer> getOffers(){
          이렇게 쿼리문을 사용
          return jdbcTemplateObject.query("select * from offers");
      }
    • jdbcTemplateObject.queryForObject(sql문, sql문의 ?에 들어갈 값, 리턴되는 타입)

    • Mapper함수를 이용해서 queryForObject의 결과값인 ResultSet을 매핑해서 원하는 객체로 생성해준다.

      • 따로 Mapper함수 만들어서 사용하는것도 방법이지만 handler방식으로 함수생성해서 사용가능

  • JDBC Driver

    • mysql-connecter

  • Data Source

    • jdbc.properties라는 파일에 감춰야하는 정보들을 넣어둠

    • beans.xml에서 위의 jdbc.properties를 찾아서 넣어주고 꺼내서 사용하는 방식

  • DAO(Data Access Object)

    • 관계형 데이터베이스에 접속하기 위한 객체지향적 API

  • JDBC의 종류

    • Plain JDBC : 예외처리를 하기 위해서 필요없는 코드를 반복해서 써야한다

      • sql문같은것도 일일이 적어줘야한다

    • Spring JDBC : 뭐 여러가지 세세한 디테일들을 알아서 처리해준다

Spring MVC Framework -> 웹 애플리케이션의 Model, View, Controller를 제공해줌

  • Model : 웹 애플리케이션의 데이터(Plan Old Java Object)

  • View : model을 rendering 해주는 담당

  • Controller : 사용자의 request를 처리해주는 담당

  • Structure

    • Dispatcher Servlet : 모든 request를 가로채서 적절하게 분배

    • Handler Mapping : @RequestMapping을 통해서 적절한 컨트롤러에게 보내줌

    • Controller : 요청을 처리해주고 결과를 모델객체에 붙혀서 view에서 보여줌

    • View Resolver : 이름을 통해서 파일을 찾아줌

    • View : JSP, HTML, XML, Velocity등등

  • Configuration

    • POM.xml : maven설정파일

      • spring-webmvc

    • web.xml : 톰캣설정파일

      • <param-name 으로 contextConfigLocation, <param-value 으로 xml을 넣어줌

    • root-context.xml / servlet-context / dao-context / service-context : Spring MVC Configuration

      • servlet-context는 정적인 자원을 처리해주고 spring의 DispatcherServlet에서 로딩됨

    • <annotation-driven : annotation을 사용하겠다고 알려줌

    • <resource mapping=... : 정적인자원을 매핑해줌

    • Bean InternalResourceViewResolver

      • prefix에서 어느 위치에서 참고할것인지

      • suffix에서 어떤 타입을 사용할 것인지

    • <context: component-scan : 자동으로 패키지를 찾을때

  • Model : 결과물을 저장하는 곳

    • java.util.Map을 받아서 Map 키-값 형태로 저장

    • model.put을 사용하게되면 위와 같은 형태이지만 항상 이름을 지정해줘야함

    • model.addAttribute(Object) : 이렇게 사용하면 키값을 주지 않아도 됌 또한 연속해서 사용가능

  • Controller

    • @Controller를 사용해서 해당 클래스가 컨트롤러임을 알림

    • @RequestMapping : 해당 url을 받으면 이 클래스를 실행

      • url만 적을수 있고, method만 적을 수 있고, url + method 둘다 적을 수 있음

    • return "뷰파일이름"

    • @RequestParam : get방식의 파라미터값 ?key=value&key2=value2이렇게 넘어오는 파라미터를 자동으로 key/value를 분리해서 줌

  • View

    • JSTL(JSP Standard Tag Library)

      • POM.xml에 jstl을 추가해줘야함

      • <%@taglib prefix="c" 는 core에 해당

      • <%@taglib prefix="fn"은 jsrtl의 함수에 해당

Spring Web Form

  • Web Basics

    • Request Parameters : http request message

      • get : query string으로 넘어오게 되고

      • post : HTTP body부분에 담겨서 넘어오게 된다

  • Data Binding

    • request parameter를 객체로 변경하는 2가지 방법

      • @RequestParam

      • form bean

        • url을 받는 @RequestMapping(value="함수")로 함수를 선언하고 그 함수의 인자로 객체를 넣어줌

          • 새로운 form bean이 생성됨

          • request를 넣어줌

          • 모델에 추가됨

  • Data Validation

    • Hibernate Validator

      • validation의 api인 JSR-303을 강화해서 만듬

      • @NotNull, @Size, @Pattern, custom의 Annotation

      • pom.xml에 hibernate-validator를 추가

      • 모든 태그에 message를 넣어서 에러 발생시 메세지를 출력

      • 위의 데이터 바인딩시, 객체를 넣어준 인자앞에 @Valid를 넣어주면 자동적으로 객체를 검증하고 결과가 model에 들어감

      • 또한 그 인자 다음 인자로 BindingResult를 넣어주면 result에 대한 객체로 사용가능

  • Data Buffering

    • 만약 데이터를 입력한 후에 에러나가면 없어지니까 입력했던 정보를 남기는 방법

    • 방법

      • JSP파일에서 <%@taglib prefix='sf' 선언

        • 스프링폼이라는 의미

        • <sf:form

        • <sf:input

        • <sf:password

        • <sf:checkbox

        • <sf:error

Spring Security

  • servlet filter로 request와 response를 intercept해줌

  • pom.xml에 spring-security-core, spring-security-web, spring-security-config를 넣어줌

    • DelegatingFilterProxy를 사용해서 모든 request를 intercept한다

  • web.xml에서 springSecurityFilterChain을 넣어주고 <param-value에 security-context를 넣어줌

  • security-context에서 authentication부분에서 password시 {noop}으로 인코딩

    • <security:http auto-config="true" use-expression="true">
          <security:intercept-url pattern="/secured/**" access="hasRole('~')">
    • hasRole이나 isAuthenticated이나 permitAll

  • Login폼을 특별히 정해주지 않으면 /login을 누르면 스프링에서 제공해주는 기본적인 로그인폼을 제공해줌

    • 자신이 만든 login form을 사용하고 싶다면 security-context에서 이렇게 해주면 form-login요소가 기본 세팅을 덮어써준다

    • @RequestMapping(value="/login", method=RequestMethod.GET) annotation을 추가해준 함수의 return은 view로 return="login"

    • form에서 <c:url value="/login"

  • Authentication Fail => JSP파일에서 <c:if test="${not empty errorMsg}"

Logging : 어딘가에 기록해두는 과정

  • 장점

    • 디버그는 완벽히 app의 문맥을 따라가지 않고 따로 저장한다

    • 사람의 개입이 없다

    • 영구적으로 저장되서 나중에 연구가능

  • 단점

    • 애플리케이션의 속도를 낮춤

    • 너무 많을수도있음

  • Logback방식을 자주 사용한다

  • SLF4J(Simple Logging Facade for Java) : facade패턴을 사용했음

    • facade 패턴 : 클라이언트가 직접 시스템에 접근하지 않고 api를 거쳐서 접근하는 방식

    • import org.slf4j.Logger, LoggerFactory, getLogger(클래스)로 사용한다.

    • 대신 하나밖에 사용할 수 없다.

  • Logback -> pom.xml에서 logback-classic을 선언해주면

    • 자동으로 slf4j-api와 logback-core를 가져와준다.

  • 만약 따로 설정파일을 지정해주지 않는다면 logback.xml 파일을 찾는다.

  • Logback class

    • logback-core : Appender, Layout

    • logback-classic : Logger

      • logger의 단계 : trace -> debug -> info -> warn -> error

        • 레벨지정을 해주지 않는다면 가장 가까운 부모의 단계를 상속받고

        • root logger의 디폴트 값은 debug이다.

        • parameterized logging

        • Object entry = new SomeObject();

          logger.단계("The entry is {}.", entry)

      • appenders : 어디에다가 로그 기록을 넣을 것인가?

        • higher in the hierarchy 자식은 부모, 루트의 지정장소 모두에 적게된다.

          • Console, File, Appender :

          •  <appender name="STDOUT" class="~ConsoleAppender">
             or
             <appender name="FILE" class=="~FileAppender">
                 <encoder>
                     <pattern> %d
            
             <root level="info">
                 <appender-ref ref="STDOUT"/>
             </root>
             or
             <root level="info">
                 <appender-ref ref="STDOUT"/>
                 <appender-ref ref="FILE"/>

maven / pojo /di - singleton, prototype / selectSound() / @Valid / 주소쓰기-url / login , login?error, logout / @Repository / data object / ="offer" / <prefix /

PreviousSpring이란?NextWebframework1-2

Last updated 3 years ago

Was this helpful?