본문 바로가기

분류 전체보기

(15)
[Spring] @SpringBootTest vs @DataJpaTest 테스트 코드를 작성하고 새로 작성된 테스트 코드를 돌려볼 때 실행 시간이 너무 오래 걸렸다. 이를 기존에 @SpringBootTest로 작성된 코드를 @DataJpaTest 변경하면서 해결할 수 있었는 데 변경하는 중에 공부한 것들을 정리해 보았다. @SpringBootTest @SpringBootTest가 붙은 테스트코드가 실행되면 @ComponentScan 내의 모든 Bean 객체가 ApplicationContext에 올라간후 실행된다. 실제 서버 실행 환경과 비슷한 환경에서 진행되는 테스트인만큼 통합테스트에 유리하다. @DataJpaTest ApplicationContext에 JPA에 필요한 것들만 등록한다. (Entity, JpaRepository) InMemoryDB(H2 database)를 사..
[Spring] RabbitMQ를 이용한 이벤트 예약 프로젝트를 진행하다가 유저가 특정 이벤트를 등록하고 승인 받은 후 해당 이벤트의 시작 시점이 되면 이벤트의 상태가 변화 되도록 하는 프로세스가 필요했다. 방법은 여러가지가 있지만 난 Message Broker를 이용하기로 했고 그중에서도 RabbitMQ를 이용하기로 했다. RabbitMQ 설치 https://www.rabbitmq.com/download.html Downloading and Installing RabbitMQ — RabbitMQ Downloading and Installing RabbitMQ The latest release of RabbitMQ is 3.12.2. See change log for release notes. See RabbitMQ support timeline to fi..
[Database] 정규화 정규화 이상이 있는 관계를 재구성하여 작고 잘 조직된 관계를 생성하는 것 보통 BCNF 까지만 수행되기 때문에 BCNF까지만 정리하였다. 이후에 제 4정규화, 제 5정규화도 존재한다. 이상현상 삽입 이상 : 테이블에 새로운 값을 넣을 때 불필요한 필드값을 추가로 삽입해야 되는 현상 삭제 이상 : 원치 않은 데이터까지 삭제가 일어나는 현상 갱신 이상 : 데이터를 수정시 그 데이터가 다른 속성값과 불일치가 발생하는 현상 제1 정규형 (1NF) 테이블의 컬럼이 원자값 즉 하나의 값만 가지도록 테이블을 분해하는 것 문제 테이블 학번 학과 조교 교수 과목코드 강의실 성적 101 컴퓨터 a A,B 101, 102 A101, A102 A, A 102 통계학 b C,D 201, 202 B201, B202 B, A 10..
[OS] 단편화, Paging, Segmentation 단편화 주기억 장치에서 메모리의 할당과 반납이 발생하여 메모리가 작은 조각으로 나눠져 새로운 메모리를 할당할 때 사용가능한 메모리가 충분하지만 조각이 작아서 할당이 불가능한 상태 내부 단편화 실제 실행되는 프로그램보다 할당된 메모리가 더 커서 사용되지 않는 메모리 조각 발생 외부 단편화 남아있는 메모리 총 크기는 할당될 프로그램 보다 크지만 작은 조각으로 나뉘어져 있어 할당하지 못하는 현 해결방안 Paging : 아래에서 설명 Segmentation : 아래에서 설명 Coalescing(통합) : 인접한 두개의 빈 분할 공간을 통합 Storage Compaction(압축) : 주기억장치 내 비어있는 작은 조각들을 하나로 모으는 방법 Placement Strategy(배치 전략) : 단편화가 최대한 일어나..
[디자인 패턴] 빌더 패턴(Builder pattern) 문제점 Class를 정의하고 각 상황에 필요한 변수를 넣어 생성자를 생성하게 되거나 기본생성자로 인스턴스 생성 후 setter로 변수에 값을 주게 되면 관리가 힘들어진다. public class Person { private String name; private String nickname; private int age; private int height; private int weight; public Person(){} public Person(String name, int age, int height, int weight){ this.name = name; this.age = age; this.height = height; this.weight = weight; } public Person(Stri..
[디자인 패턴] 템플릿 메서드 패턴(Template Method Pattern) 템플릿 메서드 패턴 비슷한 종류의 클래스를 하나의 슈퍼클래스를 상속받는 형식으로 구현해 기능을 확장하는 방법 공통된 기능은 슈퍼클래스내에 Hook method로 구현하여 중복 코드를 제거한다. 구현 public class Dog { public void run(){ System.out.println("달린다"); } public void bark(){ System.out.println("멍멍"); } } public class Cat { public void run(){ System.out.println("달린다"); } public void bark(){ System.out.println("야옹"); } } 이 두가지 클래스에서 run 함수는 같은 기능을 하고 있고 bark 부분만 다른 기능을 가진다...
[디자인 패턴] 팩토리 메서드 패턴(Factory Method Pattern) 기존에 프로젝트 DB로 MySQL을 채택한 상황에서 MSSQL을 사용해야 될 때는 어떻게 해야 할까? 확장성을 고려하지 않고 그저 기능 구현에만 집중한 코드를 사용했을 경우 전체적으로 코드를 수정해야 한다. 이러한 경우 개방 폐쇄 원칙에 위배가 되므로 처음 코드를 구현할 때 확장성에 대해 잘 계획하여야 한다. 팩토리 메서드 패턴 객체 구현을 담당하는 클래스를 따로 두어 결합도를 낮추는 방법이다. 구현 아래 코드는 간단한 예제를 보여주기 위한 코드로 실제 작동은 되지 않는다. public interface ConnectorFactory{ public Connection connect(); } ConnectorFactory는 Creator로 볼 수 있고 User는 interface의 매개변수와 함수 이름을 ..
[디자인 패턴] 싱글톤 패턴(Singleton pattern) 싱글톤 패턴 하나의 인스턴스만 생성하여 여러 객체가 한 인스턴스에만 접근이 가능하게 만든 패턴이다. 유니티로 메타버스 개발시 캐릭터가 맵을 이동할 때 마다 새로운 캐릭터 인스턴스가 생성되어 맵 이동시마다 캐릭터의 수가 두배가 되었는데 이를 싱글톤 패턴을 사용하여 해결했던 경험이 있다. 이뿐만 아니라 여러 곳에서 하나의 자원을 공유해야 하는 상황에서 싱글톤 패턴을 자주 사용한다. (캐시, 커넥션풀, 스레드풀 등) 구현 public class Singleton { private static Singleton instance = new Singleton(); private Singleton(){} // 기본 생성자를 private로 선언해서 새로운 인스턴스가 생성되지 못하게 한다. public static S..