Backend

`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"); // 포트 정보 조회
· 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..
· Backend/Java
Java 소스 코드의 실행 과정요약자바 파일(.java)은 javac(=java compiler)에 의해 바이트 코드(.class)로 컴파일된다.JVM의 클래스 로더(Class Loader)가 필요한 클래스들을 로드 및 링크하여 JVM 메모리(Runtime Data Area)에 올린다.Java는 런타임(컴파일 타임 X)에 클래스를 처음 참조할 때에는 해당 클래스를 로드하고 링크하는 동적 로드를 한다. 이 동적 로드를 수행하는 부분이 JVM의 클래스 로더이다.클래스 로더의 특징계층 구조 : 부트스트랩 클래스 로더 > Extension 클래스 로더 > System 클래스 로더 순위임 모델 : 클래스 로더끼리 로드를 위임하는 구조로 동작한다. (이전에 로드 된 클래스인지 확인하기 위해 클래스 로더 캐시를 확인..
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 ..
· Backend/JPA
JPA는 Java 진영의 ORM 기술 표준으로, 애플리케이션과 JDBC API 사이에서 동작합니다. 💡 ORM(Object-Relational Mapping)은 객체와 관계형 데이터베이스를 매핑시켜줍니다. 객체와 관계형 데이터베이스의 테이블을 매핑해서 두 패러다임간의 불일치 문제를 개발자 대신 해결해줍니다. JPA와 Hibernate의 차이 JPA는 Java ORM 기술에 대한 API 표준 명세입니다. 즉, 인터페이스들을 모아둔 것이므로 JPA를 사용하기 위해서는 JPA를 구현한 ORM 프레임워크를 사용해야 합니다. 이에는 Hibernate, EclipseLink, DataNucleus 가 있는데, Hibernate가 가장 대중적으로 사용됩니다. Hibernate는 자바 진영에서 가장 많이 사용되는 OR..
· Backend/Java
Annotation 어노테이션은 사전적인 정의로 주석이라는 의미를 가집니다. 흔히 개발할 때 접할 수 있는 대표적인 어노테이션들로 @Override, @Deprecated 부터 시작해서 Spring에서는 @Service, @Controller등이 있습니다. JDK 1.5 버전 이상에서 사용 가능하며, 자바 소스 코드에 사이에 @ 기호를 앞에 붙여서 사용할 수 있습니다. 클래스, 필드, 메서드 및 기타 프로그램 요소의 선언부에 사용할 수 있으며, Java 8에 들어와서는 타입 매개변수에도 사용할 수 있게 되었습니다. (관련글 링크) 그렇다면, 왜 어노테이션을 사용할까? 1) 코드가 간결해진다. 개발을 하다보면 저같은 초보 개발자는 보일러 플레이트 코드를 마주하기 쉽습니다. 비슷한 동작을 필요로 하는 곳들마..
· Backend/Java
Annotation Java 8 부터 어노테이션을 1)타입 선언부에도 사용 가능하게, 2)중복해서 사용할 수 있게 바뀌었다. 타입 선언부 제네릭 타입 변수 타입 매개변수 타입 예외 타입 타입에 사용하기 위한 준비 사항 @Target 을 통해 해당 클래스가 어노테이션으로써 사용될 수 있는 곳을 정의할 수 있다. Java 8에 TYPE_PARAMETER와 TYPE_USE 두 가지 타입이 추가되었다. 1) ElementType.TYPE_PARAMETER 해당 클래스를Type Parameter에만 사용 가능해진다. Cf. 하나 이상의 타입 매개변수(Type Parameter)를 선언하고 있는 클래스 혹은 인터페이스를 제네릭 클래스(제네릭 인터페이스)라고 하며,이를 모두 제네릭 타입이라고 한다. 예시로, 어노테이..
이 글은 H2 데이터베이스의 이전 버전 중 1.4.199 버전을 도커 컨테이너로 실행시키는 방법에 대한 글입니다. 가장 최신 버전을 설치하고자 하실 때에는 도커 이미지의 버전을 명시하지 않으시면 되고, 다른 이전 버전을 설치하고자 하실 때에는 버전을 달리 입력하시면 됩니다. 1) 의존성 추가 dependencies { implementation org.hibernate:hibernate-entitymanager:4.3.10.Final implementation com.h2database:h2:2.1.210 } 2) 도커를 통해 H2 설치 이미지 받기 저는 oscarfonts/h2 이미지를 받았습니다. 아래 링크는 도커 허브의 해당 이미지 주소입니다. https://hub.docker.com/r/oscar..
devYH
'Backend' 카테고리의 글 목록