✔️ Cookie 쿠키는 클라이언트에 데이터를 저장하기 위한 수단 중 하나이다. 서버가 클라이언트에게 쿠키를 전송하기도 하며, 클라이언트가 서버로 쿠키를 전송하기도 한다. 서버가 클라이언트에 데이터를 저장할 수 있으나, 아무 때나 데이터를 이용할 수는 없다. 데이터를 저장한 이후 특정 조건들이 만족하는 경우에만 다시 가져올 수 있다. 이러한 조건들은 쿠키 옵션으로 표현할 수 있습니다. ✅ Domain 쿠키의 도메인 옵션과 서버의 도메인이 일치해야만 쿠키를 전송할 수 있게 한다. 도메인은 www.google.com 과 같은 서버에 접속할 수 있는 이름이다 쿠키 옵션에서 도메인은 포트 및 서브 도메인 정보, 세부 경로를 포함하지 않는다. 쿠키 옵션의 도메인은 http://www.localhost.com:30..
✔️ Hashing 어떠한 문자열에 '임의의 연산'을 적용하여 다른 문자열로 변환하는 것 모든 값에 대해 해시 값을 계산하는데 오래 걸리지 않아야 한다. -> 변환이 한 시간 걸린다면 로그인도 한 시간 걸린다는 뜻 최대한 같은 해시 값을 피해야 하며, 모든 값은 고유한 해시 값을 가진다. 아주 작은 단위의 변경이라도 완전히 다른 해시 값을 가져야 한다. ✅ 대표적인 해싱 알고리즘 MD(Message Digest) - MD4, MD5, MD6 SHA(Secure Hash Algorithm) - SHA-1, SHA-256, SHA-512 RIPEMD(RIPE Message Digest) WhirlPool ❗️ 이미 보안이 뚫린 해시 함수가 존재하므로 주의하여 사용해야 한다. ex) MD5, SHA-1, HA..
로컬 환경에서 인증서를 생성하고, 인증서를 이용하여 HTTPS 서버를 만들어 보자 ✔️ 인증서 발급 자바는 두 가지의 인증서 형식을 지원한다 PKCS12 (Public Key Cryptographic Standard #12) : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식 (업계에서 널리 사용됨) JKS (Java KeyStore) : PKCS12와 유사하다. 독점 형식이며, Java 환경으로 제한된다. ✅ macOS 기준, Homebrew를 이용하여 인증서를 발급받을 수 있다 # mkcert를 설치한다. $ brew install mkcert # firefox를 사용할 경우 필요에 따라 설치해주세요. $ brew install nss ✅ 인증서 생성 로컬을 인증된 발급기관으로 추가한다. ..
드디어 본격적으로 Spring MVC를 배웠다. 다양한 실습 과제들이 주어졌는데 확실히 나는 이론보다는 실전 파다. 이론 학습을 할 때는 사실 보면서도 이걸 어디다 써먹지? 하고 하품이 나오지만 과제를 해결하기 위해 이리저리 검색도 하고 직접 코드를 칠 때만큼은 너무 재밌고 확실히 느껴지고 내 것이 된다. 늦여름에 시작한 부트 캠프지만 벌써 가을이 끝나가고 겨울이 다가오고 있다. 올 겨울은 금방 지나갈 것 같은 생각이 든다. 봄이 오면 세상으로 나갈 준비가 끝이 나게 된다. 그날이 올 때까지 좀 더 강한 새싹이 되어보자. ✅ 목표 개발의 전체적인 흐름을 확실하게 파악하자 👍 Keep 직접 코딩을 하는 순간의 집중력 배운 내용에 대한 꾸준한 블로깅 👎 Problem 내가 개발자가 될 수 있을까? 라는 불안..
👉 A 씨는 커피 주문 앱으로 아이스 아메리카노를 선택하고 결제 버튼을 누른 후, 주문이 진행되는 중에 네트워크 오류로 인해 결제를 완료하는데 실패했습니다. 그런데, A씨가 주문한 커피는 정상적으로 데이터베이스에 등록이 되었습니다. 이 경우, 카페를 운영하는 쪽에서는 판매 수익을 얻지 못하는 손해를 보게 됩니다. ✔️ 트랜잭션 (Transaction) 이란 ? 위의 사례를 예방하기 위해 여러 개의 작업들을 하나의 그룹으로 묶어서 처리하는 단위입니다. 즉, 여러개의 작업들을 하나의 작업으로 보고 전부 성공해야만 실제 데이터에 반영하도록 하는 것입니다. 전부 성공하든가 전부 실패하든가(All or Nothing)의 둘 중 하나로만 처리되어야 트랜잭션의 의미를 가질 수 있습니다. -> 하나라도 실패하면 모두 ..
로컬 개발환경과 서버 환경을 따로 Profile을 설정해보자 프로젝트 폴더 내의 src/main/resources 에 보면 application.properties 라는 파일에서 Profile을 설정하는데 본인은 .yml 형식을 선호하므로 application.yml 형식으로 바꾸어 주었다. (뭐로 사용하든 관계없음) 사진과 같이 복사해서 2개의 파일을 더 만들어 준다. local 이라고 되어있는 파일에는 로컬 개발환경의 profile을 설정해주고 # 예시) 로컬 환경에서 사용하는 정보들은 application-local.yml 파일에 설정 spring: h2: console: enabled: true path: /h2 datasource: url: jdbc:h2:mem:test jpa: hibernat..
연관 관계 매핑은 참조하는 방향성을 기준으로 단방향과 양방향으로 구분할 수 있다 그리고 엔티티 간에 참조할 수 있는 객체의 수에 따라서 일대다(1:N), 다대일(N:1), 다대다(N:N), 일대일(1:1)로 나눌 수 있다 단방향 연관 관계 한쪽에서만 참조할 수 있는 경우 Member 클래스가 Order 객체를 원소로 포함하고 있으므로, Order를 참조할 수 있다 하지만 Order 클래스는 Member 클래스에 대한 참조 값이 없으므로 Order 입장에서는 Member의 정보를 알 수 없음 양방향 연관 관계 서로 참조할 수 있는 경우 Member 클래스는 Order 객체들을 원소로 포함하고 있고 Order 클래스도 Member 객체를 가지고 있으므로 서로 참조할 수 있다 일대다 (1:N) 일(1)에 해당..
@Entity 클래스 레벨에 @Entity 애너테이션을 붙이면 JPA 관리 대상 엔티티가 된다 -> 데이터베이스의 테이블이 된다는 뜻 애트리뷰트 name 엔티티 이름을 설정할 수 있음 name 애트리뷰트를 설정하지 않으면 기본값으로 클래스 이름을 엔티티 이름으로 사용한다 import javax.persistence.Entity; import javax.persistence.Id; import javax.persistence.Table; @Entity(name = "USERS") // 엔티티명을 USERS로 설정 @Table(name = "USERS") // 테이블명을 USERS로 설정 public class Member { @Id private Long memberId; } @Table 테이블의 이름을 ..
JPA란 ? Java 진영에서 사용하는 ORM 기술의 표준 사양 - Java의 인터페이스로 사양이 정의되어 있음 Java Persistence API의 약자이지만 현재는 Jakarta Persistence라고도 불림 Hibernate ORM JPA 표준 사양을 구현한 구현체 (이 외에도 EclipseLink, DataNucleus 등이 있음) 데이터 액세스 계층에서의 JPA 위치 데이터 액세스 계층의 상단에 위치함 데이터 저장, 조회 등의 작업은 JPA를 거쳐 JPA의 구현체인 Hibernate ORM을 통해서 이루어지며 Hibernate ORM은 내부적으로 JDBC API를 이용해서 데이터베이스에 접근한다 영속성 컨텍스트 (Persistence Context) JPA의 P에해당하는 Persistence..