일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 유니티
- 워크플로
- Unity
- 스택
- unityui
- UnrealEngine
- Photon
- 스파르타내일배움캠프TIL
- Unity2D
- 알고리즘
- 유클리드호제법
- Inventory
- FSM
- 이분탐색
- 스파르타내일배움캠프
- Firebase
- 순열
- Unity3d
- 구현
- 포톤
- 해시
- 프로그래머스
- BFS
- C++
- UE4
- 문자열
- 언리얼엔진
- 내일배움캠프
- QueryDSL
- c#
- Today
- Total
목록Java (100)
개발 낙서장
오늘의 학습 키워드📚 인덱스 DB에서 인덱스는 매우 중요하다. 인덱스란 한국어로 색인이며 특정 데이터가 어디에 있는지 표시해 주는 항목을 말한다. DB에서는 특정 컬럼 혹은 칼럼들을 인덱스로 설정하면 해당 조건을 통해 데이터를 정렬해 조회할 때 성능을 향상해 준다. 하지만 반드시 인덱스가 존재한다고 해서 성능이 향상되는 것은 아닌데 MySQL에서 일반적으로 인덱스는 B-Tree 인덱스 방식이 사용되기 때문이다. B-Tree 인덱스 B-Tree 자료구조란 2개의 자식을 갖는 이진트리를 확장해 N개의 자식 노드를 갖는 트리 자료구조이다. 하나의 노드에 여러 개의 값을 가질 수 있으며 2개 이상의 자식 노드를 가질 수 있는 트리 구조이다. 가장 최상위 노드인 루트 노드, 중간 노드인 브랜치 노드, 가장 최하위..
오늘의 학습 키워드📚 통합 테스트 테스트 코드는 모든 서비스에서 정말 반드시 필요하다. 테스트의 방법, 시기 등 테스트 자체에 대한 중요도는 규모가 크면 클수록 더더욱 중요해진다. 위 그림은 개발 시간이 늘어나면 늘어날 수록 테스트의 비용이 증가하고 서비스의 유지보수 비용이 기하급수적으로 증가한다는 의미의 그래프이다. 테스트의 단계도 나눠져있는데 각각의 기능들을 테스트하는 단위 테스트, 기능들 간의 흐름을 파악하는 통합 테스트, 전체 서비스를 테스트하는 E2E(End to End) 테스트가 있다. 그 중에서 오늘은 통합 테스트를 진행했다. @SpringBootTest @AutoConfigureMockMvc @AutoConfigureTestDatabase(connection = EmbeddedDatabas..
오늘의 학습 키워드📚 낙관적 락 낙관적 락이란 간단히 말해서 데이터가 수정 중일 때 해당 데이터로의 다른 수정 접근을 막는 동시성 제어 방식이다. 동시성 제어는 서비스에서 반드시 필요한데 콘서트 티켓팅을 한다고 가정해보자. 총 100자리가 있고 순간 동시 접속자가 1000명일 경우 같은 자리에 예매하는 경우가 반드시 생길 것이다. 이 때 동시성 제어를 하지 않게 될 경우 같은 자리에 여러 사람이 예매가 되는 대혼란 사태가 발생할 것이다. 이 외에도 정말 다양한 곳에서 동시성 제어를 필요로 하는데 가장 많이 사용되는 부분이 위의 예매 시스템이나 재고 관리 같은 Count 시스템 등에 활용된다. 동시성 제어 테스트 먼저 스프링 부트 환경에서 낙관적 락을 적용하는 방법은 매우 쉽다. @Version priva..
스프링 AOP 스프링 AOP는 관심사를 분리하고 모듈화하는 프로그래밍 기법(관점 지향 프로그래밍)으로 스프링 프레임워크에서 제공한다. Aspect로 정의된 클래스 내부에서 특정 시점에 특정 로직을 수행하게 한다. 현재 진행하고 있는 팀 프로젝트의 ERD의 일부이다. 유저와 보드가 존재하고 보드에는 사용자를 초대하는 기능이 있어 N:N 관계이기 때문에 BoardUser 테이블을 추가로 만들어 보드 권한을 관리하고 있다. 권한 체크 기존에는 각 서비스 로직마다 BoardUser에 접근해 해당 유저가 해당 보드에 권한을 갖고 있는지 체크한 후 로직을 진행했다. @Transactional public void createComment(Long cardId, Long boardId, CommentRequest r..
오늘의 학습 키워드📚 Join? Join이란 '들어가다', '가입하다' 등의 뜻을 갖고 있다. 즉 DB에서 Join이라 함은 다른 테이블에 들어가서 데이터를 가져오는 것을 의미한다. 주로 사용하는 Join의 종류로는 크게 묶으면 두 가지가 있는데 INNER JOIN, OUTER JOIN이 있다. (물론 CROSS JOIN도 있지만 웬만한 상황에서는 쓰지 않는다고 한다.) INNER JOIN은 겹치는 부분을 가져오고 OUTER JOIN은 겹치지 않는 부분까지도 가져온다. TABLE A TABLE B ID NAME ID NAME 1 자바 1 파이썬 2 파이썬 2 C++ 3 C# 3 언리얼 4 유니티 4 자바 오늘의 임시 테이블이다! INNER JOIN 쉽게 말해 교집합이다. 두 테이블에서 특정 조건에 맞는 ..
오늘의 학습 키워드📚 순서 변경을 DB에 저장하는 방법 위 사진은 Trello에서 컬럼끼리 순서를 변경하는 방법이다. 오브젝트를 드래그해 옮기면 순서가 변경된다. 해당 기능을 구현하려면 DB에도 순서에 대한 값이 들어가야 하는데 어떻게 변경해야 할지 고민이 됐다. 1. 변경될 컬럼과 직접 sequence 값을 변경한다. 1번 방법은 굉장히 직관적인 방법이다. To do 컬럼의 sequence가 1, Doing 컬럼의 sequence가 2라고 가정할 때 To do를 Doing의 뒤로 변경시키려면 Doing 컬럼의 sequence를 1, To do 컬럼의 sequence를 2로 변경하면 된다. 해당 방법의 문제점은 하나의 컬럼의 순서를 변경하기 위해 두 개의 컬럼의 값을 변경하는 쿼리를 날려야 한다는 것이지..
오늘의 학습 키워드📚 Git 잔디 반영 안 되는 경우 지금은 잔디가 잘 차있지만(듬성듬성하긴 해도...) 처음 발견했을 때는 오른쪽 두세 줄이 비어있었다. 최근에 바꾼 건 깃허브 계정 이메일을 바꿨었는데 이 부분에서 문제가 생겼다. // 로컬 이메일 확인 git config user.email // 원격 이메일 확인 git config --global user.email 이렇게 로컬의 이메일과 원격의 이메일을 확인할 수 있는데 이 이메일이 다를 경우 다른 사람이 커밋한 것으로 인식돼 잔디 반영이 안 된다고 한다! 나는 다행히 이메일을 바꾸면서 기존에 있던 이메일을 삭제하면서 벌어진 일이라 예전 이메일을 다시 등록하니 해결이 됐다. // 로컬 이메일 변경 git config user.email 바꿀이메일 ..
오늘의 학습 키워드📚 AWS EC2에 Spring 프로젝트 배포 https://velog.io/@s0nnyday/AWS-EC2-%EC%9D%B8%EC%8A%A4%ED%84%B4%EC%8A%A4-%EC%97%B0%EA%B2%B0#11-git-bash-%EB%A1%9C-ec2-%EC%97%B0%EA%B2%B0 [AWS-EC2] 배포-SSH프로토콜(1): Jar빌드 후 EC2로 복사, 실행 [AWS] [EC2 연결] [Spring Boot 프로젝트] [jar빌드] velog.io https://dhun.tistory.com/8 [Spring Boot] AWS에 프로젝트 배포하기(EC2, FileZilla) 1. AWS EC2에 들어가서 인스턴스 시작 클릭 2. 인스턴스 이름 입력하고, OS는 Ubuntu 18..