전체 카테고리

`application.properties`를 사용할 때는 `ResourceBundle.getBundle("application");` 정도만 작성해도 됐지만, .yaml(.yml) 파일 사용시에는 별도의 라이브러리를 사용해주어야 한다.build.gradleimplementation 'dev.akkinoc.util:yaml-resource-bundle:2.12.3' yaml 파일을 불러오는 부분private static ResourceBundle properties = ResourceBundle.getBundle("application", YamlResourceBundle.Control.INSTANCE);Integer port = properties.get("server.post"); // 포트 정보 조회
멀리 떨어져있는 컴포넌트들 간의 통신이 필요할 때 컴포넌트 계층간에 전부 emit해주기는 많이 번거로운데, 대안으로 Vue2에서는 EventBus를 사용할 수 있었지만 Vue3에서는 다른 방안을 찾아야 한다. 1. Composition API를 사용하지 않는 경우main.js에서 app을 마운트 하기 전, app의 `config.globalProperties`에 등록하여 `this.{변수명}` 형태로 불러오는 경우가 일반적이다. MyComponent.js...기본적으로 위와 같은 구조를 가지고 있을 것이다. 이럴 경우에 methods 내부에 정의한 메서드에서 mitt를 사용해야 한다면 아래와 같이 작성할 수 있다. mitt를 글로벌 프로퍼티로 등록(main.js)import App from './App..
· Backend/JPA
앞서, JPA를 이용해 데이터를 조회해와 클라이언트로 반환하는 API를 작성할 때에는 반환 타입으로 엔티티를 그대로 사용하면 안된다. 엔티티를 바로 반환할 때의 문제점은 아래 더보기를 참고하자.더보기엔티티를 직접 반환할 때의 단점 1. 엔티티를 직접 노출하게 될 경우 엔티티가 수정되면 API 스펙이 변경되어 버린다. 예를 들어 name 필드를 username으로 변경하게 되면, API를 호출해 Response를 받는 클라이언트측 입장에서는 갑자기 name 데이터를 제대로 가져오지 못하는 경우가 발생한다.2. 엔티티는 다양한 스펙의 API에 대응할 수 있어야 한다. 하나의 API에 의존하는 엔티티는 다른 API 스펙에 유연하게 대처할 수 없다.3. 프레젠테이션 계층을 위한 로직이 엔티티에 추가된다. 엔티티..
· Backend/JPA
JPA는 DB 데이터와 Java Entity를 맵핑해주는 역할을 한다. 이 때, 영속성 컨텍스트(Persistence Context)를 중심으로 엔티티를 맵핑하고 관리한다. 따라서 영속성 컨텍스트라는 개념 없이는 JPA를 이해하기 어렵다. 영속성 컨텍스트(Persistence Context) 영속성(Persistence)의 사전적 의미는 ‘영원히 계속되는 성질이나 능력’이다. 데이터의 상태를 영구히 지속되게 하는 방법은 DB에 저장하는 방식을 떠올리기 쉽다. 하지만, 이 영속성 컨텍스트가 데이터를 관리한다는 말이 실제로 데이터를 DB에 저장하는 것은 아니다. 영속성 컨텍스트는 일종의 논리적인 영역이다. 한번 DB에서 조회해온 데이터는 영속성 컨텍스트에서 관리하며 이를 ‘영속 상태’에 있다고 한다. JPA..
· Backend/JPA
클래스 Member의 구조 @Table(name = "member") @Entity @Setter @Getter @ToString(exclude = "certKey") @Builder @AllArgsConstructor @NoArgsConstructor(access = AccessLevel.PROTECTED) public class Board { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(name = "title", nullable = false) private String title; @Column(name = "content", nullable = false) private String content..
· AWS
내 경우는 웹 서버를 올릴 Public EC2, RDS가 존재하는 구조이다. 현재 RDS는 추후에 생성할 Private EC2랑만 연결되게끔 하기 위해 외부 접근이 불가능하게 설계되어 있어 RDS에 접근할 때마다 Public EC2에 접근해야했다. 그래서 PC에서 바로 RDS에 접근에 데이터를 보기 위해 터널링 하게 되었다. RDS 정보 설정하기 (내 경우에는 RDS가 MySQL이었다.) Connection 설정에서 RDS의 엔드포인트와 DB, username, password를 입력한다. SSH > Use SSH 터널 Public EC2가 하나일 경우(Public EC2 하나를 거쳐 RDS로 접근 가능한 경우) Use SSH 터널 설정을 활성화하고, Settings에 Public EC2 정보를 입력한다..
· Backend/Java
Java 소스 코드의 실행 과정요약자바 파일(.java)은 javac(=java compiler)에 의해 바이트 코드(.class)로 컴파일된다.JVM의 클래스 로더(Class Loader)가 필요한 클래스들을 로드 및 링크하여 JVM 메모리(Runtime Data Area)에 올린다.Java는 런타임(컴파일 타임 X)에 클래스를 처음 참조할 때에는 해당 클래스를 로드하고 링크하는 동적 로드를 한다. 이 동적 로드를 수행하는 부분이 JVM의 클래스 로더이다.클래스 로더의 특징계층 구조 : 부트스트랩 클래스 로더 > Extension 클래스 로더 > System 클래스 로더 순위임 모델 : 클래스 로더끼리 로드를 위임하는 구조로 동작한다. (이전에 로드 된 클래스인지 확인하기 위해 클래스 로더 캐시를 확인..
주요 SQL 문법 1. 다중 조건문 (CASE문) CASE WHEN [조건1] THEN [조건1가 참일 경우 반환 값] WHEN [조건2] THEN [조건2가 참일 경우 반환 값] ELSE [조건들이 모두 거짓일 경우 반환 값] END2. 특정 문자열 포함 여부 확인 예시에서 검사하는 컬럼은 VARCHAR2 타입으로 간주한다. LIKE를 사용하는 경우 : 특정 컬럼의 값에 주어진 문자열이 속한다면 참을, 그렇지 않다면 거짓을 반환한다. -- WHERE절의 조건문으로 사용 SELECT * FROM ITEMS WHERE ITEM_NAME LIKE '%문자열%'; -- CASE문의 조건문으로 사용 SELECT CASE WHEN ITEM_NAME LIKE '%문자열%' THEN &#..
1. Test Code 구조 AAA Pattern & GWT Pattern Arrange : 준비 Act : 실행 Assert : 단언/검증 💡 GWT Pattern : Given - When - Then 단계를 거치는 패턴으로, AAA의 각 단계와 대응된다. 2. Assertions Assertions.assertEquals(T expected, T actual) : 값 검증 Assertions.assertThrows(T expected, Executable e) : Exception 검증 // given Double num = 0.0; // when & then Assertions.assertThrows(RuntimeException.class, () -> { Double val = 1.0; val ..
· 개념
DNS Cf. L1 ~ L4 : Infrastructure 역할 수행 애플리케이션 수준에 존재하는 서비스 중에서도 Infrastructure에 해당하는 것들이 존재한다. 대표적인 것이 DNS(Domain Name Service) 체계이다. 분산 구조형 데이터베이스 데이터베이스 시스템(DNS 네임서버)의 분산 구성 데이터의 영역별 구분(Domain Zone) 및 분산관리 도메인의 네임서버 및 도메인 데이터는 해당 관리주체에 의해 독립적으로 관리된다. 트리(tree) 구조의 도메인 네임(Domain Name) 체계 Domain : 영역, 영토를 의미 도메인 네임의 자율적 생성 생성된 도메인 네임은 언제나 유일(Unique)하도록 네임 체계 구성 Domain 구조 www.naver.com 위의 URL주소에서 ..
devYH
'분류 전체보기' 카테고리의 글 목록