java 10

[JPA] 양방향 연관관계 & 연관관계의 주인 (2)

이번에는 양방향 연관관계에서의 저장과 편의메소드를 다뤄보겠습니다. 왜 이 주제를 따로 다뤄야 하는지는 저번에 이야기 했었던 연관관계의 주인과 연관이 있습니다. 연관관계의 주인이 아닌 쪽은 읽기만 할 수 있다고 적었었는데요, 그 말은 연관관계의 주인 쪽에서 저장을 할 수 있다는 말과 같습니다. public void testSaveNonOwner() { Member memebr1 = new Member("member1", "회원 1"); em.persist(member1); Member memebr2 = new Member("member2", "회원 2"); em.persist(member2); Team team1 = new Team("team1", "팀 1"); team1.getMembers().add(m..

BackEnd/JPA 2022.05.14

[JPA] 양방향 연관관계 & 연관관계의 주인 (1)

이번에는 양방향 연관관계와 연관관계의 주인에 대해서 작성해보겠습니다. 기본(3) 으로 넣을까하다가 그렇기에는 중요한 개념인 것 같아서 따로 뺐습니다. 앞에 작성했던 글에서는 모두 단방향 연관관계만 다루었습니다. 양방향 연관관계부터 시작해보겠습니다. 양방향 연관관계 DB의 테이블에서는 단방향이라는게 없었습니다. 외래 키를 통해서 항상 양쪽 모두에게서 접근이 가능했죠. 하지만 객체간의 관계에서는 어떻게 해야할까요? 위의 예시에서 먼저 생각할 점은 다대일 관계라는 것 입니다. 다시 코드를 통해서 보겠습니다. 먼저 Member 의 경우에는 이전의 예시와 다를게 없어보입니다. @Entity public class Member { @Id @Column(name="MEMBER_ID") private String id..

BackEnd/JPA 2022.05.09

[JPA] 연관관계 매핑 : 기본 (2)

지난 글에 이어서 연관관계 매핑 기본이라고 생각되는 부분을 이어서 작성하겠습니다. 이번에는 연관관계를 매핑한 엔티티를 어떻게 저장,수정하는지 알아보려고 합니다. public void save() { Team team1 = new Team("team1", "팀 1"); em.persist(team1); Member member1 = new Member("member1", "회원 1"); member1.setTeam(team1); em.persist(member1); Member member2 = new Member("member2", "회원 2"); member2.setTeam(team1); em.persist(member2); } 위의 코드를 보겠습니다. 코드를 보면 두개의 Member 엔티티에 Team..

BackEnd/JPA 2022.05.08

[JPA] 연관관계 매핑 : 기본 (1)

JPA 에서 첫번째로 넘어야 할 산이라고 생각되는 연관관계 매핑입니다. 연관관계 매핑은 단순히 방향을 정하는 것과 다중성을 생각하는 것이 아니라 어플리케이션의 설계와 관련이 있어서 더 어렵기도 하고 중요하다고 생각이 드는 지점입니다. 그 전에 패러다임의 불일치라는 말을 많이 사용했는데, 그 전까지 이해가 잘 안되었다면 연관관계 매핑을 공부하면서 왜 패러다임의 불일치라는 말이 사용되는지 이해하게 될거라 생각합니다. 먼저, RDB 의 경우, 테이블끼리의 외래키로 매핑을 하는 형태입니다. JPA는 이걸 객체의 참조로 해결해야 하기 때문에 패러다임의 불일치가 생기죠. 이 그림을 보면 알 수 있듯이, RDB의 테이블은 외래키를 중심으로 양방향으로 참조가 가능합니다. 하지만 객체의 경우는 다릅니다. 참조하고자 하는..

BackEnd/JPA 2022.05.08

[Spring] JWT + 2 Factor(SMS 인증)

JWT 를 사용하며 2 Factor (sms 인증) 을 하는 방법에 대해서 생각하며 프로젝트를 간단히 만들었습니다. 업무 중, 보안ㅇ 관련하여 2 Factor 인증과 동시접속을 제한해달라는 지시를 받았는데, 이 두 문제를 같이 고려하였습니다. ( 전체 소스 : https://github.com/KyungSik9870/JwtAuthentication ) ✹ JWT (Json Web Token) 사용 JWT 란? JSON 객체를 사용해서 토큰에 정보를 저장하는 Web Token. Header, Payload, Signature 로 이루어져 있습니다. 헤더에 담겨질때, Authorization : 의 형태를 띄고 type 에 대해서는 JWT 에 특정되는 표준은 없고, OAuth2 에 사용되는 Bearer 를 ..

BackEnd/Spring 2021.12.20

[Java] JVM이란?

JVM이란 JVM(Java Virtual Machine)은 자바를 싱행하기 위한 가상 머신이다. 자바로 작성된 어플리케이션은 모두 JVM에서 실행되며, 일반 어플리케이션의 코드는 OS만 거치고 하드웨어로 전달되는 반면, 자바 어플리케이션은 JVM을 한번 더 거치게 된다. 이때문에 자바 어플리케이션은 OS와 하드웨어에 독립적이다. 단, JVM은 OS에 종속적이므로 OS에 따라 실행가능한 JVM이 필요하다. JVM의 메모리 구조 JVM의 3가지 주요 영역에 대해서 써보려고 한다. 1. Method Area 프로그램 실행 중 어떤 클래스가 사용되면, JVM읜 해당 클래스의 클래스파일을 읽어서 분석하고, 클래스에 대한 정보를 이곳에 저장한다. 해당 클래스의 클래스변수 또한 이 영역에 함께 생성된다. 2. Hea..

언어/Java 2019.09.25

[Java] wrapper class

Wrapper Class 래퍼(wrapper) 클래스란 자바의 기본형 변수를 객체로 다뤄야 할 때 사용된다. (기본형 8개는 객체로 다루지 않는다) 래퍼 클래스들은 객체생성 시에 생성자의 인자로 주어진 각 자료형에 알맞은 값을 내부적으로 저장하고 있고, 이에 관련된 여러 메서드가 정의되어있다. 기본형 래퍼클래스 생성자 예시 boolean Boolean Boolean(boolean value) Boolean(String s) char Character Character(char value) Character c = new Character('a'); byte Byte Byte(byte value) Byte(String s) Byte 는 실제 사용 시 byte형의 범위 내에 있는 값을 넣어도 정수의 기본 자..

언어/Java 2019.09.17

[Java] 변수 - 형변환(Casting)

형변환 형변환이란 변수 또는 상수의 타입을 다른 타입으로 변환하는 것을 말한다. 형변환의 방법은 간단하다. 형변환하고자 하는 변수나 *리터럴의 앞에 변환하고자 하는 타입을 괄호와 함께 붙여주면된다. 서로 다른 타입간의 대입 또는 연산을 할 떄, 편의상의 이유로 형변환을 생략할 수 있다. 이를 '자동 형변환'이라고 한다. 자동형변환은 기존의 값을 최대한 보존할 수 있는 타입으로 변환한다. 표현범위가 좁은 타입에서 넓은 타입으로 형변환하는 경우에는 값 손실이 없으므로 두 타입 중 표현범위가 더 넓은 쪽으로 형변환이 이루어진다. boolean을 제외한 기본형 7개의 자동형변환은 그림과 같이 왼쪽에서 부터 오른쪽으로 자동형변환 되며, 오른쪽에서 왼쪽으로의 변환은 명시적으로 형변환연산자를 써줘야 한다. * 기본형..

언어/Java 2019.09.05

[Java] 변수 - 타입

자료형은 값이 저장될 공간의 크기와 저장형식을 정의한 것이다. 자료형은 크게 기본형과 참조형으로 나눌 수 있는데, 기본형 변수는 값을 저장하고, 참조형 변수는 어떤 값이 저장되어 있는 주소를 값으로 갖는다. (메모리에는 1byte단위로 일련번호가 있는데, 이를 메모리 주소라고 한다. 위에서 말한 주소는 변수, 객체가 저장된 메모리 주소를 뜻한다.) * 기본형 변수 분류 타입 논리형 boolean (1 byte) true 와 false 중 하나를 값으로 갖고, 조건식과 논리적 계산에 사용. 문자형 char (2 byte) 문자를 저장하는데 사용, 변수에 하나의 문자만 저장 가능. 정수형 byte (1 byte) short (2 byte) int (4 byte) long (8 byte) 정수를 저장하는데 사..

언어/Java 2019.09.04

[Java] 변수 - 선언과 초기화

변수 변수란 값을 저장할 수 있는 메모리 공간. 하나의 값을 저장할 수 있으므로, 새로운 값을 저장하면 기존의 값은 사라진다. 변수의 선언 변수의 선언은 '변수의 타입 변수이름' 과 같은 형식으로 적어준다. ex) int a; int는 변수의 타입, a는 변수의 이름이다. 변수의 이름은 값을 저장하는 메모리 공간에 이름을 붙여준 것. 변수를 선언하면, 메모리의 빈 공간에 '변수타입'에 알맞은 크기의 저장공간이 확보되고, 이 저장공간은 '변수이름'으로 접근하여 사용할 수 있게 된다. 변수의 초기화 변수는 초기화를 해주어야 한다. 그 이유는 메모리는 자바프로그램 하나만 사용하는 자원이 아닌 여러 프로그램이 공유하는 자원이다. 메모리에 알 수 없는 '쓰레기값'이 남아있을 수 있기 때문에 초기화를 해주어야 한다..

언어/Java 2019.09.04