[JPA] 고급 매핑 (상속 관계 매핑, @MappedSuperclass)
·
JPA
상속 관계 매핑 위 사진과 같이 id, 이름(name), 가격(price)이라는 동일한 컬럼을 사용하는 엔티티가 여러 개있는 경우 상속 구조를 이용해 공통되는 컬럼을 추출하여 구현할 수 있다. 구현하는 방법으로는 총 3가지가 있으며 부모 클래스까지 직접 테이블과 매핑되는 3가지 방법 외에 마지막으로 부모 클래스는 테이블과 매핑하지 않고 부모 클래스를 상속받는 자식 클래스에게 매핑 정보만 제공하는 @MappedSuperclass 까지 알아보자.조인 전략 (Joined Strategy) 조인 전략은 엔티티 각각을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키를 받아서 기본 키 + 외래 키로 사용하는 전략이다. 조회할 때 조인을 자주 사용하며 조인전략을 사용하기 위해서는 타입을 구분하는 컬럼을 추..
[Spring] 통합테스트와 Junit과 Mockito 프레임워크를 이용한 단위테스트 작성
·
Spring
테스트 코드를 작성하는 것은 개발단계에서 서비스 코드를 작성하는 것 만큼이나 매우 중요하다. 그 이유는 다음과 같다.1. 작성한 코드가 의도한대로 동작하는지 알 수 있다.작성한 코드를 테스트하는 방법은 포스트맨을 사용하거나 QA 과정에서 직접 서비스를 사용해 보면서 기능을 테스트하는 방법이 있는데 테스트 해야할 기능이 많다면 전부 테스트하는데 많은 시간이 걸린다. 하지만 테스트 코드를 미리 작성해 놓으면 애플리케이션을 실행하지 않고도 클릭 한번으로 테스트할 수 있으며 프로젝트 빌드 툴인 메이븐이나 그레이들 같은 툴을 사용하여 작성된 테스트 케이스들을 한 번에 모두 실행할 수도 있다.2. 리팩토링 하기 쉬워진다.리팩토링이란 결과값에 영향을 주지 않으면서 코드의 가독성과 유지보수성을 높이기 위해 내부 구조를..
[Spring] ThreadLocal이란?
·
Spring
ThreadLocal이란?ThreadLocal은 해당 쓰레드만 접근할 수 있는 특별한 저장소를 말한다. 쉽게 말해서 여러사람이 사용하는 물건 보관 창구를 의미하며 여러사람(여러 쓰레드)이 ThreadLocal이라는 공용 창구를 사용하고 ThreadLocal이 사용자(쓰레드)별로 자원을 구분해준다. 그렇다면 ThreadLocal은 왜 어떤경우에 사용할까? 예를 들어 다음과 같은 상황이 있다고 가정해보자.thread-A가 먼저 userA라는 변수를 필드에 저장했지만 thread-B가 userB라는 변수를 같은 필드에 저장했더니 userA를 저장했던 변수에 덮어 씌워져 버렸다. 이렇게 되면 thread-A가 자신이 저장했던 userA라는 값을 사용하기 위해 필드를 호출했을 때 userA가 아닌 userB가 호..
[Spring] Interceptor와 ServletFilter의 차이
·
Spring
ServletFilterSerlvetFilter는 서블릿 스펙에서 제공하는 서블릿 전체에 공통 기능을 추가할 수 있는 기능으로 DispatcherServlet 앞에서 사용자의 요청과 응답을 처리할 수 있다. ServletFilter는 여러 개도 등록이 가능하며 특정 URI에만 필터 기능을 걸 수 있도록 설정할 수도 있다. ServletFilter 구현체를 만드려면 javax.servlet.Filter 인터페이스를 구현해야 한다.public interface Filter { public default void init(FilterConfig filterConfig) throws ServletException {} public void doFilter(Servlet Request reque..
[Spring] 마이크로서비스 아키텍쳐 (Micro Service Architecture, MSA)
·
Server
소프트웨어 개발에서 시스템 설계는 서비스의 성능, 확장성, 유지보수에 직접적인 영향을 미칩니다. 그중에서도 모놀리식 아키텍처(Monolithic Architecture)와 마이크로서비스 아키텍처(Microservices Architecture)는 널리 사용되는 설계 방식입니다. 이 글에서는 두 가지 아키텍처의 개념, 장단점, 그리고 언제 적용하면 좋은지 살펴보겠습니다.모놀리식 아키텍처모놀리식 아키텍처는 하나의 애플리케이션이 서비스 전체 기능을 처리하도록 설계한 방법입니다. 그렇기 때문에 전반적으로 서비스 구조가 매우 간단하며 이 간단한 구조 덕분에 애플리케이션 운영과 개발이 편리하다는 장점이 있습니다. 소규모 개발 팀이 비교적 간단하고 작은 기능을 제공하는 서비스를 개발할 때 효율적입니다.장점개발자는 하..
[Java] 인접행렬, 인접리스트
·
Java
알고리즘 문제 풀면서 그래프를 구현할 때 Input 값에 따라 인접행렬과 인접리스트 중 어떤 걸 사용할지 정했었는데 시간복잡도와 메모리 측면에서 정확하게 어떤 상황에서 어떤 방법을 사용해야 하는지 알아보기 위해 구현방법과 개념을 정리하려고 합니다. 인접행렬 인접 행렬(Adjacency Matrix)방식은 2차원 배열에 각 노드가 연결된 형태를 기록하는 방식으로 자바에서는 아래와 같이 구현하여 사용할 수 있다. /* 5 7 1 2 1 3 1 4 2 3 2 5 3 4 4 5 */ public class 인접행렬 { public static StringTokenizer st; public static int[][] graph; public static void main(String[] args) throws ..
[Java] 정적 멤버와 static
·
Java
개발하거나 알고리즘 문제 풀면서 객체를 생성하지 않고 변수나 메소드를 바로 사용하고 싶을때 static 키워드를 붙여서 사용하곤 했는데 정확한 이해없이 사용하고 있는 것 같아서 책보면서 정리해보려고 합니다. static은 정적인, 고정된 이라는 뜻을 가지고 있다. 그렇기 때문에 static 변수나 메소드를 정적 변수, 정적 메소드라고도 부른다. 또한 정적 변수와 정적 메소드를 포함하는 정적 멤버의 경우 객체에 소속된 멤버가 아니라 클래스에 소속된 멤버이기 때문에 클래스 멤버라고 부른다. 정적 멤버 선언 정적 멤버 선언은 아래와 같이 static 키워드를 붙여서 선언할 수 있다. public class 클래스명 { // 정적 변수 public static 타입 변수명 [= 초기값]; // 정적 메소드 pu..
Docker 컨테이너로 젠킨스 설치하기
·
Server
1. Docker Desktop 설치먼저 도커 컨테이너를 이용해 Jenkins를 컨테이너화 하고 배포를 진행할 것이기 때문에 각자 운영체제에 맞춰서 Docker Desktop을 설치해줍니다.https://www.docker.com/products/docker-desktop/ Download Docker Desktop | DockerDocker Desktop is available to download for free on Mac, Windows, or Linux operating systems. Get started with Docker today!www.docker.com2. Docker에 젠킨스 설치docker pull jenkins/jenkins:lts-jdk11위 명령어를 이용해 도커에 젠킨스 이..