개발을 하다 보면 로컬 환경, 개발환경, 운영환경 등 다양하게 구분하여 사용합니다. 이를 간단하게 관리하는 방법을 알아보겠습니다. // application.properties의 경우도 동일한 방식으로 설정이 가능합니다. 1. application-{이름}.yml 만들어주기 예를 들어 로컬 환경이면 application-local.yml 실제 운영 환경이면 application-prod.yml 등 필요한 여러 방식들을 만들어 줍니다 2. 각 환경에 맞는 설정하기 공통적인 설정들은 application.yml에 모두 해주고 각 환경별로 다른 부분만 해당 파일에 설정을 해주시면 됩니다. 알아보기 쉽게 7777로 해봤습니다. 3. 사용할 환경 입력해주기 application.yml 에서 사용할 환경을 입력하고..
로컬 환경에서 인증서를 생성하고, 인증서를 이용하여 HTTPS 서버를 만들어 보자 ✔️ 인증서 발급 자바는 두 가지의 인증서 형식을 지원한다 PKCS12 (Public Key Cryptographic Standard #12) : 여러 인증서와 키를 포함할 수 있으며, 암호로 보호된 형식 (업계에서 널리 사용됨) JKS (Java KeyStore) : PKCS12와 유사하다. 독점 형식이며, Java 환경으로 제한된다. ✅ macOS 기준, Homebrew를 이용하여 인증서를 발급받을 수 있다 # mkcert를 설치한다. $ brew install mkcert # firefox를 사용할 경우 필요에 따라 설치해주세요. $ brew install nss ✅ 인증서 생성 로컬을 인증된 발급기관으로 추가한다. ..
로컬 개발환경과 서버 환경을 따로 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..
Aspect Oriented Programming 관점 지향 프로그래밍 어떠한 로직을 기준으로 핵심적인 관점, 부가적인 관점으로 나누어 그 관점을 기준으로 각각 모듈화 하는 것 OOP 모듈화의 핵심 단위는 클래스 AOP 모듈화의 핵심 단위는 관점(Aspect) AOP는 기존에 사용하던 OOP를 대체하기 위한 것이 아닌 횡단 관심사를 깔끔하게 처리하기 위해 OOP의 부족한 부분을 보조하는 목적으로 개발됨 AOP가 필요한 이유 소프트웨어 개발에서 변경 지점은 하나가 될 수 있도록 잘 모듈화 되어야 함 부가 기능처럼 특정 로직을 애플리케이션 전반에 적용하는 문제는 일반적인 OOP 방식으로는 해결이 어렵기 때문에 핵심 기능과 부가 기능을 분리하는 AOP 방식이 필요함 OOP 방식의 프로그래밍을 했을 때 여러 곳..
1. 클라이언트가 요청을 전송하면 DispatcherServlet 이라는 클래스에 요청이 전달됨 2. DispatcherServlet은 클라이언트의 요청을 처리할 Controller에 대한 검색을 HandlerMapping 인터페이스에 요청 3. HandlerMappting은 클라이언트 요청과 매핑되는 핸들러 객체를 다시 DispatcherServlet에게 리턴 핸들러 객체는 해당 핸들러의 Handler 메서드 정보를 포함하고 있음 Handler 메서드는 Controller 클래스 안에 구현된 요청 처리 메서드를 의미 4. 실제로 클라이언트 요청을 처리할 Handler 메서드를 찾아서 호출해야 하므로 DispatcherServlet은 Handler 메서드를 직접 호출하지 않고, HandlerAdpater..