📖
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-2

스프링MVC에 관한 것들을 적어두었음

hibernate는 ORM(Object Relational Mapping)을 도와주기 위한 solution중 하나이다

hibernate을 통해서 jdbc를 접속하게되는데

→spring에서 hibernate api를 통해서 접속

→hibernate에서 jdbc api를 통해서 접속

→jdbc에서는 원하는 값을 Resultset형식으로 리턴해주고

→hibernate에서는 그 Resultset형식을 domain object형식으로 사용자에게 건내준다

hibernate를 사용하기 위해 필요한건

  • configuration

  • sessionFactory

  • mapping

Configuration은 dao-context.xml파일에서 지정해주거나, hibernate.cfg.xml에서 지정해주면됨

세부내용

  • dataSource → 연결된 db에 관한 정보들을 넣어줌

  • sessionFactory

    • 위에 빈으로 설정해준 dataSource

    • packagesToScan(model)

    • hibernate의 설정

      • <prop key="hibernate.show_sql">true

      • <prop key="hbm2ddl.auto">create

  • transcationManager(위에서 설정한 sessionFactory)

  • component-scan(dao)

SessionFactory

→hibernate에서는 session을 만들어서 db와의 데이터를 주고 받는다

선언하는법

  1. SessionFactory를 @Autowired로 dependency injection을 통해서 주입받는다

  2. sessionFactory = new Configuration().configure().buildSessionFactory();

  3. Session session = sessionFactory.openSession();

  4. Transaction tx = session.beginTransaction();

  5. session밑의 get(원하는타입.class, save한 serializational한 값), saveOrUpdate(), delete(), flush(), close(), createQuery()

  6. tx.commit();

  7. session.close();

  8. sessionFactory.close();

이렇게 단계를 거쳐서 접근한다

하지만 만약에 @Transactional이라는 주석을 사용하게되면

굳이 sessionFactory를 위처럼 객체를 만들고, transaction을 만들고 openSession, beginTransaction으로 시작안하고 commit도 안해도 된다

그냥 Session = sessionFactory.getCurrentSession()을 이용하게되면 현재의 session을 가져오게되고 만약 session이 없다면 새로운 session을 만들어준다

그러면 @Transactional이라는 주석을 붙히면 필요한건 sessionFactory.getCurrentSession과 session의 메소드들(get, save, saveOrUpdate, delete, close, flush, createQuery)만이 남게 된다

  • createQuery 사용

createQuery의 인자로 들어가는것은 HQL(Hibernate Query Language)과 해당 클래스이다

select을 수행시 .getResultList() 을 통해서 확인할 수 있고

update을 수행시 .executeUpdate() 을 통해서 db에 적용시킬 수 있다

Session Object States

  • Transient

  • Detached

  • Persistent

JPA(Java Persistance Api)

Mapping

cascade = CascadeType

  • ALL, PERSIST, MERGE, REMOVE, REFRESH

@Repository @Transaction

@Entity @Table(name="~")

@Id @GenerateValue(strategy.GenerationType.IDENTITY .AUTO .TABLE) @Column(name="~")

@Transient

@ManyToOne 단방향시

one쪽에는 딱히 해줄껀 없고

many쪽에는 이렇게

@ManyToOne(cascade = CascadeType.ALL)

@JoinColumn(name="~")

2개를 넣어줌

@ManyToOne 양방향시

one쪽에는

@OneToMany(mappedBy="many측에서의 변수", cascade=CascadeType.ALL)

이렇게 넣어주고

many쪽에는

@ManyToOne

@JoinColumn(name="~")이렇게만 넣어준다

@OneToOne 단방향시

사용되는쪽은 할거없고

사용하는쪽에서

@OneToOne(optional=false, cascade=CascadeType.ALL)

@JoinColumn(unique=true, name="~")

이렇게 넣어준다

@OneToOne 양방향시

사용되는쪽에서

@OneToOne(mappedBy="사용하는측에서의 변수이름", cascade=CascadeType.ALL)

이렇게 넣어주고

사용하는쪽에서는

@OneToOne(optional=false)

@JoinColumn(unique=true, name="~")

이렇게만 넣어준다

@ManyToMany 사용시

사용되는쪽에서는 할거 없고

사용하는쪽에서

@ManyToMany(cascade = CascadeType.ALL)

@JoinTable(name="", joinColumns={@JoinColumn(name="")}, inverseJoinColumns={@JoinColumn(name="~")}

@OneToMany(mappedBy="밑에서사용하는변수" @ManyToOne(cascade=CascadeType.ALL, fetch=FetchType.EAGER) @OneToOne(optional=false, cascade=CascadeType.ALL) @JoinColumn(unique=true, name="") @ManyToMany(cascade=CascadeType.ALL) @JoinTable(name="", joinColumn={@JoinColumn(name="")}, inverseJoinColumn={@JoinColumn(name="")

Hibernate와 SpringFramework을 연동하는 방법

  1. Maven Dependency

    hibernate-core, spring-orm 두 태그가 들어가야함

  2. Spring Bean Configuration → datasource, sessionfactory, transactionmanager

    hibernate.cfg.xml이나 dao-context.xml에 저장

    datasource요소들

    1. driverClassName

    2. url

    3. username

    4. password

    sessionFactory요소들

    1. datasource

    2. packagesToScan

    3. hibernateProperties

      1. show_sql ⇒ true

      2. hibernate.dialect

    transactionmanager

    1. transaction-manager="transactionManager"

    2. sessionFactory

    DAO Bean

    component-scan : base-package=dao

  3. entity bean

  4. dao layer

REST = REpresentational Status Transfer

  • url, id값으로 resource를 분류한다

  • resource의 표현은 xml, json, text등 으로 표현할 수 있다

RESTful Web Service는 decupling을해줌, client와 server의 분리한다. 그리고 platform agnostic, 즉 client의 platform에 상관없이 같은 것을 제공해준다는 의미

RESTful Web Service의 중요한 요소 3가지는

  • method

  • message

  • resource

HTTP Request Message

  • method + requestURL + httpversion

  • header

  • blank

  • body

HTTP Response Message

  • httpversion + status code + phrase

  • header

  • blank

  • body

Addressing

⇒ resourceType/resourceId

  • 복수형을 사용하라

  • 공백쓰지말고 _ 써라

  • 소문자쓰라

  • 안쓰는 url은 사용중인 url로 redirection시켜라

  • url에 http method가 들어가면 안좋음

METHOD

  • GET, POST, PUT, DELETE

  • OPTION ⇒ 어떠한 http method을 유지할것인가

  • HEAD ⇒ body는 없이 header만 보낼때

CACHING

  • public

  • private

  • no-store

  • max-age

  • must-revalidate

ETag ⇒ resource의 version값으로, 이 값으로 변경사항이 있는지 확인 / 304 Not Modified

Controller → 객체를 return한다

객체를 JSON화 시키는 것은 Serialization 이라고 하고, 이것은 server에서 client로 값을 response해줄때 컨트롤러에서 리턴하는 객체를 json화 시켜서 전송해준다

JSON을 객체화 시키는 것은 Deserializaion이라고하고, 이것은 client가 server로 json을 전송할때 server에서 deserialization이 이루어진다

⇒이것은 jackson-databind 라는 library를 통해서 사용할 수 있는 기능임

@ResponseBody는 컨트롤러에서 객체를 리턴해줄 때, http의 body부분에 그 객체를 넣어주는 개념이다, 클래스에 사용하고, 위치는 접근지정자 다음에 적어주면 된다

@RestController = @Controller + @ResponseBody

@RequestBody는 client에서 보낸 http request의 body에 있는 내용을 객체로 바인딩시켜주는 단계

@PathVariable(value="RequestMapping과 같은 url매핑단계에서의 변수가 들어간다") 타입 변수

이렇게 사용하면 url에서의 변수값을 이 주석뒤의 변수에 집어넣는 것이 가능

ResponseEntity<타입>

여기에는 http reponse의 내용이 들어가게 된다

  • status code

  • header

  • body

Spring Configuration

  1. XML based configuration

  2. Annotation based configuration

  3. Java based configuration

@Configuration

이건 bean을 정의하는 메서드임

이걸 선언한 함수안에서 @Bean 주석을 사용해서 bean을 만들어냄

@Component의 강화된 버전이기 때문에

이걸 선언한 함수도 bean이 됨

왜 SpringFramework를 사용하냐?

  1. 객체들간의 의존성을 줄이기 위해서 → Dependency Injection을 사용해서 의존성을 줄인다

    객체를 다른 클래스에서 사용하기 위해서는 new키워드를 사용해서 쓰는데 이건 의존성이 너무 높다

  2. Plumbing, BollerPlate 코드를 줄인다 ⇒ 필요하지만, businesslogic에는 쓸모없는 코드이기 떄문에 spring에서 해줌으로써 신경을 안써도 됨, 필요하면 abstraction이용해서 추가하면됨

  3. 다른 framework와 통합이 쉬움 ⇒ 서드파티의 framework들을 사용하기가 편리하다

PreviousWebframework1-1NextSpringBoot의 특징

Last updated 3 years ago

Was this helpful?

⇒ create나 update

hbm2ddl.auto